You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Jackson, Bruce" <br...@qualcomm.com> on 2008/06/27 21:54:14 UTC

FW: Information about Cyberlink 1.80

We are experiencing a problem, when trying to build a ContentDirectory which can be seen by an Xbox 360.
We are aware that the Xbox uses a "modified" UPnP implementation, and having taken this into account, the Xbox can see the UPnP device, (that is, it requests the device description xml) but never does anything else. Thus, we believe that there is something we have set incorrectly in the device xml.

In order to debug this problem, we have a correct xml capture from a Windows Media Center which does work with the Xbox. We realised from this, that we could not make our ContentDirectory "look like" the MS media center, because the device xml/service/event URLs are machine generated, and cannot be prefixed by the ID field.

I don't actually think this is the problem, but I was wondering why the id field is ignored, rather than being prefixed, since the method:

private static void buildDevice(String id,Device parent, ServiceReference sr) actually contains the line:

devUPnP.setLocation(id+"/gen-desc.xml");

... But the calling function only passes an empty String as id.




Re: UPnP Base Driver issue Was: FW: Information about Cyberlink 1.80

Posted by Stefano Lenzi <ki...@interfree.it>.
Jackson, Bruce ha scritto:
> Hi Stefano,
> 
> Finally got to the heart of the problem and filed it. I've opened a case in Jira witht the details.
> 
> Thanks
> 
> Bruce

Jira ticket is now assigned to me.


Ciao,
Stefano "Kismet" Lenzi


Re: UPnP Base Driver issue Was: FW: Information about Cyberlink 1.80

Posted by "Jackson, Bruce" <br...@qualcomm.com>.
Hi Stefano,

Finally got to the heart of the problem and filed it. I've opened a case in Jira witht the details.

Thanks

Bruce


On 30/06/2008 13:47, "Stefano Lenzi" <ki...@interfree.it> wrote:

Jackson, Bruce wrote:
> Hi Stefano
>
> I'll post the XML on Monday, but in answer to your question:
>
> Looking at the code the id should never be empty, because the function
> is called as follow:
>         String localId = new
> StringBuffer(id).append("/device/").append(i).toString();
>          buildDevice(localId,devUPnP,aux[0]);
> and as you can see the localId can't be an empty String.
>
> ... The point that I was making was that if you follow this function back:
>
> public static Device createCyberLinkDevice(ServiceReference sr)
>     private static Device buildRootDeviceNode(Node root,ServiceReference sr)
>         addDevices("",devUPnP,sr);
>
> You find that the empty string is passed in whenever a new root device is created. Is this correct?

Yes, it is

> This means that every device will have a localId  starting /device/

Yes it's true but it will happen only for the embeeded device not for
the root device, because it is constructed without invoking the method
buildDevice(...) in fact the description URL of the root device has the
following format "http://" + <hostname> + ":" + <portnumber> "/gen-desc.xml"

>
>




Re: UPnP Base Driver issue Was: FW: Information about Cyberlink 1.80

Posted by "Jackson, Bruce" <br...@qualcomm.com>.
Further to my previous investigations, I have now located what I believe to be the source of the problem we are seeing when using the UPnP stack as a ContentDirectory for the Xbox 360.

During the discovery phase, the Xbox sends out SSDP:discover messages as expected to the well known multicast address and port.
The UPnP base driver/cyberlink stack reponds correctly to this by sending out a UDP response to the source IP address and port that sent the request to the multicast channel (see UPnP Device Architecture 1.0, section 1.2.3 Discovery: Search: Response).

However, this response does not appear to be acknowledged by the Xbox, because it did not originate from port 1900. We've taken a look at other UPnP implementations which do work with the Xbox, and all of these have this in common: they use port 1900 for all outbound UDP messages. Now, I realize that the UPnP specification does not mandate this, but it appears to be something which has been widely adopted, and Cyberlink should follow suit.

Any thoughts?


On 30/06/2008 13:47, "Stefano Lenzi" <ki...@interfree.it> wrote:

Jackson, Bruce wrote:
> Hi Stefano
>
> I'll post the XML on Monday, but in answer to your question:
>
> Looking at the code the id should never be empty, because the function
> is called as follow:
>         String localId = new
> StringBuffer(id).append("/device/").append(i).toString();
>          buildDevice(localId,devUPnP,aux[0]);
> and as you can see the localId can't be an empty String.
>
> ... The point that I was making was that if you follow this function back:
>
> public static Device createCyberLinkDevice(ServiceReference sr)
>     private static Device buildRootDeviceNode(Node root,ServiceReference sr)
>         addDevices("",devUPnP,sr);
>
> You find that the empty string is passed in whenever a new root device is created. Is this correct?

Yes, it is

> This means that every device will have a localId  starting /device/

Yes it's true but it will happen only for the embeeded device not for
the root device, because it is constructed without invoking the method
buildDevice(...) in fact the description URL of the root device has the
following format "http://" + <hostname> + ":" + <portnumber> "/gen-desc.xml"

>
>




Re: UPnP Base Driver issue Was: FW: Information about Cyberlink 1.80

Posted by Stefano Lenzi <ki...@interfree.it>.
Jackson, Bruce wrote:
> Hi Stefano
> 
> I'll post the XML on Monday, but in answer to your question:
> 
> Looking at the code the id should never be empty, because the function
> is called as follow:
>         String localId = new
> StringBuffer(id).append("/device/").append(i).toString();
>          buildDevice(localId,devUPnP,aux[0]);
> and as you can see the localId can't be an empty String.
> 
> ... The point that I was making was that if you follow this function back:
> 
> public static Device createCyberLinkDevice(ServiceReference sr)
>     private static Device buildRootDeviceNode(Node root,ServiceReference sr)
>         addDevices("",devUPnP,sr);
> 
> You find that the empty string is passed in whenever a new root device is created. Is this correct?

Yes, it is

> This means that every device will have a localId  starting /device/

Yes it's true but it will happen only for the embeeded device not for 
the root device, because it is constructed without invoking the method 
buildDevice(...) in fact the description URL of the root device has the 
following format "http://" + <hostname> + ":" + <portnumber> "/gen-desc.xml"

> 
> 



Re: UPnP Base Driver issue Was: FW: Information about Cyberlink 1.80

Posted by "Jackson, Bruce" <br...@qualcomm.com>.
Hi Stefano

I'll post the XML on Monday, but in answer to your question:

Looking at the code the id should never be empty, because the function
is called as follow:
        String localId = new
StringBuffer(id).append("/device/").append(i).toString();
         buildDevice(localId,devUPnP,aux[0]);
and as you can see the localId can't be an empty String.

... The point that I was making was that if you follow this function back:

public static Device createCyberLinkDevice(ServiceReference sr)
    private static Device buildRootDeviceNode(Node root,ServiceReference sr)
        addDevices("",devUPnP,sr);

You find that the empty string is passed in whenever a new root device is created. Is this correct?
This means that every device will have a localId  starting /device/




On 28/06/2008 10:29, "Stefano Lenzi" <ki...@interfree.it> wrote:

Jackson, Bruce wrote:
> We are experiencing a problem, when trying to build a ContentDirectory which can be seen by an Xbox 360.
> We are aware that the Xbox uses a "modified" UPnP implementation, and having taken this into account, the Xbox can see the UPnP device, (that is, it requests the device description xml) but never does anything else. Thus, we believe that there is something we have set incorrectly in the device xml.
>
> In order to debug this problem, we have a correct xml capture from a Windows Media Center which does work with the Xbox. We realised from this, that we could not make our ContentDirectory "look like" the MS media center, because the device xml/service/event URLs are machine generated, and cannot be prefixed by the ID field.

Can you post the XML section that you are referring to of the captured XML?

>
> I don't actually think this is the problem, but I was wondering why the id field is ignored, rather than being prefixed, since the method:
>
> private static void buildDevice(String id,Device parent, ServiceReference sr) actually contains the line:
>
> devUPnP.setLocation(id+"/gen-desc.xml");
>
> ... But the calling function only passes an empty String as id.

Looking at the code the id should never be empty, because the function
is called as follow:
        String localId = new
StringBuffer(id).append("/device/").append(i).toString();
         buildDevice(localId,devUPnP,aux[0]);
and as you can see the localId can't be an empty String.

BTW, inspecting again the code it seems to me that either the line:
        dd.setDescriptionURI(id+"/gen-des
        devUPnP.setLocation(id+"/gen-desc.xml");
inside the method buildDevice should be removed. I can't perform any
test now so if you want to remove those line from the method and check
if something changes.

Ciao,
Stefano "Kismet" Lenzi


UPnP Base Driver issue Was: FW: Information about Cyberlink 1.80

Posted by Stefano Lenzi <ki...@interfree.it>.
Jackson, Bruce wrote:
> We are experiencing a problem, when trying to build a ContentDirectory which can be seen by an Xbox 360.
> We are aware that the Xbox uses a "modified" UPnP implementation, and having taken this into account, the Xbox can see the UPnP device, (that is, it requests the device description xml) but never does anything else. Thus, we believe that there is something we have set incorrectly in the device xml.
> 
> In order to debug this problem, we have a correct xml capture from a Windows Media Center which does work with the Xbox. We realised from this, that we could not make our ContentDirectory "look like" the MS media center, because the device xml/service/event URLs are machine generated, and cannot be prefixed by the ID field.

Can you post the XML section that you are referring to of the captured XML?

> 
> I don't actually think this is the problem, but I was wondering why the id field is ignored, rather than being prefixed, since the method:
> 
> private static void buildDevice(String id,Device parent, ServiceReference sr) actually contains the line:
> 
> devUPnP.setLocation(id+"/gen-desc.xml");
> 
> ... But the calling function only passes an empty String as id.

Looking at the code the id should never be empty, because the function 
is called as follow:
	String localId = new 
StringBuffer(id).append("/device/").append(i).toString();
         buildDevice(localId,devUPnP,aux[0]);
and as you can see the localId can't be an empty String.

BTW, inspecting again the code it seems to me that either the line:
	dd.setDescriptionURI(id+"/gen-des
	devUPnP.setLocation(id+"/gen-desc.xml");
inside the method buildDevice should be removed. I can't perform any 
test now so if you want to remove those line from the method and check 
if something changes.

Ciao,
Stefano "Kismet" Lenzi