telephonyserverplugins/ctsydispatchlayer/src/ccellbroadcastdispatcher.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 "ccellbroadcastdispatcher.h"
       
    17 
       
    18 #include <ctsy/ltsy/mltsydispatchcellbroadcastinterface.h>
       
    19 #include <ctsy/pluginapi/mmmessagemanagercallback.h>
       
    20 #include <ctsy/serviceapi/mmtsy_ipcdefs.h>
       
    21 
       
    22 
       
    23 #include <ctsy/ltsy/ltsylogger.h>
       
    24 #include "ctsydispatcherpanic.h"
       
    25 #include "tdispatcherholder.h"
       
    26 
       
    27 
       
    28 
       
    29 CCellBroadcastDispatcher::CCellBroadcastDispatcher(
       
    30 		MLtsyDispatchFactoryV1& aLtsyFactory,
       
    31 		MmMessageManagerCallback& aMessageManagerCallback,
       
    32 		CRequestQueueOneShot& aRequestAsyncOneShot)
       
    33 	: 	iLtsyFactoryV1(aLtsyFactory),
       
    34 		iMessageManagerCallback(aMessageManagerCallback),
       
    35 		iRequestAsyncOneShot(aRequestAsyncOneShot)
       
    36 	{
       
    37 	} // CCellBroadcastDispatcher::CCellBroadcastDispatcher
       
    38 
       
    39 	  
       
    40 CCellBroadcastDispatcher::~CCellBroadcastDispatcher()
       
    41 	{
       
    42 	if(iCbsMsg)
       
    43 		{
       
    44 		iCbsMsg->ResetAndDestroy();
       
    45 		delete iCbsMsg;
       
    46 		}
       
    47 	} // CCellBroadcastDispatcher::~CCellBroadcastDispatcher
       
    48 
       
    49 
       
    50 CCellBroadcastDispatcher* CCellBroadcastDispatcher::NewLC(
       
    51 	MLtsyDispatchFactoryV1& aLtsyFactory,
       
    52 	MmMessageManagerCallback& aMessageManagerCallback,
       
    53 	CRequestQueueOneShot& aRequestAsyncOneShot)
       
    54 	{
       
    55 	TSYLOGENTRYEXIT;
       
    56 	CCellBroadcastDispatcher* self =
       
    57 		new (ELeave) CCellBroadcastDispatcher(aLtsyFactory, aMessageManagerCallback, aRequestAsyncOneShot);
       
    58 	CleanupStack::PushL(self);
       
    59 	self->ConstructL();
       
    60 	return self;
       
    61 	} // CCellBroadcastDispatcher::NewLC
       
    62 
       
    63 
       
    64 CCellBroadcastDispatcher* CCellBroadcastDispatcher::NewL(
       
    65 	MLtsyDispatchFactoryV1& aLtsyFactory,
       
    66 	MmMessageManagerCallback& aMessageManagerCallback,
       
    67 	CRequestQueueOneShot& aRequestAsyncOneShot)
       
    68 	{
       
    69 	TSYLOGENTRYEXIT;
       
    70 	CCellBroadcastDispatcher* self =
       
    71 		CCellBroadcastDispatcher::NewLC(aLtsyFactory, aMessageManagerCallback, aRequestAsyncOneShot);
       
    72 	CleanupStack::Pop (self);
       
    73 	return self;
       
    74 	} // CCellBroadcastDispatcher::NewL
       
    75 
       
    76 
       
    77 void CCellBroadcastDispatcher::ConstructL()
       
    78 /**
       
    79  * Second phase constructor.
       
    80  */
       
    81 	{
       
    82 	TSYLOGENTRYEXIT;
       
    83 	
       
    84 	// Get the Licensee LTSY interfaces related to CellBroadcast functionality
       
    85 	// from the factory
       
    86 	
       
    87 	
       
    88 	if(iLtsyFactoryV1.IsDispatchInterfaceSupported(KDispatchCellBroadcastFuncUnitId, MLtsyDispatchCellBroadcastSetBroadcastFilterSetting::KLtsyDispatchCellBroadcastSetBroadcastFilterSettingApiId))
       
    89 		{
       
    90 		TAny* setBroadcastFilterSettingInterface = NULL;
       
    91 		iLtsyFactoryV1.GetDispatchHandler(
       
    92 		       	MLtsyDispatchCellBroadcastSetBroadcastFilterSetting::KLtsyDispatchCellBroadcastSetBroadcastFilterSettingApiId,
       
    93 		       	setBroadcastFilterSettingInterface);
       
    94 		iLtsyDispatchCellBroadcastSetBroadcastFilterSetting =
       
    95 				static_cast<MLtsyDispatchCellBroadcastSetBroadcastFilterSetting*>(setBroadcastFilterSettingInterface);
       
    96         __ASSERT_DEBUG(iLtsyDispatchCellBroadcastSetBroadcastFilterSetting, CtsyDispatcherPanic(EInvalidNullPtr));
       
    97   		}
       
    98 	
       
    99 	if(iLtsyFactoryV1.IsDispatchInterfaceSupported(KDispatchCellBroadcastFuncUnitId, MLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage::KLtsyDispatchCellBroadcastActivateBroadcastReceiveMessageApiId))
       
   100 		{
       
   101 		TAny* activateBroadcastReceiveMessageInterface = NULL;
       
   102 		iLtsyFactoryV1.GetDispatchHandler(
       
   103 		       	MLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage::KLtsyDispatchCellBroadcastActivateBroadcastReceiveMessageApiId,
       
   104 		       	activateBroadcastReceiveMessageInterface);
       
   105 		iLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage =
       
   106 				static_cast<MLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage*>(activateBroadcastReceiveMessageInterface);
       
   107         __ASSERT_DEBUG(iLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage, CtsyDispatcherPanic(EInvalidNullPtr));
       
   108   		}
       
   109 	
       
   110 	if(iLtsyFactoryV1.IsDispatchInterfaceSupported(KDispatchCellBroadcastFuncUnitId, MLtsyDispatchCellBroadcastReceiveMessageCancel::KLtsyDispatchCellBroadcastReceiveMessageCancelApiId))
       
   111 		{
       
   112 		TAny* receiveMessageCancelInterface = NULL;
       
   113 		iLtsyFactoryV1.GetDispatchHandler(
       
   114 		       	MLtsyDispatchCellBroadcastReceiveMessageCancel::KLtsyDispatchCellBroadcastReceiveMessageCancelApiId,
       
   115 		       	receiveMessageCancelInterface);
       
   116 		iLtsyDispatchCellBroadcastReceiveMessageCancel =
       
   117 				static_cast<MLtsyDispatchCellBroadcastReceiveMessageCancel*>(receiveMessageCancelInterface);
       
   118         __ASSERT_DEBUG(iLtsyDispatchCellBroadcastReceiveMessageCancel, CtsyDispatcherPanic(EInvalidNullPtr));
       
   119   		}
       
   120   		
       
   121 	if(iLtsyFactoryV1.IsDispatchInterfaceSupported(KDispatchCellBroadcastFuncUnitId, MLtsyDispatchCellBroadcastStartSimCbTopicBrowsing::KLtsyDispatchCellBroadcastStartSimCbTopicBrowsingApiId))
       
   122 		{
       
   123 		TAny* startSimCbTopicBrowsingInterface = NULL;
       
   124 		iLtsyFactoryV1.GetDispatchHandler(
       
   125 		       	MLtsyDispatchCellBroadcastStartSimCbTopicBrowsing::KLtsyDispatchCellBroadcastStartSimCbTopicBrowsingApiId,
       
   126 		       	startSimCbTopicBrowsingInterface);
       
   127 		iLtsyDispatchCellBroadcastStartSimCbTopicBrowsing =
       
   128 				static_cast<MLtsyDispatchCellBroadcastStartSimCbTopicBrowsing*>(startSimCbTopicBrowsingInterface);
       
   129         __ASSERT_DEBUG(iLtsyDispatchCellBroadcastStartSimCbTopicBrowsing, CtsyDispatcherPanic(EInvalidNullPtr));
       
   130   		}  		
       
   131 	
       
   132 	if(iLtsyFactoryV1.IsDispatchInterfaceSupported(KDispatchCellBroadcastFuncUnitId, MLtsyDispatchCellBroadcastDeleteSimCbTopic::KLtsyDispatchCellBroadcastDeleteSimCbTopicApiId))
       
   133 		{
       
   134 		TAny* deleteSimCbTopicInterface = NULL;
       
   135 		iLtsyFactoryV1.GetDispatchHandler(
       
   136 		       	MLtsyDispatchCellBroadcastDeleteSimCbTopic::KLtsyDispatchCellBroadcastDeleteSimCbTopicApiId,
       
   137 		       	deleteSimCbTopicInterface);
       
   138 		iLtsyDispatchCellBroadcastDeleteSimCbTopic =
       
   139 				static_cast<MLtsyDispatchCellBroadcastDeleteSimCbTopic*>(deleteSimCbTopicInterface);
       
   140         __ASSERT_DEBUG(iLtsyDispatchCellBroadcastDeleteSimCbTopic, CtsyDispatcherPanic(EInvalidNullPtr));
       
   141   		}
       
   142   		
       
   143 	iCbsMsg = new( ELeave ) CArrayPtrFlat< TWcdmaCbsMsg >( 10 );  		  		
       
   144 	
       
   145 	} // CCellBroadcastDispatcher::ConstructL
       
   146 
       
   147 void CCellBroadcastDispatcher::SetDispatcherHolder(TDispatcherHolder& aDispatcherHolder)
       
   148 /**
       
   149  * Set the dispatcher holder.  
       
   150  * 
       
   151  * @param aDispatcherHolder Reference to dispatcher holder.
       
   152  */
       
   153 	{
       
   154 	TSYLOGENTRYEXIT;
       
   155 	
       
   156 	iDispatcherHolder = &aDispatcherHolder;
       
   157 	} // CCellBroadcastDispatcher::SetDispatcherHolder
       
   158 
       
   159 TInt CCellBroadcastDispatcher::DispatchSetBroadcastFilterSettingL(const CMmDataPackage* aDataPackage)
       
   160 /**
       
   161  * Unpack data related to EMobileBroadcastMessagingSetFilterSetting
       
   162  * and pass request on to Licensee LTSY.
       
   163  *
       
   164  * @return Returns error code returned by the Licensee LTSY or KErrNotSupported if
       
   165  * the Licensee LTSY does not support this request.
       
   166  */
       
   167 	{
       
   168 	TSYLOGENTRYEXIT;
       
   169 	TInt ret = KErrNotSupported;
       
   170 	
       
   171     __ASSERT_DEBUG(aDataPackage, CtsyDispatcherPanic(EInvalidNullPtr));	
       
   172 
       
   173 	// Call Handle... method in Licensee LTSY
       
   174 	if (iLtsyDispatchCellBroadcastSetBroadcastFilterSetting)
       
   175 		{
       
   176 		TCbsCbmiAndLangAndFilter* cbsFilter = NULL;
       
   177 		aDataPackage->UnPackData(&cbsFilter);
       
   178 			
       
   179 		__ASSERT_DEBUG(cbsFilter, CtsyDispatcherPanic(EInvalidNullPtr));
       
   180 			
       
   181 		ret = iLtsyDispatchCellBroadcastSetBroadcastFilterSetting->HandleSetBroadcastFilterSettingReqL(cbsFilter->iSetting);
       
   182 		}	
       
   183 
       
   184 	return TSYLOGSETEXITERR(ret);
       
   185 	} // CCellBroadcastDispatcher::DispatchSetBroadcastFilterSettingL
       
   186 
       
   187 TInt CCellBroadcastDispatcher::DispatchActivateBroadcastReceiveMessageL(const CMmDataPackage* aDataPackage)
       
   188 /**
       
   189  * Unpack data related to EMobileBroadcastMessagingReceiveMessage
       
   190  * and pass request on to Licensee LTSY.
       
   191  *
       
   192  * @return Returns error code returned by the Licensee LTSY or KErrNotSupported if
       
   193  * the Licensee LTSY does not support this request.
       
   194  */
       
   195 	{
       
   196 	TSYLOGENTRYEXIT;
       
   197 	TInt ret = KErrNotSupported;
       
   198 	
       
   199 	__ASSERT_DEBUG(aDataPackage, CtsyDispatcherPanic(EInvalidNullPtr));	
       
   200 
       
   201 	// Call Handle... method in Licensee LTSY
       
   202 	if (iLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage)
       
   203 		{
       
   204 		TCbsCbmiAndLangAndFilter* cbsFilter = NULL;
       
   205 		aDataPackage->UnPackData(&cbsFilter);
       
   206 			
       
   207 		__ASSERT_DEBUG(cbsFilter, CtsyDispatcherPanic(EInvalidNullPtr));			
       
   208 			
       
   209 		ret = iLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage->HandleActivateBroadcastReceiveMessageReqL(cbsFilter->iSetting);
       
   210 		}
       
   211 		
       
   212 
       
   213 	return TSYLOGSETEXITERR(ret);
       
   214 	} // CCellBroadcastDispatcher::DispatchActivateBroadcastReceiveMessageL
       
   215 
       
   216 TInt CCellBroadcastDispatcher::DispatchReceiveMessageCancelL(const CMmDataPackage* aDataPackage)
       
   217 /**
       
   218  * Unpack data related to EMobileBroadcastMessagingReceiveMessageCancel
       
   219  * and pass request on to Licensee LTSY.
       
   220  *
       
   221  * @return Returns error code returned by the Licensee LTSY or KErrNotSupported if
       
   222  * the Licensee LTSY does not support this request.
       
   223  */
       
   224 	{
       
   225 	TSYLOGENTRYEXIT;
       
   226 	TInt ret = KErrNotSupported;
       
   227 	
       
   228     __ASSERT_DEBUG(aDataPackage, CtsyDispatcherPanic(EInvalidNullPtr));	
       
   229 
       
   230 	// Call Handle... method in Licensee LTSY
       
   231 	if (iLtsyDispatchCellBroadcastReceiveMessageCancel)
       
   232 		{
       
   233 		TCbsCbmiAndLangAndFilter* cbsFilter = NULL;
       
   234 		aDataPackage->UnPackData(&cbsFilter);
       
   235 			
       
   236 		__ASSERT_DEBUG(cbsFilter, CtsyDispatcherPanic(EInvalidNullPtr));
       
   237 			
       
   238 		ret = iLtsyDispatchCellBroadcastReceiveMessageCancel->HandleReceiveMessageCancelReqL(cbsFilter->iSetting);
       
   239 		}
       
   240 	
       
   241 	return TSYLOGSETEXITERR(ret);
       
   242 	} // CCellBroadcastDispatcher::DispatchReceiveMessageCancelL
       
   243 
       
   244 TInt CCellBroadcastDispatcher::DispatchStartSimCbTopicBrowsingL()
       
   245 /**
       
   246  * Pass ECustomStartSimCbTopicBrowsingIPC request on to Licensee LTSY.
       
   247  *
       
   248  * @return Returns error code returned by the Licensee LTSY or KErrNotSupported if
       
   249  * the Licensee LTSY does not support this request.
       
   250  */
       
   251 	{
       
   252 	TSYLOGENTRYEXIT;
       
   253 	TInt ret = KErrNotSupported;
       
   254 	
       
   255 	// Call Handle... method in Licensee LTSY
       
   256 	if (iLtsyDispatchCellBroadcastStartSimCbTopicBrowsing)
       
   257 		{						
       
   258 		ret = iLtsyDispatchCellBroadcastStartSimCbTopicBrowsing->HandleStartSimCbTopicBrowsingReqL();			
       
   259 		}
       
   260 	
       
   261 	return TSYLOGSETEXITERR(ret);
       
   262 	} // CCellBroadcastDispatcher::DispatchReceiveMessageCancelL
       
   263 	
       
   264 TInt CCellBroadcastDispatcher::DispatchDeleteSimCbTopicL(const CMmDataPackage* aDataPackage)
       
   265 /**
       
   266  * Pass ECustomDeleteSimCbTopicIPC request on to Licensee LTSY.
       
   267  *
       
   268  * @return Returns error code returned by the Licensee LTSY or KErrNotSupported if
       
   269  * the Licensee LTSY does not support this request.
       
   270  */
       
   271 	{
       
   272 	TSYLOGENTRYEXIT;
       
   273 	TInt ret = KErrNotSupported;
       
   274 	
       
   275 	__ASSERT_DEBUG(aDataPackage, CtsyDispatcherPanic(EInvalidNullPtr));	
       
   276 
       
   277 	// Call Handle... method in Licensee LTSY
       
   278 	if (iLtsyDispatchCellBroadcastDeleteSimCbTopic)
       
   279 		{
       
   280 		TUint expIndex;
       
   281 		TBool deleteFlag;
       
   282 		aDataPackage->UnPackData(expIndex, deleteFlag);						
       
   283 		ret = iLtsyDispatchCellBroadcastDeleteSimCbTopic->HandleDeleteSimCbTopicReqL(expIndex, deleteFlag);
       
   284 		}
       
   285 		
       
   286 
       
   287 	return TSYLOGSETEXITERR(ret);
       
   288 	} // CCellBroadcastDispatcher::DispatchActivateBroadcastReceiveMessageL
       
   289 	
       
   290 
       
   291 //
       
   292 // Callback handlers follow
       
   293 //
       
   294 
       
   295 
       
   296 
       
   297 void CCellBroadcastDispatcher::CallbackGsmBroadcastNotifyMessageReceived(TInt aError, const TDesC8& aCbsMsg)		
       
   298 /**
       
   299  * Callback function to be used by the request to complete
       
   300  * CCtsyDispatcherCallback::CallbackCellBroadcastGsmBroadcastNotifyMessageReceivedInd()
       
   301  *
       
   302  * @param aError The error code to be returned to the CTSY Dispatcher.
       
   303  * @param aCbsMsg CB message.
       
   304  */
       
   305 	{
       
   306 	TSYLOGENTRYEXITARGS(_L8("aError=%d"), aError);
       
   307 	
       
   308 	__ASSERT_DEBUG( (aCbsMsg.Length() < RMobileBroadcastMessaging::KBroadcastPageSize) , CtsyDispatcherPanic(EBadLength));	
       
   309 
       
   310 	// Pack the data to return to the Common TSY
       
   311 	CMmDataPackage data;
       
   312 	TGsmCbsMsg gsmCbsMsg;
       
   313 	gsmCbsMsg.iCbsMsg.Copy(aCbsMsg.Left(RMobileBroadcastMessaging::KBroadcastPageSize));
       
   314 	data.PackData(&gsmCbsMsg);
       
   315 		
       
   316 	iMessageManagerCallback.Complete(EMmTsyGsmBroadcastNotifyMessageReceived, &data, aError);
       
   317 	
       
   318 	} // CCellBroadcastDispatcher::CallbackGsmBroadcastNotifyMessageReceived
       
   319 
       
   320 void CCellBroadcastDispatcher::CallbackWcdmaBroadcastMessageReceived(TInt aError, const TDesC8& aWcdmaCbsData, 
       
   321      const DispatcherCellBroadcast::TWcdmaCbsMsgBase& aWcdmaCbsMsgBase, TBool aMoreToCome)
       
   322 /**
       
   323  * Callback function to be used by the request to complete
       
   324  * CCtsyDispatcherCallback::CallbackCellBroadcastWcdmaBroadcastMessageReceivedInd()
       
   325  *
       
   326  * @param aError The error code to be returned to the CTSY Dispatcher.
       
   327  * @param aWcdmaCbsData Broadcast message WCDMA.
       
   328  * @param aWcdmaCbsMsgBase base wcdma cbs data structure.
       
   329  * @param aIsLast Is it the last WCDMA message to pass to CTSY.
       
   330  */
       
   331 	{
       
   332 	TSYLOGENTRYEXITARGS(_L8("aError=%d, aMoreToCome=%d"), aError, aMoreToCome);
       
   333 	if(aError != KErrNone)
       
   334 		{
       
   335     	__ASSERT_DEBUG(aMoreToCome==EFalse, CtsyDispatcherPanic(EInvalidParameter));			
       
   336 		}
       
   337 	
       
   338 	//A TRAP here is expensive, do a non overloaded new operator and check for NULL.
       
   339 	TWcdmaCbsMsg* wcdmaCbsMsgPtr = new TWcdmaCbsMsg();
       
   340 	if (!wcdmaCbsMsgPtr)
       
   341 		{
       
   342 		// not proceeding
       
   343 		__ASSERT_DEBUG(NULL, CtsyDispatcherPanic(EInvalidNullPtr));
       
   344 		return;	
       
   345 		}
       
   346 	// allocation ok:
       
   347 	__ASSERT_DEBUG( (aWcdmaCbsData.Length() < RMobileBroadcastMessaging::KBroadcastPageSize) , CtsyDispatcherPanic(EBadLength));		
       
   348 	wcdmaCbsMsgPtr->iWcdmaCbsData.Copy(aWcdmaCbsData);
       
   349 	wcdmaCbsMsgPtr->iSbNumber = 0; // not used
       
   350 	wcdmaCbsMsgPtr->iNumberOfPages = aWcdmaCbsMsgBase.iNumberOfPages;
       
   351 	wcdmaCbsMsgPtr->iMessageType = aWcdmaCbsMsgBase.iMessageType;
       
   352 	wcdmaCbsMsgPtr->iMessageId = aWcdmaCbsMsgBase.iMessageId;
       
   353 	wcdmaCbsMsgPtr->iSerialNum = aWcdmaCbsMsgBase.iSerialNum;
       
   354 	wcdmaCbsMsgPtr->iDCS = aWcdmaCbsMsgBase.iDCS;
       
   355 	wcdmaCbsMsgPtr->iInfoLength = aWcdmaCbsMsgBase.iInfoLength;
       
   356 	
       
   357 	TRAPD(err,iCbsMsg->AppendL(wcdmaCbsMsgPtr));
       
   358 	if(err != KErrNone)
       
   359 		{
       
   360 		delete wcdmaCbsMsgPtr;
       
   361 		wcdmaCbsMsgPtr = NULL;
       
   362 		}
       
   363 	
       
   364 	if (!aMoreToCome)
       
   365 		{
       
   366 		TUint8 wcdmaPageNumber = (TUint8)iCbsMsg->Count();
       
   367 		// Pack the data to return to the Common TSY
       
   368 		CMmDataPackage dataPackage;
       
   369 		dataPackage.PackData(&iCbsMsg, &wcdmaPageNumber);
       
   370 		
       
   371 		iMessageManagerCallback.Complete(EMmTsyWcdmaBroadcastNotifyMessageReceived, &dataPackage, aError);
       
   372 
       
   373 		// handle case, when error on completion:
       
   374 		if(aError != KErrNone)
       
   375 			{
       
   376 			iCbsMsg->ResetAndDestroy();	
       
   377 			}
       
   378 		else
       
   379 			{
       
   380 			iCbsMsg->Reset();				
       
   381 			}												
       
   382 		}
       
   383 					
       
   384 	} // CCellBroadcastDispatcher::CallbackWcdmaBroadcastMessageReceived	
       
   385 	
       
   386 void CCellBroadcastDispatcher::CallbackStartSimCbTopicBrowsing(TInt aError,
       
   387 		const CArrayFixFlat<RMmCustomAPI::TSimCbTopic>& aSimTopicArray )
       
   388 /**
       
   389  * Callback function to be used by the request to complete
       
   390  * CCtsyDispatcherCallback::CallbackCellBroadcastStartSimCbTopicBrowsingComp()
       
   391  *
       
   392  * @param aError The error code to be returned to the CTSY Dispatcher.
       
   393  * @param aSimTopicArray array of TSimCbTopic.
       
   394  */
       
   395 	{
       
   396 	TSYLOGENTRYEXITARGS(_L8("aError=%d, aSimTopicArray.Count()=%d"), aError, aSimTopicArray.Count());
       
   397 
       
   398 	CArrayFixFlat<RMmCustomAPI::TSimCbTopic>* simTopicArrayPtr = &const_cast<CArrayFixFlat<RMmCustomAPI::TSimCbTopic>&>(aSimTopicArray);
       
   399 	
       
   400 	// Pack the data to return to the Common TSY
       
   401 	CMmDataPackage dataPackage;
       
   402 	dataPackage.PackData(&simTopicArrayPtr);			   
       
   403 		
       
   404 	iMessageManagerCallback.Complete(ECustomStartSimCbTopicBrowsingIPC, &dataPackage, aError);	
       
   405 	
       
   406 	} // CCellBroadcastDispatcher::CallbackWcdmaBroadcastMessageReceived
       
   407 
       
   408 void CCellBroadcastDispatcher::CallbackDeleteSimCbTopic(TInt aError)
       
   409 /**
       
   410  * Callback function to be used by the request to complete
       
   411  * CCtsyDispatcherCallback::CallbackCellBroadcastDeleteSimCbTopicComp()
       
   412  *
       
   413  * @param aError The error code to be returned to the CTSY Dispatcher.
       
   414  */
       
   415 	{
       
   416 	TSYLOGENTRYEXITARGS(_L8("aError=%d"), aError);
       
   417 		
       
   418 	iMessageManagerCallback.Complete(ECustomDeleteSimCbTopicIPC, aError);	
       
   419 	
       
   420 	} // CCellBroadcastDispatcher::CallbackWcdmaBroadcastMessageReceived
       
   421 
       
   422 void CCellBroadcastDispatcher::CallbackSetBroadcastFilterSetting(TInt aError)
       
   423 /**
       
   424  * Callback function to be used by the request to complete
       
   425  * CCtsyDispatcherCallback::CallbackCellBroadcastSetBroadcastFilterSettingComp()
       
   426  *
       
   427  * @param aError The error code to be returned to the CTSY Dispatcher.
       
   428  */
       
   429 	{
       
   430 	TSYLOGENTRYEXITARGS(_L8("aError=%d"), aError);
       
   431 
       
   432 	iMessageManagerCallback.Complete(EMobileBroadcastMessagingSetFilterSetting, aError);
       
   433 	
       
   434 	} // CCellBroadcastDispatcher::CallbackSetBroadcastFilterSetting
       
   435 
       
   436 void CCellBroadcastDispatcher::CallbackActivateBroadcastReceiveMessage(TInt aError)
       
   437 /**
       
   438  * Callback function to be used by the request to complete
       
   439  * CCtsyDispatcherCallback::CallbackCellBroadcastActivateBroadcastReceiveMessageComp()
       
   440  *
       
   441  * @param aError The error code to be returned to the CTSY Dispatcher.
       
   442  */
       
   443 	{
       
   444 	TSYLOGENTRYEXITARGS(_L8("aError=%d"), aError);
       
   445 	
       
   446 	iMessageManagerCallback.Complete(EMobileBroadcastMessagingReceiveMessage, aError);
       
   447 	
       
   448 	} // CCellBroadcastDispatcher::CallbackActivateBroadcastReceiveMessage
       
   449 
       
   450 void CCellBroadcastDispatcher::CallbackReceiveMessageCancel(TInt aError)
       
   451 /**
       
   452  * Callback function to be used by the request to complete
       
   453  * CCtsyDispatcherCallback::CallbackCellBroadcastReceiveMessageCancelComp()
       
   454  *
       
   455  * @param aError The error code to be returned to the CTSY Dispatcher.
       
   456  */
       
   457 	{
       
   458 	TSYLOGENTRYEXITARGS(_L8("aError=%d"), aError);
       
   459 	
       
   460 	iMessageManagerCallback.Complete(EMobileBroadcastMessagingReceiveMessageCancel, aError);
       
   461 	
       
   462 	} // CCellBroadcastDispatcher::CallbackReceiveMessageCancel
       
   463 
       
   464 void CCellBroadcastDispatcher::CallbackSync(CRequestQueueOneShot::TIpcDataPackage& aIpcDataPackage)
       
   465 /**
       
   466  * Part of the MDispatcherCallback interface. Used to complete requests handled
       
   467  * synchronously by the Licensee LTSY asynchronously back to the Common TSY.
       
   468  *  
       
   469  * @param aIpcDataPackage Package encapsulating the request.
       
   470  * 
       
   471  * @see MDispatcherCallback::CallbackSync
       
   472  */
       
   473 	{
       
   474 	TSYLOGENTRYEXIT;
       
   475 	
       
   476 	switch (aIpcDataPackage.iIpc)
       
   477 		{
       
   478 	
       
   479 	default:
       
   480 		LOG(_L8("WARNING: CCellBroadcastDispatcher::CallbackSync unhandled IPC=%d"), aIpcDataPackage.iIpc);
       
   481 		__ASSERT_DEBUG(NULL, CtsyDispatcherPanic(EUnhandledCtsyIpc));
       
   482 		break;		
       
   483 		} // switch (aIpcDataPackage.iIpc)
       
   484 	
       
   485 	} // CCellBroadcastDispatcher::CallbackSync
       
   486 
       
   487 
       
   488