telephonyserverplugins/ctsydispatchlayer/src/cmessagerouter.cpp
changeset 0 3553901f7fa8
child 19 630d2f34d719
equal deleted inserted replaced
-1:000000000000 0:3553901f7fa8
       
     1 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #include <e32def.h>
       
    17 #include <satcs.h>
       
    18 #include <pcktcs.h>
       
    19 #include <ctsy/serviceapi/mmtsy_ipcdefs.h>
       
    20 #include <ctsy/rmmcustomapi.h>
       
    21 
       
    22 #include <ctsy/ltsy/mltsydispatchfactory.h>
       
    23 
       
    24 #include "cmessagerouter.h"
       
    25 #include <ctsy/ltsy/sat_defs.h>
       
    26 #include <ctsy/ltsy/cctsydispatchercallback.h>
       
    27 #include <ctsy/ltsy/ltsylogger.h>
       
    28 #include "tdispatcherholder.h"
       
    29 #include "requestqueueoneshot.h"
       
    30 #include "ctsydispatcherpanic.h"
       
    31 
       
    32 #include "ccallcontroldispatcher.h"
       
    33 #include "cphonedispatcher.h"
       
    34 #include "csecuritydispatcher.h"
       
    35 #include "cphonebookendispatcher.h"
       
    36 #include "ccellbroadcastdispatcher.h"
       
    37 #include "cphonebookondispatcher.h"
       
    38 #include "cphonebookdispatcher.h"
       
    39 #include "csatdispatcher.h"
       
    40 #include "csimdispatcher.h"
       
    41 #include "csmsdispatcher.h"
       
    42 #include "ccallcontrolmultipartydispatcher.h"
       
    43 #include "csupplementaryservicesdispatcher.h"
       
    44 #include "cpacketservicesdispatcher.h"
       
    45 
       
    46 
       
    47 
       
    48 TMessageManagerCallbackProxy::TMessageManagerCallbackProxy(MmMessageManagerCallback& aCtsyMessageManagerCallback)
       
    49 : iCtsyMessageManagerCallback(&aCtsyMessageManagerCallback)
       
    50 	{
       
    51 	} // TMessageManagerCallbackProxy::TMessageManagerCallbackProxy
       
    52 
       
    53 TMessageManagerCallbackProxy::TMessageManagerCallbackProxy()
       
    54 : iCtsyMessageManagerCallback(NULL)
       
    55 	{
       
    56 	}
       
    57 
       
    58 void TMessageManagerCallbackProxy::SetMessageManagerCallbackProxy(MmMessageManagerCallback& aCtsyMessageManagerCallback)
       
    59 	{
       
    60 	iCtsyMessageManagerCallback = &aCtsyMessageManagerCallback;
       
    61 	}
       
    62 
       
    63 void TMessageManagerCallbackProxy::Complete( TInt aIpc, TInt aResult )
       
    64 /**
       
    65  * Completes requests / indications back to the Common TSY.
       
    66  *
       
    67  * @param aIpc The IPC to complete.
       
    68  * @param aResult The result code of the request / indication.
       
    69  */
       
    70 	{
       
    71 	TSYLOGENTRYEXITARGS(_L8(" [IPC=%d, result=%d]"), aIpc, aResult);
       
    72 	ASSERT(iCtsyMessageManagerCallback);
       
    73 	iCtsyMessageManagerCallback->Complete(aIpc, aResult);
       
    74 	} // TMessageManagerCallbackProxy::Complete
       
    75 
       
    76 
       
    77 void TMessageManagerCallbackProxy::Complete( TInt aIpc, CMmDataPackage* aData, TInt aResult )
       
    78 /**
       
    79  * Completes requests / indications back to the Common TSY.
       
    80  *
       
    81  * @param aIpc The IPC to complete.
       
    82  * @param aData Package encapulating the data relating to the request / indication.
       
    83  * @param aResult The result code of the request / indication.
       
    84  */
       
    85 	{
       
    86 	TSYLOGENTRYEXITARGS(_L8(" [IPC=%d, result=%d, aData=0x%x]"), aIpc, aResult, aData);
       
    87 	ASSERT(iCtsyMessageManagerCallback);
       
    88 	iCtsyMessageManagerCallback->Complete(aIpc, aData, aResult);
       
    89 	} // TMessageManagerCallbackProxy::Complete
       
    90 
       
    91 
       
    92 CMessageRouter* CMessageRouter::NewL(MmMessageManagerCallback& aMessageManagerCallback)
       
    93     {
       
    94     TSYLOGENTRYEXIT;
       
    95 
       
    96     CMessageRouter* const self = new(ELeave) CMessageRouter(aMessageManagerCallback);
       
    97     CleanupStack::PushL( self );
       
    98     self->ConstructL();
       
    99     CleanupStack::Pop(self);
       
   100     return self;
       
   101     }
       
   102 
       
   103 CMessageRouter::CMessageRouter(MmMessageManagerCallback& aMessageManagerCallback)
       
   104 	: 	iMessageManagerCallbackProxy(aMessageManagerCallback),
       
   105 		iSatMessageManagerCallbackProxy()
       
   106     {
       
   107     }
       
   108 
       
   109 
       
   110 void CMessageRouter::ConstructL()
       
   111 /**
       
   112  * Second phase constructor.
       
   113  */
       
   114     {
       
   115     TSYLOGENTRYEXIT;
       
   116 
       
   117     iRequestQueueOneShot = CRequestQueueOneShot::NewL();
       
   118 
       
   119     // Create callback object
       
   120     iCtsyDispatcherCallback = CCtsyDispatcherCallback::NewL();
       
   121     
       
   122     
       
   123     // The following code loads the LicenseeSkeletonLTSY.dll
       
   124     // This LTSY is for testing purposes only. In a real
       
   125     // environment, the licensee is expected to provide their own 
       
   126     // LTSY, which should adhere to the  MLtsyDispatchFactoryV1 interface
       
   127     
       
   128 	#define TEST_CODE
       
   129 	    
       
   130     _LIT(KLicenseeLTSYDllName, "licenseeskeletontsy.dll");    
       
   131     
       
   132     User::LeaveIfError(iLoadedLib.Load(KLicenseeLTSYDllName));
       
   133     typedef MLtsyFactoryBase* (*LTsyFactoryL)();
       
   134     LTsyFactoryL libEntry = (LTsyFactoryL)iLoadedLib.Lookup(1);
       
   135     MLtsyFactoryBase* ltsyfactory = (MLtsyFactoryBase*)(*libEntry)();	// libEntry may leave.
       
   136     iLtsyFactoryV1 = static_cast<MLtsyDispatchFactoryV1*>(ltsyfactory);
       
   137     
       
   138     iLtsyFactoryV1->ConstructL(*iCtsyDispatcherCallback);
       
   139 
       
   140     // Create the dispatchers
       
   141 
       
   142 	iCtsyDispatcherCallControlDispatcher = CCallControlDispatcher::NewL(
       
   143 			*iLtsyFactoryV1, iMessageManagerCallbackProxy, *iRequestQueueOneShot);
       
   144 
       
   145 
       
   146 	iCtsyDispatcherPhoneDispatcher = CPhoneDispatcher::NewL(
       
   147 			*iLtsyFactoryV1, iMessageManagerCallbackProxy, iSatMessageManagerCallbackProxy,
       
   148 			*iRequestQueueOneShot, *this);
       
   149 
       
   150 
       
   151 	iCtsyDispatcherSecurityDispatcher = CSecurityDispatcher::NewL(
       
   152 			*iLtsyFactoryV1, iMessageManagerCallbackProxy, *iRequestQueueOneShot);
       
   153 
       
   154 
       
   155 	iCtsyDispatcherPhonebookEnDispatcher = CPhonebookEnDispatcher::NewL(
       
   156 			*iLtsyFactoryV1, iMessageManagerCallbackProxy, *iRequestQueueOneShot);
       
   157 
       
   158 
       
   159 	iCtsyDispatcherCellBroadcastDispatcher = CCellBroadcastDispatcher::NewL(
       
   160 			*iLtsyFactoryV1, iMessageManagerCallbackProxy, *iRequestQueueOneShot);
       
   161 
       
   162 
       
   163 	iCtsyDispatcherPhonebookOnDispatcher = CPhonebookOnDispatcher::NewL(
       
   164 			*iLtsyFactoryV1, iMessageManagerCallbackProxy, *iRequestQueueOneShot);
       
   165 
       
   166 
       
   167 	iCtsyDispatcherPhonebookDispatcher = CPhonebookDispatcher::NewL(
       
   168 			*iLtsyFactoryV1, iMessageManagerCallbackProxy, *iRequestQueueOneShot);
       
   169 
       
   170 
       
   171 	iCtsyDispatcherSimDispatcher = CSimDispatcher::NewL(
       
   172 			*iLtsyFactoryV1, iMessageManagerCallbackProxy, *iRequestQueueOneShot);
       
   173 
       
   174 
       
   175 	iCtsyDispatcherSmsDispatcher = CSmsDispatcher::NewL(
       
   176 			*iLtsyFactoryV1, iMessageManagerCallbackProxy, *iRequestQueueOneShot);
       
   177 
       
   178 
       
   179 	iCtsyDispatcherCallControlMultipartyDispatcher = CCallControlMultipartyDispatcher::NewL(
       
   180 			*iLtsyFactoryV1, iMessageManagerCallbackProxy, *iRequestQueueOneShot);
       
   181 
       
   182 
       
   183 	iCtsyDispatcherSupplementaryServicesDispatcher = CSupplementaryServicesDispatcher::NewL(
       
   184 			*iLtsyFactoryV1, iMessageManagerCallbackProxy, *iRequestQueueOneShot);
       
   185 
       
   186 
       
   187 	iCtsyDispatcherPacketServicesDispatcher = CPacketServicesDispatcher::NewL(
       
   188 			*iLtsyFactoryV1, iMessageManagerCallbackProxy, *iRequestQueueOneShot);
       
   189 
       
   190 
       
   191 	iCtsyDispatcherSatDispatcher = CSatDispatcher::NewL(
       
   192 			*iLtsyFactoryV1, iMessageManagerCallbackProxy, iSatMessageManagerCallbackProxy, *iRequestQueueOneShot);
       
   193 
       
   194 
       
   195 
       
   196 	iDispatcherHolder = new (ELeave) TDispatcherHolder(
       
   197 			*iCtsyDispatcherCallControlDispatcher,
       
   198 			*iCtsyDispatcherPhoneDispatcher,
       
   199 			*iCtsyDispatcherSecurityDispatcher,
       
   200 			*iCtsyDispatcherPhonebookEnDispatcher,
       
   201 			*iCtsyDispatcherCellBroadcastDispatcher,
       
   202 			*iCtsyDispatcherPhonebookOnDispatcher,
       
   203 			*iCtsyDispatcherPhonebookDispatcher,
       
   204 			*iCtsyDispatcherSimDispatcher,
       
   205 			*iCtsyDispatcherSmsDispatcher,
       
   206 			*iCtsyDispatcherCallControlMultipartyDispatcher,
       
   207 			*iCtsyDispatcherSupplementaryServicesDispatcher,
       
   208 			*iCtsyDispatcherPacketServicesDispatcher,
       
   209 			*iCtsyDispatcherSatDispatcher);
       
   210 
       
   211     iCtsyDispatcherCallback->SetDispatcherHolder(*iDispatcherHolder);
       
   212 
       
   213 	iCtsyDispatcherCallControlDispatcher->SetDispatcherHolder(*iDispatcherHolder);
       
   214 	iCtsyDispatcherPhoneDispatcher->SetDispatcherHolder(*iDispatcherHolder);
       
   215 	iCtsyDispatcherSecurityDispatcher->SetDispatcherHolder(*iDispatcherHolder);
       
   216 	iCtsyDispatcherPhonebookEnDispatcher->SetDispatcherHolder(*iDispatcherHolder);
       
   217 	iCtsyDispatcherCellBroadcastDispatcher->SetDispatcherHolder(*iDispatcherHolder);
       
   218 	iCtsyDispatcherPhonebookOnDispatcher->SetDispatcherHolder(*iDispatcherHolder);
       
   219 	iCtsyDispatcherPhonebookDispatcher->SetDispatcherHolder(*iDispatcherHolder);
       
   220 	iCtsyDispatcherSimDispatcher->SetDispatcherHolder(*iDispatcherHolder);
       
   221 	iCtsyDispatcherSmsDispatcher->SetDispatcherHolder(*iDispatcherHolder);
       
   222 	iCtsyDispatcherCallControlMultipartyDispatcher->SetDispatcherHolder(*iDispatcherHolder);
       
   223 	iCtsyDispatcherSupplementaryServicesDispatcher->SetDispatcherHolder(*iDispatcherHolder);
       
   224 	iCtsyDispatcherPacketServicesDispatcher->SetDispatcherHolder(*iDispatcherHolder);
       
   225 	iCtsyDispatcherSatDispatcher->SetDispatcherHolder(*iDispatcherHolder);
       
   226 
       
   227     StartBootSequenceL();
       
   228     } // CMessageRouter::ConstructL
       
   229 
       
   230 void CMessageRouter::SetSatMessageManager(MmMessageManagerCallback& aMessageManagerCallback)
       
   231 	{
       
   232 	TSYLOGENTRYEXIT;
       
   233 	iSatMessageManagerCallbackProxy.SetMessageManagerCallbackProxy(aMessageManagerCallback);
       
   234 	}
       
   235 
       
   236 void CMessageRouter::SetSatCallOriginInterface(MStkTsyCallOrigin& aSatCallOrigin)
       
   237 	{
       
   238 	TSYLOGENTRYEXIT;
       
   239 	//this pointer is initialised in ConstructL
       
   240 	iCtsyDispatcherSatDispatcher->SetSatCallOriginInterface(aSatCallOrigin);
       
   241 	}
       
   242 
       
   243 CMessageRouter::~CMessageRouter()
       
   244     {
       
   245     TSYLOGENTRYEXIT;
       
   246 
       
   247     if (iLtsyFactoryV1)
       
   248     	{
       
   249     	iLtsyFactoryV1->Release();
       
   250     	iLtsyFactoryV1 = NULL;
       
   251     	}
       
   252 
       
   253     iLoadedLib.Close();
       
   254     
       
   255     // Delete dispatchers
       
   256 
       
   257 	delete iCtsyDispatcherCallControlDispatcher;
       
   258     iCtsyDispatcherCallControlDispatcher = NULL;
       
   259 
       
   260 	delete iCtsyDispatcherPhoneDispatcher;
       
   261     iCtsyDispatcherPhoneDispatcher = NULL;
       
   262 
       
   263 	delete iCtsyDispatcherSecurityDispatcher;
       
   264     iCtsyDispatcherSecurityDispatcher = NULL;
       
   265 
       
   266 	delete iCtsyDispatcherPhonebookEnDispatcher;
       
   267     iCtsyDispatcherPhonebookEnDispatcher = NULL;
       
   268 
       
   269 	delete iCtsyDispatcherCellBroadcastDispatcher;
       
   270     iCtsyDispatcherCellBroadcastDispatcher = NULL;
       
   271 
       
   272 	delete iCtsyDispatcherPhonebookOnDispatcher;
       
   273     iCtsyDispatcherPhonebookOnDispatcher = NULL;
       
   274 
       
   275 	delete iCtsyDispatcherPhonebookDispatcher;
       
   276     iCtsyDispatcherPhonebookDispatcher = NULL;
       
   277 
       
   278 	delete iCtsyDispatcherSimDispatcher;
       
   279     iCtsyDispatcherSimDispatcher = NULL;
       
   280 
       
   281 	delete iCtsyDispatcherSmsDispatcher;
       
   282     iCtsyDispatcherSmsDispatcher = NULL;
       
   283 
       
   284 	delete iCtsyDispatcherCallControlMultipartyDispatcher;
       
   285     iCtsyDispatcherCallControlMultipartyDispatcher = NULL;
       
   286 
       
   287 	delete iCtsyDispatcherSupplementaryServicesDispatcher;
       
   288     iCtsyDispatcherSupplementaryServicesDispatcher = NULL;
       
   289 
       
   290 	delete iCtsyDispatcherPacketServicesDispatcher;
       
   291     iCtsyDispatcherPacketServicesDispatcher = NULL;
       
   292 
       
   293 	delete iCtsyDispatcherSatDispatcher;
       
   294     iCtsyDispatcherSatDispatcher = NULL;
       
   295 
       
   296     delete iCtsyDispatcherCallback;
       
   297     iCtsyDispatcherCallback = NULL;
       
   298 
       
   299     delete iDispatcherHolder;
       
   300     iDispatcherHolder = NULL;
       
   301 
       
   302     delete iRequestQueueOneShot;
       
   303     iRequestQueueOneShot = NULL;
       
   304 
       
   305     } // CMessageRouter::~CMessageRouter
       
   306 
       
   307 
       
   308 void CMessageRouter::StartBootSequenceL()
       
   309 /**
       
   310  * Second initialisation phase.
       
   311  */
       
   312     {
       
   313     TSYLOGENTRYEXIT;
       
   314 
       
   315     // Kick off boot sequence
       
   316     TInt ret = ExtFuncL(EMmTsyBootNotifyModemStatusReadyIPC, NULL);
       
   317     LOG(_L8("ExtFuncL(EMmTsyBootNotifyModemStatusReadyIPC returned %d"), ret);
       
   318     User::LeaveIfError(ret);
       
   319     } // CMessageRouter::StartBootSequenceL
       
   320 
       
   321 
       
   322 TInt CMessageRouter::ExtFuncL(TInt aIpc, const CMmDataPackage* aDataPackage)
       
   323 /**
       
   324  * Part of the MMessageRouter interface which is part of the LTSY plugin
       
   325  * interface.
       
   326  *
       
   327  * This function is the entry point for a request from the CTSY into the
       
   328  * LTSY.
       
   329  *
       
   330  * @param aIpc The IPC of the request.
       
   331  *
       
   332  * @param aDataPackage The data package containing the parameters of the
       
   333  * request.
       
   334  *
       
   335  * @return Error code to propagate back up to the CTSY relating to making
       
   336  * this request. Returns KErrNone on success, KErrNotSupported if the LTSY
       
   337  * does not support this request (it could not find a message handler to
       
   338  * handle this request).
       
   339  */
       
   340 	{
       
   341 	TSYLOGENTRYEXITARGS(_L8(" [IPC=%d]"), aIpc);
       
   342 
       
   343 	TInt ret = KErrNotSupported;
       
   344 
       
   345 	// Dispatch to Licensee LTSY
       
   346 	switch (aIpc)
       
   347 		{
       
   348 
       
   349 		// CallControl Functional Unit IPCs
       
   350 
       
   351 	case EEtelCallAnswer:
       
   352 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchAnswerL(aDataPackage);
       
   353 		break;
       
   354 	case EMobileCallAnswerISV:
       
   355 		ret = iCtsyDispatcherCallControlDispatcher->DispatchAnswerIsvL(aDataPackage);
       
   356 		break;
       
   357 	case EMobileCallHold:
       
   358 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchHoldL(aDataPackage);
       
   359 		break;
       
   360 	case EMobileCallDialEmergencyCall:
       
   361 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchDialEmergencyL(aDataPackage);
       
   362 		break;
       
   363 	case EMobilePhoneStopDTMFTone:
       
   364 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchStopDtmfToneL(aDataPackage);
       
   365 		break;
       
   366 	case EMobileCallDialISV:
       
   367 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchDialIsvL(aDataPackage);
       
   368 		break;
       
   369 	case EMobilePhoneSetALSLine:
       
   370 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchSetActiveAlsLineL(aDataPackage);
       
   371 		break;
       
   372 	case EMobilePhoneSendDTMFTonesCancel:
       
   373 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchSendDtmfTonesCancelL(aDataPackage);
       
   374 		break;
       
   375 	case EEtelCallHangUp:
       
   376 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchHangUpL(aDataPackage);
       
   377 		break;
       
   378 	case EMobileCallResume:
       
   379 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchResumeL(aDataPackage);
       
   380 		break;
       
   381 	case EMobileCallSetDynamicHscsdParams:
       
   382 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchSetDynamicHscsdParamsL(aDataPackage);
       
   383 		break;
       
   384 	case EEtelCallDial:
       
   385 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchDialL(aDataPackage);
       
   386 		break;
       
   387 	case EMobileCallDialNoFdnCheck:
       
   388 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchDialNoFdnCheckL(aDataPackage);
       
   389 		break;
       
   390 	case EMobileCallTransfer:
       
   391 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchTransferL(aDataPackage);
       
   392 		break;
       
   393 	case EMobilePhoneSendDTMFTones:
       
   394 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchSendDtmfTonesL(aDataPackage);
       
   395 		break;
       
   396 	case EMobilePhoneGetIdentityServiceStatus:
       
   397 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchGetIdentityServiceStatusL(aDataPackage);
       
   398 		break;
       
   399 	case EMobileCallSwap:
       
   400 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchSwapL(aDataPackage);
       
   401 		break;
       
   402 	case EMobilePhoneContinueDTMFStringSending:
       
   403 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchContinueDtmfStringSendingL(aDataPackage);
       
   404 		break;
       
   405 	case EEtelCallLoanDataPort:
       
   406 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchLoanDataPortL(aDataPackage);
       
   407 		break;
       
   408 	case EEtelCallRecoverDataPort:
       
   409 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchRecoverDataPortL(aDataPackage);
       
   410 		break;
       
   411 	case EMobilePhoneStartDTMFTone:
       
   412 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchStartDtmfToneL(aDataPackage);
       
   413 		break;
       
   414 	case EMobilePhoneGetALSLine:
       
   415 		ret = iCtsyDispatcherCallControlDispatcher->DispatchGetActiveAlsLineL();
       
   416 		break;
       
   417 	case ECustomCheckEmergencyNumberIPC:
       
   418 		ret = iCtsyDispatcherCallControlDispatcher->DispatchQueryIsEmergencyNumberL(aDataPackage);
       
   419 		break;
       
   420 	case ECustomCheckAlsPpSupportIPC:
       
   421 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchGetAlsPpSupportL();
       
   422 		break;
       
   423 	case ECustomGetAlsBlockedIPC:
       
   424 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchGetAlsBlockedStatusL();
       
   425 		break;
       
   426 	case ECustomSetAlsBlockedIPC:
       
   427 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchSetAlsBlockedL(aDataPackage);
       
   428 		break;
       
   429 	case ECustomGetLifeTimeIPC:
       
   430 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchGetLifeTimeL();
       
   431 		break;
       
   432 	case ECustomTerminateCallIPC:
       
   433 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchTerminateCallL(aDataPackage);
       
   434 		break;
       
   435 	case ECustomGetIccCallForwardingStatusIPC:
       
   436 	    ret = iCtsyDispatcherCallControlDispatcher->DispatchGetCallForwardingIndicatorL();
       
   437 		break;
       
   438 	case ECtsyUpdateLifeTimeReq:
       
   439 		ret = iCtsyDispatcherCallControlDispatcher->DispatchUpdateLifeTimeL(aDataPackage);
       
   440 		break;
       
   441 
       
   442 		// Phone functionality
       
   443 
       
   444 	case EMobilePhoneGetFdnStatus:
       
   445 		ret = iCtsyDispatcherPhoneDispatcher->DispatchGetFdnStatusL();
       
   446 		break;
       
   447 	case EMobilePhoneGetNetworkRegistrationStatus:
       
   448 		ret = iCtsyDispatcherPhoneDispatcher->DispatchGetNetworkRegistrationStatusL();
       
   449 		break;
       
   450 	case EMmTsyBootNotifyModemStatusReadyIPC:
       
   451 		ret = iCtsyDispatcherPhoneDispatcher->DispatchBootNotifyModemStatusReadyL();
       
   452 		break;
       
   453 	case EMmTsyBootNotifySimStatusReadyIPC:
       
   454 		ret = iCtsyDispatcherPhoneDispatcher->DispatchBootNotifySimStatusReadyL();
       
   455 		break;
       
   456 	case EMobilePhoneGetHomeNetwork:
       
   457 		ret = iCtsyDispatcherPhoneDispatcher->DispatchGetHomeNetworkL();
       
   458 		break;
       
   459 	case EMmTsySimRefreshRegisterIPC:
       
   460 		ret = iCtsyDispatcherPhoneDispatcher->DispatchSimRefreshRegisterL(aDataPackage);
       
   461 		break;
       
   462 	case EMmTsyGetCallForwardingNumberIPC: 		// Deprecated parts of the boot sequence,
       
   463 	                                            // deliberately not passed to Licensee LTSY
       
   464 
       
   465 	case EMmTsyGetCustomVendorExtPtrIPC:		// Part of deprecated custom API initialisation
       
   466 												// deliberately not passed to Licensee LTSY
       
   467 		break;
       
   468 	case EReadViagHomeZoneCacheIPC:				// Deliberated not passed to LTSY
       
   469 												// Leave like this unless this custom functionality
       
   470 												// is needed
       
   471 		break;
       
   472 	case ECustomNetWakeupIPC:
       
   473 		ret = iCtsyDispatcherPhoneDispatcher->DispatchNspsWakeupL();
       
   474 		break;
       
   475 	case ECustomSetSystemNetworkModeIPC:
       
   476 		ret = iCtsyDispatcherPhoneDispatcher->DispatchSetSystemNetworkModeL(aDataPackage);
       
   477 		break;
       
   478 	case ECustomGetCurrentSystemNetworkModesIPC:
       
   479 		ret = iCtsyDispatcherPhoneDispatcher->DispatchGetCurrentSystemNetworkModesL();
       
   480 		break;
       
   481 	case ECustomResetNetServerIPC:
       
   482 		ret = iCtsyDispatcherPhoneDispatcher->DispatchResetNetServerL();
       
   483 		break;
       
   484 	case ECustomSetAlwaysOnMode:
       
   485 		ret = iCtsyDispatcherPhoneDispatcher->DispatchSetAlwaysOnModeL(aDataPackage);
       
   486 		break;
       
   487 	case ECustomSetDriveModeIPC:
       
   488 		ret = iCtsyDispatcherPhoneDispatcher->DispatchSetDriveModeL(aDataPackage);
       
   489 		break;
       
   490 	case ECustomReadHSxPAStatusIPC:
       
   491 		ret = iCtsyDispatcherPhoneDispatcher->DispatchGetHspaStatusL();
       
   492 		break;
       
   493 	case ECustomWriteHSxPAStatusIPC:
       
   494 		ret = iCtsyDispatcherPhoneDispatcher->DispatchSetHspaStatusL(aDataPackage);
       
   495 		break;
       
   496 	case ECustomGetNetworkProviderNameIPC:
       
   497 		ret = iCtsyDispatcherPhoneDispatcher->DispatchGetNetworkProviderNameL();
       
   498 		break;
       
   499 	case ECustomGetOperatorNameIPC:
       
   500 		ret = iCtsyDispatcherPhoneDispatcher->DispatchGetOperatorNameL();
       
   501 		break;
       
   502 	case ECustomGetCellInfoIPC:
       
   503 		ret = iCtsyDispatcherPhoneDispatcher->DispatchGetCellInfoL();
       
   504 		break;
       
   505 	case ECtsyPhoneTerminateAllCallsReq:
       
   506 		ret = iCtsyDispatcherPhoneDispatcher->DispatchTerminateAllCallsL(aDataPackage);
       
   507 		break;
       
   508 
       
   509 		// Phone Functional Unit IPCs
       
   510 
       
   511 	case EMobilePhoneGetServiceProviderName:
       
   512 	    ret = iCtsyDispatcherPhoneDispatcher->DispatchGetServiceProviderNameL();
       
   513 		break;
       
   514 	case EMobilePhoneGetPhoneId:
       
   515 	    ret = iCtsyDispatcherPhoneDispatcher->DispatchGetPhoneIdL(KPhoneIdReqOriginPhoneFu);
       
   516 		break;
       
   517 	case EMobilePhoneGetDetectedNetworksV2Phase1:
       
   518 	    ret = iCtsyDispatcherPhoneDispatcher->DispatchGetDetectedNetworksL();
       
   519 		break;
       
   520 	case EMobilePhoneGetDetectedNetworksCancel:
       
   521 	    ret = iCtsyDispatcherPhoneDispatcher->DispatchGetDetectedNetworksCancelL();
       
   522 		break;
       
   523 	case EMobilePhoneSelectNetwork:
       
   524 	    ret = iCtsyDispatcherPhoneDispatcher->DispatchSelectNetworkL(aDataPackage);
       
   525 		break;
       
   526 	case EMobilePhoneSelectNetworkCancel:
       
   527 	    ret = iCtsyDispatcherPhoneDispatcher->DispatchSelectNetworkCancelL();
       
   528 		break;
       
   529 	case EMobilePhoneSetNetworkSelectionSetting:
       
   530 	    ret = iCtsyDispatcherPhoneDispatcher->DispatchSetNetworkSelectionSettingL(aDataPackage);
       
   531 		break;
       
   532 	case ECtsyPhoneCellInfoIndReq:
       
   533 		ret = iCtsyDispatcherPhoneDispatcher->DispatchRegisterCellInfoChangeNotificationL();
       
   534 		break;
       
   535 	case ECtsyPhoneCellInfoReq:
       
   536 		ret = iCtsyDispatcherPhoneDispatcher->DispatchGetPhoneCellInfoL();
       
   537 		break;
       
   538 	case ECustomGetServiceTableSupportbyApplicationIPC:
       
   539 		ret = iCtsyDispatcherPhoneDispatcher->DispatchGetUsimServiceSupportL(aDataPackage);
       
   540 		break;
       
   541 	case EMobilePhoneGetCurrentActiveUSimApplication:
       
   542 		ret = iCtsyDispatcherPhoneDispatcher->DispatchGetCurrentActiveUsimApplicationL();
       
   543 		break;
       
   544 	case ECustomGetBandSelectionIPC:
       
   545 		ret = iCtsyDispatcherPhoneDispatcher->DispatchGetSystemNetworkBandL();
       
   546 		break;
       
   547 	case ECustomSetBandSelectionIPC:
       
   548 		ret = iCtsyDispatcherPhoneDispatcher->DispatchSetSystemNetworkBandL(aDataPackage);
       
   549 		break;
       
   550 
       
   551 		// Security Functional Unit IPCs
       
   552 
       
   553 	case EMobilePhoneGetSecurityCodeInfo:
       
   554 	    ret = iCtsyDispatcherSecurityDispatcher->DispatchGetSecurityCodeInfoL(aDataPackage);
       
   555 		break;
       
   556 	case EMobilePhoneGetLockInfo:
       
   557 	    ret = iCtsyDispatcherSecurityDispatcher->DispatchGetLockInfoL(aDataPackage);
       
   558 		break;
       
   559 	case EMobilePhoneAbortSecurityCode:
       
   560 	    ret = iCtsyDispatcherSecurityDispatcher->DispatchAbortSecurityCodeL(aDataPackage);
       
   561 		break;
       
   562 	case EMmTsySecurityGetSimActivePinStateIPC:
       
   563 	    ret = iCtsyDispatcherSecurityDispatcher->DispatchGetCurrentActivePinL();
       
   564 		break;
       
   565 	case EMobilePhoneSetLockSetting:
       
   566 	    ret = iCtsyDispatcherSecurityDispatcher->DispatchSetLockSettingL(aDataPackage);
       
   567 		break;
       
   568 	case EMobilePhoneVerifySecurityCode:
       
   569 	    ret = iCtsyDispatcherSecurityDispatcher->DispatchVerifySecurityCodeL(aDataPackage);
       
   570 		break;
       
   571 	case EMmTsyPhoneGetPin1DisableSupportedIPC:
       
   572 		ret = iCtsyDispatcherSecurityDispatcher->DispatchGetPin1DisableSupportedL();
       
   573 		break;		
       
   574 	case ECustomCheckSecurityCodeIPC:
       
   575 	    ret = iCtsyDispatcherSecurityDispatcher->DispatchCheckSecurityCodeL(aDataPackage);
       
   576 		break;
       
   577 	case ECustomDisablePhoneLockIPC:
       
   578 	    ret = iCtsyDispatcherSecurityDispatcher->DispatchDisablePhoneLockL(aDataPackage);
       
   579 		break;
       
   580 	case ECustomGetCipheringInfoIPC:
       
   581 	    ret = iCtsyDispatcherSecurityDispatcher->DispatchGetCipheringInfoL();
       
   582 		break;
       
   583 	case ECustomIsBlockedIPC:
       
   584 	    ret = iCtsyDispatcherSecurityDispatcher->DispatchIsSecurityCodeBlockedL(aDataPackage);
       
   585 		break;
       
   586 	case ECustomCheckSecurityCodeCancelIPC:
       
   587 	    ret = iCtsyDispatcherSecurityDispatcher->DispatchCheckSecurityCodeCancelL(aDataPackage);
       
   588 		break;		
       
   589 
       
   590 		// PhonebookEn Functional Unit IPCs
       
   591 
       
   592 	case EMmTsyENStoreGetInfoIPC:
       
   593 	    ret = iCtsyDispatcherPhonebookEnDispatcher->DispatchStoreGetInfoL();
       
   594 		break;
       
   595 	case EMmTsyENStoreReadAllPhase1IPC:
       
   596 	    ret = iCtsyDispatcherPhonebookEnDispatcher->DispatchStoreReadAllL();
       
   597 		break;
       
   598 	case EMmTsyENStoreReadIPC:
       
   599 	    ret = iCtsyDispatcherPhonebookEnDispatcher->DispatchStoreReadEntryL(aDataPackage);
       
   600 		break;
       
   601 
       
   602 		// CellBroadcast Functional Unit IPCs
       
   603 
       
   604 	case EMobileBroadcastMessagingSetFilterSetting:
       
   605 	    ret = iCtsyDispatcherCellBroadcastDispatcher->DispatchSetBroadcastFilterSettingL(aDataPackage);
       
   606 		break;
       
   607 	case EMobileBroadcastMessagingReceiveMessage:
       
   608 	    ret = iCtsyDispatcherCellBroadcastDispatcher->DispatchActivateBroadcastReceiveMessageL(aDataPackage);
       
   609 		break;
       
   610 	case EMobileBroadcastMessagingReceiveMessageCancel:
       
   611 	    ret = iCtsyDispatcherCellBroadcastDispatcher->DispatchReceiveMessageCancelL(aDataPackage);
       
   612 		break;
       
   613 	case ECustomStartSimCbTopicBrowsingIPC:
       
   614 	    ret = iCtsyDispatcherCellBroadcastDispatcher->DispatchStartSimCbTopicBrowsingL();
       
   615 		break;	
       
   616 	case ECustomDeleteSimCbTopicIPC:
       
   617 	    ret = iCtsyDispatcherCellBroadcastDispatcher->DispatchDeleteSimCbTopicL(aDataPackage);
       
   618 		break;	
       
   619 
       
   620 		// PhonebookOn Functional Unit IPCs
       
   621 
       
   622 	case EMmTsyONStoreReadIPC:
       
   623 	    ret = iCtsyDispatcherPhonebookOnDispatcher->DispatchStoreReadL(aDataPackage);
       
   624 		break;
       
   625 	case EMmTsyONStoreDeleteAllIPC:
       
   626 	    ret = iCtsyDispatcherPhonebookOnDispatcher->DispatchStoreDeleteAllL();
       
   627 		break;
       
   628 	case EMmTsyONStoreReadEntryIPC:
       
   629 	    ret = iCtsyDispatcherPhonebookOnDispatcher->DispatchStoreReadEntryL(aDataPackage);
       
   630 		break;
       
   631 	case EMmTsyONStoreGetInfoIPC:
       
   632 	    ret = iCtsyDispatcherPhonebookOnDispatcher->DispatchStoreGetInfoL();
       
   633 		break;
       
   634 	case EMmTsyONStoreReadSizeIPC:
       
   635 	    ret = iCtsyDispatcherPhonebookOnDispatcher->DispatchStoreGetReadStoreSizeL();
       
   636 		break;
       
   637 	case EMmTsyONStoreDeleteIPC:
       
   638 	    ret = iCtsyDispatcherPhonebookOnDispatcher->DispatchStoreDeleteEntryL(aDataPackage);
       
   639 		break;
       
   640 	case EMmTsyONStoreWriteEntryIPC:
       
   641 	    ret = iCtsyDispatcherPhonebookOnDispatcher->DispatchStoreWriteEntryL(aDataPackage);
       
   642 		break;
       
   643 	case EMmTsyONStoreWriteIPC:
       
   644 	    ret = iCtsyDispatcherPhonebookOnDispatcher->DispatchStoreWriteL(aDataPackage);
       
   645 		break;
       
   646 	case EMmTsyONStoreWriteSizeIPC:
       
   647 	    ret = iCtsyDispatcherPhonebookOnDispatcher->DispatchStoreGetStoreSizeL();
       
   648 		break;
       
   649 
       
   650 		// Phonebook Functional Unit IPCs
       
   651 
       
   652 	case EMmTsyPhoneBookStoreReadIPC:
       
   653 	    ret = iCtsyDispatcherPhonebookDispatcher->DispatchStoreReadEntryL(aDataPackage);
       
   654 		break;
       
   655 	case EMmTsyPhoneBookStoreDeleteIPC:
       
   656 	    ret = iCtsyDispatcherPhonebookDispatcher->DispatchStoreDeleteEntryL(aDataPackage);
       
   657 		break;
       
   658 	case EMmTsyPhoneBookStoreCacheIPC:
       
   659 	    ret = iCtsyDispatcherPhonebookDispatcher->DispatchStoreCacheL(aDataPackage);
       
   660 		break;
       
   661 	case EMmTsyPhoneBookStoreGetInfoIPC:
       
   662 	    ret = iCtsyDispatcherPhonebookDispatcher->DispatchStoreGetInfoL(aDataPackage);
       
   663 		break;
       
   664 	case EMmTsyPhoneBookStoreInitIPC:
       
   665 	    ret = iCtsyDispatcherPhonebookDispatcher->DispatchStoreInitialiseL(aDataPackage);
       
   666 		break;
       
   667 	case EMmTsyPhoneBookStoreDeleteAllIPC:
       
   668 	    ret = iCtsyDispatcherPhonebookDispatcher->DispatchStoreDeleteAllL(aDataPackage);
       
   669 		break;
       
   670 	case EMobilePhoneStoreReadAllPhase1:
       
   671 	    ret = iCtsyDispatcherPhonebookDispatcher->DispatchSmsStoreReadAllL();
       
   672 		break;
       
   673 	case EMmTsyPhoneBookStoreWriteIPC:
       
   674 	    ret = iCtsyDispatcherPhonebookDispatcher->DispatchStoreWriteEntryL(aDataPackage);
       
   675 		break;
       
   676 	case EMobilePhoneGetPhoneStoreInfo:
       
   677 	    ret = iCtsyDispatcherPhonebookDispatcher->DispatchGetPhoneStoreInfoL(aDataPackage);
       
   678 		break;
       
   679 	case EMobilePhoneStoreDelete:
       
   680 	    ret = iCtsyDispatcherPhonebookDispatcher->DispatchSmsStoreDeleteEntryL(aDataPackage);
       
   681 		break;
       
   682 	case EMobilePhoneStoreDeleteAll:
       
   683 	    ret = iCtsyDispatcherPhonebookDispatcher->DispatchSmsStoreDeleteAllL();
       
   684 		break;
       
   685 	case EMobilePhoneStoreGetInfo:
       
   686 	    ret = iCtsyDispatcherPhonebookDispatcher->DispatchSmsStoreGetInfoL();
       
   687 		break;
       
   688 	case EMobilePhoneStoreRead:
       
   689 	    ret = iCtsyDispatcherPhonebookDispatcher->DispatchSmsStoreReadEntryL(aDataPackage);
       
   690 		break;
       
   691 	case EMobilePhoneStoreWrite:
       
   692 	    ret = iCtsyDispatcherPhonebookDispatcher->DispatchSmsStoreWriteEntryL(aDataPackage);
       
   693 		break;
       
   694 	case EMmTsyPhoneBookStoreCacheCancelIPC:
       
   695 	    ret = iCtsyDispatcherPhonebookDispatcher->DispatchStoreCacheCancelL(aDataPackage);
       
   696 		break;
       
   697 
       
   698 		// Sim Functional Unit IPCs
       
   699 
       
   700 	case EMobilePhoneGetAPNControlListServiceStatus:
       
   701 	    ret = iCtsyDispatcherSimDispatcher->DispatchGetApnControlListServiceStatusL();
       
   702 		break;
       
   703 	case EMobilePhoneDeleteAPNName:
       
   704 	    ret = iCtsyDispatcherSimDispatcher->DispatchDeleteApnNameL(aDataPackage);
       
   705 		break;
       
   706 	case EMobilePhoneEnumerateAPNEntries:
       
   707 	    ret = iCtsyDispatcherSimDispatcher->DispatchEnumerateApnEntriesL();
       
   708 		break;
       
   709 	case EMobilePhoneChangeSecurityCode:
       
   710 	    ret = iCtsyDispatcherSimDispatcher->DispatchChangeSecurityCodeL(aDataPackage);
       
   711 		break;
       
   712 	case EMobilePhoneSetFdnSetting:
       
   713 	    ret = iCtsyDispatcherSimDispatcher->DispatchSetFdnSettingL(aDataPackage);
       
   714 		break;
       
   715 	case EMobilePhoneGetCustomerServiceProfile:
       
   716 	    ret = iCtsyDispatcherSimDispatcher->DispatchGetCustomerServiceProfileL();
       
   717 		break;
       
   718 	case EMobilePhoneGetSubscriberId:
       
   719 	    ret = iCtsyDispatcherSimDispatcher->DispatchGetSubscriberIdL();
       
   720 		break;
       
   721 	case EMobilePhoneAppendAPNName:
       
   722 	    ret = iCtsyDispatcherSimDispatcher->DispatchAppendApnNameL(aDataPackage);
       
   723 		break;
       
   724 	case EMmTsySimGetICCType:
       
   725 	    ret = iCtsyDispatcherSimDispatcher->DispatchGetIccTypeL();
       
   726 		break;
       
   727 	case EMobilePhoneSetIccMessageWaitingIndicators:
       
   728 	    ret = iCtsyDispatcherSimDispatcher->DispatchSetIccMessageWaitingIndicatorsL(aDataPackage);
       
   729 		break;
       
   730 	case EMobilePhoneSetAPNControlListServiceStatus:
       
   731 	    ret = iCtsyDispatcherSimDispatcher->DispatchSetApnControlListServiceStatusL(aDataPackage);
       
   732 		break;
       
   733 	case EMobilePhoneGetAPNname:
       
   734 	    ret = iCtsyDispatcherSimDispatcher->DispatchGetApnNameL(aDataPackage);
       
   735 		break;
       
   736 	case EMmTsySimRefreshDoneIPC:
       
   737 	    ret = iCtsyDispatcherSimDispatcher->DispatchSimRefreshDoneL(aDataPackage);
       
   738 		break;
       
   739 	case EMobilePhoneGetServiceTable:
       
   740 		ret = iCtsyDispatcherSimDispatcher->DispatchGetServiceTableL(aDataPackage);
       
   741 		break;
       
   742 	case EMobilePhoneGetIccMessageWaitingIndicators:
       
   743 		ret = iCtsyDispatcherSimDispatcher->DispatchGetIccMessageWaitingIndicatorsL();
       
   744 		break;
       
   745 	case ECustomSimLockActivateIPC:
       
   746 	    ret = iCtsyDispatcherSimDispatcher->DispatchSimLockActivateL(aDataPackage);
       
   747 		break;
       
   748 	case ECustomSimLockDeActivateIPC:
       
   749 	    ret = iCtsyDispatcherSimDispatcher->DispatchSimLockDeActivateL(aDataPackage);
       
   750 		break;
       
   751 	case ECustomGetATRIPC:
       
   752 	    ret = iCtsyDispatcherSimDispatcher->DispatchGetAnswerToResetL(aDataPackage);
       
   753 		break;
       
   754 	case ECustomGetSimCardReaderStatusIPC:
       
   755 	    ret = iCtsyDispatcherSimDispatcher->DispatchGetSimCardReaderStatusL();
       
   756 		break;
       
   757 	case ECustomGetSimAuthenticationDataIPC:
       
   758 	    ret = iCtsyDispatcherSimDispatcher->DispatchGetSimAuthenticationDataL(aDataPackage);
       
   759 		break;
       
   760 	case ECustomPowerSimOffIPC:
       
   761 	    ret = iCtsyDispatcherSimDispatcher->DispatchPowerSimOffL();
       
   762 		break;
       
   763 	case ECustomPowerSimOnIPC:
       
   764 	    ret = iCtsyDispatcherSimDispatcher->DispatchPowerSimOnL();
       
   765 		break;
       
   766 	case ECustomReadSimFileIPC:
       
   767 	    ret = iCtsyDispatcherSimDispatcher->DispatchReadSimFileL(aDataPackage);
       
   768 		break;
       
   769 	case ECustomSendAPDUReqIPC:
       
   770 	    ret = iCtsyDispatcherSimDispatcher->DispatchSendApduRequestL(aDataPackage);
       
   771 		break;
       
   772 	case ECustomSendAPDUReqV2IPC:
       
   773 	    ret = iCtsyDispatcherSimDispatcher->DispatchSendApduRequestV2L(aDataPackage);
       
   774 		break;
       
   775 	case ECustomSimWarmResetIPC:
       
   776 	    ret = iCtsyDispatcherSimDispatcher->DispatchSimWarmResetL();
       
   777 		break;
       
   778 	case ECustomSetSimMessageStatusReadIPC:
       
   779 	    ret = iCtsyDispatcherSimDispatcher->DispatchSetSimMessageStatusReadL(aDataPackage);
       
   780 		break;
       
   781 
       
   782 	// Sms Functional Unit IPCs
       
   783 
       
   784 	case EMmTsyActivateSmsRouting:
       
   785 		ret = iCtsyDispatcherSmsDispatcher->DispatchActivateSmsRoutingL();
       
   786 		break;
       
   787 	case EMmTsyDeactivateSmsRouting:
       
   788 		ret = KErrNone; //do nothing for deactivating sms routing
       
   789 		break;
       
   790 	case EMmTsySmsSendSatMessage:
       
   791 	    ret = iCtsyDispatcherSmsDispatcher->DispatchSendSatSmsL(aDataPackage);
       
   792 		break;
       
   793 	case EMobileSmsMessagingGetMessageStoreInfo:
       
   794 	    ret = iCtsyDispatcherSmsDispatcher->DispatchGetSmsStoreInfoL();
       
   795 		break;
       
   796 	case EMobileSmsMessagingGetSmspListPhase1:
       
   797 	    ret = iCtsyDispatcherSmsDispatcher->DispatchGetSmspListL();
       
   798 		break;
       
   799 	case EMobileSmsMessagingNackSmsStored:
       
   800 	    ret = iCtsyDispatcherSmsDispatcher->DispatchNackSmsStoredL(aDataPackage);
       
   801 		break;
       
   802 	case EMobileSmsMessagingAckSmsStored:
       
   803 	    ret = iCtsyDispatcherSmsDispatcher->DispatchAckSmsStoredL(aDataPackage);
       
   804 		break;
       
   805 	case EMobileSmsMessagingResumeSmsReception:
       
   806 	    ret = iCtsyDispatcherSmsDispatcher->DispatchResumeSmsReceptionL();
       
   807 		break;
       
   808 	case EMobileSmsMessagingSendMessage:
       
   809 	    ret = iCtsyDispatcherSmsDispatcher->DispatchSendSmsMessageL(aDataPackage);
       
   810 		break;
       
   811 	case EMobileSmsMessagingSendMessageNoFdnCheck:
       
   812 	    ret = iCtsyDispatcherSmsDispatcher->DispatchSendSmsMessageNoFdnCheckL(aDataPackage);
       
   813 		break;
       
   814 	case EMobileSmsMessagingSetMoSmsBearer:
       
   815 	    ret = iCtsyDispatcherSmsDispatcher->DispatchSetMoSmsBearerL(aDataPackage);
       
   816 		break;
       
   817 	case EMobileSmsMessagingStoreSmspList:
       
   818 	    ret = iCtsyDispatcherSmsDispatcher->DispatchStoreSmspListEntryL(aDataPackage);
       
   819 		break;
       
   820 
       
   821 		// CallControlMultiparty Functional Unit IPCs
       
   822 
       
   823 	case EMobileConferenceCallHangUp:
       
   824 	    ret = iCtsyDispatcherCallControlMultipartyDispatcher->DispatchConferenceHangUpL(aDataPackage);
       
   825 		break;
       
   826 	case EMobileConferenceCallAddCall:
       
   827 	    ret = iCtsyDispatcherCallControlMultipartyDispatcher->DispatchConferenceAddCallL(aDataPackage);
       
   828 		break;
       
   829 	case EMobileConferenceCallCreateConference:
       
   830 	    ret = iCtsyDispatcherCallControlMultipartyDispatcher->DispatchCreateConferenceL(aDataPackage);
       
   831 		break;
       
   832 	case EMobileConferenceCallSwap:
       
   833 	    ret = iCtsyDispatcherCallControlMultipartyDispatcher->DispatchConferenceSwapL(aDataPackage);
       
   834 		break;
       
   835 	case EMobileCallGoOneToOne:
       
   836 		ret = iCtsyDispatcherCallControlMultipartyDispatcher->DispatchConferenceGoOneToOneL(aDataPackage);
       
   837 		break;
       
   838 
       
   839 		// SupplementaryServices Functional Unit IPCs
       
   840 
       
   841 	case EMobilePhoneSendNetworkServiceRequestNoFdnCheck:
       
   842 	    ret = iCtsyDispatcherSupplementaryServicesDispatcher->DispatchSendNetworkServiceRequestNoFdnCheckL(aDataPackage);
       
   843 		break;
       
   844 	case EMobilePhoneGetWaitingStatusPhase1:
       
   845 	    ret = iCtsyDispatcherSupplementaryServicesDispatcher->DispatchGetCallWaitingStatusL();
       
   846 		break;
       
   847 	case EMobilePhoneSendNetworkServiceRequest:
       
   848 	    ret = iCtsyDispatcherSupplementaryServicesDispatcher->DispatchSendNetworkServiceRequestL(aDataPackage);
       
   849 		break;
       
   850 	case EMobilePhoneGetBarringStatusPhase1:
       
   851 	    ret = iCtsyDispatcherSupplementaryServicesDispatcher->DispatchGetCallBarringStatusL(aDataPackage);
       
   852 		break;
       
   853 	case EMobilePhoneSetCallBarringStatus:
       
   854 	    ret = iCtsyDispatcherSupplementaryServicesDispatcher->DispatchSetCallBarringStatusL(aDataPackage);
       
   855 		break;
       
   856 	case EMobilePhoneSetCallForwardingStatus:
       
   857 	    ret = iCtsyDispatcherSupplementaryServicesDispatcher->DispatchSetCallForwardingStatusL(aDataPackage);
       
   858 		break;
       
   859 	case EMobilePhoneSetCallWaitingStatus:
       
   860 	    ret = iCtsyDispatcherSupplementaryServicesDispatcher->DispatchSetCallWaitingStatusL(aDataPackage);
       
   861 		break;
       
   862 	case EMobilePhoneSetSSPassword:
       
   863 	    ret = iCtsyDispatcherSupplementaryServicesDispatcher->DispatchSetSsPasswordL(aDataPackage);
       
   864 		break;
       
   865 	case EMobilePhoneGetCallForwardingStatusPhase1:
       
   866 	    ret = iCtsyDispatcherSupplementaryServicesDispatcher->DispatchGetCallForwardingStatusL(aDataPackage);
       
   867 		break;
       
   868 	case EMobileUssdMessagingSendMessage:
       
   869 	    ret = iCtsyDispatcherSupplementaryServicesDispatcher->DispatchSendUssdMessageL(aDataPackage);
       
   870 	    break;
       
   871 	case EMobileUssdMessagingSendMessageNoFdnCheck:
       
   872 	    ret = iCtsyDispatcherSupplementaryServicesDispatcher->DispatchSendUssdMessageNoFdnCheckL(aDataPackage);
       
   873 		break;
       
   874 	case EMobileUssdMessagingSendRelease:
       
   875 	    ret = iCtsyDispatcherSupplementaryServicesDispatcher->DispatchSendUssdReleaseL();
       
   876 		break;
       
   877 	case ECustomClearCallBlackListIPC:
       
   878 	    ret = iCtsyDispatcherSupplementaryServicesDispatcher->DispatchClearBlacklistL();
       
   879 		break;
       
   880 
       
   881 		// PacketServices Functional Unit IPCs
       
   882 
       
   883 	case EPacketAttach:
       
   884 	    ret = iCtsyDispatcherPacketServicesDispatcher->DispatchPacketAttachL();
       
   885 		break;
       
   886 	case EPacketGetAttachMode:
       
   887 	    ret = iCtsyDispatcherPacketServicesDispatcher->DispatchGetPacketAttachModeL(aDataPackage);
       
   888 		break;
       
   889 	case EPacketGetNtwkRegStatus:
       
   890 	    ret = iCtsyDispatcherPacketServicesDispatcher->DispatchGetPacketNetworkRegistrationStatusL();
       
   891 		break;
       
   892 	case EPacketDetach:
       
   893 	    ret = iCtsyDispatcherPacketServicesDispatcher->DispatchPacketDetachL();
       
   894 		break;
       
   895 	case EPacketContextSetConfig:
       
   896 	    ret = iCtsyDispatcherPacketServicesDispatcher->DispatchSetPdpContextConfigL(aDataPackage);
       
   897 		break;
       
   898 	case EPacketContextModifyActiveContext:
       
   899 	    ret = iCtsyDispatcherPacketServicesDispatcher->DispatchModifyActivePdpContextL(aDataPackage);
       
   900 		break;
       
   901 	case EPacketContextInitialiseContext:
       
   902 	    ret = iCtsyDispatcherPacketServicesDispatcher->DispatchInitialisePdpContextL(aDataPackage);
       
   903 		break;
       
   904 	case EPacketContextDelete:
       
   905 	    ret = iCtsyDispatcherPacketServicesDispatcher->DispatchDeletePdpContextL(aDataPackage);
       
   906 		break;
       
   907 	case EPacketSetAttachMode:
       
   908 	    ret = iCtsyDispatcherPacketServicesDispatcher->DispatchSetPacketAttachModeL(aDataPackage);
       
   909 		break;
       
   910 	case EPacketNotifyStatusChange:
       
   911 		ret = iCtsyDispatcherPacketServicesDispatcher->DispatchGetStatusL();
       
   912 		break;
       
   913 	case EPacketSetDefaultContextParams:
       
   914 	    ret = iCtsyDispatcherPacketServicesDispatcher->DispatchSetDefaultPdpContextParamsL(aDataPackage);
       
   915 		break;
       
   916 	case EPacketContextActivate:
       
   917 	    ret = iCtsyDispatcherPacketServicesDispatcher->DispatchActivatePdpContextL(aDataPackage);
       
   918 		break;
       
   919 	case EPacketQoSSetProfileParams:
       
   920 	    ret = iCtsyDispatcherPacketServicesDispatcher->DispatchSetPdpContextQosL(aDataPackage);
       
   921 		break;
       
   922 	case EPacketRejectActivationRequest:
       
   923 	    ret = iCtsyDispatcherPacketServicesDispatcher->DispatchRejectNetworkInitiatedContextActivationRequestL();
       
   924 		break;
       
   925 	case EPacketContextDeactivate:
       
   926 	    ret = iCtsyDispatcherPacketServicesDispatcher->DispatchDeactivatePdpContextL(aDataPackage);
       
   927 		break;
       
   928 	case EPacketContextAddPacketFilter:
       
   929 	    ret = iCtsyDispatcherPacketServicesDispatcher->DispatchAddPacketFilterL(aDataPackage);
       
   930 		break;
       
   931 	case EPacketContextRemovePacketFilter:
       
   932 		ret = iCtsyDispatcherPacketServicesDispatcher->DispatchRemovePacketFilterL(aDataPackage);
       
   933 		break;
       
   934 	case EPacketInitProxiesIPC:
       
   935 		// deliberately not passed to Licensee LTSY 
       
   936 		ret = KErrNone;	
       
   937 		break;
       
   938 	case EPacketGetStaticCaps:
       
   939 	    ret = iCtsyDispatcherPacketServicesDispatcher->DispatchGetStaticCapabilitiesL();
       
   940 		break;
       
   941 	case EPacketEnumerateMbmsMonitorServiceList:
       
   942 		ret = iCtsyDispatcherPacketServicesDispatcher->DispatchGetMaxNoMonitoredServiceListsL();
       
   943 		break;
       
   944 	case EPacketEnumerateMbmsActiveServiceList:
       
   945 		ret = iCtsyDispatcherPacketServicesDispatcher->DispatchGetMaxNoActiveServicesL();
       
   946 		break;
       
   947 	case ECtsyPacketMbmsInitialiseContextReq:
       
   948 		ret = iCtsyDispatcherPacketServicesDispatcher->DispatchInitialiseMbmsContextL(aDataPackage);
       
   949 		break;
       
   950 	case EPacketGetMbmsNetworkServiceStatus:
       
   951 		ret = iCtsyDispatcherPacketServicesDispatcher->DispatchGetMbmsNetworkServiceStatusL(aDataPackage);
       
   952 		break;
       
   953 	case EPacketUpdateMbmsMonitorServiceList:
       
   954 		ret = iCtsyDispatcherPacketServicesDispatcher->DispatchUpdateMbmsMonitorServiceListL(aDataPackage);
       
   955 		break;
       
   956 	case EPacketContextUpdateMbmsSessionList:
       
   957 		ret = iCtsyDispatcherPacketServicesDispatcher->DispatchUpdateMbmsSessionListL(aDataPackage);
       
   958 		break;
       
   959 
       
   960 		// Sat Functional Unit IPCs
       
   961 
       
   962 	case ESatTsySmsDeliverReport:
       
   963 	    ret = iCtsyDispatcherSatDispatcher->DispatchSmsDeliverReportL(aDataPackage);
       
   964 		break;
       
   965 	case ESatTsyGetImageInstance:
       
   966 	    ret = iCtsyDispatcherSatDispatcher->DispatchGetImageInstanceL(aDataPackage);
       
   967 		break;
       
   968 	case ESatTsyGetIMEI:
       
   969 		ret = iCtsyDispatcherPhoneDispatcher->DispatchGetPhoneIdL(KPhoneIdReqOriginSatFu);
       
   970 		break;
       
   971 	case ESatTsyGetIconData:
       
   972 	    ret = iCtsyDispatcherSatDispatcher->DispatchGetIconDataL(aDataPackage);
       
   973 		break;
       
   974 	case ESatTsyGetClut:
       
   975 	    ret = iCtsyDispatcherSatDispatcher->DispatchGetClutL(aDataPackage);
       
   976 		break;
       
   977 	case ESatTsyGetBearerCapability:
       
   978 	    ret = iCtsyDispatcherSatDispatcher->DispatchGetDefaultBearerCapabilityL();
       
   979 		break;
       
   980 	case ESatTsySmsPpDdlStatus:
       
   981 	    ret = iCtsyDispatcherSatDispatcher->DispatchSmsPpDdlStatusL();
       
   982 		break;
       
   983 	case ESatTsyMoSmsControlActivation:
       
   984 	    ret = iCtsyDispatcherSatDispatcher->DispatchGetSmsControlActivatedL();
       
   985 		break;
       
   986 	case ESatTsyCellBroadcast:
       
   987 	    ret = iCtsyDispatcherSatDispatcher->DispatchCellBroadcastL(aDataPackage);
       
   988 		break;
       
   989 	case ESatTsyAccTech:
       
   990 	    ret = iCtsyDispatcherSatDispatcher->DispatchAccessTechnologyL();
       
   991 		break;
       
   992 	case ESatTsyTimingAdvance:
       
   993 	    ret = iCtsyDispatcherSatDispatcher->DispatchTimingAdvanceL();
       
   994 		break;
       
   995 	case ESatNotifyMoSmControlRequest:
       
   996 	    ret = iCtsyDispatcherSatDispatcher->DispatchNotifySmControlRequestL(aDataPackage);
       
   997 		break;
       
   998 	case ESatTsyProvideLocalInfo:
       
   999 	    ret = iCtsyDispatcherSatDispatcher->DispatchProvideLocationInfoL();
       
  1000 		break;
       
  1001 	case ESatTsySetPolling:
       
  1002 	    ret = iCtsyDispatcherSatDispatcher->DispatchSetPollingIntervalL(aDataPackage);
       
  1003 		break;
       
  1004 	case ESatTsySmsPpDdl:
       
  1005 	    ret = iCtsyDispatcherSatDispatcher->DispatchSmsPpDdlL(aDataPackage);
       
  1006 		break;
       
  1007 	case ESatTsyLocalInformationNmr:
       
  1008 	    ret = iCtsyDispatcherSatDispatcher->DispatchLocalInformationNmrL();
       
  1009 		break;
       
  1010 	case ESatTsySendEnvelope:
       
  1011 	    ret = iCtsyDispatcherSatDispatcher->DispatchSendEnvelopeL(aDataPackage);
       
  1012 		break;
       
  1013 	case ESatTsyServiceRequest:
       
  1014 	    ret = iCtsyDispatcherSatDispatcher->DispatchServiceRequestL(aDataPackage);
       
  1015 		break;
       
  1016 	case ESatTsyReady:
       
  1017 	    ret = iCtsyDispatcherSatDispatcher->DispatchReadyL();
       
  1018 		break;
       
  1019 	case ESatTsyGetIfPendingNotification:
       
  1020 	    ret = iCtsyDispatcherSatDispatcher->DispatchPCmdNotificationL(aDataPackage);
       
  1021 		break;
       
  1022 	case ESatTsyEnvelopeError:
       
  1023 	    ret = iCtsyDispatcherSatDispatcher->DispatchUssdControlEnvelopeErrorL();
       
  1024 		break;
       
  1025 	case ESatTsyTimerExpiredIPC:
       
  1026 	    ret = iCtsyDispatcherSatDispatcher->DispatchTimerExpiredL(aDataPackage);
       
  1027 		break;
       
  1028 	case ESatTerminalRsp:
       
  1029 	    ret = iCtsyDispatcherSatDispatcher->DispatchTerminalRspL(aDataPackage);
       
  1030 		break;
       
  1031 	case ESatNotifySetUpCallPCmd:
       
  1032 		//This IPC is called when a call connected envelope event is delayed because the terminal response to
       
  1033 		//the set up call proactive command must be sent before the event download envelope.
       
  1034 		//so this internal ipc just forwards the saved envelope to the event download api as normal.
       
  1035 		ret = iCtsyDispatcherSatDispatcher->DispatchEventDownloadL(aDataPackage);
       
  1036 	    //ret = iCtsyDispatcherSatDispatcher->DispatchNotifySetUpCallPcmdL(aDataPackage);
       
  1037 		break;
       
  1038 	case ESatMenuSelection:
       
  1039 	    ret = iCtsyDispatcherSatDispatcher->DispatchMenuSelectionL(aDataPackage);
       
  1040 		break;
       
  1041 	case ESatEventDownload:
       
  1042 	    ret = iCtsyDispatcherSatDispatcher->DispatchEventDownloadL(aDataPackage);
       
  1043 		break;
       
  1044 	case ESatTsyUssdStatus:
       
  1045 		ret = iCtsyDispatcherSatDispatcher->DispatchGetUssdControlSupportedL();
       
  1046 		break;
       
  1047 	default:
       
  1048 		LOG(_L8("WARNING: CMessageRouter::ExtFuncL unhandled IPC=%d"), aIpc);
       
  1049 	 	break;
       
  1050 		} // switch (aIpc)
       
  1051 
       
  1052 	return TSYLOGSETEXITERR(ret);
       
  1053 	} // CMessageRouter::ExtFuncL
       
  1054 
       
  1055 void CMessageRouter::HandleNotifyModemReadyReceivedL()
       
  1056 	{
       
  1057 	/*
       
  1058 	 * This is the first IPC that is sent from CtsyDispatcher->CTSY indicating modem
       
  1059 	 * is ready. We piggy-back on the back of this to now query what callback indicators
       
  1060 	 * are supported.  We do it here rather than at construction because for some basebands
       
  1061 	 * it is possible this information must be read from configuration or even queried asynchronously.
       
  1062 	 * If it is async they can do it before invoking the CallbackBootNotifyModemStatusReady
       
  1063 	 *
       
  1064 	 */
       
  1065 	QuerySupporterCallbackIndicators();
       
  1066 
       
  1067 	// Method to retrieve network related information which will get stored in various Ctsy caches.
       
  1068 	RetrieveNetworkInfoL();
       
  1069 	}
       
  1070 
       
  1071 void CMessageRouter::QuerySupporterCallbackIndicators()
       
  1072 	{
       
  1073 
       
  1074 	// Query the support for all the callback indicators
       
  1075 	// At present we do not do anything with this information (other than log it)
       
  1076 	// but in the future we could link this up to
       
  1077 	// registering for notifiers.  So if a baseband does not support the notifier
       
  1078 	// then client can be returned
       
  1079 	// KErrNotSUpported rather than just never completing.
       
  1080 
       
  1081 	TUint32 indmask;
       
  1082 	iLtsyFactoryV1->IsCallbackIndicatorSupported(KDispatchCallControlFuncUnitId, EIndIdGroup1, indmask);
       
  1083 	LOG(_L8("CallControl indicator support. GroupID=%d, bitmask = 0x%x"), EIndIdGroup1, indmask);
       
  1084 	iLtsyFactoryV1->IsCallbackIndicatorSupported(KDispatchPhoneFuncUnitId, EIndIdGroup1, indmask);
       
  1085 	LOG(_L8("Security indicator support. GroupID=%d, bitmask = 0x%x"), EIndIdGroup1, indmask);
       
  1086 	iLtsyFactoryV1->IsCallbackIndicatorSupported(KDispatchSecurityFuncUnitId, EIndIdGroup1, indmask);
       
  1087 	LOG(_L8("CallControl indicator support. GroupID=%d, bitmask = 0x%x"), EIndIdGroup1, indmask);
       
  1088 	iLtsyFactoryV1->IsCallbackIndicatorSupported(KDispatchPhonebookEnFuncUnitId, EIndIdGroup1, indmask);
       
  1089 	LOG(_L8("Phonebook EN indicator support. GroupID=%d, bitmask = 0x%x"), EIndIdGroup1, indmask);
       
  1090 	iLtsyFactoryV1->IsCallbackIndicatorSupported(KDispatchCellBroadcastFuncUnitId, EIndIdGroup1, indmask);
       
  1091 	LOG(_L8("Cell Broadcast indicator support. GroupID=%d, bitmask = 0x%x"), EIndIdGroup1, indmask);
       
  1092 	iLtsyFactoryV1->IsCallbackIndicatorSupported(KDispatchPhonebookOnFuncUnitId, EIndIdGroup1, indmask);
       
  1093 	LOG(_L8("Phonebook ON indicator support. GroupID=%d, bitmask = 0x%x"), EIndIdGroup1, indmask);
       
  1094 	iLtsyFactoryV1->IsCallbackIndicatorSupported(KDispatchPhonebookFuncUnitId, EIndIdGroup1, indmask);
       
  1095 	LOG(_L8("Phonebook indicator support. GroupID=%d, bitmask = 0x%x"), EIndIdGroup1, indmask);
       
  1096 	iLtsyFactoryV1->IsCallbackIndicatorSupported(KDispatchSimFuncUnitId, EIndIdGroup1, indmask);
       
  1097 	LOG(_L8("SIM indicator support. GroupID=%d, bitmask = 0x%x"), EIndIdGroup1, indmask);
       
  1098 	iLtsyFactoryV1->IsCallbackIndicatorSupported(KDispatchSmsFuncUnitId, EIndIdGroup1, indmask);
       
  1099 	LOG(_L8("Sms indicator support. GroupID=%d, bitmask = 0x%x"), EIndIdGroup1, indmask);
       
  1100 	iLtsyFactoryV1->IsCallbackIndicatorSupported(KDispatchCallControlMultipartyFuncUnitId, EIndIdGroup1, indmask);
       
  1101 	LOG(_L8("Call Control Multiparty indicator support. GroupID=%d, bitmask = 0x%x"), EIndIdGroup1, indmask);
       
  1102 	iLtsyFactoryV1->IsCallbackIndicatorSupported(KDispatchSupplementaryServicesFuncUnitId, EIndIdGroup1, indmask);
       
  1103 	LOG(_L8("Supplementary Services indicator support. GroupID=%d, bitmask = 0x%x"), EIndIdGroup1, indmask);
       
  1104 	iLtsyFactoryV1->IsCallbackIndicatorSupported(KDispatchPacketServicesFuncUnitId, EIndIdGroup1, indmask);
       
  1105 	LOG(_L8("Packet Services indicator support. GroupID=%d, bitmask = 0x%x"), EIndIdGroup1, indmask);
       
  1106 	iLtsyFactoryV1->IsCallbackIndicatorSupported(KDispatchSatFuncUnitId, EIndIdGroup1, indmask);
       
  1107 	LOG(_L8("SAT indicator support. GroupID=%d, bitmask = 0x%x"), EIndIdGroup1, indmask);
       
  1108 	}
       
  1109 
       
  1110 void CMessageRouter::RetrieveNetworkInfoL()
       
  1111 	{
       
  1112 	// Call methods to get various network information from the Ltsy
       
  1113 	iCtsyDispatcherPhoneDispatcher->DispatchGetCurrentNetworkInfoL();
       
  1114 	iCtsyDispatcherPhoneDispatcher->DispatchGetNetworkModeL();
       
  1115 	iCtsyDispatcherPhoneDispatcher->DispatchGetNitzInfoL();
       
  1116 	iCtsyDispatcherPhoneDispatcher->DispatchGetSignalStrengthL();
       
  1117 	iCtsyDispatcherPhoneDispatcher->DispatchGetBatteryInfoL();
       
  1118 	}