/* * 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.ati; 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.MAPProvider; import org.mobicents.protocols.ss7.map.api.primitives.AddressNature; import org.mobicents.protocols.ss7.map.api.primitives.IMSI; import org.mobicents.protocols.ss7.map.api.primitives.ISDNAddressString; import org.mobicents.protocols.ss7.map.api.primitives.NumberingPlan; import org.mobicents.protocols.ss7.map.api.primitives.SubscriberIdentity; 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.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.DomainType; 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.subscriberInformation.RequestedInfo; 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.tcap.asn.comp.Problem; 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 TestAtiClientMan extends TesterBase implements TestAtiClientManMBean, Stoppable, MAPDialogListener, MAPServiceMobilityListener { public static String SOURCE_NAME = "TestAtiClient"; private final String name; private MapMan mapMan; private boolean isStarted = false; private int countAtiReq = 0; private int countAtiResp = 0; private String currentRequestDef = ""; private boolean needSendSend = false; private boolean needSendClose = false; public TestAtiClientMan() { super(SOURCE_NAME); this.name = "???"; } public TestAtiClientMan(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 AddressNatureType getAddressNature() { return new AddressNatureType(this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().getAddressNature().getIndicator()); } @Override public String getAddressNature_Value() { return new AddressNatureType(this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().getAddressNature().getIndicator()).toString(); } @Override public void setAddressNature(AddressNatureType val) { this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().setAddressNature(AddressNature.getInstance(val.intValue())); this.testerHost.markStore(); } @Override public NumberingPlanMapType getNumberingPlan() { return new NumberingPlanMapType(this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().getNumberingPlan().getIndicator()); } @Override public String getNumberingPlan_Value() { return new NumberingPlanMapType(this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().getNumberingPlan().getIndicator()) .toString(); } @Override public void setNumberingPlan(NumberingPlanMapType val) { this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().setNumberingPlan(NumberingPlan.getInstance(val.intValue())); this.testerHost.markStore(); } @Override public SubscriberIdentityType getSubscriberIdentityType() { return new SubscriberIdentityType( this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().isSubscriberIdentityTypeIsImsi() ? SubscriberIdentityType.VALUE_IMSI : SubscriberIdentityType.VALUE_ISDN); } @Override public String getSubscriberIdentityType_Value() { return new SubscriberIdentityType( this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().isSubscriberIdentityTypeIsImsi() ? SubscriberIdentityType.VALUE_IMSI : SubscriberIdentityType.VALUE_ISDN).toString(); } @Override public void setSubscriberIdentityType(SubscriberIdentityType val) { this.testerHost.getConfigurationData().getTestAtiClientConfigurationData() .setSubscriberIdentityTypeIsImsi(val.intValue() == SubscriberIdentityType.VALUE_IMSI); this.testerHost.markStore(); } @Override public boolean isGetLocationInformation() { return this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().isGetLocationInformation(); } @Override public void setGetLocationInformation(boolean val) { this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().setGetLocationInformation(val); this.testerHost.markStore(); } @Override public boolean isGetSubscriberState() { return this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().isGetSubscriberState(); } @Override public void setGetSubscriberState(boolean val) { this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().setGetSubscriberState(val); this.testerHost.markStore(); } @Override public boolean isGetCurrentLocation() { return this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().isGetCurrentLocation(); } @Override public void setGetCurrentLocation(boolean val) { this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().setGetCurrentLocation(val); this.testerHost.markStore(); } @Override public AtiDomainType getGetRequestedDomain() { DomainType dt = this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().getGetRequestedDomain(); if (dt != null) return new AtiDomainType(dt.getType()); else return new AtiDomainType(AtiDomainType.NO_VALUE); } @Override public String getGetRequestedDomain_Value() { return new AtiDomainType(this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().getGetRequestedDomain().getType()).toString(); } @Override public void setGetRequestedDomain(AtiDomainType val) { if (val.intValue() == AtiDomainType.NO_VALUE) this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().setGetRequestedDomain(null); else this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().setGetRequestedDomain(DomainType.getInstance(val.intValue())); this.testerHost.markStore(); } @Override public boolean isGetImei() { return this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().isGetImei(); } @Override public void setGetImei(boolean val) { this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().setGetImei(val); this.testerHost.markStore(); } @Override public boolean isGetMsClassmark() { return this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().isGetMsClassmark(); } @Override public void setGetMsClassmark(boolean val) { this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().setGetMsClassmark(val); this.testerHost.markStore(); } @Override public boolean isGetMnpRequestedInfo() { return this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().isGetMnpRequestedInfo(); } @Override public void setGetMnpRequestedInfo(boolean val) { this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().setGetMnpRequestedInfo(val); this.testerHost.markStore(); } @Override public String getGsmSCFAddress() { return this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().getGsmScfAddress(); } @Override public void setGsmSCFAddress(String val) { this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().setGsmScfAddress(val); this.testerHost.markStore(); } @Override public void putAddressNature(String val) { AddressNatureType x = AddressNatureType.createInstance(val); if (x != null) this.setAddressNature(x); } @Override public void putNumberingPlan(String val) { NumberingPlanMapType x = NumberingPlanMapType.createInstance(val); if (x != null) this.setNumberingPlan(x); } @Override public void putSubscriberIdentityType(String val) { SubscriberIdentityType x = SubscriberIdentityType.createInstance(val); if (x != null) this.setSubscriberIdentityType(x); } @Override public void putGetRequestedDomain(String val) { AtiDomainType x = AtiDomainType.createInstance(val); if (x != null) this.setGetRequestedDomain(x); } @Override public String getCurrentRequestDef() { return "LastDialog: " + currentRequestDef; } @Override public String getState() { StringBuilder sb = new StringBuilder(); sb.append("<html>"); sb.append(SOURCE_NAME); sb.append(": "); sb.append("<br>Count: countAtiReq-"); sb.append(countAtiReq); sb.append(", countAtiResp-"); sb.append(countAtiResp); sb.append("</html>"); return sb.toString(); } public boolean start() { this.countAtiReq = 0; this.countAtiResp = 0; MAPProvider mapProvider = this.mapMan.getMAPStack().getMAPProvider(); mapProvider.getMAPServiceMobility().acivate(); mapProvider.getMAPServiceMobility().addMAPServiceListener(this); mapProvider.addMAPDialogListener(this); this.testerHost.sendNotif(SOURCE_NAME, "ATI Client has been started", "", Level.INFO); isStarted = true; return true; } @Override public void stop() { MAPProvider mapProvider = this.mapMan.getMAPStack().getMAPProvider(); isStarted = false; mapProvider.getMAPServiceMobility().deactivate(); mapProvider.getMAPServiceMobility().removeMAPServiceListener(this); mapProvider.removeMAPDialogListener(this); this.testerHost.sendNotif(SOURCE_NAME, "ATI Client has been stopped", "", Level.INFO); } @Override public void execute() { } @Override public String closeCurrentDialog() { // TODO Auto-generated method stub return null; } @Override public String performAtiRequest(String address) { if (!isStarted) return "The tester is not started"; if (address == null || address.equals("")) return "Address is empty"; currentRequestDef = ""; return doAtiRequest(address); } private String doAtiRequest(String address) { MAPProvider mapProvider = this.mapMan.getMAPStack().getMAPProvider(); MAPApplicationContextName acn = MAPApplicationContextName.anyTimeEnquiryContext; MAPApplicationContextVersion vers = MAPApplicationContextVersion.version3; MAPApplicationContext mapAppContext = MAPApplicationContext.getInstance(acn, vers); SubscriberIdentity subscriberIdentity; if (this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().isSubscriberIdentityTypeIsImsi()) { IMSI imsi = mapProvider.getMAPParameterFactory().createIMSI(address); subscriberIdentity = mapProvider.getMAPParameterFactory().createSubscriberIdentity(imsi); } else { ISDNAddressString msisdn = mapProvider.getMAPParameterFactory().createISDNAddressString( this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().getAddressNature(), this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().getNumberingPlan(), address); subscriberIdentity = mapProvider.getMAPParameterFactory().createSubscriberIdentity(msisdn); } RequestedInfo requestedInfo = mapProvider.getMAPParameterFactory().createRequestedInfo( this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().isGetLocationInformation(), this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().isGetSubscriberState(), null, this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().isGetCurrentLocation(), this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().getGetRequestedDomain(), this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().isGetImei(), this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().isGetMsClassmark(), this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().isGetMnpRequestedInfo()); ISDNAddressString gsmSCFAddress = mapProvider.getMAPParameterFactory().createISDNAddressString( this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().getAddressNature(), this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().getNumberingPlan(), this.testerHost.getConfigurationData().getTestAtiClientConfigurationData().getGsmScfAddress()); try { MAPDialogMobility curDialog = mapProvider.getMAPServiceMobility().createNewDialog(mapAppContext, this.mapMan.createOrigAddress(), null, this.mapMan.createDestAddress(address, this.testerHost.getConfigurationData().getTestSmsServerConfigurationData().getHlrSsn()), null); curDialog.addAnyTimeInterrogationRequest(subscriberIdentity, requestedInfo, gsmSCFAddress, null); curDialog.send(); String mtData = createAtiReqData(curDialog.getLocalDialogId(), address); currentRequestDef += "Sent AtiRequest;"; this.countAtiReq++; this.testerHost.sendNotif(SOURCE_NAME, "Sent: AtiRequest: " + address, mtData, Level.DEBUG); return "AtiRequest has been sent"; } catch (MAPException ex) { return "Exception when sending AtiRequest: " + ex.toString(); } } private String createAtiReqData(long dialogId, String address) { StringBuilder sb = new StringBuilder(); sb.append("dialogId="); sb.append(dialogId); sb.append(", address=\""); sb.append(address); sb.append("\""); return sb.toString(); } @Override public void onAnyTimeInterrogationResponse(AnyTimeInterrogationResponse ind) { if (!isStarted) return; this.countAtiResp++; MAPDialogMobility curDialog = ind.getMAPDialog(); long invokeId = curDialog.getLocalDialogId(); currentRequestDef += "Rsvd AtiResp;"; String uData = this.createAtiRespData(invokeId, ind); this.testerHost.sendNotif(SOURCE_NAME, "Rcvd: atiResp", uData, Level.DEBUG); } public void onAnyTimeSubscriptionInterrogationRequest(AnyTimeSubscriptionInterrogationRequest request) { } public void onAnyTimeSubscriptionInterrogationResponse(AnyTimeSubscriptionInterrogationResponse response) { } private String createAtiRespData(long dialogId, AnyTimeInterrogationResponse ind) { StringBuilder sb = new StringBuilder(); sb.append("dialogId="); sb.append(dialogId); sb.append(", ind=\""); sb.append(ind); sb.append("\""); return sb.toString(); } @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 onActivateTraceModeRequest_Mobility(ActivateTraceModeRequest_Mobility arg0) { // TODO Auto-generated method stub } @Override public void onActivateTraceModeResponse_Mobility(ActivateTraceModeResponse_Mobility arg0) { // TODO Auto-generated method stub } @Override public void onAnyTimeInterrogationRequest(AnyTimeInterrogationRequest arg0) { // TODO Auto-generated method stub } @Override public void onCancelLocationRequest(CancelLocationRequest arg0) { // TODO Auto-generated method stub } @Override public void onCancelLocationResponse(CancelLocationResponse arg0) { // TODO Auto-generated method stub } @Override public void onCheckImeiRequest(CheckImeiRequest arg0) { // TODO Auto-generated method stub } @Override public void onCheckImeiResponse(CheckImeiResponse arg0) { // TODO Auto-generated method stub } @Override public void onDeleteSubscriberDataRequest(DeleteSubscriberDataRequest arg0) { // TODO Auto-generated method stub } @Override public void onDeleteSubscriberDataResponse(DeleteSubscriberDataResponse arg0) { // TODO Auto-generated method stub } @Override public void onForwardCheckSSIndicationRequest(ForwardCheckSSIndicationRequest arg0) { // TODO Auto-generated method stub } @Override public void onInsertSubscriberDataRequest(InsertSubscriberDataRequest arg0) { // TODO Auto-generated method stub } @Override public void onInsertSubscriberDataResponse(InsertSubscriberDataResponse arg0) { // TODO Auto-generated method stub } @Override public void onProvideSubscriberInfoRequest(ProvideSubscriberInfoRequest arg0) { // TODO Auto-generated method stub } @Override public void onProvideSubscriberInfoResponse(ProvideSubscriberInfoResponse arg0) { // TODO Auto-generated method stub } @Override public void onPurgeMSRequest(PurgeMSRequest arg0) { // TODO Auto-generated method stub } @Override public void onPurgeMSResponse(PurgeMSResponse arg0) { // TODO Auto-generated method stub } @Override public void onResetRequest(ResetRequest arg0) { // TODO Auto-generated method stub } @Override public void onRestoreDataRequest(RestoreDataRequest arg0) { // TODO Auto-generated method stub } @Override public void onRestoreDataResponse(RestoreDataResponse arg0) { // TODO Auto-generated method stub } @Override public void onSendAuthenticationInfoRequest(SendAuthenticationInfoRequest arg0) { // TODO Auto-generated method stub } @Override public void onSendAuthenticationInfoResponse(SendAuthenticationInfoResponse arg0) { // TODO Auto-generated method stub } @Override public void onSendIdentificationRequest(SendIdentificationRequest arg0) { // TODO Auto-generated method stub } @Override public void onSendIdentificationResponse(SendIdentificationResponse arg0) { // TODO Auto-generated method stub } @Override public void onUpdateGprsLocationRequest(UpdateGprsLocationRequest arg0) { // TODO Auto-generated method stub } @Override public void onUpdateGprsLocationResponse(UpdateGprsLocationResponse arg0) { // TODO Auto-generated method stub } @Override public void onUpdateLocationRequest(UpdateLocationRequest arg0) { // TODO Auto-generated method stub } @Override public void onUpdateLocationResponse(UpdateLocationResponse arg0) { // TODO Auto-generated method stub } @Override public void onAuthenticationFailureReportRequest(AuthenticationFailureReportRequest arg0) { // TODO Auto-generated method stub } @Override public void onAuthenticationFailureReportResponse(AuthenticationFailureReportResponse arg0) { // TODO Auto-generated method stub } }