Проблема решена.
Был использован следующий скрипт пред обработки:
Код:
import bitel.billing.server.radius.*;
import ru.bitel.bgbilling.kernel.network.radius.*;
if (request.getIntAttribute(RadiusStandartAttributes.Acct_Status_Type) == 2) {
// Устанавливаем Calling-Station-Id = Asterisk-Src
CallingStationId = request.getStringAttribute(22736, 102, null);
request.setStringAttribute(RadiusStandartAttributes.Calling_Station_Id, CallingStationId);
// Проверяем наличие Asterisk-Acc-Code, и если он существует,
// то устанавливаем User-Name = Asterisk-Acc-Code, если не существует,
// то устанавливаем User-Name = Calling-Station-Id
UserName = request.getStringAttribute(22736, 101, null);
/* if (UserName != null)
request.setStringAttribute(RadiusStandartAttributes.User_Name, UserName);
else */
request.setStringAttribute(RadiusStandartAttributes.User_Name, CallingStationId);
// Устанавливаем Called-Station-Id = Asterisk-Dst
request.setStringAttribute(RadiusStandartAttributes.Called_Station_Id, request.getStringAttribute(22736, 103, null));
// Проверяем наличие Asterisk-User-Field, и если такой существует,
// то на основании его значения устанавливаем h323-call-origin
CallType = request.getStringAttribute(22736, 118, null);
if (CallType != null && CallType.equals("answer")) {
request.setStringAttribute(9, 26, "answer");
request.setFlag(2);
}
else {
request.setStringAttribute(9, 26, "originate");
request.setFlag(1);
}
// Устанавливаем h323-call-type = voip
request.setStringAttribute(9, 27, "voip");
// Устанавливаем Acct-Session-Time = Asterisk-Bill-Sec
request.setIntAttribute( RadiusStandartAttributes.Acct_Session_Time, request.getIntAttribute(22736, 114, null));
// Устанавливаем h323-setup-time = Asterisk-Start-Time
request.setStringAttribute(9, 25, request.getStringAttribute(22736, 110, null));
// Устанавливаем h323-connect-time = Asterisk-Answer-Time
request.setStringAttribute(9, 28, request.getStringAttribute(22736, 111, null));
// Устанавливаем h323-disconnect-time = Asterisk-End-Time
request.setStringAttribute(9, 29, request.getStringAttribute(22736, 112, null));
// Устанавливаем h323-disconnect-cause на основании Asterisk-Disposition
AsteriskDisposition = request.getStringAttribute(22736, 115, null);
if (AsteriskDisposition.equals("ANSWERED"))
request.setStringAttribute(9, 30, "0");
else if (AsteriskDisposition.equals("NO ANSWER"))
request.setStringAttribute(9, 30, "5");
else if (AsteriskDisposition.equals("BUSY"))
request.setStringAttribute(9, 30, "17");
else
request.setStringAttribute(9, 30, "22");
// Устанавливаем h323-conf-id = Acct-Session-Id
request.setStringAttribute(9, 24, request.getStringAttribute(-1, RadiusStandartAttributes.Acct_Session_Id, null));
} // Конец if (Acct_Status_Type == 2)
//Добавляем к нашему номеру N_ для успешной авторизации по ALIAS.
userName = request.getStringAttribute(-1, RadiusStandartAttributes.User_Name, "") ;
print("username="+userName);
if (userName.matches("^[0-9]+$"))
{
print("matches ok");
request.setStringAttribute( RadiusStandartAttributes.User_Name, "N_"+userName);
}
Конфиг наса использовался:
Код:
auth.in=voip/answer
auth.out=voip/originate
acct.in=voip/answer
acct.out=voip/originate
service=1
find.order=0,1,2,3
VoiceIp.workmode=2
#
nas.inspector.class=ru.bitel.bgbilling.kernel.network.radius.inspectors.PodNasConnectionInspector
#на какой порт слать PoD/CoA запросы
nas.inspector.radius.port=1812
#на какой хост слать (если не указан - берется IP адреса NASа)
#nas.inspector.radius.host=
#секрет для подписи пакетов (если не указан - берется секрет NASа)
nas.inspector.radius.secret=billing
#какие атрибуты добавлять в PoD/CoA запрос из сессии, если пустой параметр - высылаются все атрибуты
nas.inspector.radius.attributes=User-Name;Framed-IP-Address;Acct-Session-Id;Alias
#опции, относящиеся только к CoA пакетам
#таймаут ожидания ответа в секундах ответа между попытками отправки пакета СoA
nas.inspector.coa.timeout=5
#количество попыток отправить пакет CoA
nas.inspector.coa.retries=2
#количество потоков отправки CoA пакетов
nas.inspector.coa.threads=4
#отправка при смене CoA пакета всех атрибутов, аналогично ответу на авторизацию
#nas.inspector.coa.send.all.attributes=1
#логирование в RADIUS логе сессии отправляемых CoA пакетов
#coa.log=1
#фиксированные атрибуты CoA-пакета
#nas.inspector.coa.fixed.attributes=
#фиксированные атрибуты PoD-пакета
#nas.inspector.pod.fixed.attributes=
#отправка PoD пакета вместо CoA
#nas.inspector.send.pod.instead.coa=1
Типы логинов везде:
Поиск по User-Name=ALIAS