Сбой продления подписки UPnP на устройстве

Когда я пытаюсь продлить подписку на событие UPnP на устройстве, у меня возникает ошибка 412 HTTP: ошибка предварительного условия, неверный SID.

Эта ошибка возникает только на одном устройстве, все остальные устройства работают нормально. Неисправным устройством является маршрутизатор D-Link XTreme N GIGABIT DIR-655 (версия прошивки:1.34WW, 2010/09/30), версия H/ W: 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 в запросах на подписку (и добавить заголовок "Connection:close"), но это не дает никакого эффекта.

Что я делаю не так?

UPD1 Обновление формы до 1.37WW ничего не меняет

UPD2

Когда я пытаюсь возобновить подписку сразу после подписки, это работает. Подождите 750 мс и обновите - работает. Ждать 900 мс и обновлять - не удается с HTTP 412. Кажется, что есть ошибки в оборудовании D-Link (другой маршрутизатор D-Link DI-624 работает таким же образом). Валидатор устройств Intel ( https://software.intel.com/en-us/articles/intel-tools-for-upnp-technologies) проверяет события DIR-655 и DI-624 без ошибок, но, думаю, нет пауза между подпиской и продлением. Итак, я думаю, что события UPNP не являются надежным механизмом, и лучше их не использовать.

Такое поведение устройства ставит под угрозу идею механизма событий upnp.

1 ответ

Я только что столкнулся с очень похожей проблемой с некоторыми устройствами Belkin WeMo.

Я решил свою проблему, убедившись, что правильно ответил на уведомления, отправленные на URL CALLBACK. Я отправил ответ HTTP 200, и у меня все заработало.

Другие вопросы по тегам