From: Jens Georg Date: Mon, 23 May 2011 16:46:44 +0000 (+0200) Subject: core: Work-around standard issues for XBox X-Git-Tag: RYGEL_0_11_1~16 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1e8db8b3a2b043c6a65fbbf51559a363f8414b31;p=profile%2Fivi%2Frygel.git core: Work-around standard issues for XBox The MediaReceiverRegistrar uses an illegal character in the domain name which makes UPnP tests fail. The XBox doesn't work without the ".", so we put the dash to make the UPnP test happy and replace it with a dot when the XBox requests our service description. Fixes (partially) UPnP CTT tests UDA-1.1.1, UDA-1.1.2, UDA-1.1.3 and UDA-1.1.4. --- diff --git a/src/rygel/rygel-media-receiver-registrar.vala b/src/rygel/rygel-media-receiver-registrar.vala index b59c3eb..8ab5233 100644 --- a/src/rygel/rygel-media-receiver-registrar.vala +++ b/src/rygel/rygel-media-receiver-registrar.vala @@ -27,8 +27,13 @@ using GUPnP; */ internal class Rygel.MediaReceiverRegistrar: Service { public const string UPNP_ID = - "urn:microsoft.com:serviceId:X_MS_MediaReceiverRegistrar"; + "urn:microsoft-com:serviceId:X_MS_MediaReceiverRegistrar"; + // UPnP requires that points replaced by hyphens in domain names public const string UPNP_TYPE = + "urn:microsoft-com:service:X_MS_MediaReceiverRegistrar:1"; + // The XBox however doesn't like that so we replace it in the service + // description later + public const string COMPAT_TYPE = "urn:microsoft.com:service:X_MS_MediaReceiverRegistrar:1"; public const string DESCRIPTION_PATH = "xml/X_MS_MediaReceiverRegistrar1.xml"; diff --git a/src/rygel/rygel-xbox-hacks.vala b/src/rygel/rygel-xbox-hacks.vala index 227cc70..1493b3a 100644 --- a/src/rygel/rygel-xbox-hacks.vala +++ b/src/rygel/rygel-xbox-hacks.vala @@ -165,38 +165,38 @@ internal class Rygel.XBoxHacks : GLib.Object { assert (element != null); element->add_content (FRIENDLY_NAME_POSTFIX); - element = this.find_cds_type_node (doc); - assert (element != null); - element->set_content (ContentDirectory.UPNP_TYPE_V1); + this.modify_service_list (doc); } - private Xml.Node * find_cds_type_node (Xml.Node *doc_node) { + private void modify_service_list (Xml.Node *doc_node) { Xml.Node *element = XMLUtils.get_element (doc_node, "root", "device", "serviceList"); assert (element != null && element->children != null); - Xml.Node *cds_type_node = null; - for (var service_node = element->children; service_node != null; service_node = service_node->next) { for (var type_node = service_node->children; type_node != null; type_node = type_node->next) { - if (type_node->name == "serviceType" && - type_node->get_content () == ContentDirectory.UPNP_TYPE) { - cds_type_node = type_node; + if (type_node->name == "serviceType") { + switch (type_node->get_content ()) { + case ContentDirectory.UPNP_TYPE: + type_node->set_content + (ContentDirectory.UPNP_TYPE_V1); + break; + case MediaReceiverRegistrar.UPNP_TYPE: + type_node->set_content + (MediaReceiverRegistrar.COMPAT_TYPE); + break; + default: + break; + } } } - - if (cds_type_node != null) { - break; - } } - - return cds_type_node; } private void save_modified_desc (XMLDoc doc,