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

Prepaid через радиус.

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

Prepaid через радиус.


Схема - Kamailio + Radius + Billing.
Модуль ACC замечательно шлёт аккаунтинг через радиус при начале вызова (INVITE) и при завершении его (BYE), с помощью взвода нужного флага в нужном месте конфига (setflag(1); ).
В начале соединения, после авторизации биллинг по радиусу присылает возможное время разговора которое хранится в переменной AVP и используется модулем DIALOG.
Модуль DIALOG отсчитывает таймер по этому времени и если оно заканчивается то рвет соединение (для этого надо в коде в нужном месте поставить dlg_bye_all(dlg, NULL); ) и отсылает участникам соединения BYE, но т.к. это сообщение (BYE) не проходит конфиг то и аккаунтинг по этому сообщению не отсылается.

Пытался в коде добавить функцию взвода флага прямо в модуле dialog.so но не получается, я в программировании не силён.

Может у кого есть идеи как это реализовать ? Или может это уже както реализованно в Kamailio, а я не увидел ?


Последний раз редактировалось: Homer (Пн Янв 18, 2010 11:48)
#2

Вообще-то аккауинтинг на SER'е не очень хорошая идея поднимать, т.к. SER никак не контроллирует медиа сессию.
Как Вы авторизацию вызова сделали? У меня что-то не получилось. Я поднимал только аудентификацию. Аккаунтинг у меня на Quintum Call Relay.
Я пытался сделать авторизацию вызова по INVITE, но в результате у меня реагирует на каждый re-INVITE и рвет сессию, если не хватает данных.

_________________
Maksim Timofejev
#3

Цитата:
SER никак не контроллирует медиа сессию.

- Модуль tm занимается обработкой stateful SIP транзакций (где результат обработки SIP сообщений зависит от состояния диалога). функция - t_relay(). Она инициирует транзакцию и устанавливает ее состояние, контролирует и отбрасывает повторные передачи с upstream, генерирует повторные передачи SIP сообщений для downstream, и сопоставляет SIP ответы соответствующим запросам.

Цитата:
Я пытался сделать авторизацию вызова по INVITE, но в результате у меня реагирует на каждый re-INVITE и рвет сессию, если не хватает данных.

- модуль rr, функция loose_route() - выполняет маршрутизацию SIP запросов, которые содержат набор параметров для маршрутов. Эта функция часто используется, для маршрутизации запросов в пределах диалога (такие, как: ACK, BYE, re-INVITE).

Надеюсь я правильно понял тебя и это поможет ответить на твой вопрос.
#4

Спасибо, попробую.
_________________
Maksim Timofejev
#5

Мой вопрос еще актуален, может хоть подскажите в какую сторону копать ?
_________________
http://arttel.ru
#6

а что подсказывать
поставь дебаг
посмотри по каким частям программы бегает вся стейт-машин
и впендюрь в нужное место что то свое
#7

Homer, а у вас аудентификация работает в радиусе? какая версия радиуса?
#8

Регитстрациия пользователей и авторизация Инвайтов просиходит по протоколу RADIUS. В качетстве сервера FreeRADIUS Version 2.0.4, для аккаунтинга используется правда встроенный radius-сервер биллинга (utm5 в качестве тестов используем, т.к. не все нас устраивало в его работе то прикрутили свой радиус сервер к utm таблицам). По мимо стандартных атрибутов в ответе возвращаются нужные нам дополнительные, в utm такого сделать не знаем как.
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
#9

Есть схожая проблема с использованием модуля Opensips - B2BUA.

Как уже было сказано, модуль ACC шлёт аккаунтинг через радиус при начале вызова (INVITE) и при завершении его (BYE), с помощью взвода нужного флага в нужном месте конфига setflag(1)

Модуль B2BUA создавая новое "плечо" (сессия с новым Call-ID) грубо говоря "перехватывает управления на себя", сообщение (BYE) не проходит конфиг и, как следствие, аккаунтинг по этому сообщению не отсылается.

Согласно описанию http://www.opensips.org/Resources/B2buaTutorial у модуля есть "Special B2B route", но, устанавливать туда флаги бесполезно...

Реально ли использовать указанный выше метод для модуля b2bua?
#10

Homer писал(а):



Спасибо за очень ценную информацию.
В данный момент пробую эту тему. Скажите, пожалуйста, а какими арибутами от радиуса Вы "в ответе возвращаются нужные нам дополнительные", т.е. какие атрибуты, и как выглядит часть конфига, которые эти атрубуты отрабатывает (таймер с заданным временем запускает)?