После полного перехода на новый manad строчку
Код:
if(rid==null && status.ruleType!=null) ruleChanged=false; // совместимость со старым manad
заменить на
Код:
if(rid==null && status.ruleType!=null) ruleChanged=true;
Код:
import java.io.*;
import java.net.*;
import java.util.*;
import bitel.billing.common.module.ipn.*;
import bitel.billing.server.ipn.bean.*;
protected void doSync()
{
host = gate.getHost();
port = gate.getPort();
gid = gate.getId();
if ( log.isDebugEnabled() )
{
log.debug( gid + " gate: " + host + ":" + port );
}
try
{
socket = new Socket( host, port );
out = new PrintWriter( socket.getOutputStream(), true );
isr = new InputStreamReader( socket.getInputStream() );
in = new BufferedReader( isr );
out.println( "testRID" );
kods = in.readLine();
if ( log.isDebugEnabled() )
{
log.debug( gid + " Test => " + kods + "\n" );
}
// список открытых договоров с шлюза
gateRules = new HashMap( 5, 5 );
st = new StringTokenizer( kods );
while ( st.hasMoreTokens() )
{
sp=st.nextToken().split("-");
if(sp.length==2) gateRules.put( new Integer( sp[0] ),(sp[1]==null)?null:new Integer(sp[1]) );
else gateRules.put( new Integer( sp[0] ),null);
}
for( i = 0; i < statusList.size(); i++ )
{
status = statusList.get(i);
cid = status.contractId;
// флаг того то правило есть на шлюзе
flag = false;
ruleChanged=false;
// правило для этого договора есть на шлюзе
if ( gateRules.containsKey( cid ) )
{
// если правило есть а юзер заблокирован - удаляем правило
if ( status.status > 0 )
{
rule = generateRule( status );
command = "remove\t" + cid.intValue() + "\t" + rule;
out.println( command );
if ( log.isDebugEnabled() ) {
log.debug( gid + " " + command );
}
}else{
// правило есть и юзер открыт - проверяем тип правила
rid=gateRules.get(cid);
if(rid!=null && status.ruleType==null) ruleChanged=true;
if(rid==null && status.ruleType!=null) ruleChanged=false; // совместимость со старым manad
if(rid!=null && status.ruleType!=null && !rid.equals(status.ruleType.getId())) ruleChanged=true;
if(ruleChanged){
if ( log.isDebugEnabled() ) {
log.debug( gid + " rule changed");
}
}
}
flag = true;
gateRules.remove( cid );
}
// правила нет, а юзер открыт, правило есть, но было изменение типа правила
if ( (!flag &&
status.status == IPNContractStatus.STATUS_OPEN ) ||(ruleChanged && status.status == IPNContractStatus.STATUS_OPEN ))
{
rule = generateRule( status );
command = "add\t" + cid.intValue() + "\t" + rule; // в случае изменения manad затрет старые правила ipfw
if( status.ruleType != null ) command+=" // RULE"+status.ruleType.getId();
out.println( command );
if ( log.isDebugEnabled() )
{
log.debug( gid + " " + command );
}
}
}
in.close();
out.close();
socket.close();
}
catch ( e )
{
throw new RuntimeException ( e );
}
}
private generateRule( status )
{
rule = null;
// пользовательское правило, без типа
if( status.ruleType == null )
{
rule = status.rule.getRuleText();
}
// типизированное правило
else
{
ruleText = ManadUtils.getRule( status.gateType, status.ruleType );
rule = ManadUtils.generateRule( ruleText, status.rule.getRuleText(), null, status.ruleType );
}
rule = rule.replaceAll( "\r", "" );
rule = rule.replaceAll( "\n", "|" );
return rule;
}