forum.bitel.ru
http://forum.bitel.ru/

Ошибки скрипта предобработки DialUp
http://forum.bitel.ru/viewtopic.php?f=5&t=1387
Страница 1 из 1

Автор:  Mike [ 21 авг 2008, 14:59 ]
Заголовок сообщения:  Ошибки скрипта предобработки DialUp

Создал скрипт предобработки в описании 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)

Где я ошибся?

Автор:  stark [ 21 авг 2008, 17:20 ]
Заголовок сообщения: 

В этот скрипт не передаес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;
   }

Автор:  Mike [ 22 авг 2008, 13:40 ]
Заголовок сообщения: 

Я размещал скрипт в "Скрипт предобработки" в "Редакторе NASов".
А куда я должен его разместить, чтобы even был виден и все отрабатывало?

Автор:  S [ 22 авг 2008, 18:52 ]
Заголовок сообщения: 

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

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

Автор:  Maj [ 12 сен 2008, 02:57 ]
Заголовок сообщения: 

Приветствую!
Пытаюсь получить логин следующим образом:

Код:
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();
....


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

Автор:  Amir [ 12 сен 2008, 14:53 ]
Заголовок сообщения: 

в скрипте предобработки NAS объекта event нет, т.к. скрипт запускается сразу после получения пакета, до поиска логина.

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

Автор:  Maj [ 12 сен 2008, 16:18 ]
Заголовок сообщения: 

Да, про отсутствие event мне известно. Большое спасибо!

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

Автор:  Администратор [ 15 сен 2008, 11:36 ]
Заголовок сообщения: 

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

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/