/* * JBoss, Home of Professional Open Source * Copyright 2011, Red Hat, Inc. 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.cap.service.gprs; import org.apache.log4j.Logger; import org.mobicents.protocols.asn.AsnInputStream; import org.mobicents.protocols.asn.Tag; import org.mobicents.protocols.ss7.cap.CAPDialogImpl; import org.mobicents.protocols.ss7.cap.CAPProviderImpl; import org.mobicents.protocols.ss7.cap.CAPServiceBaseImpl; import org.mobicents.protocols.ss7.cap.api.CAPApplicationContext; import org.mobicents.protocols.ss7.cap.api.CAPDialog; import org.mobicents.protocols.ss7.cap.api.CAPException; import org.mobicents.protocols.ss7.cap.api.CAPOperationCode; import org.mobicents.protocols.ss7.cap.api.CAPParsingComponentException; import org.mobicents.protocols.ss7.cap.api.CAPParsingComponentExceptionReason; import org.mobicents.protocols.ss7.cap.api.CAPServiceListener; import org.mobicents.protocols.ss7.cap.api.dialog.ServingCheckData; import org.mobicents.protocols.ss7.cap.api.dialog.ServingCheckResult; import org.mobicents.protocols.ss7.cap.api.service.gprs.CAPDialogGprs; import org.mobicents.protocols.ss7.cap.api.service.gprs.CAPServiceGprs; import org.mobicents.protocols.ss7.cap.api.service.gprs.CAPServiceGprsListener; import org.mobicents.protocols.ss7.cap.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.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 CAPServiceGprsImpl extends CAPServiceBaseImpl implements CAPServiceGprs { protected Logger loger = Logger.getLogger(CAPServiceGprsImpl.class); public CAPServiceGprsImpl(CAPProviderImpl capProviderImpl) { super(capProviderImpl); } @Override public CAPDialogGprs createNewDialog(CAPApplicationContext appCntx, SccpAddress origAddress, SccpAddress destAddress) throws CAPException { return this.createNewDialog(appCntx, origAddress, destAddress, null); } @Override public CAPDialogGprs createNewDialog(CAPApplicationContext appCntx, SccpAddress origAddress, SccpAddress destAddress, Long localTrId) throws CAPException { // We cannot create a dialog if the service is not activated if (!this.isActivated()) throw new CAPException("Cannot create CAPDialogGprs because CAPServiceGprsl is not activated"); Dialog tcapDialog = this.createNewTCAPDialog(origAddress, destAddress, localTrId); CAPDialogGprsImpl dialog = new CAPDialogGprsImpl(appCntx, tcapDialog, this.capProviderImpl, this); this.putCAPDialogIntoCollection(dialog); return dialog; } @Override public void addCAPServiceListener(CAPServiceGprsListener capServiceListener) { super.addCAPServiceListener(capServiceListener); } @Override public void removeCAPServiceListener(CAPServiceGprsListener capServiceListener) { super.removeCAPServiceListener(capServiceListener); } @Override protected CAPDialogImpl createNewDialogIncoming(CAPApplicationContext appCntx, Dialog tcapDialog) { return new CAPDialogGprsImpl(appCntx, tcapDialog, this.capProviderImpl, this); } @Override public ServingCheckData isServingService(CAPApplicationContext dialogApplicationContext) { switch (dialogApplicationContext) { case CapV3_gprsSSF_gsmSCF: case CapV3_gsmSCF_gprsSSF: return new ServingCheckDataImpl(ServingCheckResult.AC_Serving); } return new ServingCheckDataImpl(ServingCheckResult.AC_NotServing); } @Override public void processComponent(ComponentType compType, OperationCode oc, Parameter parameter, CAPDialog capDialog, Long invokeId, Long linkedId, Invoke linkedInvoke) throws CAPParsingComponentException { CAPDialogGprsImpl capDialogGprsImpl = (CAPDialogGprsImpl) capDialog; Long ocValue = oc.getLocalOperationCode(); if (ocValue == null) new CAPParsingComponentException("", CAPParsingComponentExceptionReason.UnrecognizedOperation); CAPApplicationContext acn = capDialog.getApplicationContext(); int ocValueInt = (int) (long) ocValue; switch (ocValueInt) { case CAPOperationCode.initialDPGPRS: if (acn == CAPApplicationContext.CapV3_gprsSSF_gsmSCF) { if (compType == ComponentType.Invoke) { this.initialDpGprsRequest(parameter, capDialogGprsImpl, invokeId); } } break; case CAPOperationCode.requestReportGPRSEvent: if (acn == CAPApplicationContext.CapV3_gprsSSF_gsmSCF || acn == CAPApplicationContext.CapV3_gsmSCF_gprsSSF) { if (compType == ComponentType.Invoke) { this.requestReportGPRSEventRequest(parameter, capDialogGprsImpl, invokeId); } } break; case CAPOperationCode.applyChargingGPRS: if (acn == CAPApplicationContext.CapV3_gprsSSF_gsmSCF || acn == CAPApplicationContext.CapV3_gsmSCF_gprsSSF) { if (compType == ComponentType.Invoke) { this.applyChargingGPRSRequest(parameter, capDialogGprsImpl, invokeId); } } break; case CAPOperationCode.entityReleasedGPRS: if (acn == CAPApplicationContext.CapV3_gprsSSF_gsmSCF || acn == CAPApplicationContext.CapV3_gsmSCF_gprsSSF) { if (compType == ComponentType.Invoke) { this.entityReleasedGPRSRequest(parameter, capDialogGprsImpl, invokeId); } if (compType == ComponentType.ReturnResultLast) { this.entityReleasedGPRSResponse(parameter, capDialogGprsImpl, invokeId); } } break; case CAPOperationCode.connectGPRS: if (acn == CAPApplicationContext.CapV3_gprsSSF_gsmSCF || acn == CAPApplicationContext.CapV3_gsmSCF_gprsSSF) { if (compType == ComponentType.Invoke) { this.connectGPRSRequest(parameter, capDialogGprsImpl, invokeId); } } break; case CAPOperationCode.continueGPRS: if (acn == CAPApplicationContext.CapV3_gprsSSF_gsmSCF || acn == CAPApplicationContext.CapV3_gsmSCF_gprsSSF) { if (compType == ComponentType.Invoke) { this.continueGPRSRequest(parameter, capDialogGprsImpl, invokeId); } } break; case CAPOperationCode.releaseGPRS: if (acn == CAPApplicationContext.CapV3_gprsSSF_gsmSCF || acn == CAPApplicationContext.CapV3_gsmSCF_gprsSSF) { if (compType == ComponentType.Invoke) { this.releaseGPRSRequest(parameter, capDialogGprsImpl, invokeId); } } break; case CAPOperationCode.resetTimerGPRS: if (acn == CAPApplicationContext.CapV3_gprsSSF_gsmSCF || acn == CAPApplicationContext.CapV3_gsmSCF_gprsSSF) { if (compType == ComponentType.Invoke) { this.resetTimerGPRSRequest(parameter, capDialogGprsImpl, invokeId); } } break; case CAPOperationCode.furnishChargingInformationGPRS: if (acn == CAPApplicationContext.CapV3_gprsSSF_gsmSCF || acn == CAPApplicationContext.CapV3_gsmSCF_gprsSSF) { if (compType == ComponentType.Invoke) { this.furnishChargingInformationGPRSRequest(parameter, capDialogGprsImpl, invokeId); } } break; case CAPOperationCode.cancelGPRS: if (acn == CAPApplicationContext.CapV3_gprsSSF_gsmSCF || acn == CAPApplicationContext.CapV3_gsmSCF_gprsSSF) { if (compType == ComponentType.Invoke) { this.cancelGPRSRequest(parameter, capDialogGprsImpl, invokeId); } } break; case CAPOperationCode.sendChargingInformationGPRS: if (acn == CAPApplicationContext.CapV3_gprsSSF_gsmSCF || acn == CAPApplicationContext.CapV3_gsmSCF_gprsSSF) { if (compType == ComponentType.Invoke) { this.sendChargingInformationGPRSRequest(parameter, capDialogGprsImpl, invokeId); } } break; case CAPOperationCode.applyChargingReportGPRS: if (acn == CAPApplicationContext.CapV3_gprsSSF_gsmSCF || acn == CAPApplicationContext.CapV3_gsmSCF_gprsSSF) { if (compType == ComponentType.Invoke) { this.applyChargingReportGPRSRequest(parameter, capDialogGprsImpl, invokeId); } if (compType == ComponentType.ReturnResultLast) { this.applyChargingReportGPRSResponse(parameter, capDialogGprsImpl, invokeId); } } break; case CAPOperationCode.eventReportGPRS: if (acn == CAPApplicationContext.CapV3_gprsSSF_gsmSCF || acn == CAPApplicationContext.CapV3_gsmSCF_gprsSSF) { if (compType == ComponentType.Invoke) { this.eventReportGPRSRequest(parameter, capDialogGprsImpl, invokeId); } if (compType == ComponentType.ReturnResultLast) { this.eventReportGPRSResponse(parameter, capDialogGprsImpl, invokeId); } } break; case CAPOperationCode.activityTestGPRS: if (acn == CAPApplicationContext.CapV3_gprsSSF_gsmSCF || acn == CAPApplicationContext.CapV3_gsmSCF_gprsSSF) { if (compType == ComponentType.Invoke) { this.activityTestRequest(parameter, capDialogGprsImpl, invokeId); } if (compType == ComponentType.ReturnResultLast) { this.activityTestResponse(parameter, capDialogGprsImpl, invokeId); } } break; default: throw new CAPParsingComponentException("", CAPParsingComponentExceptionReason.UnrecognizedOperation); } } private void initialDpGprsRequest(Parameter parameter, CAPDialogGprsImpl capDialogImpl, Long invokeId) throws CAPParsingComponentException { if (parameter == null) throw new CAPParsingComponentException( "Error while decoding initialDpGprsRequest: Parameter is mandatory but not found", CAPParsingComponentExceptionReason.MistypedParameter); if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive()) throw new CAPParsingComponentException( "Error while decoding initialDpGprsRequest: Bad tag or tagClass or parameter is primitive, received tag=" + parameter.getTag(), CAPParsingComponentExceptionReason.MistypedParameter); byte[] buf = parameter.getData(); AsnInputStream ais = new AsnInputStream(buf); InitialDpGprsRequestImpl ind = new InitialDpGprsRequestImpl(); ind.decodeData(ais, buf.length); ind.setInvokeId(invokeId); ind.setCAPDialog(capDialogImpl); for (CAPServiceListener serLis : this.serviceListeners) { try { serLis.onCAPMessage(ind); ((CAPServiceGprsListener) serLis).onInitialDpGprsRequest(ind); } catch (Exception e) { loger.error("Error processing initialDpRequest: " + e.getMessage(), e); } } } private void requestReportGPRSEventRequest(Parameter parameter, CAPDialogGprsImpl capDialogImpl, Long invokeId) throws CAPParsingComponentException { if (parameter == null) throw new CAPParsingComponentException( "Error while decoding requestReportGPRSEventRequest: Parameter is mandatory but not found", CAPParsingComponentExceptionReason.MistypedParameter); if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive()) throw new CAPParsingComponentException( "Error while decoding requestReportGPRSEventRequest: Bad tag or tagClass or parameter is primitive, received tag=" + parameter.getTag(), CAPParsingComponentExceptionReason.MistypedParameter); byte[] buf = parameter.getData(); AsnInputStream ais = new AsnInputStream(buf); RequestReportGPRSEventRequestImpl ind = new RequestReportGPRSEventRequestImpl(); ind.decodeData(ais, buf.length); ind.setInvokeId(invokeId); ind.setCAPDialog(capDialogImpl); for (CAPServiceListener serLis : this.serviceListeners) { try { serLis.onCAPMessage(ind); ((CAPServiceGprsListener) serLis).onRequestReportGPRSEventRequest(ind); } catch (Exception e) { loger.error("Error processing requestReportGPRSEventRequest: " + e.getMessage(), e); } } } private void applyChargingGPRSRequest(Parameter parameter, CAPDialogGprsImpl capDialogImpl, Long invokeId) throws CAPParsingComponentException { if (parameter == null) throw new CAPParsingComponentException( "Error while decoding applyChargingGPRSRequest: Parameter is mandatory but not found", CAPParsingComponentExceptionReason.MistypedParameter); if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive()) throw new CAPParsingComponentException( "Error while decoding applyChargingGPRSRequest: Bad tag or tagClass or parameter is primitive, received tag=" + parameter.getTag(), CAPParsingComponentExceptionReason.MistypedParameter); byte[] buf = parameter.getData(); AsnInputStream ais = new AsnInputStream(buf); ApplyChargingGPRSRequestImpl ind = new ApplyChargingGPRSRequestImpl(); ind.decodeData(ais, buf.length); ind.setInvokeId(invokeId); ind.setCAPDialog(capDialogImpl); for (CAPServiceListener serLis : this.serviceListeners) { try { serLis.onCAPMessage(ind); ((CAPServiceGprsListener) serLis).onApplyChargingGPRSRequest(ind); } catch (Exception e) { loger.error("Error processing applyChargingGPRSRequest: " + e.getMessage(), e); } } } private void entityReleasedGPRSRequest(Parameter parameter, CAPDialogGprsImpl capDialogImpl, Long invokeId) throws CAPParsingComponentException { if (parameter == null) throw new CAPParsingComponentException( "Error while decoding entityReleasedGPRSRequest: Parameter is mandatory but not found", CAPParsingComponentExceptionReason.MistypedParameter); if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive()) throw new CAPParsingComponentException( "Error while decoding entityReleasedGPRSRequest: Bad tag or tagClass or parameter is primitive, received tag=" + parameter.getTag(), CAPParsingComponentExceptionReason.MistypedParameter); byte[] buf = parameter.getData(); AsnInputStream ais = new AsnInputStream(buf); EntityReleasedGPRSRequestImpl ind = new EntityReleasedGPRSRequestImpl(); ind.decodeData(ais, buf.length); ind.setInvokeId(invokeId); ind.setCAPDialog(capDialogImpl); for (CAPServiceListener serLis : this.serviceListeners) { try { serLis.onCAPMessage(ind); ((CAPServiceGprsListener) serLis).onEntityReleasedGPRSRequest(ind); } catch (Exception e) { loger.error("Error processing entityReleasedGPRSRequest: " + e.getMessage(), e); } } } private void entityReleasedGPRSResponse(Parameter parameter, CAPDialogGprsImpl capDialogImpl, Long invokeId) throws CAPParsingComponentException { EntityReleasedGPRSResponseImpl ind = new EntityReleasedGPRSResponseImpl(); ind.setInvokeId(invokeId); ind.setCAPDialog(capDialogImpl); for (CAPServiceListener serLis : this.serviceListeners) { try { serLis.onCAPMessage(ind); ((CAPServiceGprsListener) serLis).onEntityReleasedGPRSResponse(ind); } catch (Exception e) { loger.error("Error processing entityReleasedGPRSResponse: " + e.getMessage(), e); } } } private void connectGPRSRequest(Parameter parameter, CAPDialogGprsImpl capDialogImpl, Long invokeId) throws CAPParsingComponentException { if (parameter == null) throw new CAPParsingComponentException( "Error while decoding connectGPRSRequest: Parameter is mandatory but not found", CAPParsingComponentExceptionReason.MistypedParameter); if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive()) throw new CAPParsingComponentException( "Error while decoding connectGPRSRequest: Bad tag or tagClass or parameter is primitive, received tag=" + parameter.getTag(), CAPParsingComponentExceptionReason.MistypedParameter); byte[] buf = parameter.getData(); AsnInputStream ais = new AsnInputStream(buf); ConnectGPRSRequestImpl ind = new ConnectGPRSRequestImpl(); ind.decodeData(ais, buf.length); ind.setInvokeId(invokeId); ind.setCAPDialog(capDialogImpl); for (CAPServiceListener serLis : this.serviceListeners) { try { serLis.onCAPMessage(ind); ((CAPServiceGprsListener) serLis).onConnectGPRSRequest(ind); } catch (Exception e) { loger.error("Error processing connectGPRSRequest: " + e.getMessage(), e); } } } private void continueGPRSRequest(Parameter parameter, CAPDialogGprsImpl capDialogImpl, Long invokeId) throws CAPParsingComponentException { if (parameter == null) throw new CAPParsingComponentException( "Error while decoding continueGPRSRequest: Parameter is mandatory but not found", CAPParsingComponentExceptionReason.MistypedParameter); if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive()) throw new CAPParsingComponentException( "Error while decoding continueGPRSRequest: Bad tag or tagClass or parameter is primitive, received tag=" + parameter.getTag(), CAPParsingComponentExceptionReason.MistypedParameter); byte[] buf = parameter.getData(); AsnInputStream ais = new AsnInputStream(buf); ContinueGPRSRequestImpl ind = new ContinueGPRSRequestImpl(); ind.decodeData(ais, buf.length); ind.setInvokeId(invokeId); ind.setCAPDialog(capDialogImpl); for (CAPServiceListener serLis : this.serviceListeners) { try { serLis.onCAPMessage(ind); ((CAPServiceGprsListener) serLis).onContinueGPRSRequest(ind); } catch (Exception e) { loger.error("Error processing continueGPRSRequest: " + e.getMessage(), e); } } } private void releaseGPRSRequest(Parameter parameter, CAPDialogGprsImpl capDialogImpl, Long invokeId) throws CAPParsingComponentException { if (parameter == null) throw new CAPParsingComponentException( "Error while decoding releaseGPRSRequest: Parameter is mandatory but not found", CAPParsingComponentExceptionReason.MistypedParameter); if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive()) throw new CAPParsingComponentException( "Error while decoding releaseGPRSRequest: Bad tag or tagClass or parameter is primitive, received tag=" + parameter.getTag(), CAPParsingComponentExceptionReason.MistypedParameter); byte[] buf = parameter.getData(); AsnInputStream ais = new AsnInputStream(buf); ReleaseGPRSRequestImpl ind = new ReleaseGPRSRequestImpl(); ind.decodeData(ais, buf.length); ind.setInvokeId(invokeId); ind.setCAPDialog(capDialogImpl); for (CAPServiceListener serLis : this.serviceListeners) { try { serLis.onCAPMessage(ind); ((CAPServiceGprsListener) serLis).onReleaseGPRSRequest(ind); } catch (Exception e) { loger.error("Error processing releaseGPRSRequest: " + e.getMessage(), e); } } } private void resetTimerGPRSRequest(Parameter parameter, CAPDialogGprsImpl capDialogImpl, Long invokeId) throws CAPParsingComponentException { if (parameter == null) throw new CAPParsingComponentException( "Error while decoding resetTimerGPRSRequest: Parameter is mandatory but not found", CAPParsingComponentExceptionReason.MistypedParameter); if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive()) throw new CAPParsingComponentException( "Error while decoding resetTimerGPRSRequest: Bad tag or tagClass or parameter is primitive, received tag=" + parameter.getTag(), CAPParsingComponentExceptionReason.MistypedParameter); byte[] buf = parameter.getData(); AsnInputStream ais = new AsnInputStream(buf); ResetTimerGPRSRequestImpl ind = new ResetTimerGPRSRequestImpl(); ind.decodeData(ais, buf.length); ind.setInvokeId(invokeId); ind.setCAPDialog(capDialogImpl); for (CAPServiceListener serLis : this.serviceListeners) { try { serLis.onCAPMessage(ind); ((CAPServiceGprsListener) serLis).onResetTimerGPRSRequest(ind); } catch (Exception e) { loger.error("Error processing resetTimerGPRSRequest: " + e.getMessage(), e); } } } private void furnishChargingInformationGPRSRequest(Parameter parameter, CAPDialogGprsImpl capDialogImpl, Long invokeId) throws CAPParsingComponentException { if (parameter == null) throw new CAPParsingComponentException( "Error while decoding furnishChargingInformationGPRSRequest: Parameter is mandatory but not found", CAPParsingComponentExceptionReason.MistypedParameter); if (parameter.getTag() != Tag.STRING_OCTET || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || !parameter.isPrimitive()) throw new CAPParsingComponentException( "Error while decoding furnishChargingInformationGPRSRequest: Bad tag or tagClass or parameter is primitive, received tag=" + parameter.getTag(), CAPParsingComponentExceptionReason.MistypedParameter); byte[] buf = parameter.getData(); AsnInputStream ais = new AsnInputStream(buf); FurnishChargingInformationGPRSRequestImpl ind = new FurnishChargingInformationGPRSRequestImpl(); ind.decodeData(ais, buf.length); ind.setInvokeId(invokeId); ind.setCAPDialog(capDialogImpl); for (CAPServiceListener serLis : this.serviceListeners) { try { serLis.onCAPMessage(ind); ((CAPServiceGprsListener) serLis).onFurnishChargingInformationGPRSRequest(ind); } catch (Exception e) { loger.error("Error processing furnishChargingInformationGPRSRequest: " + e.getMessage(), e); } } } private void cancelGPRSRequest(Parameter parameter, CAPDialogGprsImpl capDialogImpl, Long invokeId) throws CAPParsingComponentException { if (parameter == null) throw new CAPParsingComponentException( "Error while decoding cancelGPRSRequest: Parameter is mandatory but not found", CAPParsingComponentExceptionReason.MistypedParameter); if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive()) throw new CAPParsingComponentException( "Error while decoding cancelGPRSRequest: Bad tag or tagClass or parameter is primitive, received tag=" + parameter.getTag(), CAPParsingComponentExceptionReason.MistypedParameter); byte[] buf = parameter.getData(); AsnInputStream ais = new AsnInputStream(buf); CancelGPRSRequestImpl ind = new CancelGPRSRequestImpl(); ind.decodeData(ais, buf.length); ind.setInvokeId(invokeId); ind.setCAPDialog(capDialogImpl); for (CAPServiceListener serLis : this.serviceListeners) { try { serLis.onCAPMessage(ind); ((CAPServiceGprsListener) serLis).onCancelGPRSRequest(ind); } catch (Exception e) { loger.error("Error processing cancelGPRSRequest: " + e.getMessage(), e); } } } private void sendChargingInformationGPRSRequest(Parameter parameter, CAPDialogGprsImpl capDialogImpl, Long invokeId) throws CAPParsingComponentException { if (parameter == null) throw new CAPParsingComponentException( "Error while decoding sendChargingInformationGPRSRequest: Parameter is mandatory but not found", CAPParsingComponentExceptionReason.MistypedParameter); if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive()) throw new CAPParsingComponentException( "Error while decoding sendChargingInformationGPRSRequest: Bad tag or tagClass or parameter is primitive, received tag=" + parameter.getTag(), CAPParsingComponentExceptionReason.MistypedParameter); byte[] buf = parameter.getData(); AsnInputStream ais = new AsnInputStream(buf); SendChargingInformationGPRSRequestImpl ind = new SendChargingInformationGPRSRequestImpl(); ind.decodeData(ais, buf.length); ind.setInvokeId(invokeId); ind.setCAPDialog(capDialogImpl); for (CAPServiceListener serLis : this.serviceListeners) { try { serLis.onCAPMessage(ind); ((CAPServiceGprsListener) serLis).onSendChargingInformationGPRSRequest(ind); } catch (Exception e) { loger.error("Error processing sendChargingInformationGPRSRequest: " + e.getMessage(), e); } } } private void applyChargingReportGPRSRequest(Parameter parameter, CAPDialogGprsImpl capDialogImpl, Long invokeId) throws CAPParsingComponentException { if (parameter == null) throw new CAPParsingComponentException( "Error while decoding applyChargingReportGPRSRequest: Parameter is mandatory but not found", CAPParsingComponentExceptionReason.MistypedParameter); if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive()) throw new CAPParsingComponentException( "Error while decoding applyChargingReportGPRSRequest: Bad tag or tagClass or parameter is primitive, received tag=" + parameter.getTag(), CAPParsingComponentExceptionReason.MistypedParameter); byte[] buf = parameter.getData(); AsnInputStream ais = new AsnInputStream(buf); ApplyChargingReportGPRSRequestImpl ind = new ApplyChargingReportGPRSRequestImpl(); ind.decodeData(ais, buf.length); ind.setInvokeId(invokeId); ind.setCAPDialog(capDialogImpl); for (CAPServiceListener serLis : this.serviceListeners) { try { serLis.onCAPMessage(ind); ((CAPServiceGprsListener) serLis).onApplyChargingReportGPRSRequest(ind); } catch (Exception e) { loger.error("Error processing applyChargingReportGPRSRequest: " + e.getMessage(), e); } } } private void applyChargingReportGPRSResponse(Parameter parameter, CAPDialogGprsImpl capDialogImpl, Long invokeId) throws CAPParsingComponentException { ApplyChargingReportGPRSResponseImpl ind = new ApplyChargingReportGPRSResponseImpl(); ind.setInvokeId(invokeId); ind.setCAPDialog(capDialogImpl); for (CAPServiceListener serLis : this.serviceListeners) { try { serLis.onCAPMessage(ind); ((CAPServiceGprsListener) serLis).onApplyChargingReportGPRSResponse(ind); } catch (Exception e) { loger.error("Error processing applyChargingReportGPRSResponse: " + e.getMessage(), e); } } } private void eventReportGPRSRequest(Parameter parameter, CAPDialogGprsImpl capDialogImpl, Long invokeId) throws CAPParsingComponentException { if (parameter == null) throw new CAPParsingComponentException( "Error while decoding eventReportGPRSRequest: Parameter is mandatory but not found", CAPParsingComponentExceptionReason.MistypedParameter); if (parameter.getTag() != Tag.SEQUENCE || parameter.getTagClass() != Tag.CLASS_UNIVERSAL || parameter.isPrimitive()) throw new CAPParsingComponentException( "Error while decoding eventReportGPRSRequest: Bad tag or tagClass or parameter is primitive, received tag=" + parameter.getTag(), CAPParsingComponentExceptionReason.MistypedParameter); byte[] buf = parameter.getData(); AsnInputStream ais = new AsnInputStream(buf); EventReportGPRSRequestImpl ind = new EventReportGPRSRequestImpl(); ind.decodeData(ais, buf.length); ind.setInvokeId(invokeId); ind.setCAPDialog(capDialogImpl); for (CAPServiceListener serLis : this.serviceListeners) { try { serLis.onCAPMessage(ind); ((CAPServiceGprsListener) serLis).onEventReportGPRSRequest(ind); } catch (Exception e) { loger.error("Error processing eventReportGPRSRequest: " + e.getMessage(), e); } } } private void eventReportGPRSResponse(Parameter parameter, CAPDialogGprsImpl capDialogImpl, Long invokeId) throws CAPParsingComponentException { EventReportGPRSResponseImpl ind = new EventReportGPRSResponseImpl(); ind.setInvokeId(invokeId); ind.setCAPDialog(capDialogImpl); for (CAPServiceListener serLis : this.serviceListeners) { try { serLis.onCAPMessage(ind); ((CAPServiceGprsListener) serLis).onEventReportGPRSResponse(ind); } catch (Exception e) { loger.error("Error processing eventReportGPRSResponse: " + e.getMessage(), e); } } } private void activityTestRequest(Parameter parameter, CAPDialogGprsImpl capDialogImpl, Long invokeId) throws CAPParsingComponentException { ActivityTestGPRSRequestImpl ind = new ActivityTestGPRSRequestImpl(); ind.setInvokeId(invokeId); ind.setCAPDialog(capDialogImpl); for (CAPServiceListener serLis : this.serviceListeners) { try { serLis.onCAPMessage(ind); ((CAPServiceGprsListener) serLis).onActivityTestGPRSRequest(ind); } catch (Exception e) { loger.error("Error processing activityTestGPRSRequest: " + e.getMessage(), e); } } } private void activityTestResponse(Parameter parameter, CAPDialogGprsImpl capDialogImpl, Long invokeId) throws CAPParsingComponentException { ActivityTestGPRSResponseImpl ind = new ActivityTestGPRSResponseImpl(); ind.setInvokeId(invokeId); ind.setCAPDialog(capDialogImpl); for (CAPServiceListener serLis : this.serviceListeners) { try { serLis.onCAPMessage(ind); ((CAPServiceGprsListener) serLis).onActivityTestGPRSResponse(ind); } catch (Exception e) { loger.error("Error processing activityTestGPRSResponse: " + e.getMessage(), e); } } } }