1 | изначальная версия редактировать | |
Всем привет. Есть задача подключиться к билайну, он в кои-то веки стал предоставлять возможность подключения по 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";
}
2 | No.2 Revision редактировать |
Всем привет. Есть задача подключиться к билайну, он в кои-то веки стал предоставлять возможность подключения по 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.