Переписанный на 5.1 скрипт ошибки баланса
Код:
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 ru.bitel.bgbilling.kernel.network.radius.*;
import java.util.*;
public void onEvent(event, setup, con, conSlave)
{
int errCode = 0;
long login_ip = 0;
// event.getRequest|getResponse|getLogin|getContract|getErrorCode
login = event.getLogin();
// Ищем пользователя и IP, привязанный к нему в таблице
ps = con.prepareStatement( "SELECT ip FROM radius_pair_ip_1 WHERE id=?" );
ps.setInt( 1, login.getId() );
rs = ps.executeQuery();
while( rs.next() )
login_ip = rs.getLong( 1 );
errCode = event.getErrorCode();
// Если логину не присвоен IP-адрес, то даем AUTH_REJECT.
if( login_ip == 0 )
{
errCode = 2;
response = event.getResponse();
response.setCode( RadiusPacket.ACCESS_REJECT );
}
// 0 - нет ошибки, 2 - ошибка ввода пароля.
if( errCode != 0 && errCode != 2 && errCode != 21 )
{
response = event.getResponse();
response.setCode( RadiusPacket.ACCESS_ACCEPT );
// Готовим аттрибуты на отдачу
// Service-Type = 2
raSt = new RadiusAttribute.RadiusAttributeInteger ( -1, RadiusStandartAttributes.Service_Type, 2 );
// Framed-Protocol = 1
raFp = new RadiusAttribute.RadiusAttributeInteger ( -1, RadiusStandartAttributes.Framed_Protocol, 1 );
// Framed-IP-Address
raIp = new RadiusAttribute.RadiusAttributeIpAddr ( -1, RadiusStandartAttributes.Framed_IP_Address, (int) login_ip );
// Session-Timeout = 900 (15 min)
raStm = new RadiusAttribute.RadiusAttributeInteger ( -1, RadiusStandartAttributes.Session_Timeout, 900 );
raZero = new RadiusAttribute.RadiusAttributeInteger ( -1, 233, 691 );
// raReply = new RadiusAttribute( 18 );
// raReply.setStringValue("4");
response.addAttribute( raStm );
response.addAttribute( raSt );
response.addAttribute( raFp );
response.addAttribute( raIp );
response.addAttribute( raZero );
}
// Пишем в специальную табличку текущий код ошибки, кроме Password Error,
// для дальнейшего вывода на специальной информационной страничке.
if( errCode != 2 )
{
ps = con.prepareStatement( "SELECT ip FROM dialup_conn_error WHERE ip=?" );
ps.setInt( 1, (int) login_ip );
rs = ps.executeQuery();
found = false;
while( rs.next() )
found = true;
if( found )
ps = con.prepareStatement( "UPDATE dialup_conn_error SET error_code=? WHERE ip=?" );
else
ps = con.prepareStatement( "INSERT INTO dialup_conn_error(error_code,ip) VALUES(?,?)" );
ps.setInt( 1, errCode );
ps.setInt( 2, (int) login_ip );
ps.executeUpdate();
}
}