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:

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. 

{
 "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"
}

XCal-Device module

XcCal-Device module is responssible for getting the following device discovery information.

API Specification

Refer the link XUPnP Doxygen Documentation for more implementation details of XCal-Device and XCal-Discovery used in RDK.