RDK Documentation (Open Sourced RDK Components)
XUPnP

Description

XUPnP Overview:
XUPnP is an implementation of the generic GUPnP framework for device discovery and using services from control points. GUPnP is a library for implementing both UPnP clients and services using GObject and LibSoup. It allows for fully asynchronous use without using threads and so cleanly integrates naturally into daemons, and supports all of the UPnP features. The GUPnP framework consists of the following libraries:
  • GSSDP implements resource discovery and announcement over SSDP.
  • GUPnP implements the UPnP specification:
    • Resource announcement and discovery.
    • Description.
    • Control.
    • Event notification.
    • Presentation (GUPnP includes basic web server functionality through libsoup).
Procedure involving in implementation of the GUPnP Client:
XUPnP Applications:

The XUPnP daemon xdiscovery runs in system on MoCA interface.
While starting the xdiscovery service, we create a UPnP control point with target device type as urn:schemas-upnp-org:device:BasicDevice:1.
Once UPNP control point is added and active in the network, It search for the target device types in the network.
The device-proxy-available Signal is emitted when any device which matches target types is found in the network and the event is handled in a callback routine.

The discovery messages contains a few information about the device , Usually the device descriptions is in an XML file and it includes vendor specific information like Manufacturer, Model Name, Serial No., URL to vendor specific web sites etc. Also it lists the services as well if any.

Each service description includes a list of commands to which the service responds with its parameters and arguments. The UPnP control point subscribes for the notification if any of the service variable changes during run time.

After the device is discovered in the network, the UPnP control point send an action by calling the GUPnP API gupnp_service_proxy_send_action() to retrieve device info and its capabilities.

After that it add or update the device in device list using its serial number.

Gateway set up : Internally XUPnP uses a script /lib/rdk/gwSetup.sh to set up the gateway in client devices. Here we sets up the routing table, DNS setting etc.
An example of XUPnP Device Info in JSON format
{
"sno":"PAD200067027",
"isgateway":"yes",
"gatewayip":"169.254.106.182",
"gatewayipv6":"null",
"hostMacAddress":"84:e0:58:57:73:55",
"gatewayStbIP":"69.247.111.43",
"ipv6Prefix":"null",
"deviceName":"null",
"bcastMacAddress":"84:e0:58:57:73:59",
"recvDevType":"X1",
"buildVersion":"66.77.33p44d5_EXP",
"timezone":"US/Eastern",
"rawoffset":"-18000000",
"dstoffset":"60",
"dstsavings":"3600000",
"usesdaylighttime":"yes",
"baseStreamingUrl":"http://127.0.0.1:8080/videoStreamInit?recorderId=P0118154760",
"requiresTRM":"true",
"baseTrmUrl":"ws://127.0.0.1:9988",
"playbackUrl":"http://127.0.0.1:8080/hnStreamStart?deviceId=P0118154760&DTCP1HOST=127.0.0.1&DTCP1PORT=5000",
"dnsconfig":"search hsd.tvx.comcast.net;nameserver 75.75.75.75;nameserver 75.75.76.76;nameserver 69.252.80.80;",
"hosts":"69.247.111.43 pacexg1v3;",
"systemids":"channelMapId:1901;controllerId:3415;plantId:0;vodServerId:70001",
"receiverid":"P0118154760"
}

Modules

 XUPnP XCal-Device
 
 XUPnP XCal-Discovery