如何订阅UPnP事件

时间:2013-10-25 01:05:08

标签: c# http-headers httprequest upnp

对于大多数人来说,这应该是一个简单的HttpRequestMessage问题。我正在尝试向UPnP设备发送订阅请求,如UPnP Device Architecture doc的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

请求行 SUBSCRIBE发布者路径HTTP / 1.1 与创建WebRequest(WebRequest.Create(...))时相同,或者我可以在哪里设置属性?

在这种情况下SUBSCRIBEHttpMethod还是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";

2 个答案:

答案 0 :(得分:3)

看起来我已经完全正确了,除了我忘了将http://附加到回调网址。

答案 1 :(得分:1)

对于其他人来说,不知道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