Список форумов Asterisk Forum Asterisk Forum
The Asterisk Open Source PBX - Russian Community
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ПравилаПравила   ГруппыГруппы   ИзбранноеИзбранное    LinksСсылки   РегистрацияРегистрация 
 RSSRSS   ПрофильПрофиль   Войти и проверить личные сообщения   ВходВход 

Отсутствие поля "user=phone" в заголовке From

 
Список форумов Asterisk Forum -> Asterisk IP PBX    вывод темы на печать
Предыдущая тема :: Следующая тема  
Автор Сообщение
megatron_dam



Зарегистрирован:
19.02.2015
Сообщения: 62

Статус: Оффлайн 

СообщениеДобавлено: Чт Июл 28, 2016 18:10    Заголовок сообщения: Отсутствие поля "user=phone" в заголовке From

Коллеги, доброго времени суток.
Использую CentOS 7 и Asterisk 1.8.32.3 без GUI.
Начали поднимать транк по IP до провайдера.
Вход работает, а вот исход отваливается с ошибкой 480.
Провайдер прислал дамп, в котором он отмечает отсутствие параметра "user=phone" в заголовке SIP в поле FROM.
Указание параметра usereqphone=yes в настройках транка добавляет сей параметр только в заголовок TO.
Пытался добавить в настройки самого пира (экстеншиона) - безрезультатно(
Со слов провайдера, их новая коммутационная платформа "Huawei" без этих параметров в заголовках FROM, TO, CONTACT просто футболит меня.
Много гуглил. Это либо "баг" и нужен патч или я не знаю уже что "подкрутить", чтобы данный параметр отображался в соответствующих полях.

Прикладываю трейс:

INVITE sip:XXXX@XXX.XXX.XXX.X:5060;user=phone SIP/2.0
Via: SIP/2.0/UDP XXX.XXX.X.X:5060;branch=z9hG4bK7bd447d7;rport
Max-Forwards: 70
From: "BLABLA" <sip:XXXXX@XXX.XXX.X.X>;tag=as23b9d4c5 ; вот тут нет этого user=phone
To: <sip:XXXX@192.168.210.6:5060;user=phone> ; вот тут появилось, соответственно, после добавления usereqphone=yes в описание транка
Contact: <sip:XXXXX@XXX.XXX.X.X:5060> ; вот тут нет этого user=phone
Call-ID: 0c53df632fc4c2f122d0358e2f626784@XXX.XXX.X.X:5060
CSeq: 102 INVITE
User-Agent: Robocop
Date: Thu, 28 Jul 2016 14:33:39 GMT
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces, timer
Content-Type: application/sdp
Content-Length: 314


Съезжать с 1.8.32 (а на что) или можно пропатчить, "подпилить" коллеги? Need Help
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
virus_net



Зарегистрирован:
05.10.2014
Сообщения: 377
Откуда: Москва

Статус: Оффлайн 

СообщениеДобавлено: Пт Июл 29, 2016 06:14    Заголовок сообщения:

Не зачем съезжать. Зайти и если надо, то попробовать поправить собственными ручками.
В chan_sip.c есть функция initreqprep, собственно в ней то и обрабатывается usereqphone и там же добавляют user=phone.
В функции есть коммент:
Код:
                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 = ""
                */

_________________
mega-net.ru - IT аутсорсинг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора Телефон
megatron_dam



Зарегистрирован:
19.02.2015
Сообщения: 62

Статус: Оффлайн 

СообщениеДобавлено: Пт Июл 29, 2016 12:28    Заголовок сообщения:

Спасибо за совет.
Просто не особо очевидно как его безболезненно поправить и можно ли это вообще делать(
После изучения логики функции, которая, вроде, должна подставлять user=phone
/* If we have only digits, add ;user=phone to the uri */
if (*s)
urioptions = ";user=phone"

в случае, если пир состоит из цифр, попробовал поименовать пир в сторону провайдера цифровыми значениями - результат такой же.
Съезжать на другую версию платформы из-за этого - ооооооооочень проблематично((((((( Crying or Very sad
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
xelas
admin


Зарегистрирован:
05.03.2007
Сообщения: 1027

Статус: Онлайн 

СообщениеДобавлено: Пт Июл 29, 2016 12:39    Заголовок сообщения:

Может быть надо было исправить не имя пира а fromuser/defaultuser?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
megatron_dam



Зарегистрирован:
19.02.2015
Сообщения: 62

Статус: Оффлайн 

СообщениеДобавлено: Пт Июл 29, 2016 12:54    Заголовок сообщения:

 xelas @ Пт Июл 29, 2016 14:39 писал(а):
Может быть надо было исправить не имя пира а fromuser/defaultuser?


Пир без регистрации, коллега(
Только по IP.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
xelas
admin


Зарегистрирован:
05.03.2007
Сообщения: 1027

Статус: Онлайн 

СообщениеДобавлено: Пт Июл 29, 2016 12:59    Заголовок сообщения:

И что?
fromuser прописывается в настройках пира и к регистрации отношения не имеет.

Added after 3 minutes:

А при ближайшем рассмотрении находим еще и такую опцию в конфигурации пира:
Цитата:

usereqphone = yes|no : Indicates whether to add a ";user=phone" to the URI. Default no.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
megatron_dam



Зарегистрирован:
19.02.2015
Сообщения: 62

Статус: Оффлайн 

СообщениеДобавлено: Пт Июл 29, 2016 16:29    Заголовок сообщения:

 xelas @ Пт Июл 29, 2016 14:59 писал(а):
И что?
fromuser прописывается в настройках пира и к регистрации отношения не имеет.

Added after 3 minutes:

А при ближайшем рассмотрении находим еще и такую опцию в конфигурации пира:
Цитата:

usereqphone = yes|no : Indicates whether to add a ";user=phone" to the URI. Default no.


Первое - не помогает((((
Второе - я в своем посте писал, что этот параметр добавляет "user=phone" только в поле TO((((
Провайдер прислал трейс повторно, где выделил красным цветом поле FROM заголовка SIP-инвайта. И в нем нет параметра "user=phone", а в поле TO (как я и писал) - есть.
Якобы из-за этого коммутатор футболит инвайт.
Как сделать так, чтобы в это поле "лег" user=phone я уже не знаю....голова сломается скоро(((((((
По-прежнему нид хелп, коллеги!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
xelas
admin


Зарегистрирован:
05.03.2007
Сообщения: 1027

Статус: Онлайн 

СообщениеДобавлено: Пт Июл 29, 2016 19:47    Заголовок сообщения:

Кроме как поправить руками код -- никак.
Судя по форуму и баг трекеру Астериска эта проблема возникает с определенной периодичностью во всех ветках и только с определенным софтом на конце оператора.
Так что, либо менять оператора, либо одно из двух.
В любом случае, для версии 1.8 вы не найдете решения. EOL.

https://issues.asterisk.org/jira/browse/ASTERISK-24569?jql=text%20~%20%22user%3Dphone%22

https://community.asterisk.org/t/sip-usereqphone-yes-does-not-add-user-phone-in-from-header/44177/3
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
virus_net



Зарегистрирован:
05.10.2014
Сообщения: 377
Откуда: Москва

Статус: Оффлайн 

СообщениеДобавлено: Сб Июл 30, 2016 06:35    Заголовок сообщения:

megatron_dam писал(а):
в случае, если пир состоит из цифр

С чего вы решили, что в p->username содержится название пира ? Мне вот так не кажется. Сделайте print содержимого этой переменной и тогда точно поймете что там.
megatron_dam писал(а):
можно ли это вообще делать(

Ну а почему нет то ? Если есть исходный код, то его можно править Smile
megatron_dam писал(а):
как его безболезненно поправить

делаете виртуальную машину, на ней все обкатываете, а затем переносите на боевую систему. Либо ищите человека, который за денежку поправит за вас.
xelas писал(а):
Так что, либо менять оператора, либо одно из двух.

+1

_________________
mega-net.ru - IT аутсорсинг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора Телефон
megatron_dam



Зарегистрирован:
19.02.2015
Сообщения: 62

Статус: Оффлайн 

СообщениеДобавлено: Сб Июл 30, 2016 09:59    Заголовок сообщения:

Нашел вот это, коллеги!
Копи-паст оригинала.
Автор уверяет, что сие правит обсуждаемый эррор на ветке 11.
Я не особо силен в Сях, в институте ковырялся в последний раз(
Поможете разобрать? Символы + и - были в оригинале)
___________________
--- /tmp/asterisk-11.17.1/channels/chan_sip.c 2015-03-19 09:39:28.000000000 +0000
+++ channels/chan_sip.c 2015-04-21 12:32:08.954554855 +0000
@@ -13907,10 +13907,10 @@

if (!sip_standard_port(p->socket.type, ourport)) {
size_t offset = strlen(from);
- snprintf(&from[offset], sizeof(from) - offset, "<sip:%s@%s:%d>;tag=%s", tmp_l, d, ourport, p->tag);
+ snprintf(&from[offset], sizeof(from) - offset, "<sip:%s@%s:%d%s>;tag=%s", tmp_l, d, ourport, urioptions, p->tag);
} else {
size_t offset = strlen(from);
- snprintf(&from[offset], sizeof(from) - offset, "<sip:%s@%s>;tag=%s", tmp_l, d, p->tag);
+ snprintf(&from[offset], sizeof(from) - offset, "<sip:%s@%s%s>;tag=%s", tmp_l, d, urioptions, p->tag);
}

if (!ast_strlen_zero(explicit_uri)) {
__________________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
xelas
admin


Зарегистрирован:
05.03.2007
Сообщения: 1027

Статус: Онлайн 

СообщениеДобавлено: Сб Июл 30, 2016 12:33    Заголовок сообщения:

Символы - и + означают, что строка удаляется и добавляется.
Между 11 и 1.8 версиями очень много времени прошло. И данный кусок кода может не соответствовать тому, что вы увидите в реальности.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
awsswa



Зарегистрирован:
28.04.2012
Сообщения: 1642
Откуда: Russia, Пермь

Статус: Оффлайн 

СообщениеДобавлено: Сб Июл 30, 2016 12:46    Заголовок сообщения:

что мешает перейти на 11 ветку и патч накатить ?
_________________
платный суппорт по мере возможностей
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Skype Name
virus_net



Зарегистрирован:
05.10.2014
Сообщения: 377
Откуда: Москва

Статус: Оффлайн 

СообщениеДобавлено: Вс Июл 31, 2016 07:48    Заголовок сообщения:

xelas прав и патч для 11-ой в прямую не подойдет для 1.8, т.к. там немного не так.
awsswa, зачем переходить, если легко можно 1.8 допилить.
megatron_dam, вы выложили результат diff

Для 1.8 будет:
Код:
[work:/usr/ports/net/asterisk/work/asterisk-1.8.23.1/channels/] diff -uN chan_sip.c.orig chan_sip.c

Код:
--- chan_sip.c.orig     2013-08-27 23:23:25.000000000 +0400
+++ chan_sip.c      2016-07-31 09:46:52.000000000 +0300
@@ -12527,9 +12527,9 @@

        ourport = (p->fromdomainport) ? p->fromdomainport : ast_sockaddr_port(&p->ourip);
        if (!sip_standard_port(p->socket.type, ourport)) {
-               snprintf(from, sizeof(from), "\"%s\" <sip:%s@%s:%d>;tag=%s", n, tmp_l, d, ourport, p->tag);
+               snprintf(from, sizeof(from), "\"%s\" <sip:%s@%s:%d%s>;tag=%s", n, tmp_l, d, ourport, urioptions, p->tag);
        } else {
-               snprintf(from, sizeof(from), "\"%s\" <sip:%s@%s>;tag=%s", n, tmp_l, d, p->tag);
+               snprintf(from, sizeof(from), "\"%s\" <sip:%s@%s%s>;tag=%s", n, tmp_l, d, urioptions, p->tag);
        }

        if (!ast_strlen_zero(explicit_uri)) {

Всего то надо добавить %s и urioptions.

Ну или вообще, кардинальный подход:
Код:
--- chan_sip.c.orig     2013-08-27 23:23:25.000000000 +0400
+++ chan_sip.c      2016-07-31 09:46:52.000000000 +0300
@@ -12527,9 +12527,9 @@

        ourport = (p->fromdomainport) ? p->fromdomainport : ast_sockaddr_port(&p->ourip);
        if (!sip_standard_port(p->socket.type, ourport)) {
-               snprintf(from, sizeof(from), "\"%s\" <sip:%s@%s:%d>;tag=%s", n, tmp_l, d, ourport, p->tag);
+               snprintf(from, sizeof(from), "\"%s\" <sip:%s@%s:%d;user=phone>;tag=%s", n, tmp_l, d, ourport, p->tag);
        } else {
-               snprintf(from, sizeof(from), "\"%s\" <sip:%s@%s>;tag=%s", n, tmp_l, d, p->tag);
+               snprintf(from, sizeof(from), "\"%s\" <sip:%s@%s;user=phone>;tag=%s", n, tmp_l, d, p->tag);
        }

        if (!ast_strlen_zero(explicit_uri)) {

Smile

_________________
mega-net.ru - IT аутсорсинг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора Телефон
megatron_dam



Зарегистрирован:
19.02.2015
Сообщения: 62

Статус: Оффлайн 

СообщениеДобавлено: Пн Авг 01, 2016 09:40    Заголовок сообщения:

Коллеги, всем большое спасибо.
То ли я что-т не так делаю, то ли еще что.
Изменил файлик согласно порядку, пересобрал Астера..трейс провайдера по-прежнему показывает сие:


Via: SIP/2.0/UDP XXX.XXX.X.X:5060;branch=z9hG4bK7103005c;rport
Max-Forwards: 70
From: "TEST" <sip:XXXXX@XXX.XXX.X.X>;tag=as78dee198
To: <sip:XXXX@XXX.XXX.XXX.X:5060;user=phone>
Contact: <sip:XXXXX@XXX.XXX.X.X:5060>
Call-ID: 5efae3307bbb98e705d8af3502cea0fb@XXX.XXX.X.X:5060
CSeq: 102 INVITE
User-Agent: Bla-bla
Date: Mon, 01 Aug 2016 07:38:11 GMT
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces, timer
Content-Type: application/sdp
Content-Length: 312

Также прикладываю кусок получившегося кода:

ourport = (p->fromdomainport && (p->fromdomainport != STANDARD_SIP_PORT)) ? p->fromdomainport : ast_sockaddr_port(&p->ourip);
if (!sip_standard_port(p->socket.type, ourport)) {
snprintf(from, sizeof(from), "\"%s\" <sip:%s@%s:%d;user=phone>;tag=%s", n, tmp_l, d, ourport, p->tag);
} else {
snprintf(from, sizeof(from), "\"%s\" <sip:%s@%s;user=phone>;tag=%s", n, tmp_l, d, p->tag);
}

if (!ast_strlen_zero(explicit_uri)) {

На вход все хорошо работает, но это не утишает))))
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
virus_net



Зарегистрирован:
05.10.2014
Сообщения: 377
Откуда: Москва

Статус: Оффлайн 

СообщениеДобавлено: Пн Авг 01, 2016 10:02    Заголовок сообщения:

megatron_dam писал(а):
Изменил файлик

Ну а asterisk то вы пересобрали после этого ?

_________________
mega-net.ru - IT аутсорсинг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора Телефон
megatron_dam



Зарегистрирован:
19.02.2015
Сообщения: 62

Статус: Оффлайн 

СообщениеДобавлено: Пн Авг 01, 2016 10:06    Заголовок сообщения:

Да, как положено я написал об этом...
./configure и т.д.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
virus_net



Зарегистрирован:
05.10.2014
Сообщения: 377
Откуда: Москва

Статус: Оффлайн 

СообщениеДобавлено: Вт Авг 02, 2016 07:15    Заголовок сообщения:

Применил патч, пересобрал, перезапустил.
Проверяю:
Цитата:
INVITE sip:123@127.0.0.1 SIP/2.0
Via: SIP/2.0/UDP 127.0.0.1:5060;branch=z9hG4bK3b21679d;rport
Max-Forwards: 70
From: "asterisk" <sip:asterisk@test.mega-net.ru;user=phone>;tag=as341eb14a
To: <sip:123@127.0.0.1>
Contact: <sip:asterisk@127.0.0.1:5060>
Call-ID: 43fd9cca0968754f6ad68f2a228ecae4@test.mega-net.ru
CSeq: 102 INVITE
User-Agent: test.mega-net.ru
Date: Tue, 02 Aug 2016 06:12:50 GMT
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH
Supported: replaces, timer
Content-Type: application/sdp
Content-Length: 259

Что я делаю не так ? Smile А точнее все же это вы что-то делаете не так.

_________________
mega-net.ru - IT аутсорсинг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора Телефон
megatron_dam



Зарегистрирован:
19.02.2015
Сообщения: 62

Статус: Оффлайн 

СообщениеДобавлено: Вт Авг 02, 2016 09:06    Заголовок сообщения:

Спасибо за фидбэк. Попробую еще раз. Что-то "паранормал" какой-то(
А вы какой "вариант" использовали? Тот, что радикальнее?))

Added after 1 hours:

 megatron_dam @ Вт Авг 02, 2016 10:06 писал(а):
Спасибо за фидбэк. Попробую еще раз. Что-то "паранормал" какой-то(
А вы какой "вариант" использовали? Тот, что радикальнее?))

Всем большое спасибо за посильную помощь, коллеги.
Все завелось. В заголовках инвайтов необходимые поля помечены нужными "тэгами".
Только не понятно, почему сразу не завелось...только после второй пересборки(
Надеюсь, что наши происки будут кому-то еще полезными!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
virus_net



Зарегистрирован:
05.10.2014
Сообщения: 377
Откуда: Москва

Статус: Оффлайн 

СообщениеДобавлено: Вт Авг 02, 2016 16:40    Заголовок сообщения:

megatron_dam писал(а):
А вы какой "вариант" использовали?

Я использовал тот вариант, который вы указали в этом своем посте, т.е. радикальный. Если бы вы делали менее радикальный, то и я бы тоже тестил его же. Иначе какой смысл пробовать разные варианты и сравнивать полученные результаты ?
megatron_dam писал(а):
не понятно, почему сразу не завелось...

Это можно осознать только в одном случае: в точности воспроизведя порядок совершенных действий и результатов проверок после этих действий.
Например самое простое для проверки это смотреть изменился ли размер файла модуля chan_sip.so после ваших действий по пересборке или нет. Если не изменился, то вывод сразу очевиден и дальнейшие тесты бессмысленны.

_________________
mega-net.ru - IT аутсорсинг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора Телефон
Oy90



Зарегистрирован:
27.06.2008
Сообщения: 16

Статус: Оффлайн 

СообщениеДобавлено: Чт Авг 11, 2016 19:21    Заголовок сообщения:

Патч для 11.23:
Код:
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index c35091f..2362617 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -13921,9 +13921,9 @@ static void initreqprep(struct sip_request *req, struct sip_pvt *p, int sipmetho
        ourport = (p->fromdomainport && (p->fromdomainport != STANDARD_SIP_PORT)) ? p->fromdomainport : ast_sockaddr_port(&p->ourip);
 
        if (!sip_standard_port(p->socket.type, ourport)) {
-               ret = ast_str_set(&from, 0, "<sip:%s@%s:%d>;tag=%s", tmp_l, d, ourport, p->tag);
+               ret = ast_str_set(&from, 0, "<sip:%s@%s:%d%s>;tag=%s", tmp_l, d, ourport, urioptions, p->tag);
        } else {
-               ret = ast_str_set(&from, 0, "<sip:%s@%s>;tag=%s", tmp_l, d, p->tag);
+               ret = ast_str_set(&from, 0, "<sip:%s@%s%s>;tag=%s", tmp_l, d, urioptions, p->tag);
        }
        if (ret == AST_DYNSTR_BUILD_FAILED) {
                /* We don't have an escape path from here... */

_________________
dCAP #2147
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора GTalk ID Телефон
Список форумов Asterisk Forum -> Asterisk IP PBX Ответить на тему
Страница 1 из 1

Добавить в Избранное

 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
You cannot attach files in this forum
You cannot download files in this forum