Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

История изменений [назад]

нажмите, чтобы скрыть/показать версии 1
изначальная версия
редактировать

спросил 2014-03-31 19:08:04 +0400

switch Gravatar switch

http://lynks.ru/

user=phone не включается

Всем привет. Есть задача подключиться к билайну, он в кои-то веки стал предоставлять возможность подключения по SIP. Стоит у них SI3000 - довольно популярная штука у операторов, но настроена как-то странно. Им обязательно наличие user=phone в инвайте и в полях TO. Без этого отдают 503 ошибку даже на OPTIONS пакеты. В астериске эта хрень в принципе реализована с 2004 года (опция usereqphone), но по непонятным причинам не работает. Изучение исходников показало, что есть некоторые условия, при которых эта хрень подставляется. Я их вроде бы исполняю, но все равно ее нет ни в инвайтах, ни в других пакетах. Пытался попросить убрать эту штуку вообще, но ихний рукожопый и крайне неприятный в общении телефонист заявил что делать ничего не будет, не может и не умеет.

Вот кусок кода, ответственного за эти действия:

if (ast_test_flag(&p->flags[0], SIP_USEREQPHONE)) {
    const char *s = p->username;    /* being a string field, cannot be NULL */

    /* Test p->username against allowed characters in AST_DIGIT_ANY
        If it matches the allowed characters list, then sipuser = ";user=phone"
        If not, then sipuser = ""
    */
    /* + is allowed in first position in a tel: uri */
    if (*s == '+')
        s++;
    for (; *s; s++) {
        if (!strchr(AST_DIGIT_ANYNUM, *s) )
            break;
    }
    /* If we have only digits, add ;user=phone to the uri */
    if (*s)
        urioptions = ";user=phone";
}

user=phone не включается

Всем привет. Есть задача подключиться к билайну, он в кои-то веки стал предоставлять возможность подключения по SIP. Стоит у них SI3000 - довольно популярная штука у операторов, но настроена как-то странно. Им обязательно наличие user=phone в инвайте и в полях TO. Без этого отдают 503 ошибку даже на OPTIONS пакеты. В астериске эта хрень в принципе реализована с 2004 года (опция usereqphone), но по непонятным причинам не работает. Изучение исходников показало, что есть некоторые условия, при которых эта хрень подставляется. Я их вроде бы исполняю, но все равно ее нет ни в инвайтах, ни в других пакетах. Пытался попросить убрать эту штуку вообще, но ихний рукожопый и крайне неприятный в общении телефонист заявил что делать ничего не будет, не может и не умеет.

Вот кусок кода, ответственного за эти действия:

if (ast_test_flag(&p->flags[0], SIP_USEREQPHONE)) {
    const char *s = p->username;    /* being a string field, cannot be NULL */

    /* Test p->username against allowed characters in AST_DIGIT_ANY
        If it matches the allowed characters list, then sipuser = ";user=phone"
        If not, then sipuser = ""
    */
    /* + is allowed in first position in a tel: uri */
    if (*s == '+')
        s++;
    for (; *s; s++) {
        if (!strchr(AST_DIGIT_ANYNUM, *s) )
            break;
    }
    /* If we have only digits, add ;user=phone to the uri */
    if (*s)
        urioptions = ";user=phone";
}

Вопрос, собственно: что делать?

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.