Страница 1 из 3

PJSIP и match_header

Добавлено: 08 май 2018, 12:32
toOTOot
Добрый день.
Окунулся в магию pjsip во всех проявлениях и столкнулся с интересным явлением. Есть у pjsip секция identify, которая позволяет входящие вызовы с транка маршрутизировать в нужный endpoint. Отлично работает с match по ip источника звонка. Но вот с параметром match_header работает криво. Ну как вриво, если следовать описанию и вписать заголовок со значением через : , то астериск все правильно разбирает и делает соответсвующий match. Вся проблема у меня врозникла с полем маршрутизации To. Я хочу вызов от оператора маршрутизировать в разные эндпоинты по разным match_header. Естественно будут разные identify. При входящем вызове в дебаге я вижу странную картину

Код: Выделить всё

[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'
[May  7 13:41:59] DEBUG[6116]: 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: и соответсвенно не может его сравнить с тем match, которые я указал в конфиге. Смотришь дебаг звонка, и там ТО в инвайте виден , тот который я указал в конфиге. И в инвайте и в аск. А в дебаге в инвате пустое астериск видит, а в аск мусор какой-то.
Попробовал другое поле распарсить. В частности User-Agent отлично срабатывает при полном совпадении с шаблоном. Если шаблон отличается, то пишет что пришло и с чем сравнивает. Тут же мистика какая-то. Кто-то может сталкивался с такой задачей?
Думал может провайдер, от которого принимаю вызов, делает что-то не так, попробовал с телефона на ip адрес сервера позвонить. проблема та же.

Re: PJSIP и match_header

Добавлено: 09 май 2018, 09:00
virus_net
1. PJSIP сырой продукт и пилится до сих пор. Сомневаюсь что вы выбрали правильное место для подобного сообщения. Это больше на баг походит, если вы действительно не ошиблись в конфигурации.
2. Вы не показали конфига. Думаете тут люди обладающими даром предвидения или возможность удаленно заглядывать в вашу консоль через ваше плечо ?

Re: PJSIP и match_header

Добавлено: 09 май 2018, 09:59
toOTOot
1) С этим вопросом я не только сюда пришел , но и до https://community.asterisk.org добрался и там спросил.
2) конфиг той секции проще некуда

[toll_f_f-IN1]
type=endpoint
......
[toll_f_f-in1]
type=identify
endpoint=toll_f_f-IN1
match_header=To: <sip:123@ххх.ххх.ххх.ххх:5169>


где To: <sip:123@ххх.ххх.ххх.ххх:5169> - заголовок , который прилетает в инвайте , с которым и должно сравниваться.
ххх.ххх.ххх.ххх:5169 - адрес моего сервера , куда и присылается вызов. 123 - экстен, на котором и будет маршрутизация.

стоит только только указать в match_header=User-Agent: Cisco-SIPGateway/IOS-12.x
то по этому заголовку все идеально срабатывает.

К выводу что это бага я тоже уже склоняюсь. Но была надежда.

Re: PJSIP и match_header

Добавлено: 10 май 2018, 07:04
virus_net
Может дело в скобках <> ?
Попробуйте так:

Код: Выделить всё

match_header=sip:123@ххх.ххх.ххх.ххх:5169
Или так:

Код: Выделить всё

match_header=To: \<sip:123@ххх.ххх.ххх.ххх:5169\>

Re: PJSIP и match_header

Добавлено: 10 май 2018, 16:50
SimakinK
@virus_net

Доброго дня, прошу прощения что встреваю в чужую тему

>> PJSIP сырой продукт и пилится до сих пор.

Да, но что использовать тогда для Asterisk'a если необходимо использовать несколько транков на разных IP адресах одного сервера в сторону одного провайдера

на стандартном SIP'e там всё плохо, невозможно управлять исходящим трафиком, чтобы он "выходил" с указанного IP адреса

Re: PJSIP и match_header

Добавлено: 10 май 2018, 16:57
toOTOot
virus_net, не в скобках проблема. конфиг то астериск парсит правильно, создает нужный шаблон, с которым надо сравнивать, а вот в момент звонка не находит он значение в заголовке. Ошибка об этом и говорит, если внимательно посмотрите.

В ходе долгих поисков по комьюнити астериска, нашел непосредственно ветку разработки данного функционала. Увидел там интересно место. В тестах используется какой-то свой кастомный заголовок, с которым все у разработчиков работало. Они в том заголовке передавали токен какой-то. Видимо делали они это с точки зрения безопасности. По обычному матчингу они доверяют ip адресу, с которого пришел вызов. А вот в тестах они доверяли какому-то токену.

Может я ошибаюсь, но ответа мне и там не дали пока что.

Могу и ссылку дать на ту ветку разработки.

Re: PJSIP и match_header

Добавлено: 11 май 2018, 06:50
virus_net
toOTOot
Полнота информации (я о ссылке) никогда не бывает лишней.
Значит стоит написать сюда: https://issues.asterisk.org/

SimakinK
Можно использовать proxy в виде kamailio как прокладку. У него нет с этим проблем.

Re: PJSIP и match_header

Добавлено: 11 май 2018, 11:23
toOTOot
virus_net
Там я сразу отписался, после того как тут тему создал.
https://issues.asterisk.org/jira/browse/ASTERISK-27548
там и сообщение мое.

Вот тут уже разработка модуля этого с тестами разработчиков
https://issues.asterisk.org/jira/browse/ASTERISK-26863
А вот их конфиг тестовый
https://gerrit.asterisk.org/#/c/5181/2/ ... pjsip.conf

по которому я вывод и делал.

Использование камаильо может быть и будет выход, но получится дополнительной точкой отказа, и надо его для начала изучить, что бы использовать.

Re: PJSIP и match_header

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

Re: PJSIP и match_header

Добавлено: 11 май 2018, 14:23
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 другое.
Вы попробовали так как я предлагал выше ? Судя по всему нет...