uac_registrant

Относительно недавно в opensips появилась возможность регистрироваться на sip серверах. Собственно uac_registrant этим и занимается. Проблема с которой я столкнулся выглядела так: Попытка регистрации, sip-сервер возвращает ошибку WRONG_CREDENTIALS (6) и после этого uac_registrant  более не регистрируется до перезагрузки Opensips.
Логика в данном случае вроде бы правильная, не верно указанные данные не должны отправляться повторно, но в моем случае данные были верны и после перезагрузки регистрация проходила успешно.
Почему некоторые провайдеры выдают такую ошибку – сказать сложно, однако, такое случается. Asterisk в этом случае, кстати не стесняется – продолжает пытаться зарегистраироваться.
Разработчики Opensips сказали примерно следующее:

State 6 is WRONG_CREDENTIALS_STATE.
The reason that the server doesn’t try to re-register is because the
credentials are no longer valid.
The credentials should be updated and the server restarted to take
into account the updated credentials.

Если эту проблему не исправить, то в любой момент времени можно потерять регистрацию на сервере и перестать получать входящие вызовы. Решение для себя я заделал конечно по принципу костыля, но по большому счету за долгие месяцы – проблем не возникло:

В файле registrant.c, в районе 735 строчки, можно исключить данный код ошибки из списка тех, после которых попытки регистрации прекращаются.

at line: 735:
case REGISTERING_STATE:
case AUTHENTICATING_STATE:
break;
case WRONG_CREDENTIALS_STATE:
case REGISTER_TIMEOUT_STATE:
case INTERNAL_ERROR_STATE:

Привет!

| 01/09/2012 | Posted in Проблемы в коде |

Leave a Reply