BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 20 июн 2025, 22:11

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




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Ошибки скрипта предобработки DialUp
СообщениеДобавлено: 21 авг 2008, 14:59 
Не в сети

Зарегистрирован: 10 дек 2007, 14:36
Сообщения: 33
Карма: 0
Создал скрипт предобработки в описании Dialup NAS-a:

import bitel.billing.server.call.bean.Login;
import bitel.billing.server.radius.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.script.event.*;
import java.util.*;

login_radius = request.getStringAttribute( 1 );
password_radius = request.getStringAttribute( 2 );

// event.getRequest|getResponse|getLogin|getContract|getErrorCode
login = event.getLogin();

// Ищем пароль пользователя
ps = con.prepareStatement( "SELECT pswd FROM user_login_2 WHERE id=?" );

ps.setInt( 1, login.getId() );
rs = ps.executeQuery();

while( rs.next() )
password_db = rs.getInt( 1 );

errCode = event.getErrorCode();

// Если логину в базе соответствует конкретный пароль, то заменяем его на введеный в момент аутентификации и даем AUTH_REJECT.
if( password_db == "неизвестен" )
{
ps = con.prepareStatement( "UPDATE user_login_2 SET password=? WHERE id=?" );
ps.setInt( 1, password_radius );
ps.setInt( 2, login.getId() );
rs = ps.executeQuery();

errCode = 2;
response = event.getResponse();
response.setPacketType( RadiusPacket.AUTHENTICATION_REJECT );
}

При получении пакета на аутентификацию скрипт выдает ошибку:
Sourced file: inline evaluation of: ``import bitel.billing.server.call.bean.Login; import bitel.billing.server.radius. . . . '' : Attempt to resolve method: getLogin() on undefined variable or class name: event : at Line: 11 : in file: inline evaluation of: ``import bitel.billing.server.call.bean.Login; import bitel.billing.server.radius. . . . '' : event .getLogin ( )

at bsh.UtilEvalError.toEvalError(Unknown Source)
at bsh.UtilEvalError.toEvalError(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.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:275)
at bitel.billing.server.processor.dialup.DialUpNASInfo.prepareAuthRequest(DialUpNASInfo.java:220)
at bitel.billing.server.radius.RadiusRequestThread.processRequest(RadiusRequestThread.java:117)
at bitel.billing.server.radius.RadiusRequestThread.run(RadiusRequestThread.java:48)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Где я ошибся?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 21 авг 2008, 17:20 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
В этот скрипт не передаесcя перменная event . Там есть только request, con, setup..
вообще логин можно получить так : req.getStringAttribute(RadiusStandartAttributes.User_Name )


Вот есть такой метод получения логина из request , может быть поможет :
Код:
protected Login getLogin( RadiusPacket req, RadiusPacket resp )
   {
      DialUpLogin result = null;
      String userName = Utils.deleteAfterDog( req.getStringAttribute( RadiusStandartAttributes.User_Name ) );

      if ( userName != null )
      {
            int pos = userName.indexOf( '\\' );
            if( pos >= 0 )
            {
                userName = userName.substring( pos + 1 );
            }

         Connection con = setup.getDBConnectionFromPool(); ;

         try
         {
            result = new DialUpLoginManager( con, mid ).findLogin( userName, new Date() );
         }
         catch ( Exception ex )
         {
            ex.printStackTrace();
         }
         finally
         {
            setup.returnConToPool( con );
         }
      }

      return result;
   }


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

Зарегистрирован: 10 дек 2007, 14:36
Сообщения: 33
Карма: 0
Я размещал скрипт в "Скрипт предобработки" в "Редакторе NASов".
А куда я должен его разместить, чтобы even был виден и все отрабатывало?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 авг 2008, 18:52 
Скрипт на RADIUS-аутентификацию размещается в скриптах предобработки, откуда собственно и берутся данные: время, логин и т.п. В зависимости от типа скрипта (шедулер, радиус, таймер) соответственно отрабатывают предопределенные функции(event.getRequest и т.п.). Вам нужно скрипт предобработки внести на договор, тогда будет искаться логин, в вашем случае, и далее действия которые требуются.

http://www.bgbilling.ru/v4.4/doc/ch02.html#bgbs


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 сен 2008, 02:57 
Не в сети

Зарегистрирован: 12 сен 2008, 02:51
Сообщения: 11
Карма: 0
Приветствую!
Пытаюсь получить логин следующим образом:

Код:
import bitel.billing.server.call.bean.Login;
import bitel.billing.server.radius.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.script.event.*;
import java.util.*;
...
login = event.getStringAttribute( 1 );
...


в итоге получаю ошибку:

Цитата:
EXCEPTIONS:
Sourced file: inline evaluation of: ``import bitel.billing.server.call.bean.Login; import bitel.billing.server.radius. . . . '' : Error in method invocation: Method getStringAttribute( int ) not found in class'bitel.billing.server.processor.DefaultProcessor$RadiusAuthenticationEvent'Sourced file: inline evaluation of: ``import bitel.billing.server.call.bean.Login; import bitel.billing.server.radius. . . . '' : Error in method invocation: Method getStringAttribute( int ) not found in class'bitel.billing.server.processor.DefaultProcessor$RadiusAuthenticationEvent' : at Line: 12 : in file: inline evaluation of: ``import bitel.billing.server.call.bean.Login; import bitel.billing.server.radius. . . . '' : event .getStringAttribute ( 1 )


Что может быть не так? Классы, вроде бы, описаны все.
Сейчас тестовый скрипт привязан к договору. Пробовал привязывать к NAS, заменяя event на request - получил:

Цитата:
Sourced file: inline evaluation of: ``import bitel.billing.server.call.bean.Login; import bitel.billing.server.radius. . . . '' : Error in method invocation: No args method getErrorCode() not found in class'bitel.billing.server.radius.RadiusPacket' : at Line: 9 : in file: inline evaluation of: ``import bitel.billing.server.call.bean.Login; import bitel.billing.server.radius. . . . '' : request .getErrorCode ( )

т.е., проблема возникает из-за куска кода получения кода ошибки.

Код:
...
errCode = event.getErrorCode();
....


Запутался...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 сен 2008, 14:53 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
в скрипте предобработки NAS объекта event нет, т.к. скрипт запускается сразу после получения пакета, до поиска логина.

если же скрипт стоит на событие аутентификации, то нужно не
login = event.getStringAttribute( 1 );
а
login = event.getRequest().getStringAttribute( 1 );


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 сен 2008, 16:18 
Не в сети

Зарегистрирован: 12 сен 2008, 02:51
Сообщения: 11
Карма: 0
Да, про отсутствие event мне известно. Большое спасибо!

Вот еще такой вопрос: (небольшой оффтопик)
можно каким-либо образом из скрипта выдать IP-адрес из определенного пула адресов?


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

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
1. Тупой в лоб способ
Создайте в базе таблицу, типа ИП адрес - когда выдавался и выдавайте наиболее давно выданный. Т.к. отслеживать их освобождение не получится..
2. Вариация на ту же тему, но быстрее
Создайте Java класс, сделайте его статическим и реализуйте в нем указанный выше алгоритм. К этому классу вы сможете обращаться из скрипта. Метод быстрее, т.к. не трогает базу, но при старте радиуса как-то нужно инициализировать из базы занятые в текущй момент адреса.
Хотя можно и по таблице log_session, конечно.


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

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


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

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


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

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