/*
* 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.map.service.sms;
import org.apache.log4j.Logger;
import org.mobicents.protocols.asn.AsnInputStream;
import org.mobicents.protocols.asn.Tag;
import org.mobicents.protocols.ss7.map.MAPDialogImpl;
import org.mobicents.protocols.ss7.map.MAPProviderImpl;
import org.mobicents.protocols.ss7.map.MAPServiceBaseImpl;
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.MAPException;
import org.mobicents.protocols.ss7.map.api.MAPOperationCode;
import org.mobicents.protocols.ss7.map.api.MAPParsingComponentException;
import org.mobicents.protocols.ss7.map.api.MAPParsingComponentExceptionReason;
import org.mobicents.protocols.ss7.map.api.MAPServiceListener;
import org.mobicents.protocols.ss7.map.api.dialog.ServingCheckData;
import org.mobicents.protocols.ss7.map.api.dialog.ServingCheckResult;
import org.mobicents.protocols.ss7.map.api.primitives.AddressString;
import org.mobicents.protocols.ss7.map.api.service.sms.MAPDialogSms;
import org.mobicents.protocols.ss7.map.api.service.sms.MAPServiceSms;
import org.mobicents.protocols.ss7.map.api.service.sms.MAPServiceSmsListener;
import org.mobicents.protocols.ss7.map.dialog.ServingCheckDataImpl;
import org.mobicents.protocols.ss7.sccp.parameter.SccpAddress;
import org.mobicents.protocols.ss7.tcap.api.tc.dialog.Dialog;
import org.mobicents.protocols.ss7.tcap.asn.ApplicationContextName;
import org.mobicents.protocols.ss7.tcap.asn.TcapFactory;
import org.mobicents.protocols.ss7.tcap.asn.comp.ComponentType;
import org.mobicents.protocols.ss7.tcap.asn.comp.Invoke;
import org.mobicents.protocols.ss7.tcap.asn.comp.OperationCode;
import org.mobicents.protocols.ss7.tcap.asn.comp.Parameter;
/**
*
* @author sergey vetyutnev
*
*/
public class MAPServiceSmsImpl extends MAPServiceBaseImpl implements MAPServiceSms {
protected Logger loger = Logger.getLogger(MAPServiceSmsImpl.class);
public MAPServiceSmsImpl(MAPProviderImpl mapProviderImpl) {
super(mapProviderImpl);
}
/*
* Creating a new outgoing MAP SMS dialog and adding it to the MAPProvider.dialog collection
*/
public MAPDialogSms createNewDialog(MAPApplicationContext appCntx, SccpAddress origAddress, AddressString origReference, SccpAddress destAddress,
AddressString destReference) throws MAPException {
return this.createNewDialog(appCntx, origAddress, origReference, destAddress, destReference, null);
}
public MAPDialogSms createNewDialog(MAPApplicationContext appCntx, SccpAddress origAddress, AddressString origReference, SccpAddress destAddress,
AddressString destReference, Long localTrId) throws MAPException {
// We cannot create a dialog if the service is not activated
if (!this.isActivated())
throw new MAPException("Cannot create MAPDialogSms because MAPServiceSms is not activated");
Dialog tcapDialog = this.createNewTCAPDialog(origAddress, destAddress, localTrId);
MAPDialogSmsImpl dialog = new MAPDialogSmsImpl(appCntx, tcapDialog, this.mapProviderImpl, this, origReference,
destReference);
this.putMAPDialogIntoCollection(dialog);
return dialog;
}
@Override
protected MAPDialogImpl createNewDialogIncoming(MAPApplicationContext appCntx, Dialog tcapDialog) {
return new MAPDialogSmsImpl(appCntx, tcapDialog, this.mapProviderImpl, this, null, null);
}
public void addMAPServiceListener(MAPServiceSmsListener mapServiceListener) {
super.addMAPServiceListener(mapServiceListener);
}
public void removeMAPServiceListener(MAPServiceSmsListener mapServiceListener) {
super.removeMAPServiceListener(mapServiceListener);
}
public ServingCheckData isServingService(MAPApplicationContext dialogApplicationContext) {
MAPApplicationContextName ctx = dialogApplicationContext.getApplicationContextName();
int vers = dialogApplicationContext.getApplicationContextVersion().getVersion();
switch (ctx) {
case shortMsgAlertContext:
if (vers >= 1 && vers <= 2) {
return new ServingCheckDataImpl(ServingCheckResult.AC_Serving);
} else if (vers > 2) {
long[] altOid = dialogApplicationContext.getOID();
altOid[7] = 2;
ApplicationContextName alt = TcapFactory.createApplicationContextName(altOid);
return new ServingCheckDataImpl(ServingCheckResult.AC_VersionIncorrect, alt);
} else {
return new ServingCheckDataImpl(ServingCheckResult.AC_VersionIncorrect);
}
case shortMsgMORelayContext:
case shortMsgGatewayContext:
if (vers >= 1 && vers <= 3) {
return new ServingCheckDataImpl(ServingCheckResult.AC_Serving);
} else if (vers > 3) {
long[] altOid = dialogApplicationContext.getOID();
altOid[7] = 3;
ApplicationContextName alt = TcapFactory.createApplicationContextName(altOid);
return new ServingCheckDataImpl(ServingCheckResult.AC_VersionIncorrect, alt);
} else {
return new ServingCheckDataImpl(ServingCheckResult.AC_VersionIncorrect);
}
case shortMsgMTRelayContext:
if (vers >= 2 && vers <= 3) {
return new ServingCheckDataImpl(ServingCheckResult.AC_Serving);
} else if (vers > 3) {
long[] altOid = dialogApplicationContext.getOID();
altOid[7] = 3;
ApplicationContextName alt = TcapFactory.createApplicationContextName(altOid);
return new ServingCheckDataImpl(ServingCheckResult.AC_VersionIncorrect, alt);
} else {
return new ServingCheckDataImpl(ServingCheckResult.AC_VersionIncorrect);
}
case mwdMngtContext:
if (vers >= 1 && vers <= 3) {
return new ServingCheckDataImpl(ServingCheckResult.AC_Serving);
} else if (vers > 3) {
long[] altOid = dialogApplicationContext.getOID();
altOid[7] = 3;
ApplicationContextName alt = TcapFactory.createApplicationContextName(altOid);
return new ServingCheckDataImpl(ServingCheckResult.AC_VersionIncorrect, alt);
} else {
return new ServingCheckDataImpl(ServingCheckResult.AC_VersionIncorrect);
}
}
return new ServingCheckDataImpl(ServingCheckResult.AC_NotServing);
}
@Override
public MAPApplicationContext getMAPv1ApplicationContext(int operationCode, Invoke invoke) {
switch (operationCode) {
case MAPOperationCode.mo_forwardSM:
return MAPApplicationContext.getInstance(MAPApplicationContextName.shortMsgMORelayContext,
MAPApplicationContextVersion.version1);
case MAPOperationCode.alertServiceCentreWithoutResult:
return MAPApplicationContext.getInstance(MAPApplicationContextName.shortMsgAlertContext,
MAPApplicationContextVersion.version1);
case MAPOperationCode.sendRoutingInfoForSM:
return MAPApplicationContext.getInstance(MAPApplicationContextName.shortMsgGatewayContext,
MAPApplicationContextVersion.version1);
case MAPOperationCode.reportSM_DeliveryStatus:
return MAPApplicationContext.getInstance(MAPApplicationContextName.shortMsgGatewayContext,
MAPApplicationContextVersion.version1);
case MAPOperationCode.noteSubscriberPresent:
return MAPApplicationContext.getInstance(MAPApplicationContextName.mwdMngtContext,
MAPApplicationContextVersion.version1);
}
return null;
}
@Override
public void processComponent(ComponentType compType, OperationCode oc, Parameter parameter, MAPDialog mapDialog,
Long invokeId, Long linkedId, Invoke linkedInvoke) throws MAPParsingComponentException {
// if an application-context-name different from version 1 is
// received in a syntactically correct TC-
// BEGIN indication primitive but is not acceptable from a load
// control point of view, the MAP PM
// shall ignore this dialogue request. The MAP-user is not informed.
// if (compType == ComponentType.Invoke && this.mapProviderImpl.isCongested()) {
// // we agree all sms services when congestion
// }
MAPDialogSmsImpl mapDialogSmsImpl = (MAPDialogSmsImpl) mapDialog;
Long ocValue = oc.getLocalOperationCode();
if (ocValue == null)
new MAPParsingComponentException("", MAPParsingComponentExceptionReason.UnrecognizedOperation);
MAPApplicationContextName acn = mapDialog.getApplicationContext().getApplicationContextName();
int vers = mapDialog.getApplicationContext().getApplicationContextVersion().getVersion();
int ocValueInt = (int) (long) ocValue;
switch (ocValueInt) {
case MAPOperationCode.mo_forwardSM:
if (acn == MAPApplicationContextName.shortMsgMORelayContext
|| acn == MAPApplicationContextName.shortMsgMTRelayContext && vers == 2) {
if (vers >= 3) {
if (compType == ComponentType.Invoke)
this.moForwardShortMessageRequest(parameter, mapDialogSmsImpl, invokeId);
else
this.moForwardShortMessageResponse(parameter, mapDialogSmsImpl, invokeId,
compType == ComponentType.ReturnResult);
} else {
if (compType == ComponentType.Invoke)
this.forwardShortMessageRequest(parameter, mapDialogSmsImpl, invokeId);
else
this.forwardShortMessageResponse(parameter, mapDialogSmsImpl, invokeId,
compType == ComponentType.ReturnResult);
}
}
break;
case MAPOperationCode.mt_forwardSM:
if (acn == MAPApplicationContextName.shortMsgMTRelayContext && vers >= 3) {
if (compType == ComponentType.Invoke)
this.mtForwardShortMessageRequest(parameter, mapDialogSmsImpl, invokeId);
else
this.mtForwardShortMessageResponse(parameter, mapDialogSmsImpl, invokeId,
compType == ComponentType.ReturnResult);
}
break;
case MAPOperationCode.sendRoutingInfoForSM:
if (acn == MAPApplicationContextName.shortMsgGatewayContext) {
if (compType == ComponentType.Invoke)
this.sendRoutingInfoForSMRequest(parameter, mapDialogSmsImpl, invokeId);
else
this.sendRoutingInfoForSMResponse(parameter, mapDialogSmsImpl, invokeId,
compType == ComponentType.ReturnResult);
}
break;
case MAPOperationCode.reportSM_DeliveryStatus:
if (acn == MAPApplicationContextName.shortMsgGatewayContext) {
if (compType == ComponentType.Invoke)
this.reportSMDeliveryStatusRequest(parameter, mapDialogSmsImpl, invokeId);
else
this.reportSMDeliveryStatusResponse(parameter, mapDialogSmsImpl, invokeId, vers,
compType == ComponentType.ReturnResult);
}
break;
case MAPOperationCode.informServiceCentre:
if (acn == MAPApplicationContextName.shortMsgGatewayContext && vers >= 2) {
if (compType == ComponentType.Invoke)
this.informServiceCentreRequest(parameter, mapDialogSmsImpl, invokeId);
}
break;
case MAPOperationCode.alertServiceCentre:
if (acn == MAPApplicationContextName.shortMsgAlertContext && vers >= 2) {
if (compType == ComponentType.Invoke)
this.alertServiceCentreRequest(parameter, mapDialogSmsImpl, invokeId, ocValueInt);
else
this.alertServiceCentreResponse(parameter, mapDialogSmsImpl, invokeId,
compType == ComponentType.ReturnResult);
}
break;
case MAPOperationCode.alertServiceCentreWithoutResult:
if (acn == MAPApplicationContextName.shortMsgAlertContext && vers == 1) {
if (compType == ComponentType.Invoke)
this.alertServiceCentreRequest(parameter, mapDialogSmsImpl, invokeId, ocValueInt);
}
break;
case MAPOperationCode.readyForSM:
if (acn == MAPApplicationContextName.mwdMngtContext && vers >= 2) {
if (compType == ComponentType.Invoke)
this.readyForSMRequest(parameter, mapDialogSmsImpl, invokeId, ocValueInt);
else
this.readyForSMResponse(parameter, mapDialogSmsImpl, invokeId, compType == ComponentType.ReturnResult);
}
break;
case MAPOperationCode.noteSubscriberPresent:
if (acn == MAPApplicationContextName.mwdMngtContext && vers == 1) {
if (compType == ComponentType.Invoke)
this.noteSubscriberPresentRequest(parameter, mapDialogSmsImpl, invokeId, ocValueInt);
}
break;
default:
throw new MAPParsingComponentException("MAPServiceSms: unknown incoming operation code: " + ocValueInt,
MAPParsingComponentExceptionReason.UnrecognizedOperation);
}
}
private void forwardShortMessageRequest(Parameter parameter, MAPDialogSmsImpl mapDialogImpl, Long invokeId)
throws MAPParsingComponentException {
if (parameter == null)
throw new MAPParsingComponentException(
"Error while decoding forwardShortMessageRequest: Parameter is mandatory but not found",
MAPParsingComponentExceptionReason.MistypedParameter);
if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive())
throw new MAPParsingComponentException(
"Error while decoding moForwardShortMessageRequest: Bad tag or tagClass or parameter is primitive, received tag="
+ parameter.getTag(), MAPParsingComponentExceptionReason.MistypedParameter);
byte[] buf = parameter.getData();
AsnInputStream ais = new AsnInputStream(buf);
ForwardShortMessageRequestImpl ind = new ForwardShortMessageRequestImpl();
ind.decodeData(ais, buf.length);
ind.setInvokeId(invokeId);
ind.setMAPDialog(mapDialogImpl);
for (MAPServiceListener serLis : this.serviceListeners) {
try {
serLis.onMAPMessage(ind);
((MAPServiceSmsListener) serLis).onForwardShortMessageRequest(ind);
} catch (Exception e) {
loger.error("Error processing forwardShortMessageRequest: " + e.getMessage(), e);
}
}
}
private void forwardShortMessageResponse(Parameter parameter, MAPDialogSmsImpl mapDialogImpl, Long invokeId,
boolean returnResultNotLast) throws MAPParsingComponentException {
ForwardShortMessageResponseImpl ind = new ForwardShortMessageResponseImpl();
ind.setInvokeId(invokeId);
ind.setMAPDialog(mapDialogImpl);
ind.setReturnResultNotLast(returnResultNotLast);
for (MAPServiceListener serLis : this.serviceListeners) {
try {
serLis.onMAPMessage(ind);
((MAPServiceSmsListener) serLis).onForwardShortMessageResponse(ind);
} catch (Exception e) {
loger.error("Error processing forwardShortMessageResponse: " + e.getMessage(), e);
}
}
}
private void moForwardShortMessageRequest(Parameter parameter, MAPDialogSmsImpl mapDialogImpl, Long invokeId)
throws MAPParsingComponentException {
if (parameter == null)
throw new MAPParsingComponentException(
"Error while decoding moForwardShortMessageRequest: Parameter is mandatory but not found",
MAPParsingComponentExceptionReason.MistypedParameter);
if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive())
throw new MAPParsingComponentException(
"Error while decoding moForwardShortMessageRequest: Bad tag or tagClass or parameter is primitive, received tag="
+ parameter.getTag(), MAPParsingComponentExceptionReason.MistypedParameter);
byte[] buf = parameter.getData();
AsnInputStream ais = new AsnInputStream(buf);
MoForwardShortMessageRequestImpl ind = new MoForwardShortMessageRequestImpl();
ind.decodeData(ais, buf.length);
ind.setInvokeId(invokeId);
ind.setMAPDialog(mapDialogImpl);
for (MAPServiceListener serLis : this.serviceListeners) {
try {
serLis.onMAPMessage(ind);
((MAPServiceSmsListener) serLis).onMoForwardShortMessageRequest(ind);
} catch (Exception e) {
loger.error("Error processing onMoForwardShortMessageIndication: " + e.getMessage(), e);
}
}
}
private void moForwardShortMessageResponse(Parameter parameter, MAPDialogSmsImpl mapDialogImpl, Long invokeId,
boolean returnResultNotLast) throws MAPParsingComponentException {
MoForwardShortMessageResponseImpl ind = new MoForwardShortMessageResponseImpl();
if (parameter != null) {
if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive())
throw new MAPParsingComponentException(
"Error while decoding moForwardShortMessageResponse: Bad tag or tagClass or parameter is primitive, received tag="
+ parameter.getTag(), MAPParsingComponentExceptionReason.MistypedParameter);
byte[] buf = parameter.getData();
AsnInputStream ais = new AsnInputStream(buf);
ind.decodeData(ais, buf.length);
}
ind.setInvokeId(invokeId);
ind.setMAPDialog(mapDialogImpl);
ind.setReturnResultNotLast(returnResultNotLast);
for (MAPServiceListener serLis : this.serviceListeners) {
try {
serLis.onMAPMessage(ind);
((MAPServiceSmsListener) serLis).onMoForwardShortMessageResponse(ind);
} catch (Exception e) {
loger.error("Error processing onMoForwardShortMessageRespIndication: " + e.getMessage(), e);
}
}
}
private void mtForwardShortMessageRequest(Parameter parameter, MAPDialogSmsImpl mapDialogImpl, Long invokeId)
throws MAPParsingComponentException {
if (parameter == null)
throw new MAPParsingComponentException(
"Error while decoding mtForwardShortMessageRequest: Parameter is mandatory but not found",
MAPParsingComponentExceptionReason.MistypedParameter);
if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive())
throw new MAPParsingComponentException(
"Error while decoding mtForwardShortMessageRequest: Bad tag or tagClass or parameter is primitive, received tag="
+ parameter.getTag(), MAPParsingComponentExceptionReason.MistypedParameter);
byte[] buf = parameter.getData();
AsnInputStream ais = new AsnInputStream(buf);
MtForwardShortMessageRequestImpl ind = new MtForwardShortMessageRequestImpl();
ind.decodeData(ais, buf.length);
ind.setInvokeId(invokeId);
ind.setMAPDialog(mapDialogImpl);
for (MAPServiceListener serLis : this.serviceListeners) {
try {
serLis.onMAPMessage(ind);
((MAPServiceSmsListener) serLis).onMtForwardShortMessageRequest(ind);
} catch (Exception e) {
loger.error("Error processing onMtForwardShortMessageIndication: " + e.getMessage(), e);
}
}
}
private void mtForwardShortMessageResponse(Parameter parameter, MAPDialogSmsImpl mapDialogImpl, Long invokeId,
boolean returnResultNotLast) throws MAPParsingComponentException {
MtForwardShortMessageResponseImpl ind = new MtForwardShortMessageResponseImpl();
if (parameter != null) {
if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive())
throw new MAPParsingComponentException(
"Error while decoding mtForwardShortMessageResponse: Bad tag or tagClass or parameter is primitive, received tag="
+ parameter.getTag(), MAPParsingComponentExceptionReason.MistypedParameter);
byte[] buf = parameter.getData();
AsnInputStream ais = new AsnInputStream(buf);
ind.decodeData(ais, buf.length);
}
ind.setInvokeId(invokeId);
ind.setMAPDialog(mapDialogImpl);
ind.setReturnResultNotLast(returnResultNotLast);
for (MAPServiceListener serLis : this.serviceListeners) {
try {
serLis.onMAPMessage(ind);
((MAPServiceSmsListener) serLis).onMtForwardShortMessageResponse(ind);
} catch (Exception e) {
loger.error("Error processing onMtForwardShortMessageRespIndication: " + e.getMessage(), e);
}
}
}
private void sendRoutingInfoForSMRequest(Parameter parameter, MAPDialogSmsImpl mapDialogImpl, Long invokeId)
throws MAPParsingComponentException {
if (parameter == null)
throw new MAPParsingComponentException(
"Error while decoding sendRoutingInfoForSMRequest: Parameter is mandatory but not found",
MAPParsingComponentExceptionReason.MistypedParameter);
if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive())
throw new MAPParsingComponentException(
"Error while decoding sendRoutingInfoForSMRequest: Bad tag or tagClass or parameter is primitive, received tag="
+ parameter.getTag(), MAPParsingComponentExceptionReason.MistypedParameter);
byte[] buf = parameter.getData();
AsnInputStream ais = new AsnInputStream(buf);
SendRoutingInfoForSMRequestImpl ind = new SendRoutingInfoForSMRequestImpl();
ind.decodeData(ais, buf.length);
ind.setInvokeId(invokeId);
ind.setMAPDialog(mapDialogImpl);
for (MAPServiceListener serLis : this.serviceListeners) {
try {
serLis.onMAPMessage(ind);
((MAPServiceSmsListener) serLis).onSendRoutingInfoForSMRequest(ind);
} catch (Exception e) {
loger.error("Error processing onSendRoutingInfoForSMIndication: " + e.getMessage(), e);
}
}
}
private void sendRoutingInfoForSMResponse(Parameter parameter, MAPDialogSmsImpl mapDialogImpl, Long invokeId,
boolean returnResultNotLast) throws MAPParsingComponentException {
SendRoutingInfoForSMResponseImpl ind = new SendRoutingInfoForSMResponseImpl();
if (parameter == null)
throw new MAPParsingComponentException(
"Error while decoding sendRoutingInfoForSMResponse: Parameter is mandatory but not found",
MAPParsingComponentExceptionReason.MistypedParameter);
if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive())
throw new MAPParsingComponentException(
"Error while decoding sendRoutingInfoForSMResponse: Bad tag or tagClass or parameter is primitive, received tag="
+ parameter.getTag(), MAPParsingComponentExceptionReason.MistypedParameter);
byte[] buf = parameter.getData();
AsnInputStream ais = new AsnInputStream(buf);
ind.decodeData(ais, buf.length);
ind.setInvokeId(invokeId);
ind.setMAPDialog(mapDialogImpl);
ind.setReturnResultNotLast(returnResultNotLast);
for (MAPServiceListener serLis : this.serviceListeners) {
try {
serLis.onMAPMessage(ind);
((MAPServiceSmsListener) serLis).onSendRoutingInfoForSMResponse(ind);
} catch (Exception e) {
loger.error("Error processing onSendRoutingInfoForSMRespIndication: " + e.getMessage(), e);
}
}
}
private void reportSMDeliveryStatusRequest(Parameter parameter, MAPDialogSmsImpl mapDialogImpl, Long invokeId)
throws MAPParsingComponentException {
if (parameter == null)
throw new MAPParsingComponentException(
"Error while decoding sendRoutingInfoForSMRequest: Parameter is mandatory but not found",
MAPParsingComponentExceptionReason.MistypedParameter);
if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive())
throw new MAPParsingComponentException(
"Error while decoding sendRoutingInfoForSMRequest: Bad tag or tagClass or parameter is primitive, received tag="
+ parameter.getTag(), MAPParsingComponentExceptionReason.MistypedParameter);
byte[] buf = parameter.getData();
AsnInputStream ais = new AsnInputStream(buf);
ReportSMDeliveryStatusRequestImpl ind = new ReportSMDeliveryStatusRequestImpl(mapDialogImpl.getApplicationContext()
.getApplicationContextVersion().getVersion());
ind.decodeData(ais, buf.length);
ind.setInvokeId(invokeId);
ind.setMAPDialog(mapDialogImpl);
for (MAPServiceListener serLis : this.serviceListeners) {
try {
serLis.onMAPMessage(ind);
((MAPServiceSmsListener) serLis).onReportSMDeliveryStatusRequest(ind);
} catch (Exception e) {
loger.error("Error processing onReportSMDeliveryStatusIndication: " + e.getMessage(), e);
}
}
}
private void reportSMDeliveryStatusResponse(Parameter parameter, MAPDialogSmsImpl mapDialogImpl, Long invokeId,
long mapProtocolVersion, boolean returnResultNotLast) throws MAPParsingComponentException {
ReportSMDeliveryStatusResponseImpl ind = new ReportSMDeliveryStatusResponseImpl(mapProtocolVersion);
if (parameter != null) {
if (mapProtocolVersion >= 3) {
if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL
|| parameter.isPrimitive())
throw new MAPParsingComponentException(
"Error while decoding reportSMDeliveryStatusResponse: Bad tag or tagClass or parameter is primitive, received tag="
+ parameter.getTag(), MAPParsingComponentExceptionReason.MistypedParameter);
} else {
if (parameter.getTag() != Tag.STRING_OCTET || parameter.getTagClass() != Tag.CLASS_UNIVERSAL
|| !parameter.isPrimitive())
throw new MAPParsingComponentException(
"Error while decoding reportSMDeliveryStatusResponse: Bad tag or tagClass or parameter is primitive, received tag="
+ parameter.getTag(), MAPParsingComponentExceptionReason.MistypedParameter);
}
byte[] buf = parameter.getData();
AsnInputStream ais = new AsnInputStream(buf);
ind.decodeData(ais, buf.length);
}
ind.setInvokeId(invokeId);
ind.setMAPDialog(mapDialogImpl);
ind.setReturnResultNotLast(returnResultNotLast);
for (MAPServiceListener serLis : this.serviceListeners) {
try {
serLis.onMAPMessage(ind);
((MAPServiceSmsListener) serLis).onReportSMDeliveryStatusResponse(ind);
} catch (Exception e) {
loger.error("Error processing onReportSMDeliveryStatusRespIndication: " + e.getMessage(), e);
}
}
}
private void informServiceCentreRequest(Parameter parameter, MAPDialogSmsImpl mapDialogImpl, Long invokeId)
throws MAPParsingComponentException {
if (parameter == null)
throw new MAPParsingComponentException(
"Error while decoding informServiceCentreRequest: Parameter is mandatory but not found",
MAPParsingComponentExceptionReason.MistypedParameter);
if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive())
throw new MAPParsingComponentException(
"Error while decoding informServiceCentreRequest: Bad tag or tagClass or parameter is primitive, received tag="
+ parameter.getTag(), MAPParsingComponentExceptionReason.MistypedParameter);
InformServiceCentreRequestImpl ind = new InformServiceCentreRequestImpl();
byte[] buf = parameter.getData();
AsnInputStream ais = new AsnInputStream(buf);
ind.decodeData(ais, buf.length);
ind.setInvokeId(invokeId);
ind.setMAPDialog(mapDialogImpl);
for (MAPServiceListener serLis : this.serviceListeners) {
try {
serLis.onMAPMessage(ind);
((MAPServiceSmsListener) serLis).onInformServiceCentreRequest(ind);
} catch (Exception e) {
loger.error("Error processing onInformServiceCentreIndication: " + e.getMessage(), e);
}
}
}
private void alertServiceCentreRequest(Parameter parameter, MAPDialogSmsImpl mapDialogImpl, Long invokeId, int operationCode)
throws MAPParsingComponentException {
if (parameter == null)
throw new MAPParsingComponentException(
"Error while decoding alertServiceCentreRequest: Parameter is mandatory but not found",
MAPParsingComponentExceptionReason.MistypedParameter);
if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive())
throw new MAPParsingComponentException(
"Error while decoding alertServiceCentreRequest: Bad tag or tagClass or parameter is primitive, received tag="
+ parameter.getTag(), MAPParsingComponentExceptionReason.MistypedParameter);
AlertServiceCentreRequestImpl ind = new AlertServiceCentreRequestImpl(operationCode);
byte[] buf = parameter.getData();
AsnInputStream ais = new AsnInputStream(buf);
ind.decodeData(ais, buf.length);
ind.setInvokeId(invokeId);
ind.setMAPDialog(mapDialogImpl);
for (MAPServiceListener serLis : this.serviceListeners) {
try {
serLis.onMAPMessage(ind);
((MAPServiceSmsListener) serLis).onAlertServiceCentreRequest(ind);
} catch (Exception e) {
loger.error("Error processing onAlertServiceCentreIndication: " + e.getMessage(), e);
}
}
}
private void alertServiceCentreResponse(Parameter parameter, MAPDialogSmsImpl mapDialogImpl, Long invokeId,
boolean returnResultNotLast) throws MAPParsingComponentException {
AlertServiceCentreResponseImpl ind = new AlertServiceCentreResponseImpl();
ind.setInvokeId(invokeId);
ind.setMAPDialog(mapDialogImpl);
ind.setReturnResultNotLast(returnResultNotLast);
for (MAPServiceListener serLis : this.serviceListeners) {
try {
serLis.onMAPMessage(ind);
((MAPServiceSmsListener) serLis).onAlertServiceCentreResponse(ind);
} catch (Exception e) {
loger.error("Error processing onAlertServiceCentreRespIndication: " + e.getMessage(), e);
}
}
}
private void readyForSMRequest(Parameter parameter, MAPDialogSmsImpl mapDialogImpl, Long invokeId, int operationCode)
throws MAPParsingComponentException {
if (parameter == null)
throw new MAPParsingComponentException(
"Error while decoding readyForSMRequest: Parameter is mandatory but not found",
MAPParsingComponentExceptionReason.MistypedParameter);
if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive())
throw new MAPParsingComponentException(
"Error while decoding readyForSMRequest: Bad tag or tagClass or parameter is primitive, received tag="
+ parameter.getTag(), MAPParsingComponentExceptionReason.MistypedParameter);
ReadyForSMRequestImpl ind = new ReadyForSMRequestImpl();
byte[] buf = parameter.getData();
AsnInputStream ais = new AsnInputStream(buf);
ind.decodeData(ais, buf.length);
ind.setInvokeId(invokeId);
ind.setMAPDialog(mapDialogImpl);
for (MAPServiceListener serLis : this.serviceListeners) {
try {
serLis.onMAPMessage(ind);
((MAPServiceSmsListener) serLis).onReadyForSMRequest(ind);
} catch (Exception e) {
loger.error("Error processing onReadyForSMRequest: " + e.getMessage(), e);
}
}
}
private void readyForSMResponse(Parameter parameter, MAPDialogSmsImpl mapDialogImpl, Long invokeId,
boolean returnResultNotLast) throws MAPParsingComponentException {
ReadyForSMResponseImpl ind = new ReadyForSMResponseImpl();
if (parameter != null) {
if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive())
throw new MAPParsingComponentException(
"Error while decoding readyForSMResponse: Bad tag or tagClass or parameter is primitive, received tag="
+ parameter.getTag(), MAPParsingComponentExceptionReason.MistypedParameter);
byte[] buf = parameter.getData();
AsnInputStream ais = new AsnInputStream(buf);
ind.decodeData(ais, buf.length);
}
ind.setInvokeId(invokeId);
ind.setMAPDialog(mapDialogImpl);
ind.setReturnResultNotLast(returnResultNotLast);
for (MAPServiceListener serLis : this.serviceListeners) {
try {
serLis.onMAPMessage(ind);
((MAPServiceSmsListener) serLis).onReadyForSMResponse(ind);
} catch (Exception e) {
loger.error("Error processing onReadyForSMResponse: " + e.getMessage(), e);
}
}
}
private void noteSubscriberPresentRequest(Parameter parameter, MAPDialogSmsImpl mapDialogImpl, Long invokeId, int operationCode)
throws MAPParsingComponentException {
if (parameter == null)
throw new MAPParsingComponentException("Error while decoding noteSubscriberPresentRequest: Parameter is mandatory but not found",
MAPParsingComponentExceptionReason.MistypedParameter);
if (parameter.getTag() != Tag.STRING_OCTET || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || !parameter.isPrimitive())
throw new MAPParsingComponentException(
"Error while decoding noteSubscriberPresentRequest: Bad tag or tagClass or parameter is not primitive, received tag=" + parameter.getTag(),
MAPParsingComponentExceptionReason.MistypedParameter);
NoteSubscriberPresentRequestImpl ind = new NoteSubscriberPresentRequestImpl();
byte[] buf = parameter.getData();
AsnInputStream ais = new AsnInputStream(buf);
ind.decodeData(ais, buf.length);
ind.setInvokeId(invokeId);
ind.setMAPDialog(mapDialogImpl);
for (MAPServiceListener serLis : this.serviceListeners) {
try {
serLis.onMAPMessage(ind);
((MAPServiceSmsListener) serLis).onNoteSubscriberPresentRequest(ind);
} catch (Exception e) {
loger.error("Error processing onNoteSubscriberPresentRequest: " + e.getMessage(), e);
}
}
}
}