/* * TeleStax, Open Source Cloud Communications Copyright 2012. * and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.mobicents.protocols.ss7.tools.simulator.tests.ussd; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; import org.apache.log4j.Level; import org.mobicents.protocols.ss7.map.api.MAPApplicationContext; import org.mobicents.protocols.ss7.map.api.MAPApplicationContextName; import org.mobicents.protocols.ss7.map.api.MAPApplicationContextVersion; import org.mobicents.protocols.ss7.map.api.MAPDialog; import org.mobicents.protocols.ss7.map.api.MAPDialogListener; import org.mobicents.protocols.ss7.map.api.MAPException; import org.mobicents.protocols.ss7.map.api.MAPMessage; import org.mobicents.protocols.ss7.map.api.MAPProvider; import org.mobicents.protocols.ss7.map.api.datacoding.CBSDataCodingScheme; import org.mobicents.protocols.ss7.map.api.primitives.AddressNature; import org.mobicents.protocols.ss7.map.api.primitives.AddressString; import org.mobicents.protocols.ss7.map.api.primitives.AlertingPattern; import org.mobicents.protocols.ss7.map.api.primitives.ISDNAddressString; import org.mobicents.protocols.ss7.map.api.primitives.MAPExtensionContainer; import org.mobicents.protocols.ss7.map.api.primitives.NumberingPlan; import org.mobicents.protocols.ss7.map.api.primitives.USSDString; import org.mobicents.protocols.ss7.map.api.service.supplementary.ActivateSSRequest; import org.mobicents.protocols.ss7.map.api.service.supplementary.ActivateSSResponse; import org.mobicents.protocols.ss7.map.api.service.supplementary.DeactivateSSRequest; import org.mobicents.protocols.ss7.map.api.service.supplementary.DeactivateSSResponse; import org.mobicents.protocols.ss7.map.api.service.supplementary.EraseSSRequest; import org.mobicents.protocols.ss7.map.api.service.supplementary.EraseSSResponse; import org.mobicents.protocols.ss7.map.api.service.supplementary.GetPasswordRequest; import org.mobicents.protocols.ss7.map.api.service.supplementary.GetPasswordResponse; import org.mobicents.protocols.ss7.map.api.service.supplementary.InterrogateSSRequest; import org.mobicents.protocols.ss7.map.api.service.supplementary.InterrogateSSResponse; import org.mobicents.protocols.ss7.map.api.service.supplementary.MAPDialogSupplementary; import org.mobicents.protocols.ss7.map.api.service.supplementary.MAPServiceSupplementaryListener; import org.mobicents.protocols.ss7.map.api.service.supplementary.ProcessUnstructuredSSRequest; import org.mobicents.protocols.ss7.map.api.service.supplementary.ProcessUnstructuredSSResponse; import org.mobicents.protocols.ss7.map.api.service.supplementary.RegisterPasswordRequest; import org.mobicents.protocols.ss7.map.api.service.supplementary.RegisterPasswordResponse; import org.mobicents.protocols.ss7.map.api.service.supplementary.RegisterSSRequest; import org.mobicents.protocols.ss7.map.api.service.supplementary.RegisterSSResponse; import org.mobicents.protocols.ss7.map.api.service.supplementary.UnstructuredSSNotifyRequest; import org.mobicents.protocols.ss7.map.api.service.supplementary.UnstructuredSSNotifyResponse; import org.mobicents.protocols.ss7.map.api.service.supplementary.UnstructuredSSRequest; import org.mobicents.protocols.ss7.map.api.service.supplementary.UnstructuredSSResponse; import org.mobicents.protocols.ss7.map.datacoding.CBSDataCodingSchemeImpl; import org.mobicents.protocols.ss7.map.primitives.AlertingPatternImpl; import org.mobicents.protocols.ss7.tools.simulator.Stoppable; import org.mobicents.protocols.ss7.tools.simulator.common.AddressNatureType; import org.mobicents.protocols.ss7.tools.simulator.common.TesterBase; import org.mobicents.protocols.ss7.tools.simulator.level3.MapMan; import org.mobicents.protocols.ss7.tools.simulator.level3.NumberingPlanMapType; import org.mobicents.protocols.ss7.tools.simulator.management.TesterHost; /** * * @author sergey vetyutnev * */ public class TestUssdServerMan extends TesterBase implements TestUssdServerManMBean, Stoppable, MAPDialogListener, MAPServiceSupplementaryListener { public static String SOURCE_NAME = "TestUssdServer"; private final String name; // private TesterHost testerHost; private MapMan mapMan; private int countProcUnstReq = 0; private int countProcUnstResp = 0; private int countProcUnstRespNot = 0; private int countUnstReq = 0; private int countUnstResp = 0; private int countUnstNotifReq = 0; private MAPDialogSupplementary currentDialog = null; private Queue<MAPDialogSupplementary> currentDialogQuere = new ConcurrentLinkedQueue<MAPDialogSupplementary>(); private boolean isStarted = false; private String currentRequestDef = ""; private boolean needSendSend = false; private boolean needSendClose = false; public TestUssdServerMan() { super(SOURCE_NAME); this.name = "???"; } public TestUssdServerMan(String name) { super(SOURCE_NAME); this.name = name; } public void setTesterHost(TesterHost testerHost) { this.testerHost = testerHost; } public void setMapMan(MapMan val) { this.mapMan = val; } @Override public String getMsisdnAddress() { return this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().getMsisdnAddress(); } @Override public void setMsisdnAddress(String val) { this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().setMsisdnAddress(val); this.testerHost.markStore(); } @Override public AddressNatureType getMsisdnAddressNature() { return new AddressNatureType(this.testerHost.getConfigurationData().getTestUssdServerConfigurationData() .getMsisdnAddressNature().getIndicator()); } @Override public String getMsisdnAddressNature_Value() { return new AddressNatureType(this.testerHost.getConfigurationData().getTestUssdServerConfigurationData() .getMsisdnAddressNature().getIndicator()).toString(); } @Override public void setMsisdnAddressNature(AddressNatureType val) { this.testerHost.getConfigurationData().getTestUssdServerConfigurationData() .setMsisdnAddressNature(AddressNature.getInstance(val.intValue())); this.testerHost.markStore(); } @Override public NumberingPlanMapType getMsisdnNumberingPlan() { return new NumberingPlanMapType(this.testerHost.getConfigurationData().getTestUssdServerConfigurationData() .getMsisdnNumberingPlan().getIndicator()); } @Override public String getMsisdnNumberingPlan_Value() { return new NumberingPlanMapType(this.testerHost.getConfigurationData().getTestUssdServerConfigurationData() .getMsisdnNumberingPlan().getIndicator()).toString(); } @Override public void setMsisdnNumberingPlan(NumberingPlanMapType val) { this.testerHost.getConfigurationData().getTestUssdServerConfigurationData() .setMsisdnNumberingPlan(NumberingPlan.getInstance(val.intValue())); this.testerHost.markStore(); } @Override public int getDataCodingScheme() { return this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().getDataCodingScheme(); } @Override public void setDataCodingScheme(int val) { this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().setDataCodingScheme(val); this.testerHost.markStore(); } @Override public int getAlertingPattern() { return this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().getAlertingPattern(); } @Override public void setAlertingPattern(int val) { this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().setAlertingPattern(val); this.testerHost.markStore(); } @Override public ProcessSsRequestAction getProcessSsRequestAction() { return this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().getProcessSsRequestAction(); } @Override public String getProcessSsRequestAction_Value() { return this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().getProcessSsRequestAction() .toString(); } @Override public void setProcessSsRequestAction(ProcessSsRequestAction val) { this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().setProcessSsRequestAction(val); this.testerHost.markStore(); } @Override public String getAutoResponseString() { return this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().getAutoResponseString(); } @Override public void setAutoResponseString(String val) { this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().setAutoResponseString(val); this.testerHost.markStore(); } @Override public String getAutoUnstructured_SS_RequestString() { return this.testerHost.getConfigurationData().getTestUssdServerConfigurationData() .getAutoUnstructured_SS_RequestString(); } @Override public void setAutoUnstructured_SS_RequestString(String val) { this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().setAutoUnstructured_SS_RequestString(val); this.testerHost.markStore(); } @Override public boolean isOneNotificationFor100Dialogs() { return this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().isOneNotificationFor100Dialogs(); } @Override public void setOneNotificationFor100Dialogs(boolean val) { this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().setOneNotificationFor100Dialogs(val); this.testerHost.markStore(); } @Override public void putMsisdnAddressNature(String val) { AddressNatureType x = AddressNatureType.createInstance(val); if (x != null) this.setMsisdnAddressNature(x); } @Override public void putMsisdnNumberingPlan(String val) { NumberingPlanMapType x = NumberingPlanMapType.createInstance(val); if (x != null) this.setMsisdnNumberingPlan(x); } @Override public void putProcessSsRequestAction(String val) { ProcessSsRequestAction x = ProcessSsRequestAction.createInstance(val); if (x != null) this.setProcessSsRequestAction(x); } @Override public String getCurrentRequestDef() { if (this.currentDialog != null) return "CurDialog: " + currentRequestDef; else return "PrevDialog: " + currentRequestDef; } @Override public String getState() { StringBuilder sb = new StringBuilder(); sb.append("<html>"); sb.append(SOURCE_NAME); sb.append(": CurDialog="); MAPDialogSupplementary curDialog = currentDialog; if (curDialog != null) sb.append(curDialog.getLocalDialogId()); else sb.append("No"); sb.append(", Pending dialogs="); sb.append(this.currentDialogQuere.size()); sb.append("<br>Count: processUnstructuredSSRequest-"); sb.append(countProcUnstReq); sb.append(", processUnstructuredSSResponse-"); sb.append(countProcUnstResp); sb.append("<br>unstructuredSSRequest-"); sb.append(countUnstReq); sb.append(", unstructuredSSResponse-"); sb.append(countUnstResp); sb.append(", unstructuredSSNotify-"); sb.append(countUnstNotifReq); sb.append("</html>"); return sb.toString(); } public boolean start() { MAPProvider mapProvider = this.mapMan.getMAPStack().getMAPProvider(); mapProvider.getMAPServiceSupplementary().acivate(); mapProvider.getMAPServiceSupplementary().addMAPServiceListener(this); mapProvider.addMAPDialogListener(this); this.testerHost.sendNotif(SOURCE_NAME, "USSD Server has been started", "", Level.INFO); isStarted = true; return true; } @Override public void stop() { MAPProvider mapProvider = this.mapMan.getMAPStack().getMAPProvider(); isStarted = false; this.doRemoveDialog(); mapProvider.getMAPServiceSupplementary().deactivate(); mapProvider.getMAPServiceSupplementary().removeMAPServiceListener(this); mapProvider.removeMAPDialogListener(this); this.testerHost.sendNotif(SOURCE_NAME, "USSD Server has been stopped", "", Level.INFO); } @Override public void execute() { } @Override public String closeCurrentDialog() { if (isStarted) { MAPDialogSupplementary curDialog = currentDialog; if (curDialog != null) { try { curDialog.close(false); this.doRemoveDialog(); return "The current dialog has been closed"; } catch (MAPException e) { this.doRemoveDialog(); return "Exception when closing the current dialog: " + e.toString(); } } else { return "No current dialog"; } } else { return "The tester is not started"; } } private void doRemoveDialog() { synchronized (this) { currentDialog = null; // currentRequestDef = ""; currentDialog = this.currentDialogQuere.poll(); if (currentDialog != null) { DialogData dd = (DialogData) currentDialog.getUserObject(); if (dd != null) currentRequestDef = dd.currentRequestDef; this.sendRcvdNotice(currentRequestDef, "CurDialog: ", ""); } } } private String createUssdMessageData(long dialogId, int dataCodingScheme, ISDNAddressString msisdn, AlertingPattern alPattern) { StringBuilder sb = new StringBuilder(); sb.append("dialogId="); sb.append(dialogId); sb.append(" DataCodingSchema="); sb.append(dataCodingScheme); sb.append(" "); if (msisdn != null) { sb.append(msisdn.toString()); sb.append(" "); } if (alPattern != null) { sb.append(alPattern.toString()); sb.append(" "); } return sb.toString(); } public String sendProcessUnstructuredResponse(MAPDialogSupplementary curDialog, String msg, long invokeId) { MAPProvider mapProvider = this.mapMan.getMAPStack().getMAPProvider(); USSDString ussdString = null; try { ussdString = mapProvider.getMAPParameterFactory().createUSSDString( msg, new CBSDataCodingSchemeImpl(this.testerHost.getConfigurationData().getTestUssdServerConfigurationData() .getDataCodingScheme()), null); } catch (MAPException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { curDialog.addProcessUnstructuredSSResponse(invokeId, new CBSDataCodingSchemeImpl(this.testerHost .getConfigurationData().getTestUssdServerConfigurationData().getDataCodingScheme()), ussdString); } catch (MAPException e) { this.testerHost.sendNotif(SOURCE_NAME, "Exception when invoking addProcessUnstructuredSSResponse() : " + e.getMessage(), e, Level.ERROR); return "Exception when sending ProcessUnstructuredSSResponse: " + e.toString(); } currentRequestDef += "procUnstrSsResp=\"" + msg + "\";"; DialogData dd = (DialogData) curDialog.getUserObject(); if (dd != null) { dd.currentRequestDef = currentRequestDef; } this.countProcUnstResp++; if (this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().isOneNotificationFor100Dialogs()) { int i1 = countProcUnstResp / 100; if (countProcUnstRespNot < i1) { countProcUnstRespNot = i1; this.testerHost.sendNotif(SOURCE_NAME, "Sent: procUnstrSsResp: " + (countProcUnstRespNot * 100) + " messages sent", "", Level.DEBUG); } } else { String uData = this.createUssdMessageData(curDialog.getLocalDialogId(), this.testerHost.getConfigurationData() .getTestUssdServerConfigurationData().getDataCodingScheme(), null, null); this.testerHost.sendNotif(SOURCE_NAME, "Sent: procUnstrSsResp: " + msg, uData, Level.DEBUG); } return "ProcessUnstructuredSSResponse has been sent"; } public String sendUnstructuredRequest(MAPDialogSupplementary curDialog, String msg) { MAPProvider mapProvider = this.mapMan.getMAPStack().getMAPProvider(); USSDString ussdString = null; try { ussdString = mapProvider.getMAPParameterFactory().createUSSDString( msg, new CBSDataCodingSchemeImpl(this.testerHost.getConfigurationData().getTestUssdServerConfigurationData() .getDataCodingScheme()), null); } catch (MAPException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } ISDNAddressString msisdn = null; if (this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().getMsisdnAddress() != null && !this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().getMsisdnAddress().equals("")) { msisdn = mapProvider.getMAPParameterFactory().createISDNAddressString( this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().getMsisdnAddressNature(), this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().getMsisdnNumberingPlan(), this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().getMsisdnAddress()); } AlertingPattern alPattern = null; if (this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().getAlertingPattern() >= 0 && this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().getAlertingPattern() <= 255) alPattern = new AlertingPatternImpl((byte) this.testerHost.getConfigurationData() .getTestUssdServerConfigurationData().getAlertingPattern()); try { curDialog.addUnstructuredSSRequest(new CBSDataCodingSchemeImpl(this.testerHost.getConfigurationData() .getTestUssdServerConfigurationData().getDataCodingScheme()), ussdString, alPattern, msisdn); } catch (MAPException e) { this.testerHost.sendNotif(SOURCE_NAME, "Exception when invoking addUnstructuredSSRequest() : " + e.getMessage(), e, Level.ERROR); return "Exception when sending UnstructuredSSRequest: " + e.toString(); } currentRequestDef += "unstrSsReq=\"" + msg + "\";"; DialogData dd = (DialogData) curDialog.getUserObject(); if (dd != null) { dd.currentRequestDef = currentRequestDef; } this.countUnstReq++; String uData = this.createUssdMessageData(curDialog.getLocalDialogId(), this.testerHost.getConfigurationData() .getTestUssdServerConfigurationData().getDataCodingScheme(), null, null); this.testerHost.sendNotif(SOURCE_NAME, "Sent: unstrSsReq: " + msg, uData, Level.DEBUG); return "UnstructuredSSRequest has been sent"; } @Override public String performProcessUnstructuredResponse(String msg) { if (!isStarted) return "The tester is not started"; MAPDialogSupplementary curDialog = currentDialog; if (curDialog == null) return "The current dialog does not opened. Open a dialog by UssdClient"; DialogData dd = (DialogData) curDialog.getUserObject(); if (dd == null || dd.invokeId == null) return "No pending dialog. Open a dialog by UssdClient"; long invokeId = dd.invokeId; if (msg == null || msg.equals("")) return "USSD message is empty"; String res = this.sendProcessUnstructuredResponse(curDialog, msg, invokeId); try { curDialog.close(false); } catch (Exception e) { this.testerHost.sendNotif(SOURCE_NAME, "Exception when invoking close() : " + e.getMessage(), e, Level.ERROR); } return res; } @Override public String performUnstructuredRequest(String msg) { if (!isStarted) return "The tester is not started"; if (msg == null || msg.equals("")) return "USSD message is empty"; MAPProvider mapProvider = this.mapMan.getMAPStack().getMAPProvider(); MAPDialogSupplementary curDialog = currentDialog; try { if (curDialog == null) { MAPApplicationContext mapUssdAppContext = MAPApplicationContext.getInstance(MAPApplicationContextName.networkUnstructuredSsContext, MAPApplicationContextVersion.version2); curDialog = mapProvider.getMAPServiceSupplementary().createNewDialog(mapUssdAppContext, this.mapMan.createOrigAddress(), this.mapMan.createOrigReference(), this.mapMan.createDestAddress(), this.mapMan.createDestReference()); currentDialog = curDialog; } DialogData dd = (DialogData) curDialog.getUserObject(); if (dd == null) { dd = new DialogData(); curDialog.setUserObject(dd); } String res = this.sendUnstructuredRequest(curDialog, msg); curDialog.send(); return res; } catch (Exception e) { this.testerHost.sendNotif(SOURCE_NAME, "Exception when invoking send() : " + e.getMessage(), e, Level.ERROR); return "Exception when sending UnstructuredSSRequest: " + e.toString(); } } @Override public String performUnstructuredNotify(String msg) { if (!isStarted) return "The tester is not started"; MAPProvider mapProvider = this.mapMan.getMAPStack().getMAPProvider(); if (msg == null || msg.equals("")) return "USSD message is empty"; USSDString ussdString = null; try { ussdString = mapProvider.getMAPParameterFactory().createUSSDString( msg, new CBSDataCodingSchemeImpl(this.testerHost.getConfigurationData().getTestUssdServerConfigurationData() .getDataCodingScheme()), null); } catch (MAPException e) { // TODO Auto-generated catch block e.printStackTrace(); } ISDNAddressString msisdn = null; if (this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().getMsisdnAddress() != null && !this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().getMsisdnAddress().equals("")) { msisdn = mapProvider.getMAPParameterFactory().createISDNAddressString( this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().getMsisdnAddressNature(), this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().getMsisdnNumberingPlan(), this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().getMsisdnAddress()); } AlertingPattern alPattern = null; if (this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().getAlertingPattern() >= 0 && this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().getAlertingPattern() <= 255) alPattern = new AlertingPatternImpl((byte) this.testerHost.getConfigurationData() .getTestUssdServerConfigurationData().getAlertingPattern()); MAPDialogSupplementary curDialog = currentDialog; try { if (curDialog == null) { MAPApplicationContext mapUssdAppContext = MAPApplicationContext.getInstance(MAPApplicationContextName.networkUnstructuredSsContext, MAPApplicationContextVersion.version2); curDialog = mapProvider.getMAPServiceSupplementary().createNewDialog(mapUssdAppContext, this.mapMan.createOrigAddress(), this.mapMan.createOrigReference(), this.mapMan.createDestAddress(), this.mapMan.createDestReference()); currentDialog = curDialog; } DialogData dd = (DialogData) curDialog.getUserObject(); if (dd == null) { dd = new DialogData(); curDialog.setUserObject(dd); } curDialog.addUnstructuredSSNotifyRequest(new CBSDataCodingSchemeImpl(this.testerHost.getConfigurationData() .getTestUssdServerConfigurationData().getDataCodingScheme()), ussdString, alPattern, msisdn); curDialog.send(); this.countUnstNotifReq++; String uData = this.createUssdMessageData(curDialog.getLocalDialogId(), this.testerHost.getConfigurationData().getTestUssdServerConfigurationData() .getDataCodingScheme(), msisdn, alPattern); this.testerHost.sendNotif(SOURCE_NAME, "Sent: unstrSsNotify: " + msg, uData, Level.DEBUG); return "UnstructuredSSNotify has been sent"; } catch (MAPException ex) { return "Exception when sending UnstructuredSSNotify: " + ex.toString(); } } @Override public void onMAPMessage(MAPMessage mapMessage) { // TODO Auto-generated method stub } @Override public void onProcessUnstructuredSSRequest(ProcessUnstructuredSSRequest ind) { if (!isStarted) return; DialogData dd = (DialogData) ind.getMAPDialog().getUserObject(); if (dd == null) { dd = new DialogData(); ind.getMAPDialog().setUserObject(dd); } try { dd.currentRequestDef += "procUnstrSsReq=\"" + ind.getUSSDString().getString(null) + "\";"; } catch (MAPException e) { // TODO Auto-generated catch block e.printStackTrace(); } String pref = "PendingDialog: "; if (this.currentDialog == ind.getMAPDialog() || this.getProcessSsRequestAction().intValue() != ProcessSsRequestAction.VAL_MANUAL_RESPONSE) { this.currentRequestDef = dd.currentRequestDef; pref = "CurDialog: "; } this.countProcUnstReq++; if (!this.testerHost.getConfigurationData().getTestUssdServerConfigurationData().isOneNotificationFor100Dialogs()) { String uData = this.createUssdMessageData(ind.getMAPDialog().getLocalDialogId(), ind.getDataCodingScheme() .getCode(), ind.getMSISDNAddressString(), ind.getAlertingPattern()); try { this.sendRcvdNotice("Rcvd: procUnstrSsReq: " + ind.getUSSDString().getString(null), pref, uData); } catch (MAPException e) { // TODO Auto-generated catch block e.printStackTrace(); } } switch (this.getProcessSsRequestAction().intValue()) { case ProcessSsRequestAction.VAL_MANUAL_RESPONSE: { dd.invokeId = ind.getInvokeId(); } break; case ProcessSsRequestAction.VAL_AUTO_ProcessUnstructuredSSResponse: { String msg = this.getAutoResponseString(); if (msg == null || msg.equals("")) msg = "???"; this.sendProcessUnstructuredResponse(ind.getMAPDialog(), msg, ind.getInvokeId()); this.needSendClose = true; } break; case ProcessSsRequestAction.VAL_AUTO_Unstructured_SS_Request_Then_ProcessUnstructuredSSResponse: { String msg = this.getAutoUnstructured_SS_RequestString(); if (msg == null || msg.equals("")) msg = "???"; this.sendUnstructuredRequest(ind.getMAPDialog(), msg); this.needSendSend = true; } break; } } private void sendRcvdNotice(String msg, String pref, String uData) { this.testerHost.sendNotif(SOURCE_NAME, pref + msg, uData, Level.DEBUG); } @Override public void onProcessUnstructuredSSResponse(ProcessUnstructuredSSResponse procUnstrResInd) { // TODO Auto-generated method stub } @Override public void onUnstructuredSSRequest(UnstructuredSSRequest ind) { } @Override public void onUnstructuredSSResponse(UnstructuredSSResponse ind) { if (!isStarted) return; DialogData dd = (DialogData) ind.getMAPDialog().getUserObject(); if (dd == null) return; String str = null; try { // dd.currentRequestDef += "unstrSsResp=\"" + ind.getUSSDString().getString(null) + "\";"; USSDString ussdString = ind.getUSSDString(); if (ussdString != null) str = ind.getUSSDString().getString(null); dd.currentRequestDef += "unstrSsResp=\"" + str + "\";"; } catch (MAPException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (this.currentDialog == ind.getMAPDialog()) currentRequestDef = dd.currentRequestDef; String pref = "CurDialog: "; this.countUnstResp++; CBSDataCodingScheme dcs = ind.getDataCodingScheme(); int dstr = -1; if (dcs != null) dstr = dcs.getCode(); String uData = this.createUssdMessageData(ind.getMAPDialog().getLocalDialogId(), dstr, null, null); this.sendRcvdNotice("Rcvd: unstrSsResp: " + str, pref, uData); switch (this.getProcessSsRequestAction().intValue()) { case ProcessSsRequestAction.VAL_MANUAL_RESPONSE: { if (ind.getMAPDialog() != this.currentDialog) return; } break; case ProcessSsRequestAction.VAL_AUTO_ProcessUnstructuredSSResponse: { } break; case ProcessSsRequestAction.VAL_AUTO_Unstructured_SS_Request_Then_ProcessUnstructuredSSResponse: { String msg = this.getAutoResponseString(); if (msg == null || msg.equals("")) msg = "???"; this.sendProcessUnstructuredResponse(ind.getMAPDialog(), msg, ind.getInvokeId()); this.needSendClose = true; } break; } } @Override public void onUnstructuredSSNotifyRequest(UnstructuredSSNotifyRequest unstrNotifyInd) { // TODO Auto-generated method stub } @Override public void onUnstructuredSSNotifyResponse(UnstructuredSSNotifyResponse ind) { this.testerHost.sendNotif(SOURCE_NAME, "Sent: unstrSsNotifyResp", "-", Level.DEBUG); } @Override public void onDialogDelimiter(MAPDialog mapDialog) { try { if (needSendSend) { needSendSend = false; mapDialog.send(); } } catch (Exception e) { this.testerHost.sendNotif(SOURCE_NAME, "Exception when invoking send() : " + e.getMessage(), e, Level.ERROR); } try { if (needSendClose) { needSendClose = false; mapDialog.close(false); } } catch (Exception e) { this.testerHost.sendNotif(SOURCE_NAME, "Exception when invoking close() : " + e.getMessage(), e, Level.ERROR); } } @Override public void onDialogRequest(MAPDialog mapDialog, AddressString destReference, AddressString origReference, MAPExtensionContainer extensionContainer) { synchronized (this) { if (mapDialog instanceof MAPDialogSupplementary) { MAPDialogSupplementary dlg = (MAPDialogSupplementary) mapDialog; if (this.getProcessSsRequestAction().intValue() == ProcessSsRequestAction.VAL_MANUAL_RESPONSE) { MAPDialogSupplementary curDialog = this.currentDialog; if (curDialog == null) { this.currentDialog = dlg; } else { this.currentDialogQuere.add(dlg); } } } } } @Override public void onDialogRelease(MAPDialog mapDialog) { if (this.currentDialog == mapDialog) this.doRemoveDialog(); else { if (this.getProcessSsRequestAction().intValue() != ProcessSsRequestAction.VAL_MANUAL_RESPONSE) { DialogData dd = (DialogData) mapDialog.getUserObject(); if (dd != null) { currentRequestDef = dd.currentRequestDef; } } } } private class DialogData { public Long invokeId; public String currentRequestDef = ""; } @Override public void onRegisterSSRequest(RegisterSSRequest request) { // TODO Auto-generated method stub } @Override public void onRegisterSSResponse(RegisterSSResponse response) { // TODO Auto-generated method stub } @Override public void onEraseSSRequest(EraseSSRequest request) { // TODO Auto-generated method stub } @Override public void onEraseSSResponse(EraseSSResponse response) { // TODO Auto-generated method stub } @Override public void onActivateSSRequest(ActivateSSRequest request) { // TODO Auto-generated method stub } @Override public void onActivateSSResponse(ActivateSSResponse response) { // TODO Auto-generated method stub } @Override public void onDeactivateSSRequest(DeactivateSSRequest request) { // TODO Auto-generated method stub } @Override public void onDeactivateSSResponse(DeactivateSSResponse response) { // TODO Auto-generated method stub } @Override public void onInterrogateSSRequest(InterrogateSSRequest request) { // TODO Auto-generated method stub } @Override public void onInterrogateSSResponse(InterrogateSSResponse response) { // TODO Auto-generated method stub } @Override public void onGetPasswordRequest(GetPasswordRequest request) { // TODO Auto-generated method stub } @Override public void onGetPasswordResponse(GetPasswordResponse response) { // TODO Auto-generated method stub } @Override public void onRegisterPasswordRequest(RegisterPasswordRequest request) { // TODO Auto-generated method stub } @Override public void onRegisterPasswordResponse(RegisterPasswordResponse response) { // TODO Auto-generated method stub } }