Сделал!
Вот только не совсем хорошо, что можно поменять номер порта на вкладке Порты не меняя статус шлюза. Т.е можно поменять номер порта, а старый порт на коммутаторе в igmp_snooping не удаляется.
Код:
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import bitel.billing.common.IPUtils;
import bitel.billing.server.ipn.UserStatus;
import bitel.billing.server.util.DefaultServerSetup;
import bitel.billing.server.util.Utils;
import bitel.billing.server.util.telnet.TelnetSession;
import bitel.billing.common.module.ipn.*;
import bitel.billing.server.ipn.bean.*;
import bitel.billing.common.module.ipn.IPNContractStatus;
import bitel.billing.server.contract.bean.*;
import ru.bitel.bgbilling.modules.ipn.server.bean.GatePortManager;
protected void doSync()
{
try
{
String host = gate.getHost();
int port = gate.getPort();
DefaultServerSetup gateSetup = new DefaultServerSetup( gate.getConfig(), "\r\n" );
String pswd = gate.getKeyword();
String login = gateSetup.getStringValue( "login");
StringBuffer result = new StringBuffer();
if( log.isDebugEnabled() )
{
log.debug( gate.getId() + " gate: " + host + ":" + port + " login: " + login + " pswd: " + pswd );
}
TelnetSession session = new TelnetSession( host, port);
session.setLoginPromptSequence( ":" );
log.debug( "before connect" );
session.connect();
log.debug( "after connect" );
result.append( session.doCommand( login ) );
log.debug( "after command" );
session.setLoginPromptSequence( "#" );
result.append( session.doCommand( pswd ) );
log.debug( "before pswd" );
log.debug( "execute commands" );
doCommands( session, result, gateSetup);
//TODO commands here
session.setLoginPromptSequence( "****" );
result.append( session.doCommand( "logout" ) );
log.info( result.toString() );
log.debug( "ok" );
} catch (Exception e)
{
throw new RuntimeException ( e );
}
}
private void doCommands( TelnetSession session, StringBuffer result, DefaultServerSetup gateSetup)
throws IOException
{
String [] openRules = new String [] {
//Для открытого шлюза IPTV разрешаем
"config igmp_snooping multicast_vlan iptv add member_port ${port}" };
String [] closeRules = new String [] {
// Закрытый шлюз
"config igmp_snooping multicast_vlan iptv delete member_port ${port}" };
for ( UserStatus status : statusList )
{
Integer cid = status.contractId;
int port = -1 ;
List ports = new GatePortManager( con, mid ).getGatePorts( status.contractId, gate.getId() );
if ( ports.size() > 0 )
{
port = ports.get(0);
log.info("cid="+ status.contractId+" port=" + port );
if ( status.status == IPNContractStatus.STATUS_OPEN )
{
// Open
for (String rule : openRules)
{
rule = setValues( rule, port);
log.info("rule=" + rule);
result.append( session.doCommand( rule ) );
}
}
else //close,remove
{
for (String rule : closeRules)
{
rule = setValues( rule, port);
log.info("rule=" + rule);
result.append( session.doCommand( rule ) );
}
} //if,else
}// if ports.size
}//for
}//void
private String setValues( String rule, int port )
{
rule = rule.replaceAll( "\\$\\{port\\}", String.valueOf( port ) );
return rule;
}
protected void doParentSync()
{
}