Prepaid через радиус.
Модуль ACC замечательно шлёт аккаунтинг через радиус при начале вызова (INVITE) и при завершении его (BYE), с помощью взвода нужного флага в нужном месте конфига (setflag(1); ).
В начале соединения, после авторизации биллинг по радиусу присылает возможное время разговора которое хранится в переменной AVP и используется модулем DIALOG.
Модуль DIALOG отсчитывает таймер по этому времени и если оно заканчивается то рвет соединение (для этого надо в коде в нужном месте поставить dlg_bye_all(dlg, NULL); ) и отсылает участникам соединения BYE, но т.к. это сообщение (BYE) не проходит конфиг то и аккаунтинг по этому сообщению не отсылается.
Пытался в коде добавить функцию взвода флага прямо в модуле dialog.so но не получается, я в программировании не силён.
Может у кого есть идеи как это реализовать ? Или может это уже както реализованно в Kamailio, а я не увидел ?
Последний раз редактировалось: Homer (Пн Янв 18, 2010 11:48)
Как Вы авторизацию вызова сделали? У меня что-то не получилось. Я поднимал только аудентификацию. Аккаунтинг у меня на Quintum Call Relay.
Я пытался сделать авторизацию вызова по INVITE, но в результате у меня реагирует на каждый re-INVITE и рвет сессию, если не хватает данных.
_________________
Maksim Timofejev
| Цитата: |
| SER никак не контроллирует медиа сессию. |
- Модуль tm занимается обработкой stateful SIP транзакций (где результат обработки SIP сообщений зависит от состояния диалога). функция - t_relay(). Она инициирует транзакцию и устанавливает ее состояние, контролирует и отбрасывает повторные передачи с upstream, генерирует повторные передачи SIP сообщений для downstream, и сопоставляет SIP ответы соответствующим запросам.
| Цитата: |
| Я пытался сделать авторизацию вызова по INVITE, но в результате у меня реагирует на каждый re-INVITE и рвет сессию, если не хватает данных. |
- модуль rr, функция loose_route() - выполняет маршрутизацию SIP запросов, которые содержат набор параметров для маршрутов. Эта функция часто используется, для маршрутизации запросов в пределах диалога (такие, как: ACK, BYE, re-INVITE).
Надеюсь я правильно понял тебя и это поможет ответить на твой вопрос.
_________________
Maksim Timofejev
_________________
http://arttel.ru
поставь дебаг
посмотри по каким частям программы бегает вся стейт-машин
и впендюрь в нужное место что то свое
Kamailio версии 3.0.0
Кстати выше указанную мною проблему решил:
1. в исходниках модуля dialog в момент исхода таймера сессии вызываем функцию dlg_bye_all(dlg, NULL);
2. перед компиляциея модулей делаем это - make EXTRA_DEFS="-DWITH_EVENT_LOCAL_REQUEST" cfg , что в ключает в модуле tm новые фичи.
3. и собсна в конфиги применяем эту новую фичу: (раньше как говорят она называлась local_route)
event_route[tm:local-request] {
xlog("L_INFO", "event_route $rm\n");
if(is_method("BYE")) {
# Account BYE transactions
xlog("L_INFO", "event_received_BYE from $fU to $tU\n\n");
acc_rad_request("Bablo zakonchilos!");
$avp(s:can_uri) = $ru;
};
_________________
http://arttel.ru
Как уже было сказано, модуль ACC шлёт аккаунтинг через радиус при начале вызова (INVITE) и при завершении его (BYE), с помощью взвода нужного флага в нужном месте конфига setflag(1)
Модуль B2BUA создавая новое "плечо" (сессия с новым Call-ID) грубо говоря "перехватывает управления на себя", сообщение (BYE) не проходит конфиг и, как следствие, аккаунтинг по этому сообщению не отсылается.
Согласно описанию http://www.opensips.org/Resources/B2buaTutorial у модуля есть "Special B2B route", но, устанавливать туда флаги бесполезно...
Реально ли использовать указанный выше метод для модуля b2bua?
| Homer писал(а): |
Спасибо за очень ценную информацию.
В данный момент пробую эту тему. Скажите, пожалуйста, а какими арибутами от радиуса Вы "в ответе возвращаются нужные нам дополнительные", т.е. какие атрибуты, и как выглядит часть конфига, которые эти атрубуты отрабатывает (таймер с заданным временем запускает)?