Чат  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

PJSIP и match_header

Проблемы и их решения Asterisk как такового

Модератор: april22

Re: PJSIP и match_header

Сообщение toOTOot » 11 май 2018, 18:04

virus_net писал(а):
toOTOot писал(а):А вот в тестах они доверяли какому-то токену. Может я ошибаюсь, но ответа мне и там не дали пока что.

Вы ошибаетесь. В данном случае X-ASTERISK-TOKEN это просто строка добавленная функцией SIPAddHeader (как называете фун-ция для pjsip поищите сами).
Вы сами можете добавлять в SIP пакет такое. Например:
Код: выделить все
exten => s,n,SIPAddHeader(X-ASTERISK-TOKEN: ANYTHING_YOU_WANT_AND_ANYTHING_YOU_NEED)
exten => s,n,SIPAddHeader(X-orig-call-id: ${SIP_HEADER(Call-ID)})
exten => s,n,SIPAddHeader(X-unique-id: ${CHANNEL(uniqueid)})

Так же там нет скобок.

Я это прекрасно понимаю , но в случае с провайдером , я не могу на их стороне добавлять нужные мне заголовки. Провайдер тоже по моему запросу ничего добавлять не будет.
toOTOot писал(а):не в скобках проблема. конфиг то астериск парсит правильно

Парс конфига не в счет. Парсер одно, а сравнивание с reqexp другое.
Вы попробовали так как я предлагал выше ? Судя по всему нет...

Я пробовал еще до обращения на форум разные вариации и со скобочками , и без скобочек. Когда варианты уже кончились, тогда сюда пришел.

Я же говорю, если внимательно посмотреть на мою ошибку
Код: выделить все
[May  7 13:43:25] DEBUG[6124]: res_pjsip_endpoint_identifier_ip.c:174 header_identify_match_check: SIP message contains header 'To' but value '���▒�' does not match value ''<sip:123@ххх.ххх.ххх.ххх:5060>'' for endpoint 'toll_f_f-IN1'

'To' but value '���▒�' - это ровно то что астериск пытается прочитать из переменных заголовка. Пустое значение он там видит.
match value ''<sip:123@ххх.ххх.ххх.ххх:5060>'' - это то, что я указал в конфиге своем. Поставлю \ для якобы экранирования, впишет \. Уберу скобочки, пропадут скобочки. Оберну значение в кавычки , вообще получу match value ''"<sip:123@ххх.ххх.ххх.ххх:5060>''".
toOTOot
 
Сообщений: 8
Зарегистрирован: 08 май 2018, 12:32

Re: PJSIP и match_header

Сообщение toOTOot » 11 май 2018, 18:09

ded писал(а):PJSIP тоже получается дополнительной точкой отказа (как ни парадоксально), и его тоже надо изучать. Что и наблюдаем тут.

Имея хоть какой-то опыт с астериском pjsip изучить проще, чем камаильо с нуля. Особенно с его диалпланом на С и спецификой преобразования номеров. При желании и необходимости и его буду изучать, но пока pjsip более удобней мне применять.
toOTOot
 
Сообщений: 8
Зарегистрирован: 08 май 2018, 12:32

Re: PJSIP и match_header

Сообщение virus_net » 11 май 2018, 18:21

Попросил нашего разраба глянуть код со мной. Ну в выводе сообщения в лог 100% баг.
Вот этот кусок из кода atserisk 14-ой ветки:
Код: выделить все
        if (pj_strcmp(&pj_header_value, &header->hvalue)) {
                ast_debug(3, "SIP message contains header '%s' but value '%.*s' does not match value '%s' for endpoint '%s'\n",
                        c_header,
                        (int) pj_strlen(&header->hvalue), pj_strbuf(&header->hvalue),
                        c_value,
                        identify->endpoint_name);

Преобразований указано 4-ре, а значений указано 5-ть. (int) pj_strlen(&header->hvalue) тут лишнее.
Вот в лог и попадает не совсем то что должно попадать.
мой SIP URI sip:virus_net@asterisk.ru или sip:dn@postmet.com
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
Аватар пользователя
virus_net
 
Сообщений: 2127
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: PJSIP и match_header

Сообщение ddkprog » 11 май 2018, 18:38

ddkprog
 
Сообщений: 6
Зарегистрирован: 11 май 2018, 18:34

Re: PJSIP и match_header

Сообщение toOTOot » 11 май 2018, 18:46

Ну это в лог сообщения некорректно выдаются. Найти бы то место, где он заголовок звонка смотрит.
Если я брал из заголовка User-Agent: Cisco-SIPGateway/IOS-12.x
то все хорошо проходило. Если в этом же заголовке убирал последний символ , то тогда ошибка выглядела примерно так
Код: выделить все
[May  7 13:43:25] DEBUG[6124]: res_pjsip_endpoint_identifier_ip.c:174 header_identify_match_check: SIP message contains header 'User-Agent' but value 'Cisco-SIPGateway/IOS-12.x' does not match value ''Cisco-SIPGateway/IOS-12.'' for endpoint 'toll_f_f-IN1'


Вот тут получается как-то странно. Либо их парсер неправильно парсит строку с <> или еще какими-то спецсимволами. Либо у меня фантазия кончилась.
toOTOot
 
Сообщений: 8
Зарегистрирован: 08 май 2018, 12:32

Re: PJSIP и match_header

Сообщение ddkprog » 11 май 2018, 19:45

Код: выделить все
*c_value = '\0';
c_value++;
c_value = ast_strip(c_value);
/////////
const pjsip_hdr *hdr=&(rdata->msg_info.msg)->hdr.next, *end=&(rdata->msg_info.msg)->hdr;
for (; hdr!=end; hdr = hdr->next) {
ast_debug(3, "SIP message name '%*.s' : value '%*.s' \n", (int)pj_strlen(&hdr->name), pj_strbuf(&hdr->name), (int)pj_strlen(&hdr->hvalue), pj_strbuf(&hdr->hvalue));
}
///////

pj_header_name = pj_str(c_header);

вставьте этот код в header_identify_match_check
и покажите дебаг что там вообще в SIP прилетает
ddkprog
 
Сообщений: 6
Зарегистрирован: 11 май 2018, 18:34

Re: PJSIP и match_header

Сообщение virus_net » 11 май 2018, 19:59

ddkprog писал(а):все там верно

Виноват, каюсь.
Вот потому я и не лезу в PJSIP, т.к. для того чтобы играться с ним сейчас нужно понимать си код, чтобы разгребать баги.
мой SIP URI sip:virus_net@asterisk.ru или sip:dn@postmet.com
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
Аватар пользователя
virus_net
 
Сообщений: 2127
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: PJSIP и match_header

Сообщение toOTOot » 14 май 2018, 16:05

ddkprog писал(а):
Код: выделить все
*c_value = '\0';
c_value++;
c_value = ast_strip(c_value);
/////////
const pjsip_hdr *hdr=&(rdata->msg_info.msg)->hdr.next, *end=&(rdata->msg_info.msg)->hdr;
for (; hdr!=end; hdr = hdr->next) {
ast_debug(3, "SIP message name '%*.s' : value '%*.s' \n", (int)pj_strlen(&hdr->name), pj_strbuf(&hdr->name), (int)pj_strlen(&hdr->hvalue), pj_strbuf(&hdr->hvalue));
}
///////

pj_header_name = pj_str(c_header);

вставьте этот код в header_identify_match_check
и покажите дебаг что там вообще в SIP прилетает


Это надо вписать в код и пересобрать астериск? то что между слешами?
Надо попробовать через пару дней. Сюда выложу результат.
toOTOot
 
Сообщений: 8
Зарегистрирован: 08 май 2018, 12:32

Re: PJSIP и match_header

Сообщение ddkprog » 14 май 2018, 20:44

еще можно попробовать логирование pjsip
https://blogs.asterisk.org/2016/02/24/d ... p-history/

pjsip set logger on
и скопируйте тот весь запрос который вам приходит

в это же время включите историю логирования
pjsip set history on
ловите входящий запрос(звонок)
и отключаете
pjsip set history off

после чего смотрите в истории ваш запрос
pjsip show history
и смотрите его подробно
pjsip show history entry 0
наверное это инвайт и будет первым номером тоесть entry 0

вывод инвайта в истории должен совпадать с выхлопом который должен показать и логер
можете оба пакета показать сюда

разница у них существенная
первый логер показывает данные которые лежат прямо в буфере что пришли на сокет

история же показывает уже декодированный SIP самими средствами pjsip библиотеки
и декодированный же пакет используется и в модуле идента в который у вас в поле To приходит мусором

есть мысли что у вас там utf какой нибудь в имени uri
но если оба будут нормальными
значит добавляйте мини патч и перекомпилируйте, возможно пакет портится уже где то по пути
либо сравним все три логирования патч+логер+историю в логе
ddkprog
 
Сообщений: 6
Зарегистрирован: 11 май 2018, 18:34

Re: PJSIP и match_header

Сообщение ddkprog » 19 май 2018, 01:43

окей гугл
удалите мой аккаунт с контентом
ddkprog
 
Сообщений: 6
Зарегистрирован: 11 май 2018, 18:34

Пред.След.

Вернуться в Конфигурация и настройка Asterisk

Кто сейчас на форуме

Сейчас этот форум просматривают: svd и гости: 7

© 2008 — 2018 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH