All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.restcomm.protocols.ss7.inap.service.circuitSwitchedCall.INAPServiceCircuitSwitchedCallImpl Maven / Gradle / Ivy

There is a newer version: 10.0.36
Show newest version
/*
 * Mobius Software LTD
 * Copyright 2019, Mobius Software LTD 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 
 */

package org.restcomm.protocols.ss7.inap.service.circuitSwitchedCall;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.restcomm.protocols.ss7.inap.INAPDialogImpl;
import org.restcomm.protocols.ss7.inap.INAPProviderImpl;
import org.restcomm.protocols.ss7.inap.INAPServiceBaseImpl;
import org.restcomm.protocols.ss7.inap.api.INAPApplicationContext;
import org.restcomm.protocols.ss7.inap.api.INAPDialog;
import org.restcomm.protocols.ss7.inap.api.INAPException;
import org.restcomm.protocols.ss7.inap.api.INAPMessage;
import org.restcomm.protocols.ss7.inap.api.INAPOperationCode;
import org.restcomm.protocols.ss7.inap.api.INAPParsingComponentException;
import org.restcomm.protocols.ss7.inap.api.INAPParsingComponentExceptionReason;
import org.restcomm.protocols.ss7.inap.api.INAPServiceListener;
import org.restcomm.protocols.ss7.inap.api.dialog.ServingCheckData;
import org.restcomm.protocols.ss7.inap.api.dialog.ServingCheckResult;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.ActivateServiceFilteringRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.ActivityTestRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.ActivityTestResponse;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.AnalyseInformationRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.AnalysedInformationRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.ApplyChargingReportRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.ApplyChargingRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.AssistRequestInstructionsRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.CallGapRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.CallInformationReportRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.CallInformationRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.CallLimitRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.CancelRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.CancelStatusReportRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.CollectInformationRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.CollectedInformationRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.ConnectRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.ConnectToResourceRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.ContinueCS1PlusRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.ContinueRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.ContinueWithArgumentRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.DialogueUserInformationRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.DisconnectForwardConnectionCS1PlusRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.DisconnectForwardConnectionRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.EstablishTemporaryConnectionRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.EventNotificationChargingRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.EventReportBCSMRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.FurnishChargingInformationRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.HandOverRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.HoldCallInNetworkRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.HoldCallPartyConnectionRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.INAPDialogCircuitSwitchedCall;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.INAPServiceCircuitSwitchedCall;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.INAPServiceCircuitSwitchedCallListener;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.InitialDPRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.InitiateCallAttemptRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.OAnswerRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.OCalledPartyBusyRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.ODisconnectRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.OMidCallRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.ONoAnswerRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.OriginationAttemptAuthorizedRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.PlayAnnouncementRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.PromptAndCollectUserInformationRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.PromptAndCollectUserInformationResponse;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.ReconnectRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.ReleaseCallPartyConnectionRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.ReleaseCallPartyConnectionResponse;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.ReleaseCallRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.RequestCurrentStatusReportRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.RequestCurrentStatusReportResponse;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.RequestEveryStatusChangeReportRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.RequestFirstStatusMatchReportRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.RequestNotificationChargingEventRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.RequestReportBCSMEventRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.ResetTimerRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.RetrieveRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.RetrieveResponse;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.RouteSelectFailureRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.SelectFacilityRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.SelectRouteRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.SendChargingInformationRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.ServiceFilteringResponseRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.SignallingInformationRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.SpecializedResourceReportCS1PlusRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.SpecializedResourceReportRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.StatusReportRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.TAnswerRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.TBusyRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.TDisconnectRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.TMidCallRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.TNoAnswerRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.TermAttemptAuthorizedRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.UpdateRequest;
import org.restcomm.protocols.ss7.inap.api.service.circuitSwitchedCall.UpdateResponse;
import org.restcomm.protocols.ss7.inap.dialog.ServingCheckDataImpl;
import org.restcomm.protocols.ss7.sccp.parameter.SccpAddress;
import org.restcomm.protocols.ss7.tcap.api.tc.dialog.Dialog;
import org.restcomm.protocols.ss7.tcap.asn.comp.ComponentType;
import org.restcomm.protocols.ss7.tcap.asn.comp.OperationCode;

/**
 *
 * @author yulian.oifa
 *
 */
public class INAPServiceCircuitSwitchedCallImpl extends INAPServiceBaseImpl implements INAPServiceCircuitSwitchedCall {
	public static String NAME="CircuitSwitchedCall";
	
	protected Logger loger = LogManager.getLogger(INAPServiceCircuitSwitchedCallImpl.class);

	public INAPServiceCircuitSwitchedCallImpl(INAPProviderImpl inapProviderImpl) {
		super(inapProviderImpl);
	}

	@Override
	public INAPDialogCircuitSwitchedCall createNewDialog(INAPApplicationContext appCntx, SccpAddress origAddress,
			SccpAddress destAddress, int networkId) throws INAPException {
		inapProviderImpl.getStack().newDialogSent(NAME, networkId);
		return this.createNewDialog(appCntx, origAddress, destAddress, null, networkId);
	}

	@Override
	public INAPDialogCircuitSwitchedCall createNewDialog(INAPApplicationContext appCntx, SccpAddress origAddress,
			SccpAddress destAddress, Long localTrId, int networkId) throws INAPException {

		// We cannot create a dialog if the service is not activated
		if (!this.isActivated())
			throw new INAPException(
					"Cannot create INAPDialogCircuitSwitchedCall because INAPServiceCircuitSwitchedCall is not activated");

		Dialog tcapDialog = this.createNewTCAPDialog(origAddress, destAddress, localTrId, networkId);
		INAPDialogCircuitSwitchedCallImpl dialog = new INAPDialogCircuitSwitchedCallImpl(appCntx, tcapDialog,
				this.inapProviderImpl, this);

		return dialog;
	}

	@Override
	public void addINAPServiceListener(INAPServiceCircuitSwitchedCallListener inapServiceListener) {
		super.addINAPServiceListener(inapServiceListener);
	}

	@Override
	public void removeINAPServiceListener(INAPServiceCircuitSwitchedCallListener inapServiceListener) {
		super.removeINAPServiceListener(inapServiceListener);
	}

	@Override
	protected INAPDialogImpl createNewDialogIncoming(INAPApplicationContext appCntx, Dialog tcapDialog, Boolean logStats) {
		if(logStats)
			inapProviderImpl.getStack().newDialogReceived(NAME, tcapDialog.getNetworkId());
		
		return new INAPDialogCircuitSwitchedCallImpl(appCntx, tcapDialog, this.inapProviderImpl, this);
	}

	@Override
	public ServingCheckData isServingService(INAPApplicationContext dialogApplicationContext) {

		switch (dialogApplicationContext) {
		case Core_INAP_CS1_IP_to_SCP_AC:
		case Core_INAP_CS1_SCP_to_SSP_AC:
		case Core_INAP_CS1_SCP_to_SSP_service_management_AC:
		case Core_INAP_CS1_SCP_to_SSP_traffic_management_AC:
		case Core_INAP_CS1_SSP_to_SCP_AC:
		case Core_INAP_CS1_SSP_to_SCP_service_management_AC:
		case Core_INAP_CS1_assist_handoff_SSP_to_SCP_AC:
		case Ericcson_cs1plus_IP_to_SCP_AC:
		case Ericcson_cs1plus_SCP_to_SSP_AC:
		case Ericcson_cs1plus_SCP_to_SSP_service_management_AC:
		case Ericcson_cs1plus_SCP_to_SSP_traffic_limitation_AC:
		case Ericcson_cs1plus_SCP_to_SSP_traffic_management_AC:
		case Ericcson_cs1plus_SSP_TO_SCP_AC:
		case Ericcson_cs1plus_SSP_to_SCP_service_management_AC:
		case Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC:
		case Ericcson_cs1plus_data_management_AC:
		case Ericcson_cs1plus_IP_to_SCP_AC_REV_B:
		case Ericcson_cs1plus_SCP_to_SSP_AC_REV_B:
		case Ericcson_cs1plus_SCP_to_SSP_service_management_AC_REV_B:
		case Ericcson_cs1plus_SCP_to_SSP_traffic_limitation_AC_REV_B:
		case Ericcson_cs1plus_SCP_to_SSP_traffic_management_AC_REV_B:
		case Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B:
		case Ericcson_cs1plus_SSP_to_SCP_service_management_AC_REV_B:
		case Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC_REV_B:
		case Ericcson_cs1plus_data_management_AC_REV_B:
		case Q1218_DP_specific_SCF_to_SSF_AC:
		case Q1218_DP_specific_SSF_to_SCF_AC:
		case Q1218_SCF_to_SSF_service_management_AC:
		case Q1218_SCF_to_SSF_status_reporting_AC:
		case Q1218_SCF_to_SSF_traffic_management_AC:
		case Q1218_SRF_to_SCF_AC:
		case Q1218_SSF_to_SCF_service_management_AC:
		case Q1218_assist_handoff_SSF_to_SCF_AC:
		case Q1218_generic_SCF_to_SSF_AC:
		case Q1218_generic_SSF_to_SCF_AC:
			return new ServingCheckDataImpl(ServingCheckResult.AC_Serving);
		default:
			break;
		}

		return new ServingCheckDataImpl(ServingCheckResult.AC_NotServing);
	}

	public long[] getLinkedOperationList(long operCode) {
		if (operCode == INAPOperationCode.playAnnouncement
				|| operCode == INAPOperationCode.promptAndCollectUserInformation) {
			return new long[] { INAPOperationCode.specializedResourceReport };
		}

		return null;
	}

	@Override
	public void processComponent(ComponentType compType, OperationCode oc, INAPMessage parameter, INAPDialog inapDialog,
			Integer invokeId, Integer linkedId) throws INAPParsingComponentException {

		Integer ocValue = oc.getLocalOperationCode();
		if (ocValue == null)
			new INAPParsingComponentException("", INAPParsingComponentExceptionReason.UnrecognizedOperation);
		INAPApplicationContext acn = inapDialog.getApplicationContext();
		int ocValueInt = (int) (long) ocValue;
		boolean processed = false;

		switch (ocValueInt) {
		case INAPOperationCode.initialDP:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B) {
				if (parameter instanceof InitialDPRequest) {
					processed = true;
					InitialDPRequest ind = (InitialDPRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onInitialDPRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing initialDPRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.originationAttemptAuthorized:
			if (acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC) {
				if (parameter instanceof OriginationAttemptAuthorizedRequest) {
					processed = true;
					OriginationAttemptAuthorizedRequest ind = (OriginationAttemptAuthorizedRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis)
									.onOriginationAttemptAuthorizedRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing originationAttemptAuthorizedRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.collectedInformation:
			if (acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC) {
				if (parameter instanceof CollectedInformationRequest) {
					processed = true;
					CollectedInformationRequest ind = (CollectedInformationRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onCollectedInformationRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing collectedInformationRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.analysedInformation:
			if (acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC) {
				if (parameter instanceof AnalysedInformationRequest) {
					processed = true;
					AnalysedInformationRequest ind = (AnalysedInformationRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onAnalysedInformationRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing analysedInformationRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.routeSelectFailure:
			if (acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC) {
				if (parameter instanceof RouteSelectFailureRequest) {
					processed = true;
					RouteSelectFailureRequest ind = (RouteSelectFailureRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onRouteSelectFailureRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing routeSelectFailureRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.oCalledPartyBusy:
			if (acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC) {
				if (parameter instanceof OCalledPartyBusyRequest) {
					processed = true;
					OCalledPartyBusyRequest ind = (OCalledPartyBusyRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onOCalledPartyBusyRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing oCalledPartyBusyRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.oNoAnswer:
			if (acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC) {
				if (parameter instanceof ONoAnswerRequest) {
					processed = true;
					ONoAnswerRequest ind = (ONoAnswerRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onONoAnswerRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing oNoAnswerRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.oAnswer:
			if (acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC) {
				if (parameter instanceof OAnswerRequest) {
					processed = true;
					OAnswerRequest ind = (OAnswerRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onOAnswerRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing oAnswerRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.oDisconnect:
			if (acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC) {
				if (parameter instanceof ODisconnectRequest) {
					processed = true;
					ODisconnectRequest ind = (ODisconnectRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onODisconnectRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing oDisconnectRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.termAttemptAuthorized:
			if (acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC) {
				if (parameter instanceof TermAttemptAuthorizedRequest) {
					processed = true;
					TermAttemptAuthorizedRequest ind = (TermAttemptAuthorizedRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onTermAttemptAuthorizedRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing termAttemptAuthorizedRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.tBusy:
			if (acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC) {
				if (parameter instanceof TBusyRequest) {
					processed = true;
					TBusyRequest ind = (TBusyRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onTBusyRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing tBusyRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.tNoAnswer:
			if (acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC) {
				if (parameter instanceof TNoAnswerRequest) {
					processed = true;
					TNoAnswerRequest ind = (TNoAnswerRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onTNoAnswerRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing tNoAnswerRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.tAnswer:
			if (acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC) {
				if (parameter instanceof TAnswerRequest) {
					processed = true;
					TAnswerRequest ind = (TAnswerRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onTAnswerRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing tAnswerRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.tDisconnect:
			if (acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC) {
				if (parameter instanceof TDisconnectRequest) {
					processed = true;
					TDisconnectRequest ind = (TDisconnectRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onTDisconnectRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing tDisconnectRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.oMidCall:
			if (acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC) {
				if (parameter instanceof OMidCallRequest) {
					processed = true;
					OMidCallRequest ind = (OMidCallRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onOMidCallRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing oMidCallRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.tMidCall:
			if (acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC) {
				if (parameter instanceof TMidCallRequest) {
					processed = true;
					TMidCallRequest ind = (TMidCallRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onTMidCallRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing tMidCallRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.assistRequestInstructions:
			// also retreive command, which has same id
			// case INAPOperationCode.retrieve:
			if (acn == INAPApplicationContext.Q1218_assist_handoff_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_SRF_to_SCF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_IP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_IP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_IP_to_SCP_AC_REV_B) {
				if (parameter instanceof AssistRequestInstructionsRequest) {
					processed = true;
					AssistRequestInstructionsRequest ind = (AssistRequestInstructionsRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onAssistRequestInstructionsRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing assistRequestInstructionsRequest: " + e.getMessage(), e);
						}
					}
				}
			} else if (acn == INAPApplicationContext.Ericcson_cs1plus_data_management_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_data_management_AC_REV_B) {
				if (compType == ComponentType.Invoke) {
					if (parameter instanceof RetrieveRequest) {
						processed = true;
						RetrieveRequest ind = (RetrieveRequest) parameter;
						for (INAPServiceListener serLis : this.serviceListeners) {
							try {
								serLis.onINAPMessage(ind);
								((INAPServiceCircuitSwitchedCallListener) serLis).onRetrieveRequest(ind);
							} catch (Exception e) {
								loger.error("Error processing retrieveRequest: " + e.getMessage(), e);
							}
						}
					}
				} else if (compType == ComponentType.ReturnResultLast) {
					if (parameter instanceof RetrieveResponse) {
						processed = true;
						RetrieveResponse ind = (RetrieveResponse) parameter;
						for (INAPServiceListener serLis : this.serviceListeners) {
							try {
								serLis.onINAPMessage(ind);
								((INAPServiceCircuitSwitchedCallListener) serLis).onRetrieveResponse(ind);
							} catch (Exception e) {
								loger.error("Error processing retrieveResponse: " + e.getMessage(), e);
							}
						}
					}
				}
			}
			break;
		case INAPOperationCode.establishTemporaryConnection:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof EstablishTemporaryConnectionRequest) {
					processed = true;
					EstablishTemporaryConnectionRequest ind = (EstablishTemporaryConnectionRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis)
									.onEstablishTemporaryConnectionRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing establishTemporaryConnectionRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.disconnectForwardConnection:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_assist_handoff_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC) {
				if (parameter == null) {
					processed = true;
					DisconnectForwardConnectionRequest ind = new DisconnectForwardConnectionRequestImpl();
					ind.setInvokeId(invokeId);
					ind.setINAPDialog(inapDialog);
					inapProviderImpl.getStack().newMessageReceived(ind.getMessageType().name(), inapDialog.getNetworkId());
					
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onDisconnectForwardConnectionRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing disconnectForwardConnectionRequest: " + e.getMessage(), e);
						}
					}
				}
			} else if (acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof DisconnectForwardConnectionCS1PlusRequest) {
					processed = true;
					DisconnectForwardConnectionCS1PlusRequest ind = (DisconnectForwardConnectionCS1PlusRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onDisconnectForwardConnectionRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing disconnectForwardConnectionRequest: " + e.getMessage(), e);
						}
					}
				} else if (parameter == null) {
					processed = true;
					DisconnectForwardConnectionRequest ind = new DisconnectForwardConnectionRequestImpl();
					ind.setInvokeId(invokeId);
					ind.setINAPDialog(inapDialog);
					inapProviderImpl.getStack().newMessageReceived(ind.getMessageType().name(), inapDialog.getNetworkId());
					
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onDisconnectForwardConnectionRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing disconnectForwardConnectionRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.connectToResource:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_assist_handoff_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof ConnectToResourceRequest) {
					processed = true;
					ConnectToResourceRequest ind = (ConnectToResourceRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onConnectToResourceRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing connectToResourceRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.connect:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof ConnectRequest) {
					processed = true;
					ConnectRequest ind = (ConnectRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onConnectRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing connectRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.holdCallInNetwork:
			// also update command which has same id
			// case INAPOperationCode.update:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_assist_handoff_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC) {
				if (parameter instanceof HoldCallInNetworkRequest) {
					processed = true;
					HoldCallInNetworkRequest ind = (HoldCallInNetworkRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onHoldCallInNetworkRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing holdCallInNetworkRequest: " + e.getMessage(), e);
						}
					}
				}
			} else if (acn == INAPApplicationContext.Ericcson_cs1plus_data_management_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_data_management_AC_REV_B) {
				if (compType == ComponentType.Invoke) {
					if (parameter instanceof UpdateRequest) {
						processed = true;
						UpdateRequest ind = (UpdateRequest) parameter;
						for (INAPServiceListener serLis : this.serviceListeners) {
							try {
								serLis.onINAPMessage(ind);
								((INAPServiceCircuitSwitchedCallListener) serLis).onUpdateRequest(ind);
							} catch (Exception e) {
								loger.error("Error processing updateRequest: " + e.getMessage(), e);
							}
						}
					}
				} else if (compType == ComponentType.ReturnResultLast) {
					if (parameter instanceof UpdateResponse) {
						processed = true;
						UpdateResponse ind = (UpdateResponse) parameter;
						for (INAPServiceListener serLis : this.serviceListeners) {
							try {
								serLis.onINAPMessage(ind);
								((INAPServiceCircuitSwitchedCallListener) serLis).onUpdateResponse(ind);
							} catch (Exception e) {
								loger.error("Error processing updateResponse: " + e.getMessage(), e);
							}
						}
					}
				}
			}
			break;
		case INAPOperationCode.releaseCall:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_assist_handoff_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof ReleaseCallRequest) {
					processed = true;
					ReleaseCallRequest ind = (ReleaseCallRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onReleaseCallRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing releaseCallRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.requestReportBCSMEvent:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof RequestReportBCSMEventRequest) {
					processed = true;
					RequestReportBCSMEventRequest ind = (RequestReportBCSMEventRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onRequestReportBCSMEventRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing requestReportBCSMEventRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.eventReportBCSM:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof EventReportBCSMRequest) {
					processed = true;
					EventReportBCSMRequest ind = (EventReportBCSMRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onEventReportBCSMRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing eventReportBCSMRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.requestNotificationChargingEvent:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof RequestNotificationChargingEventRequest) {
					processed = true;
					RequestNotificationChargingEventRequest ind = (RequestNotificationChargingEventRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis)
									.onRequestNotificationChargingEventRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing requestNotificationChargingEventRequest: " + e.getMessage(),
									e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.eventNotificationCharging:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof EventNotificationChargingRequest) {
					processed = true;
					EventNotificationChargingRequest ind = (EventNotificationChargingRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onEventNotificationChargingRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing eventNotificationChargingRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.collectInformation:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof CollectInformationRequest) {
					processed = true;
					CollectInformationRequest ind = (CollectInformationRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onCollectInformationRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing collectInformationRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.analyseInformation:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC) {
				if (parameter instanceof AnalyseInformationRequest) {
					processed = true;
					AnalyseInformationRequest ind = (AnalyseInformationRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onAnalyseInformationRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing analyseInformationRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.selectRoute:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC) {
				if (parameter instanceof SelectRouteRequest) {
					processed = true;
					SelectRouteRequest ind = (SelectRouteRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onSelectRouteRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing selectRouteRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.selectFacility:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC) {
				if (parameter instanceof SelectFacilityRequest) {
					processed = true;
					SelectFacilityRequest ind = (SelectFacilityRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onSelectFacilityRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing selectFacilityRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.continueCode:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC) {
				if (parameter == null) {
					processed = true;
					ContinueRequest ind = new ContinueRequestImpl();
					ind.setInvokeId(invokeId);
					ind.setINAPDialog(inapDialog);
					inapProviderImpl.getStack().newMessageReceived(ind.getMessageType().name(), inapDialog.getNetworkId());
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onContinueRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing continueRequest: " + e.getMessage(), e);
						}
					}
				}
			} else if (acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter == null) {
					processed = true;
					ContinueCS1PlusRequest ind = new ContinueCS1PlusRequestImpl();
					ind.setInvokeId(invokeId);
					ind.setINAPDialog(inapDialog);
					inapProviderImpl.getStack().newMessageReceived(ind.getMessageType().name(), inapDialog.getNetworkId());
					
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onContinueRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing continueRequest: " + e.getMessage(), e);
						}
					}
				} else if (parameter instanceof ContinueCS1PlusRequest) {
					processed = true;
					ContinueCS1PlusRequest ind = (ContinueCS1PlusRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onContinueRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing continueRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.initiateCallAttempt:
			if (acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof InitiateCallAttemptRequest) {
					processed = true;
					InitiateCallAttemptRequest ind = (InitiateCallAttemptRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onInitiateCallAttemptRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing initiateCallAttemptRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.resetTimer:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_assist_handoff_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_IP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_IP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_IP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof ResetTimerRequest) {
					processed = true;
					ResetTimerRequest ind = (ResetTimerRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onResetTimerRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing resetTimerRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.furnishChargingInformation:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_assist_handoff_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof FurnishChargingInformationRequest) {
					processed = true;
					FurnishChargingInformationRequest ind = (FurnishChargingInformationRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onFurnishChargingInformationRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing furnishChargingInformationRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.applyCharging:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_assist_handoff_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC) {
				if (parameter instanceof ApplyChargingRequest) {
					processed = true;
					ApplyChargingRequest ind = (ApplyChargingRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onApplyChargingRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing applyChargingRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			else if (acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof ApplyChargingRequest) {
					processed = true;
					ApplyChargingRequest ind = (ApplyChargingRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onApplyChargingRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing applyChargingRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.applyChargingReport:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_assist_handoff_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC) {
				if (parameter instanceof ApplyChargingReportRequest) {
					processed = true;
					ApplyChargingReportRequest ind = (ApplyChargingReportRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onApplyChargingReportRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing applyChargingReportRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			else if (acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof ApplyChargingReportRequest) {
					processed = true;
					ApplyChargingReportRequest ind = (ApplyChargingReportRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onApplyChargingReportRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing applyChargingReportRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.requestCurrentStatusReport:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_assist_handoff_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_SCF_to_SSF_status_reporting_AC) {
				if (compType == ComponentType.Invoke) {
					if (parameter instanceof RequestCurrentStatusReportRequest) {
						processed = true;
						RequestCurrentStatusReportRequest ind = (RequestCurrentStatusReportRequest) parameter;
						for (INAPServiceListener serLis : this.serviceListeners) {
							try {
								serLis.onINAPMessage(ind);
								((INAPServiceCircuitSwitchedCallListener) serLis)
										.onRequestCurrentStatusReportRequest(ind);
							} catch (Exception e) {
								loger.error("Error processing requestCurrentStatusReportRequest: " + e.getMessage(), e);
							}
						}
					}
				} else if (compType == ComponentType.ReturnResultLast) {
					if (parameter instanceof RequestCurrentStatusReportResponse) {
						processed = true;
						RequestCurrentStatusReportResponse ind = (RequestCurrentStatusReportResponse) parameter;
						for (INAPServiceListener serLis : this.serviceListeners) {
							try {
								serLis.onINAPMessage(ind);
								((INAPServiceCircuitSwitchedCallListener) serLis)
										.onRequestCurrentStatusReportResponse(ind);
							} catch (Exception e) {
								loger.error("Error processing requestCurrentStatusReportResponse: " + e.getMessage(),
										e);
							}
						}
					}
				}
			}
			break;
		case INAPOperationCode.requestEveryStatusChangeReport:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_assist_handoff_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_SCF_to_SSF_status_reporting_AC) {
				if (parameter instanceof RequestEveryStatusChangeReportRequest) {
					processed = true;
					RequestEveryStatusChangeReportRequest ind = (RequestEveryStatusChangeReportRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis)
									.onRequestEveryStatusChangeReportRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing requestEveryStatusChangeReportRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.requestFirstStatusMatchReport:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_assist_handoff_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_SCF_to_SSF_status_reporting_AC) {
				if (parameter instanceof RequestFirstStatusMatchReportRequest) {
					processed = true;
					RequestFirstStatusMatchReportRequest ind = (RequestFirstStatusMatchReportRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis)
									.onRequestFirstStatusMatchReportRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing requestFirstStatusMatchReportRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.statusReport:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_assist_handoff_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_SCF_to_SSF_status_reporting_AC) {
				if (parameter instanceof StatusReportRequest) {
					processed = true;
					StatusReportRequest ind = (StatusReportRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onStatusReportRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing statusReportRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.callGap:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_SCF_to_SSF_traffic_management_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_traffic_management_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_traffic_management_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_traffic_management_AC_REV_B) {
				if (parameter instanceof CallGapRequest) {
					processed = true;
					CallGapRequest ind = (CallGapRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onCallGapRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing callGapRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.activateServiceFiltering:
			if (acn == INAPApplicationContext.Q1218_SCF_to_SSF_service_management_AC
					|| acn == INAPApplicationContext.Q1218_SSF_to_SCF_service_management_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_service_management_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_service_management_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_service_management_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_to_SCP_service_management_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_service_management_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_to_SCP_service_management_AC_REV_B) {
				if (parameter instanceof ActivateServiceFilteringRequest) {
					processed = true;
					ActivateServiceFilteringRequest ind = (ActivateServiceFilteringRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onActivateServiceFilteringRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing activateServiceFilteringRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.serviceFilteringResponse:
			if (acn == INAPApplicationContext.Q1218_SCF_to_SSF_service_management_AC
					|| acn == INAPApplicationContext.Q1218_SSF_to_SCF_service_management_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_service_management_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_service_management_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_service_management_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_to_SCP_service_management_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_service_management_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_to_SCP_service_management_AC_REV_B) {
				if (parameter instanceof ServiceFilteringResponseRequest) {
					processed = true;
					ServiceFilteringResponseRequest ind = (ServiceFilteringResponseRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onServiceFilteringResponseRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing serviceFilteringResponseRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.callInformationReport:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof CallInformationReportRequest) {
					processed = true;
					CallInformationReportRequest ind = (CallInformationReportRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onCallInformationReportRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing callInformationReportRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.callInformationRequest:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof CallInformationRequest) {
					processed = true;
					CallInformationRequest ind = (CallInformationRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onCallInformationRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing callInformationRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.sendChargingInformation:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC) {
				if (parameter instanceof SendChargingInformationRequest) {
					processed = true;
					SendChargingInformationRequest ind = (SendChargingInformationRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onSendChargingInformationRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing sendChargingInformationRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			else if (acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof SendChargingInformationCS1RequestImpl) {
					processed = true;
					SendChargingInformationRequest ind = (SendChargingInformationRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onSendChargingInformationRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing sendChargingInformationRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.playAnnouncement:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_assist_handoff_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_SRF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_IP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_IP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_IP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof PlayAnnouncementRequest) {
					processed = true;
					PlayAnnouncementRequest ind = (PlayAnnouncementRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onPlayAnnouncementRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing playAnnouncementRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.promptAndCollectUserInformation:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_assist_handoff_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_SRF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_IP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_IP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_IP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (compType == ComponentType.Invoke) {
					if (parameter instanceof PromptAndCollectUserInformationRequest) {
						processed = true;
						PromptAndCollectUserInformationRequest ind = (PromptAndCollectUserInformationRequest) parameter;
						for (INAPServiceListener serLis : this.serviceListeners) {
							try {
								serLis.onINAPMessage(ind);
								((INAPServiceCircuitSwitchedCallListener) serLis)
										.onPromptAndCollectUserInformationRequest(ind);
							} catch (Exception e) {
								loger.error(
										"Error processing promptAndCollectUserInformationRequest: " + e.getMessage(),
										e);
							}
						}
					}
				} else if (compType == ComponentType.ReturnResultLast) {
					if (parameter instanceof PromptAndCollectUserInformationResponse) {
						processed = true;
						PromptAndCollectUserInformationResponse ind = (PromptAndCollectUserInformationResponse) parameter;
						for (INAPServiceListener serLis : this.serviceListeners) {
							try {
								serLis.onINAPMessage(ind);
								((INAPServiceCircuitSwitchedCallListener) serLis)
										.onPromptAndCollectUserInformationResponse(ind);
							} catch (Exception e) {
								loger.error(
										"Error processing promptAndCollectUserInformationResponse: " + e.getMessage(),
										e);
							}
						}
					}
				}
			}
			break;
		case INAPOperationCode.specializedResourceReport:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_assist_handoff_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_SRF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_IP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC) {
				if (parameter == null) {
					processed = true;
					SpecializedResourceReportRequest ind = new SpecializedResourceReportRequestImpl();
					ind.setInvokeId(invokeId);
					ind.setINAPDialog(inapDialog);
					inapProviderImpl.getStack().newMessageReceived(ind.getMessageType().name(), inapDialog.getNetworkId());
					
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onSpecializedResourceReportRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing specializedResourceReportRequest: " + e.getMessage(), e);
						}
					}
				}
			} else if (acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_IP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_IP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof SpecializedResourceReportCS1PlusRequest) {
					processed = true;
					SpecializedResourceReportCS1PlusRequest ind = (SpecializedResourceReportCS1PlusRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onSpecializedResourceReportRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing specializedResourceReportRequest: " + e.getMessage(), e);
						}
					}
				} else if (parameter == null) {
					processed = true;
					SpecializedResourceReportRequest ind = new SpecializedResourceReportRequestImpl();
					ind.setInvokeId(invokeId);
					ind.setINAPDialog(inapDialog);
					inapProviderImpl.getStack().newMessageReceived(ind.getMessageType().name(), inapDialog.getNetworkId());
					
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onSpecializedResourceReportRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing specializedResourceReportRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.cancelCode:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_assist_handoff_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_SRF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_SCF_to_SSF_status_reporting_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_IP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_IP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_IP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof CancelRequest) {
					processed = true;
					CancelRequest ind = (CancelRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onCancelRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing cancelRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.cancelStatusReportRequest:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_assist_handoff_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_SRF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_SCF_to_SSF_status_reporting_AC) {
				if (parameter instanceof CancelStatusReportRequest) {
					processed = true;
					CancelStatusReportRequest ind = (CancelStatusReportRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onCancelStatusReportRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing cancelStatusReportRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.activityTest:
			if (acn == INAPApplicationContext.Q1218_generic_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_assist_handoff_SSF_to_SCF_AC
					|| acn == INAPApplicationContext.Q1218_generic_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Q1218_DP_specific_SCF_to_SSF_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_IP_to_SCP_AC
					|| acn == INAPApplicationContext.Core_INAP_CS1_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_IP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_IP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (compType == ComponentType.Invoke && parameter == null) {
					processed = true;
					ActivityTestRequest ind = new ActivityTestRequestImpl();
					ind.setInvokeId(invokeId);
					ind.setINAPDialog(inapDialog);
					inapProviderImpl.getStack().newMessageReceived(ind.getMessageType().name(), inapDialog.getNetworkId());
					
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onActivityTestRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing activityTestRequest: " + e.getMessage(), e);
						}
					}
				} else if (compType == ComponentType.ReturnResultLast && parameter == null) {
					processed = true;
					ActivityTestResponse ind = new ActivityTestResponseImpl();
					ind.setInvokeId(invokeId);
					ind.setINAPDialog(inapDialog);
					inapProviderImpl.getStack().newMessageReceived(ind.getMessageType().name(), inapDialog.getNetworkId());
					
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onActivityTestResponse(ind);
						} catch (Exception e) {
							loger.error("Error processing activityTestResponse: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.callLimit:
			if (acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_traffic_limitation_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_traffic_limitation_AC_REV_B) {
				if (parameter instanceof CallLimitRequest) {
					processed = true;
					CallLimitRequest ind = (CallLimitRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onCallLimitRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing callLimitRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.continueWithArgument:
			if (acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof ContinueWithArgumentRequest) {
					processed = true;
					ContinueWithArgumentRequest ind = (ContinueWithArgumentRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onContinueWithArgumentRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing continueWithArgumentRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.dialogueUserInformation:
			if (acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_IP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_traffic_management_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_service_management_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_to_SCP_service_management_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_data_management_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_traffic_limitation_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_IP_to_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_traffic_management_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_service_management_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_to_SCP_service_management_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_data_management_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_traffic_limitation_AC_REV_B) {
				if (parameter instanceof DialogueUserInformationRequest) {
					processed = true;
					DialogueUserInformationRequest ind = (DialogueUserInformationRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onDialogueUserInformationRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing dialogueUserInformationRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.handOver:
			if (acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof HandOverRequest) {
					processed = true;
					HandOverRequest ind = (HandOverRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onHandOverRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing handOverRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.holdCallPartyConnection:
			if (acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof HoldCallPartyConnectionRequest) {
					processed = true;
					HoldCallPartyConnectionRequest ind = (HoldCallPartyConnectionRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onHoldCallPartyConnectionRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing holdCallPartyConnectionRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.reconnect:
			if (acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (parameter instanceof ReconnectRequest) {
					processed = true;
					ReconnectRequest ind = (ReconnectRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onReconnectRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing reconnectRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		case INAPOperationCode.releaseCallPartyConnection:
			if (acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B) {
				if (compType == ComponentType.Invoke && parameter == null) {
					if (parameter instanceof ReleaseCallPartyConnectionRequest) {
						processed = true;
						ReleaseCallPartyConnectionRequest ind = (ReleaseCallPartyConnectionRequest) parameter;
						for (INAPServiceListener serLis : this.serviceListeners) {
							try {
								serLis.onINAPMessage(ind);
								((INAPServiceCircuitSwitchedCallListener) serLis).onReleaseCallPartyConnectionRequest(ind);
							} catch (Exception e) {
								loger.error("Error processing releaseCallPartyConnectionRequest: " + e.getMessage(), e);
							}
						}
					}
				} else if (compType == ComponentType.ReturnResultLast) {
					if(parameter==null) {
						processed = true;
						ReleaseCallPartyConnectionResponse ind = new ReleaseCallPartyConnectionParameterlessResponseImpl();
						ind.setInvokeId(invokeId);
						ind.setINAPDialog(inapDialog);
						inapProviderImpl.getStack().newMessageReceived(ind.getMessageType().name(), inapDialog.getNetworkId());
						
						for (INAPServiceListener serLis : this.serviceListeners) {
							try {
								serLis.onINAPMessage(ind);
								((INAPServiceCircuitSwitchedCallListener) serLis).onReleaseCallPartyConnectionResponse(ind);
							} catch (Exception e) {
								loger.error("Error processing ReleaseCallPartyConnectionResponse: " + e.getMessage(), e);
							}
						}
					}
					else if (parameter instanceof ReleaseCallPartyConnectionResponse) {
						processed = true;
						ReleaseCallPartyConnectionResponse ind = (ReleaseCallPartyConnectionResponse) parameter;
						for (INAPServiceListener serLis : this.serviceListeners) {
							try {
								serLis.onINAPMessage(ind);
								((INAPServiceCircuitSwitchedCallListener) serLis).onReleaseCallPartyConnectionResponse(ind);
							} catch (Exception e) {
								loger.error("Error processing ReleaseCallPartyConnectionResponse: " + e.getMessage(), e);
							}
						}
					}
				}								
			}
			break;
		case INAPOperationCode.signallingInformation:
			if (acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SSP_TO_SCP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_SCP_to_SSP_AC_REV_B
					|| acn == INAPApplicationContext.Ericcson_cs1plus_assist_handoff_SSP_to_SCP_AC_REV_B) {
				if (parameter instanceof SignallingInformationRequest) {
					processed = true;
					SignallingInformationRequest ind = (SignallingInformationRequest) parameter;
					for (INAPServiceListener serLis : this.serviceListeners) {
						try {
							serLis.onINAPMessage(ind);
							((INAPServiceCircuitSwitchedCallListener) serLis).onSignallingInformationRequest(ind);
						} catch (Exception e) {
							loger.error("Error processing signallingInformationRequest: " + e.getMessage(), e);
						}
					}
				}
			}
			break;
		}

		if (!processed) {
			if (parameter == null)
				throw new INAPParsingComponentException("Error while decoding , Parameter is mandatory but not found",
						INAPParsingComponentExceptionReason.MistypedParameter);

			throw new INAPParsingComponentException("", INAPParsingComponentExceptionReason.UnrecognizedOperation);
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy