如何订阅 UPnP 事件

本文关键字:事件 UPnP 何订阅 | 更新日期: 2023-09-27 18:36:53

对于大多数人来说,这确实应该是一个简单的HttpRequestMessage问题。我正在尝试向 UPnP 设备发送订阅请求,如 UPnP 设备体系结构文档的第 4.1.2 节中所述,我需要发送的消息应如下所示:

SUBSCRIBE publisher path HTTP/1.1
HOST: publisher host:publisher port  
USER-AGENT: OS/version UPnP/1.1 product/version  
CALLBACK: <delivery URL>  
NT: upnp:event  
TIMEOUT: Second-requested subscription duration 

显然,其中大部分都非常简单。我有一些问题,因为我当前的方法不起作用。我收到从服务器返回的NotFound

请求行订阅发布者路径 HTTP/1.1 是否与我创建 WebRequest ( WebRequest.Create(...) ) 时相同,或者是否有我可以设置的属性?

在这种情况下,SUBSCRIBE HttpMethod还是GetPOSTPUT等?

下面是当前的请求代码:

var request = WebRequest.Create(new Uri(eventUri)) as HttpWebRequest;
request.Method = "SUBSCRIBE";
request.UserAgent = "MyTab/1.0 UPnP/1.1 TestApp/1.0";
request.Headers["CALLBACK"] = "<" + hostname.DisplayName + ":8088>";
request.Headers["NT"] = "upnp:event";
request.Headers["TIMEOUT"] = "Second-300";

如何订阅 UPnP 事件

看起来我完全正确,只是我忘了将http://附加到回调 url。

对于登陆这里并想知道 UPNP 订阅如何工作的其他人。这是一个非常简化的使用示例。

我将使用 netcat 打开一个端口并使用 HTTP 200 响应传入事件。为了初始化连接,我将使用 curl。这适用于预装 curl 和 nc 的 Ubuntu 19.10。

curl -v http://192.168.1.47:58424/RenderingControl/evt -H "CALLBACK: <http://192.168.1.32:1234>" -H "NT: upnp:event" -H "TIMEOUT: Second-1800" -X SUBSCRIBE

此处http://192.168.1.47:58424/RenderingControl/evt是要注册到事件的设备特定 URL。CALLBACK 标头指定运行 netcat 服务器的端口和 IP 地址。如前所述,在这里添加http://很重要。

侦听并发送 HTTP OK 的服务器运行如下:

while true; do echo -e 'HTTP/1.1 200 OK'r'nContent-length: 0'r'nConnection: close'r'n'r'n' | nc -l 1234; done