PJSIP отменяет регистрацию VALID регистрации на основе правила обхода NAT - PullRequest
0 голосов
/ 24 сентября 2019

Мы столкнулись с проблемой, при которой VALID-запрос на регистрацию кажется незарегистрированным и больше никогда не регистрируется.

Я читал PJSIP FAQ

 PJSIP prints "IP address change detected" then immediately sends unregistration. Why? 

Эта функция является частью функции обхода NAT в PJSUA-LIB.Он работает путем сравнения контактного URI, который мы используем в запросе REGISTER, с адресом и портом, которые сервер возвращает нам в ответе 200 / OK на запрос REGISTER.Если адреса отличаются, PJSUA-LIB восстановит новый URI контакта на основе этой информации об адресе, отменит регистрацию существующего контакта и одновременно отправит новую регистрацию с новым URI контакта.

Эта функция требуется, когда мывы работаете с серверами, совместимыми с RFC 3261, которые будут вслепую (и правильно) отправлять входящие запросы на контактный URI клиента.

Эту функцию можно отключить, установив pjsua_acc_config.allow_contact_rewrite в ноль.По умолчанию это разрешено для всех транспортов, включая UDP, TCP и TLS.

Теперь я понимаю цель отмены регистрации при изменении IP, но в нашем случае клиент отправляет правильный IP (в CONTACT-URI ) при получении от сервера ответа 401 на ближайший следующий запрос REGISTER .

Итак, согласно приведенному выше объяснению IP-адреса в CONTACT-URI не изменяется, что делает точку UNREGISTER безосновательной.Тем не менее мы видим запрос UNREGISTER .И новый запрос REGISTER запускается после успешного выполнения UNREGISTER , и теперь наши клиенты практически не зарегистрированы.

У меня есть пакет DUMP, если это помогает.

https://gist.github.com/rohitvc/993fa8848bc29ae2d70b0ebec935e8ed

Я исключил ACK, SDP и другие ПАКЕТЫ (в прилагаемой документации) для краткости.

Спасибо за помощь.

...