Код:
02-03/00:40:15 WARN [pool-5-thread-1] ScriptInstance - 85.202.0.1:0[]: using deprecated method [public static final java.lang.String bitel.billing.common.IPUtils.convertIpToString(long)]
02-03/00:40:15 WARN [pool-5-thread-1] ScriptInstance - 85.202.0.1:0[]: using deprecated class [bitel.billing.server.ipn.bean.AddressRangeManager]
02-03/00:40:15 WARN [pool-5-thread-1] ScriptInstance - 85.202.0.1:0[]: using deprecated method [public final java.lang.String ru.bitel.common.Preferences.getStringValue(java.lang.String)]
А вот сам скрипт
Код:
import bitel.billing.server.ipn.bean.AddressRange;
import bitel.billing.server.ipn.UserStatus;
import bitel.billing.server.ipn.bean.AddressRangeManager;
import bitel.billing.server.util.DefaultServerSetup;
import bitel.billing.server.util.Utils;
import bitel.billing.common.IPUtils;
protected void doSync()
{
date = new GregorianCalendar();
gateSetup = new DefaultServerSetup( gate.getConfig(), "\r\n"
);
script = gateSetup.getStringValue( "script");
//цикл по всем договорам на этом шлюзе
for( UserStatus status : statusList )
{
cid = status.contractId;
//
AddressRangeManager man = new AddressRangeManager( con, mid );
addressList = man.getContractAddressRange( cid, date, -1 );
for ( AddressRange range : addressList)
{
ip = getIP( range);
mask = getMask ( range) ;
String host = gate.getHost();
if ( mask == null )
{
log.info( "Incorrect range for cid = " + cid );
continue;
}
//log.info( "script = " + script );
log.info( "ip = " + ip );
log.info( "mask = " + mask );
log.info( "host = " + host );
String [] arguments = { script, ip, mask, host, String.valueOf( status.status ) };
//выполняем команду
Process process = Runtime.getRuntime().exec( arguments );
//ждем окончания работы процесса ..Это не обязательно
process.waitFor();
log.info( "exitCode=" + process.exitValue() );
}
}
}
getIP ( range )
{
return IPUtils.convertIpToString( range.getAddr1() );
}
getMask ( range )
{
result = null;
delta = range.getAddr2() - range.getAddr1() + 1;
pow = getPow( delta );
log.info( "pow = " + pow );
//махинация для того чтоб получить 0xFFFFFFFF -в beanshell не
//получилось задать такое большое число и модификатор l в конце не работает
ffMask = (0xFFFFFFF);
ffMask = (ffMask << 8 ) | 0xFF;
if ( pow >= 0 )
{
mask = ffMask;
mask = (mask << pow) & ffMask;
result = IPUtils.convertIpToString( mask );
}
return result;
}
//находим разницу между двумя ip(она должна быть степеью двойки) и
//возращаем эту степень
int getPow( long delta )
{
int idx = 0;
int count = 0;
pow = -1;
while ( delta > 0 )
{
if ( (delta & 1 ) == 1 )
{
count ++;
pow = idx;
if ( count > 1)
{
break;
}
}
delta = (delta >> 1);
idx++;
}
//если не одна единица в числе, значит это не степень двойки и
//диапазон задан неверно
if ( count != 1 )
{
pow = -1;
}
return pow;
}
И судя по жалобам работать он перестал нормально после апгрейда с 5.0 на 5.1 можно узнать почему?
Заранее спасибо.