UPnP订阅续订在设备上失败

时间:2014-08-15 10:55:50

标签: events subscription upnp preconditions http-status-code-412

当我尝试在设备上续订UPnP事件订阅时,我遇到412 HTTP错误:前提条件失败,错误的SID。

此错误仅在一台设备上发生,所有其他设备都能正常工作。 Buggy设备是D-Link XTreme N GIGABIT路由器DIR-655(固件版本:1.34WW,2010/09/30),H / w ver:A4。

UPNP订阅日志(由Wireshark捕获)

订阅:

SUBSCRIBE /l3fw HTTP/1.0
Host: 192.168.0.1
CALLBACK: <http://192.168.0.100:7169/evt/43E47718-E7F6-D950-A503-71346C1D9944>
NT: upnp:event
TIMEOUT: Second-60

HTTP/1.1 200 OK
SID: uuid:5B68F900-2863-104D-8000-002401F35BC2
TIMEOUT: Second-60
SERVER: ipOS/7.6 UPnP/1.0 ipGENADevice/1.0

更新

SUBSCRIBE /l3fw HTTP/1.0
Host: 192.168.0.1
SID: uuid:5B68F900-2863-104D-8000-002401F35BC2
TIMEOUT: Second-60

HTTP/1.1 412 Precondition Failed, bad SID
SERVER: ipOS/7.6 UPnP/1.0 ipGENADevice/1.0

我第一次尝试在到期前5秒内续订,例如在初次订阅后的第55秒。第二次尝试:第45秒,但效果相同。

此外,我尝试在订阅请求中使用HTTP / 1.1(并添加&#34; Connection:close&#34; header),但没有效果。

我做错了什么?

UPD1 将软件更新为1.37WW不会改变任何内容

UPD2

当我尝试在订阅后立即续订订阅时,它可以正常工作。等待750毫秒并续订 - 工作。等待900ms并更新 - 使用HTTP 412失败。似乎D-Link设备中存在错误(另一个D-Link路由器DI-624以相同的方式工作)。英特尔设备验证器(https://software.intel.com/en-us/articles/intel-tools-for-upnp-technologies)验证DIR-655和DI-624事件没有错误,但我认为订阅和续订步骤之间没有暂停。因此,我认为,UPNP事件不是一种可靠的机制,最好不要使用它。

此类设备行为会影响upnp事件处理机制的想法。

1 个答案:

答案 0 :(得分:0)

我刚刚遇到一些与Belkin WeMo设备非常相似的问题。

我通过确保正确响应发送到CALLBACK URL的通知消息解决了我的问题。我发送了一个HTTP 200响应,事情开始为我正常工作。