/* * TeleStax, Open Source Cloud Communications * Copyright 2011-2016, Telestax Inc and individual contributors * by the @authors tag. * * This program is free software: you can redistribute it and/or modify * under the terms of the GNU Affero General Public License as * published by the Free Software Foundation; either version 3 of * the License, or (at your option) any later version. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/> */ package org.mobicents.protocols.ss7.tools.simulator.tests.checkimei; import org.apache.log4j.Level; 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.MAPProvider; import org.mobicents.protocols.ss7.map.api.dialog.MAPUserAbortChoice; import org.mobicents.protocols.ss7.map.api.primitives.MAPExtensionContainer; import org.mobicents.protocols.ss7.map.api.service.mobility.MAPDialogMobility; import org.mobicents.protocols.ss7.map.api.service.mobility.MAPServiceMobilityListener; import org.mobicents.protocols.ss7.map.api.service.mobility.authentication.AuthenticationFailureReportRequest; import org.mobicents.protocols.ss7.map.api.service.mobility.authentication.AuthenticationFailureReportResponse; import org.mobicents.protocols.ss7.map.api.service.mobility.authentication.SendAuthenticationInfoRequest; import org.mobicents.protocols.ss7.map.api.service.mobility.authentication.SendAuthenticationInfoResponse; import org.mobicents.protocols.ss7.map.api.service.mobility.faultRecovery.ForwardCheckSSIndicationRequest; import org.mobicents.protocols.ss7.map.api.service.mobility.faultRecovery.ResetRequest; import org.mobicents.protocols.ss7.map.api.service.mobility.faultRecovery.RestoreDataRequest; import org.mobicents.protocols.ss7.map.api.service.mobility.faultRecovery.RestoreDataResponse; import org.mobicents.protocols.ss7.map.api.service.mobility.imei.CheckImeiRequest; import org.mobicents.protocols.ss7.map.api.service.mobility.imei.CheckImeiResponse; import org.mobicents.protocols.ss7.map.api.service.mobility.imei.EquipmentStatus; import org.mobicents.protocols.ss7.map.api.service.mobility.imei.UESBIIu; import org.mobicents.protocols.ss7.map.api.service.mobility.locationManagement.CancelLocationRequest; import org.mobicents.protocols.ss7.map.api.service.mobility.locationManagement.CancelLocationResponse; import org.mobicents.protocols.ss7.map.api.service.mobility.locationManagement.PurgeMSRequest; import org.mobicents.protocols.ss7.map.api.service.mobility.locationManagement.PurgeMSResponse; import org.mobicents.protocols.ss7.map.api.service.mobility.locationManagement.SendIdentificationRequest; import org.mobicents.protocols.ss7.map.api.service.mobility.locationManagement.SendIdentificationResponse; import org.mobicents.protocols.ss7.map.api.service.mobility.locationManagement.UpdateGprsLocationRequest; import org.mobicents.protocols.ss7.map.api.service.mobility.locationManagement.UpdateGprsLocationResponse; import org.mobicents.protocols.ss7.map.api.service.mobility.locationManagement.UpdateLocationRequest; import org.mobicents.protocols.ss7.map.api.service.mobility.locationManagement.UpdateLocationResponse; import org.mobicents.protocols.ss7.map.api.service.mobility.oam.ActivateTraceModeRequest_Mobility; import org.mobicents.protocols.ss7.map.api.service.mobility.oam.ActivateTraceModeResponse_Mobility; import org.mobicents.protocols.ss7.map.api.service.mobility.subscriberInformation.AnyTimeInterrogationRequest; import org.mobicents.protocols.ss7.map.api.service.mobility.subscriberInformation.AnyTimeInterrogationResponse; import org.mobicents.protocols.ss7.map.api.service.mobility.subscriberInformation.AnyTimeSubscriptionInterrogationRequest; import org.mobicents.protocols.ss7.map.api.service.mobility.subscriberInformation.AnyTimeSubscriptionInterrogationResponse; import org.mobicents.protocols.ss7.map.api.service.mobility.subscriberInformation.ProvideSubscriberInfoRequest; import org.mobicents.protocols.ss7.map.api.service.mobility.subscriberInformation.ProvideSubscriberInfoResponse; import org.mobicents.protocols.ss7.map.api.service.mobility.subscriberManagement.DeleteSubscriberDataRequest; import org.mobicents.protocols.ss7.map.api.service.mobility.subscriberManagement.DeleteSubscriberDataResponse; import org.mobicents.protocols.ss7.map.api.service.mobility.subscriberManagement.InsertSubscriberDataRequest; import org.mobicents.protocols.ss7.map.api.service.mobility.subscriberManagement.InsertSubscriberDataResponse; import org.mobicents.protocols.ss7.map.dialog.MAPUserAbortChoiceImpl; import org.mobicents.protocols.ss7.tcap.asn.comp.Problem; import org.mobicents.protocols.ss7.tools.simulator.Stoppable; import org.mobicents.protocols.ss7.tools.simulator.common.TesterBase; import org.mobicents.protocols.ss7.tools.simulator.level3.MapMan; /** * @author mnowa * */ public class TestCheckImeiServerMan extends TesterBase implements TestCheckImeiServerManMBean, Stoppable, MAPDialogListener, MAPServiceMobilityListener { public static String SOURCE_NAME = "TestCheckImeiServer"; private final String name; private MapMan mapMan; MAPDialogMobility currentDialog = null; private boolean isStarted = false; private int countCheckImeiReq = 0; private int countCheckImeiResp = 0; private String currentRequestDef = ""; private boolean needSendSend = false; private boolean needSendClose = false; public TestCheckImeiServerMan() { super(SOURCE_NAME); this.name = "???"; } public TestCheckImeiServerMan(String name) { super(SOURCE_NAME); this.name = name; } public void setMapMan(MapMan val) { this.mapMan = val; } @Override public String closeCurrentDialog() { if (!isStarted) return "The tester is not started"; MAPDialogMobility curDialog = currentDialog; if (curDialog != null) { try { MAPUserAbortChoice choice = new MAPUserAbortChoiceImpl(); choice.setUserSpecificReason(); curDialog.abort(choice); 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"; } } private void doRemoveDialog() { currentDialog = null; // currentRequestDef = ""; } // Dialog messgaes @Override public void onRejectComponent(MAPDialog mapDialog, Long invokeId, Problem problem, boolean isLocalOriginated) { super.onRejectComponent(mapDialog, invokeId, problem, isLocalOriginated); if (isLocalOriginated) needSendClose = true; } @Override public void onDialogDelimiter(MAPDialog mapDialog) { try { if (needSendSend) { needSendSend = false; mapDialog.send(); return; } } catch (Exception e) { this.testerHost.sendNotif(SOURCE_NAME, "Exception when invoking send() : " + e.getMessage(), e, Level.ERROR); return; } try { if (needSendClose) { needSendClose = false; mapDialog.close(false); return; } } catch (Exception e) { this.testerHost.sendNotif(SOURCE_NAME, "Exception when invoking close() : " + e.getMessage(), e, Level.ERROR); return; } } @Override public void onDialogRelease(MAPDialog mapDialog) { if (this.currentDialog == mapDialog) this.doRemoveDialog(); } public boolean start() { this.countCheckImeiReq = 0; this.countCheckImeiResp = 0; this.currentRequestDef = ""; MAPProvider mapProvider = this.mapMan.getMAPStack().getMAPProvider(); mapProvider.getMAPServiceMobility().acivate(); mapProvider.getMAPServiceMobility().addMAPServiceListener(this); mapProvider.addMAPDialogListener(this); this.testerHost.sendNotif(SOURCE_NAME, "CHECK IMEI Server has been started", "", Level.INFO); isStarted = true; return true; } // Stoppable interface methods @Override public void stop() { MAPProvider mapProvider = this.mapMan.getMAPStack().getMAPProvider(); isStarted = false; this.doRemoveDialog(); mapProvider.getMAPServiceMobility().deactivate(); mapProvider.getMAPServiceMobility().removeMAPServiceListener(this); mapProvider.removeMAPDialogListener(this); this.testerHost.sendNotif(SOURCE_NAME, "CHECK IMEI Server has been stopped", "", Level.INFO); } @Override public void execute() { } @Override public String getState() { StringBuilder sb = new StringBuilder(); sb.append("<html>"); sb.append(SOURCE_NAME); sb.append(": CurDialog="); MAPDialogMobility curDialog = currentDialog; if (curDialog != null) sb.append(curDialog.getLocalDialogId()); else sb.append("No"); sb.append("<br>Count: countCheckImeiReq-"); sb.append(countCheckImeiReq); sb.append(", countCheckImeiResp-"); sb.append(countCheckImeiResp); sb.append("</html>"); return sb.toString(); } // TestCheckImeiServerManMBean interface methods @Override public EquipmentStatusType getAutoEquipmentStatus() { return new EquipmentStatusType(this.testerHost.getConfigurationData().getTestCheckImeiServerConfigurationData().getAutoEquipmentStatus().getCode()); } @Override public String getAutoEquipmentStatus_Value() { return new EquipmentStatusType(this.testerHost.getConfigurationData().getTestCheckImeiServerConfigurationData().getAutoEquipmentStatus().getCode()).toString(); } @Override public void setAutoEquipmentStatus(EquipmentStatusType equipmentStatusType) { this.testerHost.getConfigurationData().getTestCheckImeiServerConfigurationData().setAutoEquipmentStatus(EquipmentStatus.getInstance(equipmentStatusType.intValue())); this.testerHost.markStore(); } @Override public void putAutoEquipmentStatus(String val) { EquipmentStatusType x = EquipmentStatusType.createInstance(val); if (x != null) this.setAutoEquipmentStatus(x); } @Override public boolean isOneNotificationFor100Dialogs() { return this.testerHost.getConfigurationData().getTestCheckImeiServerConfigurationData().isOneNotificationFor100Dialogs(); } @Override public void setOneNotificationFor100Dialogs(boolean val) { this.testerHost.getConfigurationData().getTestCheckImeiServerConfigurationData().setOneNotificationFor100Dialogs(val); this.testerHost.markStore(); } @Override public String getCurrentRequestDef() { if (this.currentDialog != null) return "CurDialog: " + currentRequestDef; else return "PrevDialog: " + currentRequestDef; } // key MAPServiceMobilityListener interface methods @Override public void onCheckImeiRequest(CheckImeiRequest request) { if (!isStarted) return; currentRequestDef = ""; this.countCheckImeiReq++; MAPDialogMobility curDialog = request.getMAPDialog(); if (!this.testerHost.getConfigurationData().getTestCheckImeiServerConfigurationData().isOneNotificationFor100Dialogs()) { currentRequestDef += "Rcvd: CheckImeiReq: =\"" + request+ "\";"; String uData = this.createCheckImeiReqData(request); this.testerHost.sendNotif(SOURCE_NAME, "Rcvd: CheckImeiReq: " + "imei=" + request.getIMEI(), uData, Level.DEBUG); } try { MAPExtensionContainer extensionContainer = null; UESBIIu bmuef = null; EquipmentStatus equipmentStatus = this.testerHost.getConfigurationData().getTestCheckImeiServerConfigurationData().getAutoEquipmentStatus(); curDialog.addCheckImeiResponse(request.getInvokeId(), equipmentStatus, bmuef, extensionContainer); this.countCheckImeiResp++; this.needSendClose = true; if (!this.testerHost.getConfigurationData().getTestCheckImeiServerConfigurationData().isOneNotificationFor100Dialogs()) { String uData = this.createCheckImeiRespData(curDialog.getLocalDialogId()); this.testerHost.sendNotif(SOURCE_NAME, "Sent CheckImeiResponse: " + "equipmentStatus=" + equipmentStatus, uData, Level.DEBUG); } } catch (MAPException e) { this.testerHost.sendNotif(SOURCE_NAME, "Exception when invoking addCheckImeiResponse() : " + e.getMessage(), e, Level.ERROR); } finally { if (this.testerHost.getConfigurationData().getTestCheckImeiServerConfigurationData().isOneNotificationFor100Dialogs() && (countCheckImeiReq %100 == 0) ) { currentRequestDef += "Rcvd: CheckImeiReq: " + countCheckImeiReq + " messages received ("+countCheckImeiResp+" responses sent);"; this.testerHost.sendNotif(SOURCE_NAME, "Rcvd: CheckImeiReq: " + countCheckImeiReq + " messages received("+countCheckImeiResp+" responses sent)", "", Level.DEBUG); } } } private String createCheckImeiReqData(CheckImeiRequest request) { StringBuilder sb = new StringBuilder(); sb.append("dialogId="); sb.append(request.getMAPDialog().getLocalDialogId()); sb.append(", request=\""); sb.append(request); sb.append("\""); sb.append(",\nRemoteAddress="); sb.append(request.getMAPDialog().getRemoteAddress()); sb.append(",\nLocalAddress="); sb.append(request.getMAPDialog().getLocalAddress()); return sb.toString(); } private String createCheckImeiRespData(long dialogId) { StringBuilder sb = new StringBuilder(); sb.append("dialogId="); sb.append(dialogId); return sb.toString(); } @Override public void onCheckImeiResponse(CheckImeiResponse response) { // TODO Auto-generated method stub } // other MAPServiceMobilityListener interface methods @Override public void onUpdateLocationRequest(UpdateLocationRequest ind) { // TODO Auto-generated method stub } @Override public void onUpdateLocationResponse(UpdateLocationResponse ind) { // TODO Auto-generated method stub } @Override public void onCancelLocationRequest(CancelLocationRequest request) { // TODO Auto-generated method stub } @Override public void onCancelLocationResponse(CancelLocationResponse response) { // TODO Auto-generated method stub } @Override public void onSendIdentificationRequest(SendIdentificationRequest request) { // TODO Auto-generated method stub } @Override public void onSendIdentificationResponse(SendIdentificationResponse response) { // TODO Auto-generated method stub } @Override public void onUpdateGprsLocationRequest(UpdateGprsLocationRequest request) { // TODO Auto-generated method stub } @Override public void onUpdateGprsLocationResponse(UpdateGprsLocationResponse response) { // TODO Auto-generated method stub } @Override public void onPurgeMSRequest(PurgeMSRequest request) { // TODO Auto-generated method stub } @Override public void onPurgeMSResponse(PurgeMSResponse response) { // TODO Auto-generated method stub } @Override public void onSendAuthenticationInfoRequest(SendAuthenticationInfoRequest ind) { // TODO Auto-generated method stub } @Override public void onSendAuthenticationInfoResponse(SendAuthenticationInfoResponse ind) { // TODO Auto-generated method stub } @Override public void onAuthenticationFailureReportRequest(AuthenticationFailureReportRequest ind) { // TODO Auto-generated method stub } @Override public void onAuthenticationFailureReportResponse(AuthenticationFailureReportResponse ind) { // TODO Auto-generated method stub } @Override public void onResetRequest(ResetRequest ind) { // TODO Auto-generated method stub } @Override public void onForwardCheckSSIndicationRequest(ForwardCheckSSIndicationRequest ind) { // TODO Auto-generated method stub } @Override public void onRestoreDataRequest(RestoreDataRequest ind) { // TODO Auto-generated method stub } @Override public void onRestoreDataResponse(RestoreDataResponse ind) { // TODO Auto-generated method stub } @Override public void onAnyTimeInterrogationRequest(AnyTimeInterrogationRequest request) { // TODO Auto-generated method stub } @Override public void onAnyTimeInterrogationResponse(AnyTimeInterrogationResponse response) { // TODO Auto-generated method stub } public void onAnyTimeSubscriptionInterrogationRequest(AnyTimeSubscriptionInterrogationRequest request) { } public void onAnyTimeSubscriptionInterrogationResponse(AnyTimeSubscriptionInterrogationResponse response) { } @Override public void onProvideSubscriberInfoRequest(ProvideSubscriberInfoRequest request) { // TODO Auto-generated method stub } @Override public void onProvideSubscriberInfoResponse(ProvideSubscriberInfoResponse response) { // TODO Auto-generated method stub } @Override public void onInsertSubscriberDataRequest(InsertSubscriberDataRequest request) { // TODO Auto-generated method stub } @Override public void onInsertSubscriberDataResponse(InsertSubscriberDataResponse request) { // TODO Auto-generated method stub } @Override public void onDeleteSubscriberDataRequest(DeleteSubscriberDataRequest request) { // TODO Auto-generated method stub } @Override public void onDeleteSubscriberDataResponse(DeleteSubscriberDataResponse request) { // TODO Auto-generated method stub } @Override public void onActivateTraceModeRequest_Mobility(ActivateTraceModeRequest_Mobility ind) { // TODO Auto-generated method stub } @Override public void onActivateTraceModeResponse_Mobility(ActivateTraceModeResponse_Mobility ind) { // TODO Auto-generated method stub } }