AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Kamailio - переписать номер в формат E.164

OpenSER 10 сообщений -
#1

Kamailio - переписать номер в формат E.164


Всем привет!

Подскажите, как правильно переписать номер из формата принятого в РФ (8-, 810-, а также семизначный номер) в формат E.164?
При этом нужно, чтобы при перемаршрутизации во всех заголовках был номер уже в формате E.164, чтобы его потом корректно съел биллинг.
На Kamailio происходит аудентификация и авторизация, для корректно авторизации номер уже должен быть в E.164.
Аккаунтинг, а также конвертация SIP->H323 производится на отдельной железке (Quintum CallRelay).

Заранее спасибо.

_________________
Maksim Timofejev
#2

Уже второй день бьюсь, пытаюсь при помощи subst и subst_uri переписать из формата к примеру XXXXXXX в 7812XXXXXXX.
Переписывает, но в функцию radius_www_authorize (в методе INVITE) все равно попадает в формате XXXXXXX, биллинг блочит звонок и так по кругу. ;(
Кто знает, как модифицировать uri и затем перероутить звонок заново?

Added after 52 minutes:

Походу дела нужно ставить еще один сервер, т.к. авторизации (через radius) происходит по INVITE (по крайней мере у меня), а сообщение INVITE модифицировать нельзя, т.к. к uri привязан md5-хэш...

_________________
Maksim Timofejev
#3

Модифицировать все можно только модификация в route блоке работает как наложение - тоесть изменения применяются к request'у на самом деле после выхода из блока.
А как насчет radius_proxy_authorize? Сам не пробовал - радиус не пользую но там вроде есть второй параметр uri_user.
Код:

uri_user - Uri_user is an optional pseudo variable parameter whose value, if present, will be given to Radius server as value of SIP-URI-User check item. If uri_user pseudo variable parameter is not present, the server will generate SIP-URI-User check item value from user part of To/From URI.
#4

simax писал(а):
Модифицировать все можно только модификация в route блоке работает как наложение - тоесть изменения применяются к request'у на самом деле после выхода из блока.


А если сделать специальный route только для модификации? После выхода из route заголовки будут уже модифицированы?

simax писал(а):
А как насчет radius_proxy_authorize? Сам не пробовал - радиус не пользую но там вроде есть второй параметр uri_user.

Пробовал -- не получилось, правда дело было ночью, возможно что-то не так сделал...

И еще вопрос; Как включить отладку SIP-пакетов включая SDP?

_________________
Maksim Timofejev
#5

simax писал(а):
А как насчет radius_proxy_authorize? Сам не пробовал - радиус не пользую но там вроде есть второй параметр uri_user.

Сегодня проверил -- не подходит. uri_user -- это uri того, кто звонит (аб. А), там нет номера, на который звонят (аб. Б).

_________________
Maksim Timofejev
#6

simax писал(а):
Модифицировать все можно только модификация в route блоке работает как наложение - тоесть изменения применяются к request'у на самом деле после выхода из блока.

А route из route применяется? У меня -- нет. Или я что-то не так делаю?
Пробовал strip, prefix -- ничего не помогает, в radius уходит немодифицированный номер.
Может можно как-нибудь передать дополнительный radius-аттрибут?
Cisco-AVPair вроде там только один call-id и он жестко забит.
Получается, что kamailio от radius все, что угодно получить может, а вот то, что передать -- жестко зашито. Crying or Very sad

P.S. Кто-нибудь как-нибудь обходил это или Kamailio/OpenSER с radius'ом никто не использует?!! Аккаунтинг меня не интересует, нужны только Authentication и Authorization.

Added after 1 minutes:

Точнее даже только Authorization, т.к. с Authentication проблем нет.

_________________
Maksim Timofejev
#7

Проблема решена внесением изменений в биллинг.
Тема закрыта.

_________________
Maksim Timofejev
#8

tma писал(а):
Уже второй день бьюсь, пытаюсь при помощи subst и subst_uri переписать из формата к примеру XXXXXXX в 7812XXXXXXX.
Переписывает

А как вы переписываете номер в SIP пакете не расскажите? Хочу в kamailio роутить звонки префиксами, т.к. дальше стоят коммутаторы потоков, которые только так понимают. Я так полагаю это делается с помощью psevdovariable transformation?
#10

ZloMurz писал(а):
А как вы переписываете номер в SIP пакете не расскажите?


У меня так:
Код:

if (uri =~ "^sip:[0-9]{7}@.*") {
xlog("L_DBG", "Dialing: Local SPb number (xxx-xx-xx): From: To: \n");
subst_uri('/^sip:([0-9]{7})@(.*)$/sip:7812\1@\2/i');
rewritehostport("192.168.XXX.XXX");
route(1);
return;
}


Но дело в том, что измнения видны только после того, как пакет ушел из Kamailio! Т.е. если я его буду гонять внутри по route'ам, изменений не будет!

Чтобы понял биллинг -- пришлось добавить функционал, при котором он сам преобразовывает номер к виду E.164 по заданным правилам.

_________________
Maksim Timofejev