Мы столкнулись с проблемой, при которой 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 и другие ПАКЕТЫ (в прилагаемой документации) для краткости.
Спасибо за помощь.