forum.bitel.ru http://forum.bitel.ru/ |
|
Работа с услугами в скриптовом шлюзе. http://forum.bitel.ru/viewtopic.php?f=7&t=7953 |
Страница 1 из 1 |
Автор: | vadius [ 12 апр 2013, 13:13 ] |
Заголовок сообщения: | Работа с услугами в скриптовом шлюзе. |
Добрый день. bgbilling 5.1 В модуле ipn имеется cкриптовый шлюз D-link (интернет IPoE работает как надо). Появилась задача подключать клиентам iptv (мультикаст, все каналы в одном пакете). Варианты у меня такие: 1. добавить в этом же модуле ipn новую услугу iptv, и при открытии шлюза, на коммутаторе в igmp snooping добавлять клиентский порт как member_port, при закрытии удалять его. Вопрос: как в скрипте определить подключена ли у клиента на данный момент услуга iptv или нет? 2. создать второй модуль ipn. Но тогда а в нем нужно будет дублировать все шлюзы, и повторно привязывать клиента к порту коммутатора (как то все это не очень) . Но здесь тоже не пойму что делать, в шлюзе d-link идет привязка ip адреса к порту, но здесь ip уже не нужен, а нужен только порт. Подскажите, как лучше реализовать задачу? |
Автор: | mash55 [ 12 апр 2013, 13:37 ] |
Заголовок сообщения: | Re: Работа с услугами в скриптовом шлюзе. |
Может быть по аналогии с viewtopic.php?f=19&t=2237 |
Автор: | vadius [ 13 апр 2013, 16:46 ] |
Заголовок сообщения: | Re: Работа с услугами в скриптовом шлюзе. |
mash55 писал(а): Может быть по аналогии с viewtopic.php?f=19&t=2237 Не совсем то... |
Автор: | vadius [ 16 апр 2013, 16:52 ] |
Заголовок сообщения: | Re: Работа с услугами в скриптовом шлюзе. |
Господа разработчики, подтолкните на мысль, пожалуйста. Или напишите где можно глянуть. |
Автор: | stark [ 23 апр 2013, 13:59 ] |
Заголовок сообщения: | Re: Работа с услугами в скриптовом шлюзе. |
Вы порты со вкладки порты используете ? . Можно добавлять там порт и в скрипте шлюза использовать |
Автор: | vadius [ 23 апр 2013, 15:45 ] |
Заголовок сообщения: | Re: Работа с услугами в скриптовом шлюзе. |
Да вот тоже думал туда заносить, но что-то не нашел как в скрипте получить порт со вкладки "Порты". Скиньте ссылку где можно глянуть. |
Автор: | vadius [ 23 апр 2013, 18:31 ] |
Заголовок сообщения: | Re: Работа с услугами в скриптовом шлюзе. |
Сделал! Вот только не совсем хорошо, что можно поменять номер порта на вкладке Порты не меняя статус шлюза. Т.е можно поменять номер порта, а старый порт на коммутаторе в 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() { } |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |