BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 27 апр 2024, 19:30

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
СообщениеДобавлено: 30 янв 2007, 15:45 
Не в сети

Зарегистрирован: 26 янв 2007, 13:54
Сообщения: 5
Карма: 0
В документации есть такой скрипт
Вынос MAC адреса из cisco-avp-pair в Caliing-Station-Id:
Код:
import bitel.billing.server.radius.*;

prefix = "client-mac-address";
length = prefix.length();
           
attributes = request.getVendorAttributes( Vendors.CISCO, CiscoVendor.Cisco_AVPair );
for( it = attributes.iterator(); it.hasNext(); )
{
     ra = (RadiusAttribute)it.next();
     value = ra.getStringValue();
                 
     if( value.startsWith( prefix ) )
     {
        request.setStringAttribute( RadiusStandartAttributes.Calling_Station_Id, value.substring( length + 1 )  );
     }
}

Не могу осилить изменить этот скрипт, чтобы вынести h323-remote-address в User-name
Прошу помочь сделать такой скрипт.
Спаcибо.
P.S.
Надо, чтобы считать входящие звонки на операторов.
Сейчас в User-Name и Calling-Station-id идет номер абонента, и абонентские логины определяются по Calling-Station-id.
Если в User-Name будет h323-remote-address - будут учитываться
и звонки на операторов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 31 янв 2007, 13:57 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Код:
import bitel.billing.server.radius.*;

attributes = request.getVendorAttributes( Vendors.CISCO, 23 ); //h323-remote-address из dictionary.xml
for( it = attributes.iterator(); it.hasNext(); )
{
     ra = (RadiusAttribute)it.next();
     value = ra.getStringValue();

     request.setStringAttribute( RadiusStandartAttributes.User_Name, value );
}

только проверьте сначала :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 31 янв 2007, 23:11 
Не в сети

Зарегистрирован: 26 янв 2007, 13:54
Сообщения: 5
Карма: 0
Вообщем, проверил. В User-Name подставляется h323-remote-address,
только в radius.out постоянно вылетает следующее:

Код:
java.lang.NullPointerException: Null Pointer in Method Invocation
        at bsh.Name.invokeMethod(Unknown Source)
        at bsh.BSHMethodInvocation.eval(Unknown Source)
        at bsh.BSHPrimaryExpression.eval(Unknown Source)
        at bsh.BSHPrimaryExpression.eval(Unknown Source)
        at bsh.BSHAssignment.eval(Unknown Source)
        at bsh.BSHStatementExpressionList.eval(Unknown Source)
        at bsh.BSHForStatement.eval(Unknown Source)
        at bsh.Interpreter.eval(Unknown Source)
        at bsh.Interpreter.eval(Unknown Source)
        at bsh.Interpreter.eval(Unknown Source)
        at bitel.billing.server.processor.DefaultNASInfo.processRequestWithScript(DefaultNASInfo.java:274)
        at bitel.billing.server.processor.voiceip.VoiceIpNASInfo.prepareAccountRequest(VoiceIpNASInfo.java:114)
        at bitel.billing.server.radius.RadiusRequestThread.processRequest(RadiusRequestThread.java:133)
        at bitel.billing.server.radius.RadiusRequestThread.run(RadiusRequestThread.java:48)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
        at java.lang.Thread.run(Thread.java:595)



Скорее всего на те радиус пакеты в которых атрибута h323-remote-address нет. Если бы еще вставить в скрипт проверку на наличие этого атрибута перед заменой ?...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 01 фев 2007, 13:16 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
import bitel.billing.server.radius.*;

attributes = request.getVendorAttributes( Vendors.CISCO, 23 ); //h323-remote-address из dictionary.xml
if( attributes != null )
for( it = attributes.iterator(); it.hasNext(); )
{
ra = (RadiusAttribute)it.next();
value = ra.getStringValue();

request.setStringAttribute( RadiusStandartAttributes.User_Name, value );
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 01 фев 2007, 14:29 
Не в сети

Зарегистрирован: 26 янв 2007, 13:54
Сообщения: 5
Карма: 0
Замечательно - ошибки в radius.out пропали.
Настроил тарифные планы. Теперь все считается - и межоператорский трафик (исходящий, входящий)и абонентский (исходящий).
Спасибо за оперативную помощь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 окт 2007, 19:40 
Не в сети

Зарегистрирован: 16 янв 2007, 09:34
Сообщения: 4
Карма: 0
Код:
import bitel.billing.server.radius.*;
import java.util.regex.*;

nmbr = null;
innercall = null;
attributes = request.getVendorAttributes( Vendors.CISCO, 1 ); // <attribute add="no" name="cisco-avpair" type="string" code="1"/>
if( attributes != null )
for( it = attributes.iterator(); it.hasNext(); )
{
   ra = (RadiusAttribute)it.next();
   value = ra.getStringValue();
   if ( value.indexOf("feature-vsa") >= 0 && value.indexOf("fwder:") > 0 )
   {
      nmbr = value.substring((value.indexOf("fwder:")+6),value.length());
      nmbr = nmbr.substring(0,nmbr.indexOf(","));
      break;
   }
   if ( value.indexOf("gw-rxd-cgn") >= 0 )
   {
      nmbr = value.substring((value.indexOf("#:")+2),value.length());
      break;
   }
}

nasport =  request.getVendorAttributes( Vendors.CISCO, 2 ); // <attribute name="cisco-NAS-Port" type="string" code="2"/>
callorigin = request.getVendorAttributes( Vendors.CISCO, 26 ); // <attribute name="h323-call-origin" type="string" code="26"/>
calltype =  request.getVendorAttributes( Vendors.CISCO, 27 ); // <attribute name="h323-call-type" type="string" code="27"/>

if ( callorigin == "originate" && calltype == "Telephony" && nasport.indexOf("EFXS") >= 0 )
   nmbr = "corp-сalls";

if ( nmbr != null )
   request.setStringAttribute( RadiusStandartAttributes.User_Name, nmbr);


при запросе
...
cisco-NAS-Port=EFXS 50/0/14
...
h323-call-origin=originate
h323-call-type=Telephony

в User-Name строка "corp-сalls" не подставляется.

help


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 окт 2007, 21:02 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
при сравнении строк делайте не
Код:
callorigin == "originate"

а
Код:
"originate".equals( originate )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 11 окт 2007, 07:59 
Не в сети

Зарегистрирован: 16 янв 2007, 09:34
Сообщения: 4
Карма: 0
Попробовал:
Код:
if ( "originate".equals( callorigin ) && "Telephony".equals( calltype ) && nasport.indexOf("EFXS") >= 0 )
симптомы теже.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 окт 2007, 14:41 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Попробуйте так:

Код:
if ( callorigin == "originate" &&
calltype == "Telephony" &&
nasport.indexOf("EFXS") >= 0 )
{
   print( "SET!" );
   request.setStringAttribute( RadiusStandartAttributes.User_Name, "corp-сalls" );
}


Сообщение хоть выходит? В script.log должно быть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 окт 2007, 15:35 
Не в сети

Зарегистрирован: 16 янв 2007, 09:34
Сообщения: 4
Карма: 0
Уже ...

После танцев с бубнами заработало в таком виде:
Код:
import bitel.billing.server.radius.*;

// Имя пользоателя, куда сыпать внутренние звонки и тп.
String rejectedusername = "corp-calls";

username = null;
numberto = null;

attributes = request.getVendorAttributes( Vendors.CISCO, 1 ); // <attribute add="no" name="cisco-avpair" type="string" code="1"/>
nasport = request.getVendorAttributes( Vendors.CISCO, 2 ); // <attribute name="cisco-NAS-Port" type="string" code="2"/>
callorigin = request.getVendorAttributes( Vendors.CISCO, 26 ); // <attribute name="h323-call-origin" type="string" code="26"/>
calltype =  request.getVendorAttributes( Vendors.CISCO, 27 ); // <attribute name="h323-call-type" type="string" code="27/>
calledid = request.getStringAttribute( RadiusStandartAttributes.Called_Station_Id ); // <attribute name="Called-Station-Id" type="string" code="30"/>

if ( nasport != null ) { nasports = nasport.toString(); }
if ( callorigin != null ) { callorigins = callorigin.toString(); }
if ( calltype != null ) { calltypes = calltype.toString(); }

if( attributes != null )
{
   for( it = attributes.iterator(); it.hasNext(); )
   {
      ra = (RadiusAttribute)it.next();
      value = ra.getStringValue();
      // Определяем был ли Transfer/Conference, выносим короткий номер "крайнего" в User-Name
      if ( value.indexOf("feature-vsa") >= 0 && value.indexOf("fwder:") > 0 )
      {
         username = value.substring((value.indexOf("fwder:")+6),value.length());
         username = username.substring(0,username.indexOf(","));
         break;
      }
      // Выносим короткий номер в User-Name, если не было Transfer/Conference
      if ( value.indexOf("gw-rxd-cgn") >= 0 )
      {
         username = value.substring((value.indexOf("#:")+2),value.length());
         break;
      }
   }
}

if ( callorigin != null && calltype != null )
{
   if ( nasport != null && callorigins.indexOf("originate") >= 0 && calltypes.indexOf("Telephony") >= 0 )
   {
      // "Убираем" внутренние звонки (локальный - локальный)
      if ( nasports.indexOf("EFXS") >= 0  )
      {
         username = rejectedusername;
      }
      // Если звонок вышел через FXO порты, приводим номер к E.164
      if ( nasports.indexOf("FXO") >= 0  )
      {
         if ( calledid.startsWith("9810") ) { numberto = calledid.substring(4); }
         else if ( calledid.startsWith("98") ) { numberto = "7" + calledid.substring(2); }
         else if ( calledid.startsWith("9") ) { numberto = "73952" + calledid.substring(1); }
         else if ( calledid.matches("8[0-5]") ) { numberto = "000000" + calledid;}
      }
   }
   // "Убираем" звонки в голосовую почту
   else if ( callorigins.indexOf("originate") >= 0 && calltypes.indexOf("VoIP") >= 0 )
   {
      if ( calledid.matches("88100") ) { username = rejectedusername; }
   }
}

if ( numberto != null )
{
   request.setStringAttribute( RadiusStandartAttributes.Called_Station_Id, numberto);
}

if ( username != null )
{
   request.setStringAttribute( RadiusStandartAttributes.User_Name, username);
}
Оч.плохо, что "бедно" документирована фича скриптов предобработки.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.754s | 38 Queries | GZIP : On ]