在UPnP中,你有一个Root设备,它有一个.xml文件,描述了自己和他的各种嵌入式设备。
在该文件中,没有BaseURL。我从我的M-Search的'OK'响应中的'Host:'字段中获取BaseURL。我使用该BaseURL获取根设备及其嵌入式设备的描述。
但是,我在找出为嵌入式设备获取正确BaseURL的正确方法时遇到了问题。
假设我有一个父(root)设备,其中包含2个嵌入式设备(Fred)和(Bob)。
Parent BaseURL: 192.168.1.10:1960 UUID: MOMMY_10
Fred BaseURL: 192.168.1.10:1961 UUID: FRED_10
Bob BaseURL: 192.168.1.10:1962 UUID: BOB_10
Parent有一个名为'Banker'的服务,其服务定义于:
<SCPDURL>_urn-company-com-serviceId-Banker_scpd.xml</SCPDURL>
Fred有一个名为'MoneyUser'的服务,其中有一个SCPDURL定义于:
<SCPDURL>FRED_10/_urn-company-com-serviceId-MoneyUser_scpd.xml</SCPDURL>
鲍勃还有一个名为'MoneyUser'的服务,其中定义了一个SCPDURL:
<SCPDURL>BOB_10/_urn-company-com-serviceId-MoneyUser_scpd.xml</SCPDURL>
如果我想让scpd.xml文件查看Fred和Bob的服务详细信息,我需要分别使用BaseURL替换Fred或Bob的SCPUURL中的UUID(FRED_10)或(BOB_10)。但是,我遇到了麻烦,因为他们的BaseURL与他们的父母的BaseURL不同。它不在描述文件中。
我唯一能找到它的地方是服务通知Notify并拥有其UUID及其Host:值。我可以等到收到这些通知,然后能够将服务连接到给定UUID的相应BaseURL。
它应该是这么复杂,还是有一种更简单的方法可以做到这一点,我还没想过呢?
此外,值是正确的,还是应该是可直接访问的绝对URL?是否应该用下面的行替换以下内容?
<SCPDURL>BOB_10/_urn-company-com-serviceId-MoneyUser_scpd.xml</SCPDURL>
<SCPDURL>192.168.1.10:1962/_urn-company-com-serviceId-MoneyUser_scpd.xml</SCPDURL>
我正在与之交谈的UPnP设备是使用英特尔UPnP库生成的。我不确定SCPDURL是否正确实施,或者我是否应该通过箍来获得正确的BaseURL以供SCPDURL使用。
非常感谢有关此主题的任何意见和帮助!!
现在,我只是在收到来自相应UUID的通知后才获取scpd.xml,该UUID具有Host:值,可用于该嵌入式设备的BaseURL。
谢谢, 柯蒂斯