--- a/telephonyserverplugins/ctsydispatchlayer/src/ccellbroadcastdispatcher.cpp Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserverplugins/ctsydispatchlayer/src/ccellbroadcastdispatcher.cpp Thu May 06 15:10:38 2010 +0100
@@ -1,488 +1,488 @@
-// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of "Eclipse Public License v1.0"
-// which accompanies this distribution, and is available
-// at the URL "http://www.eclipse.org/legal/epl-v10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-
-#include "ccellbroadcastdispatcher.h"
-
-#include <ctsy/ltsy/mltsydispatchcellbroadcastinterface.h>
-#include <ctsy/pluginapi/mmmessagemanagercallback.h>
-#include <ctsy/serviceapi/mmtsy_ipcdefs.h>
-
-
-#include <ctsy/ltsy/ltsylogger.h>
-#include "ctsydispatcherpanic.h"
-#include "tdispatcherholder.h"
-
-
-
-CCellBroadcastDispatcher::CCellBroadcastDispatcher(
- MLtsyDispatchFactoryV1& aLtsyFactory,
- MmMessageManagerCallback& aMessageManagerCallback,
- CRequestQueueOneShot& aRequestAsyncOneShot)
- : iLtsyFactoryV1(aLtsyFactory),
- iMessageManagerCallback(aMessageManagerCallback),
- iRequestAsyncOneShot(aRequestAsyncOneShot)
- {
- } // CCellBroadcastDispatcher::CCellBroadcastDispatcher
-
-
-CCellBroadcastDispatcher::~CCellBroadcastDispatcher()
- {
- if(iCbsMsg)
- {
- iCbsMsg->ResetAndDestroy();
- delete iCbsMsg;
- }
- } // CCellBroadcastDispatcher::~CCellBroadcastDispatcher
-
-
-CCellBroadcastDispatcher* CCellBroadcastDispatcher::NewLC(
- MLtsyDispatchFactoryV1& aLtsyFactory,
- MmMessageManagerCallback& aMessageManagerCallback,
- CRequestQueueOneShot& aRequestAsyncOneShot)
- {
- TSYLOGENTRYEXIT;
- CCellBroadcastDispatcher* self =
- new (ELeave) CCellBroadcastDispatcher(aLtsyFactory, aMessageManagerCallback, aRequestAsyncOneShot);
- CleanupStack::PushL(self);
- self->ConstructL();
- return self;
- } // CCellBroadcastDispatcher::NewLC
-
-
-CCellBroadcastDispatcher* CCellBroadcastDispatcher::NewL(
- MLtsyDispatchFactoryV1& aLtsyFactory,
- MmMessageManagerCallback& aMessageManagerCallback,
- CRequestQueueOneShot& aRequestAsyncOneShot)
- {
- TSYLOGENTRYEXIT;
- CCellBroadcastDispatcher* self =
- CCellBroadcastDispatcher::NewLC(aLtsyFactory, aMessageManagerCallback, aRequestAsyncOneShot);
- CleanupStack::Pop (self);
- return self;
- } // CCellBroadcastDispatcher::NewL
-
-
-void CCellBroadcastDispatcher::ConstructL()
-/**
- * Second phase constructor.
- */
- {
- TSYLOGENTRYEXIT;
-
- // Get the Licensee LTSY interfaces related to CellBroadcast functionality
- // from the factory
-
-
- if(iLtsyFactoryV1.IsDispatchInterfaceSupported(KDispatchCellBroadcastFuncUnitId, MLtsyDispatchCellBroadcastSetBroadcastFilterSetting::KLtsyDispatchCellBroadcastSetBroadcastFilterSettingApiId))
- {
- TAny* setBroadcastFilterSettingInterface = NULL;
- iLtsyFactoryV1.GetDispatchHandler(
- MLtsyDispatchCellBroadcastSetBroadcastFilterSetting::KLtsyDispatchCellBroadcastSetBroadcastFilterSettingApiId,
- setBroadcastFilterSettingInterface);
- iLtsyDispatchCellBroadcastSetBroadcastFilterSetting =
- static_cast<MLtsyDispatchCellBroadcastSetBroadcastFilterSetting*>(setBroadcastFilterSettingInterface);
- __ASSERT_DEBUG(iLtsyDispatchCellBroadcastSetBroadcastFilterSetting, CtsyDispatcherPanic(EInvalidNullPtr));
- }
-
- if(iLtsyFactoryV1.IsDispatchInterfaceSupported(KDispatchCellBroadcastFuncUnitId, MLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage::KLtsyDispatchCellBroadcastActivateBroadcastReceiveMessageApiId))
- {
- TAny* activateBroadcastReceiveMessageInterface = NULL;
- iLtsyFactoryV1.GetDispatchHandler(
- MLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage::KLtsyDispatchCellBroadcastActivateBroadcastReceiveMessageApiId,
- activateBroadcastReceiveMessageInterface);
- iLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage =
- static_cast<MLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage*>(activateBroadcastReceiveMessageInterface);
- __ASSERT_DEBUG(iLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage, CtsyDispatcherPanic(EInvalidNullPtr));
- }
-
- if(iLtsyFactoryV1.IsDispatchInterfaceSupported(KDispatchCellBroadcastFuncUnitId, MLtsyDispatchCellBroadcastReceiveMessageCancel::KLtsyDispatchCellBroadcastReceiveMessageCancelApiId))
- {
- TAny* receiveMessageCancelInterface = NULL;
- iLtsyFactoryV1.GetDispatchHandler(
- MLtsyDispatchCellBroadcastReceiveMessageCancel::KLtsyDispatchCellBroadcastReceiveMessageCancelApiId,
- receiveMessageCancelInterface);
- iLtsyDispatchCellBroadcastReceiveMessageCancel =
- static_cast<MLtsyDispatchCellBroadcastReceiveMessageCancel*>(receiveMessageCancelInterface);
- __ASSERT_DEBUG(iLtsyDispatchCellBroadcastReceiveMessageCancel, CtsyDispatcherPanic(EInvalidNullPtr));
- }
-
- if(iLtsyFactoryV1.IsDispatchInterfaceSupported(KDispatchCellBroadcastFuncUnitId, MLtsyDispatchCellBroadcastStartSimCbTopicBrowsing::KLtsyDispatchCellBroadcastStartSimCbTopicBrowsingApiId))
- {
- TAny* startSimCbTopicBrowsingInterface = NULL;
- iLtsyFactoryV1.GetDispatchHandler(
- MLtsyDispatchCellBroadcastStartSimCbTopicBrowsing::KLtsyDispatchCellBroadcastStartSimCbTopicBrowsingApiId,
- startSimCbTopicBrowsingInterface);
- iLtsyDispatchCellBroadcastStartSimCbTopicBrowsing =
- static_cast<MLtsyDispatchCellBroadcastStartSimCbTopicBrowsing*>(startSimCbTopicBrowsingInterface);
- __ASSERT_DEBUG(iLtsyDispatchCellBroadcastStartSimCbTopicBrowsing, CtsyDispatcherPanic(EInvalidNullPtr));
- }
-
- if(iLtsyFactoryV1.IsDispatchInterfaceSupported(KDispatchCellBroadcastFuncUnitId, MLtsyDispatchCellBroadcastDeleteSimCbTopic::KLtsyDispatchCellBroadcastDeleteSimCbTopicApiId))
- {
- TAny* deleteSimCbTopicInterface = NULL;
- iLtsyFactoryV1.GetDispatchHandler(
- MLtsyDispatchCellBroadcastDeleteSimCbTopic::KLtsyDispatchCellBroadcastDeleteSimCbTopicApiId,
- deleteSimCbTopicInterface);
- iLtsyDispatchCellBroadcastDeleteSimCbTopic =
- static_cast<MLtsyDispatchCellBroadcastDeleteSimCbTopic*>(deleteSimCbTopicInterface);
- __ASSERT_DEBUG(iLtsyDispatchCellBroadcastDeleteSimCbTopic, CtsyDispatcherPanic(EInvalidNullPtr));
- }
-
- iCbsMsg = new( ELeave ) CArrayPtrFlat< TWcdmaCbsMsg >( 10 );
-
- } // CCellBroadcastDispatcher::ConstructL
-
-void CCellBroadcastDispatcher::SetDispatcherHolder(TDispatcherHolder& aDispatcherHolder)
-/**
- * Set the dispatcher holder.
- *
- * @param aDispatcherHolder Reference to dispatcher holder.
- */
- {
- TSYLOGENTRYEXIT;
-
- iDispatcherHolder = &aDispatcherHolder;
- } // CCellBroadcastDispatcher::SetDispatcherHolder
-
-TInt CCellBroadcastDispatcher::DispatchSetBroadcastFilterSettingL(const CMmDataPackage* aDataPackage)
-/**
- * Unpack data related to EMobileBroadcastMessagingSetFilterSetting
- * and pass request on to Licensee LTSY.
- *
- * @return Returns error code returned by the Licensee LTSY or KErrNotSupported if
- * the Licensee LTSY does not support this request.
- */
- {
- TSYLOGENTRYEXIT;
- TInt ret = KErrNotSupported;
-
- __ASSERT_DEBUG(aDataPackage, CtsyDispatcherPanic(EInvalidNullPtr));
-
- // Call Handle... method in Licensee LTSY
- if (iLtsyDispatchCellBroadcastSetBroadcastFilterSetting)
- {
- TCbsCbmiAndLangAndFilter* cbsFilter = NULL;
- aDataPackage->UnPackData(&cbsFilter);
-
- __ASSERT_DEBUG(cbsFilter, CtsyDispatcherPanic(EInvalidNullPtr));
-
- ret = iLtsyDispatchCellBroadcastSetBroadcastFilterSetting->HandleSetBroadcastFilterSettingReqL(cbsFilter->iSetting);
- }
-
- return TSYLOGSETEXITERR(ret);
- } // CCellBroadcastDispatcher::DispatchSetBroadcastFilterSettingL
-
-TInt CCellBroadcastDispatcher::DispatchActivateBroadcastReceiveMessageL(const CMmDataPackage* aDataPackage)
-/**
- * Unpack data related to EMobileBroadcastMessagingReceiveMessage
- * and pass request on to Licensee LTSY.
- *
- * @return Returns error code returned by the Licensee LTSY or KErrNotSupported if
- * the Licensee LTSY does not support this request.
- */
- {
- TSYLOGENTRYEXIT;
- TInt ret = KErrNotSupported;
-
- __ASSERT_DEBUG(aDataPackage, CtsyDispatcherPanic(EInvalidNullPtr));
-
- // Call Handle... method in Licensee LTSY
- if (iLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage)
- {
- TCbsCbmiAndLangAndFilter* cbsFilter = NULL;
- aDataPackage->UnPackData(&cbsFilter);
-
- __ASSERT_DEBUG(cbsFilter, CtsyDispatcherPanic(EInvalidNullPtr));
-
- ret = iLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage->HandleActivateBroadcastReceiveMessageReqL(cbsFilter->iSetting);
- }
-
-
- return TSYLOGSETEXITERR(ret);
- } // CCellBroadcastDispatcher::DispatchActivateBroadcastReceiveMessageL
-
-TInt CCellBroadcastDispatcher::DispatchReceiveMessageCancelL(const CMmDataPackage* aDataPackage)
-/**
- * Unpack data related to EMobileBroadcastMessagingReceiveMessageCancel
- * and pass request on to Licensee LTSY.
- *
- * @return Returns error code returned by the Licensee LTSY or KErrNotSupported if
- * the Licensee LTSY does not support this request.
- */
- {
- TSYLOGENTRYEXIT;
- TInt ret = KErrNotSupported;
-
- __ASSERT_DEBUG(aDataPackage, CtsyDispatcherPanic(EInvalidNullPtr));
-
- // Call Handle... method in Licensee LTSY
- if (iLtsyDispatchCellBroadcastReceiveMessageCancel)
- {
- TCbsCbmiAndLangAndFilter* cbsFilter = NULL;
- aDataPackage->UnPackData(&cbsFilter);
-
- __ASSERT_DEBUG(cbsFilter, CtsyDispatcherPanic(EInvalidNullPtr));
-
- ret = iLtsyDispatchCellBroadcastReceiveMessageCancel->HandleReceiveMessageCancelReqL(cbsFilter->iSetting);
- }
-
- return TSYLOGSETEXITERR(ret);
- } // CCellBroadcastDispatcher::DispatchReceiveMessageCancelL
-
-TInt CCellBroadcastDispatcher::DispatchStartSimCbTopicBrowsingL()
-/**
- * Pass ECustomStartSimCbTopicBrowsingIPC request on to Licensee LTSY.
- *
- * @return Returns error code returned by the Licensee LTSY or KErrNotSupported if
- * the Licensee LTSY does not support this request.
- */
- {
- TSYLOGENTRYEXIT;
- TInt ret = KErrNotSupported;
-
- // Call Handle... method in Licensee LTSY
- if (iLtsyDispatchCellBroadcastStartSimCbTopicBrowsing)
- {
- ret = iLtsyDispatchCellBroadcastStartSimCbTopicBrowsing->HandleStartSimCbTopicBrowsingReqL();
- }
-
- return TSYLOGSETEXITERR(ret);
- } // CCellBroadcastDispatcher::DispatchReceiveMessageCancelL
-
-TInt CCellBroadcastDispatcher::DispatchDeleteSimCbTopicL(const CMmDataPackage* aDataPackage)
-/**
- * Pass ECustomDeleteSimCbTopicIPC request on to Licensee LTSY.
- *
- * @return Returns error code returned by the Licensee LTSY or KErrNotSupported if
- * the Licensee LTSY does not support this request.
- */
- {
- TSYLOGENTRYEXIT;
- TInt ret = KErrNotSupported;
-
- __ASSERT_DEBUG(aDataPackage, CtsyDispatcherPanic(EInvalidNullPtr));
-
- // Call Handle... method in Licensee LTSY
- if (iLtsyDispatchCellBroadcastDeleteSimCbTopic)
- {
- TUint expIndex;
- TBool deleteFlag;
- aDataPackage->UnPackData(expIndex, deleteFlag);
- ret = iLtsyDispatchCellBroadcastDeleteSimCbTopic->HandleDeleteSimCbTopicReqL(expIndex, deleteFlag);
- }
-
-
- return TSYLOGSETEXITERR(ret);
- } // CCellBroadcastDispatcher::DispatchActivateBroadcastReceiveMessageL
-
-
-//
-// Callback handlers follow
-//
-
-
-
-void CCellBroadcastDispatcher::CallbackGsmBroadcastNotifyMessageReceived(TInt aError, const TDesC8& aCbsMsg)
-/**
- * Callback function to be used by the request to complete
- * CCtsyDispatcherCallback::CallbackCellBroadcastGsmBroadcastNotifyMessageReceivedInd()
- *
- * @param aError The error code to be returned to the CTSY Dispatcher.
- * @param aCbsMsg CB message.
- */
- {
- TSYLOGENTRYEXITARGS(_L8("aError=%d"), aError);
-
- __ASSERT_DEBUG( (aCbsMsg.Length() < RMobileBroadcastMessaging::KBroadcastPageSize) , CtsyDispatcherPanic(EBadLength));
-
- // Pack the data to return to the Common TSY
- CMmDataPackage data;
- TGsmCbsMsg gsmCbsMsg;
- gsmCbsMsg.iCbsMsg.Copy(aCbsMsg.Left(RMobileBroadcastMessaging::KBroadcastPageSize));
- data.PackData(&gsmCbsMsg);
-
- iMessageManagerCallback.Complete(EMmTsyGsmBroadcastNotifyMessageReceived, &data, aError);
-
- } // CCellBroadcastDispatcher::CallbackGsmBroadcastNotifyMessageReceived
-
-void CCellBroadcastDispatcher::CallbackWcdmaBroadcastMessageReceived(TInt aError, const TDesC8& aWcdmaCbsData,
- const DispatcherCellBroadcast::TWcdmaCbsMsgBase& aWcdmaCbsMsgBase, TBool aMoreToCome)
-/**
- * Callback function to be used by the request to complete
- * CCtsyDispatcherCallback::CallbackCellBroadcastWcdmaBroadcastMessageReceivedInd()
- *
- * @param aError The error code to be returned to the CTSY Dispatcher.
- * @param aWcdmaCbsData Broadcast message WCDMA.
- * @param aWcdmaCbsMsgBase base wcdma cbs data structure.
- * @param aIsLast Is it the last WCDMA message to pass to CTSY.
- */
- {
- TSYLOGENTRYEXITARGS(_L8("aError=%d, aMoreToCome=%d"), aError, aMoreToCome);
- if(aError != KErrNone)
- {
- __ASSERT_DEBUG(aMoreToCome==EFalse, CtsyDispatcherPanic(EInvalidParameter));
- }
-
- //A TRAP here is expensive, do a non overloaded new operator and check for NULL.
- TWcdmaCbsMsg* wcdmaCbsMsgPtr = new TWcdmaCbsMsg();
- if (!wcdmaCbsMsgPtr)
- {
- // not proceeding
- __ASSERT_DEBUG(NULL, CtsyDispatcherPanic(EInvalidNullPtr));
- return;
- }
- // allocation ok:
- __ASSERT_DEBUG( (aWcdmaCbsData.Length() < RMobileBroadcastMessaging::KBroadcastPageSize) , CtsyDispatcherPanic(EBadLength));
- wcdmaCbsMsgPtr->iWcdmaCbsData.Copy(aWcdmaCbsData);
- wcdmaCbsMsgPtr->iSbNumber = 0; // not used
- wcdmaCbsMsgPtr->iNumberOfPages = aWcdmaCbsMsgBase.iNumberOfPages;
- wcdmaCbsMsgPtr->iMessageType = aWcdmaCbsMsgBase.iMessageType;
- wcdmaCbsMsgPtr->iMessageId = aWcdmaCbsMsgBase.iMessageId;
- wcdmaCbsMsgPtr->iSerialNum = aWcdmaCbsMsgBase.iSerialNum;
- wcdmaCbsMsgPtr->iDCS = aWcdmaCbsMsgBase.iDCS;
- wcdmaCbsMsgPtr->iInfoLength = aWcdmaCbsMsgBase.iInfoLength;
-
- TRAPD(err,iCbsMsg->AppendL(wcdmaCbsMsgPtr));
- if(err != KErrNone)
- {
- delete wcdmaCbsMsgPtr;
- wcdmaCbsMsgPtr = NULL;
- }
-
- if (!aMoreToCome)
- {
- TUint8 wcdmaPageNumber = (TUint8)iCbsMsg->Count();
- // Pack the data to return to the Common TSY
- CMmDataPackage dataPackage;
- dataPackage.PackData(&iCbsMsg, &wcdmaPageNumber);
-
- iMessageManagerCallback.Complete(EMmTsyWcdmaBroadcastNotifyMessageReceived, &dataPackage, aError);
-
- // handle case, when error on completion:
- if(aError != KErrNone)
- {
- iCbsMsg->ResetAndDestroy();
- }
- else
- {
- iCbsMsg->Reset();
- }
- }
-
- } // CCellBroadcastDispatcher::CallbackWcdmaBroadcastMessageReceived
-
-void CCellBroadcastDispatcher::CallbackStartSimCbTopicBrowsing(TInt aError,
- const CArrayFixFlat<RMmCustomAPI::TSimCbTopic>& aSimTopicArray )
-/**
- * Callback function to be used by the request to complete
- * CCtsyDispatcherCallback::CallbackCellBroadcastStartSimCbTopicBrowsingComp()
- *
- * @param aError The error code to be returned to the CTSY Dispatcher.
- * @param aSimTopicArray array of TSimCbTopic.
- */
- {
- TSYLOGENTRYEXITARGS(_L8("aError=%d, aSimTopicArray.Count()=%d"), aError, aSimTopicArray.Count());
-
- CArrayFixFlat<RMmCustomAPI::TSimCbTopic>* simTopicArrayPtr = &const_cast<CArrayFixFlat<RMmCustomAPI::TSimCbTopic>&>(aSimTopicArray);
-
- // Pack the data to return to the Common TSY
- CMmDataPackage dataPackage;
- dataPackage.PackData(&simTopicArrayPtr);
-
- iMessageManagerCallback.Complete(ECustomStartSimCbTopicBrowsingIPC, &dataPackage, aError);
-
- } // CCellBroadcastDispatcher::CallbackWcdmaBroadcastMessageReceived
-
-void CCellBroadcastDispatcher::CallbackDeleteSimCbTopic(TInt aError)
-/**
- * Callback function to be used by the request to complete
- * CCtsyDispatcherCallback::CallbackCellBroadcastDeleteSimCbTopicComp()
- *
- * @param aError The error code to be returned to the CTSY Dispatcher.
- */
- {
- TSYLOGENTRYEXITARGS(_L8("aError=%d"), aError);
-
- iMessageManagerCallback.Complete(ECustomDeleteSimCbTopicIPC, aError);
-
- } // CCellBroadcastDispatcher::CallbackWcdmaBroadcastMessageReceived
-
-void CCellBroadcastDispatcher::CallbackSetBroadcastFilterSetting(TInt aError)
-/**
- * Callback function to be used by the request to complete
- * CCtsyDispatcherCallback::CallbackCellBroadcastSetBroadcastFilterSettingComp()
- *
- * @param aError The error code to be returned to the CTSY Dispatcher.
- */
- {
- TSYLOGENTRYEXITARGS(_L8("aError=%d"), aError);
-
- iMessageManagerCallback.Complete(EMobileBroadcastMessagingSetFilterSetting, aError);
-
- } // CCellBroadcastDispatcher::CallbackSetBroadcastFilterSetting
-
-void CCellBroadcastDispatcher::CallbackActivateBroadcastReceiveMessage(TInt aError)
-/**
- * Callback function to be used by the request to complete
- * CCtsyDispatcherCallback::CallbackCellBroadcastActivateBroadcastReceiveMessageComp()
- *
- * @param aError The error code to be returned to the CTSY Dispatcher.
- */
- {
- TSYLOGENTRYEXITARGS(_L8("aError=%d"), aError);
-
- iMessageManagerCallback.Complete(EMobileBroadcastMessagingReceiveMessage, aError);
-
- } // CCellBroadcastDispatcher::CallbackActivateBroadcastReceiveMessage
-
-void CCellBroadcastDispatcher::CallbackReceiveMessageCancel(TInt aError)
-/**
- * Callback function to be used by the request to complete
- * CCtsyDispatcherCallback::CallbackCellBroadcastReceiveMessageCancelComp()
- *
- * @param aError The error code to be returned to the CTSY Dispatcher.
- */
- {
- TSYLOGENTRYEXITARGS(_L8("aError=%d"), aError);
-
- iMessageManagerCallback.Complete(EMobileBroadcastMessagingReceiveMessageCancel, aError);
-
- } // CCellBroadcastDispatcher::CallbackReceiveMessageCancel
-
-void CCellBroadcastDispatcher::CallbackSync(CRequestQueueOneShot::TIpcDataPackage& aIpcDataPackage)
-/**
- * Part of the MDispatcherCallback interface. Used to complete requests handled
- * synchronously by the Licensee LTSY asynchronously back to the Common TSY.
- *
- * @param aIpcDataPackage Package encapsulating the request.
- *
- * @see MDispatcherCallback::CallbackSync
- */
- {
- TSYLOGENTRYEXIT;
-
- switch (aIpcDataPackage.iIpc)
- {
-
- default:
- LOG(_L8("WARNING: CCellBroadcastDispatcher::CallbackSync unhandled IPC=%d"), aIpcDataPackage.iIpc);
- __ASSERT_DEBUG(NULL, CtsyDispatcherPanic(EUnhandledCtsyIpc));
- break;
- } // switch (aIpcDataPackage.iIpc)
-
- } // CCellBroadcastDispatcher::CallbackSync
-
-
-
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "ccellbroadcastdispatcher.h"
+
+#include <ctsy/ltsy/mltsydispatchcellbroadcastinterface.h>
+#include <ctsy/pluginapi/mmmessagemanagercallback.h>
+#include <ctsy/serviceapi/mmtsy_ipcdefs.h>
+
+
+#include <ctsy/ltsy/ltsylogger.h>
+#include "ctsydispatcherpanic.h"
+#include "tdispatcherholder.h"
+
+
+
+CCellBroadcastDispatcher::CCellBroadcastDispatcher(
+ MLtsyDispatchFactoryV1& aLtsyFactory,
+ MmMessageManagerCallback& aMessageManagerCallback,
+ CRequestQueueOneShot& aRequestAsyncOneShot)
+ : iLtsyFactoryV1(aLtsyFactory),
+ iMessageManagerCallback(aMessageManagerCallback),
+ iRequestAsyncOneShot(aRequestAsyncOneShot)
+ {
+ } // CCellBroadcastDispatcher::CCellBroadcastDispatcher
+
+
+CCellBroadcastDispatcher::~CCellBroadcastDispatcher()
+ {
+ if(iCbsMsg)
+ {
+ iCbsMsg->ResetAndDestroy();
+ delete iCbsMsg;
+ }
+ } // CCellBroadcastDispatcher::~CCellBroadcastDispatcher
+
+
+CCellBroadcastDispatcher* CCellBroadcastDispatcher::NewLC(
+ MLtsyDispatchFactoryV1& aLtsyFactory,
+ MmMessageManagerCallback& aMessageManagerCallback,
+ CRequestQueueOneShot& aRequestAsyncOneShot)
+ {
+ TSYLOGENTRYEXIT;
+ CCellBroadcastDispatcher* self =
+ new (ELeave) CCellBroadcastDispatcher(aLtsyFactory, aMessageManagerCallback, aRequestAsyncOneShot);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ } // CCellBroadcastDispatcher::NewLC
+
+
+CCellBroadcastDispatcher* CCellBroadcastDispatcher::NewL(
+ MLtsyDispatchFactoryV1& aLtsyFactory,
+ MmMessageManagerCallback& aMessageManagerCallback,
+ CRequestQueueOneShot& aRequestAsyncOneShot)
+ {
+ TSYLOGENTRYEXIT;
+ CCellBroadcastDispatcher* self =
+ CCellBroadcastDispatcher::NewLC(aLtsyFactory, aMessageManagerCallback, aRequestAsyncOneShot);
+ CleanupStack::Pop (self);
+ return self;
+ } // CCellBroadcastDispatcher::NewL
+
+
+void CCellBroadcastDispatcher::ConstructL()
+/**
+ * Second phase constructor.
+ */
+ {
+ TSYLOGENTRYEXIT;
+
+ // Get the Licensee LTSY interfaces related to CellBroadcast functionality
+ // from the factory
+
+
+ if(iLtsyFactoryV1.IsDispatchInterfaceSupported(KDispatchCellBroadcastFuncUnitId, MLtsyDispatchCellBroadcastSetBroadcastFilterSetting::KLtsyDispatchCellBroadcastSetBroadcastFilterSettingApiId))
+ {
+ TAny* setBroadcastFilterSettingInterface = NULL;
+ iLtsyFactoryV1.GetDispatchHandler(
+ MLtsyDispatchCellBroadcastSetBroadcastFilterSetting::KLtsyDispatchCellBroadcastSetBroadcastFilterSettingApiId,
+ setBroadcastFilterSettingInterface);
+ iLtsyDispatchCellBroadcastSetBroadcastFilterSetting =
+ static_cast<MLtsyDispatchCellBroadcastSetBroadcastFilterSetting*>(setBroadcastFilterSettingInterface);
+ __ASSERT_DEBUG(iLtsyDispatchCellBroadcastSetBroadcastFilterSetting, CtsyDispatcherPanic(EInvalidNullPtr));
+ }
+
+ if(iLtsyFactoryV1.IsDispatchInterfaceSupported(KDispatchCellBroadcastFuncUnitId, MLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage::KLtsyDispatchCellBroadcastActivateBroadcastReceiveMessageApiId))
+ {
+ TAny* activateBroadcastReceiveMessageInterface = NULL;
+ iLtsyFactoryV1.GetDispatchHandler(
+ MLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage::KLtsyDispatchCellBroadcastActivateBroadcastReceiveMessageApiId,
+ activateBroadcastReceiveMessageInterface);
+ iLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage =
+ static_cast<MLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage*>(activateBroadcastReceiveMessageInterface);
+ __ASSERT_DEBUG(iLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage, CtsyDispatcherPanic(EInvalidNullPtr));
+ }
+
+ if(iLtsyFactoryV1.IsDispatchInterfaceSupported(KDispatchCellBroadcastFuncUnitId, MLtsyDispatchCellBroadcastReceiveMessageCancel::KLtsyDispatchCellBroadcastReceiveMessageCancelApiId))
+ {
+ TAny* receiveMessageCancelInterface = NULL;
+ iLtsyFactoryV1.GetDispatchHandler(
+ MLtsyDispatchCellBroadcastReceiveMessageCancel::KLtsyDispatchCellBroadcastReceiveMessageCancelApiId,
+ receiveMessageCancelInterface);
+ iLtsyDispatchCellBroadcastReceiveMessageCancel =
+ static_cast<MLtsyDispatchCellBroadcastReceiveMessageCancel*>(receiveMessageCancelInterface);
+ __ASSERT_DEBUG(iLtsyDispatchCellBroadcastReceiveMessageCancel, CtsyDispatcherPanic(EInvalidNullPtr));
+ }
+
+ if(iLtsyFactoryV1.IsDispatchInterfaceSupported(KDispatchCellBroadcastFuncUnitId, MLtsyDispatchCellBroadcastStartSimCbTopicBrowsing::KLtsyDispatchCellBroadcastStartSimCbTopicBrowsingApiId))
+ {
+ TAny* startSimCbTopicBrowsingInterface = NULL;
+ iLtsyFactoryV1.GetDispatchHandler(
+ MLtsyDispatchCellBroadcastStartSimCbTopicBrowsing::KLtsyDispatchCellBroadcastStartSimCbTopicBrowsingApiId,
+ startSimCbTopicBrowsingInterface);
+ iLtsyDispatchCellBroadcastStartSimCbTopicBrowsing =
+ static_cast<MLtsyDispatchCellBroadcastStartSimCbTopicBrowsing*>(startSimCbTopicBrowsingInterface);
+ __ASSERT_DEBUG(iLtsyDispatchCellBroadcastStartSimCbTopicBrowsing, CtsyDispatcherPanic(EInvalidNullPtr));
+ }
+
+ if(iLtsyFactoryV1.IsDispatchInterfaceSupported(KDispatchCellBroadcastFuncUnitId, MLtsyDispatchCellBroadcastDeleteSimCbTopic::KLtsyDispatchCellBroadcastDeleteSimCbTopicApiId))
+ {
+ TAny* deleteSimCbTopicInterface = NULL;
+ iLtsyFactoryV1.GetDispatchHandler(
+ MLtsyDispatchCellBroadcastDeleteSimCbTopic::KLtsyDispatchCellBroadcastDeleteSimCbTopicApiId,
+ deleteSimCbTopicInterface);
+ iLtsyDispatchCellBroadcastDeleteSimCbTopic =
+ static_cast<MLtsyDispatchCellBroadcastDeleteSimCbTopic*>(deleteSimCbTopicInterface);
+ __ASSERT_DEBUG(iLtsyDispatchCellBroadcastDeleteSimCbTopic, CtsyDispatcherPanic(EInvalidNullPtr));
+ }
+
+ iCbsMsg = new( ELeave ) CArrayPtrFlat< TWcdmaCbsMsg >( 10 );
+
+ } // CCellBroadcastDispatcher::ConstructL
+
+void CCellBroadcastDispatcher::SetDispatcherHolder(TDispatcherHolder& aDispatcherHolder)
+/**
+ * Set the dispatcher holder.
+ *
+ * @param aDispatcherHolder Reference to dispatcher holder.
+ */
+ {
+ TSYLOGENTRYEXIT;
+
+ iDispatcherHolder = &aDispatcherHolder;
+ } // CCellBroadcastDispatcher::SetDispatcherHolder
+
+TInt CCellBroadcastDispatcher::DispatchSetBroadcastFilterSettingL(const CMmDataPackage* aDataPackage)
+/**
+ * Unpack data related to EMobileBroadcastMessagingSetFilterSetting
+ * and pass request on to Licensee LTSY.
+ *
+ * @return Returns error code returned by the Licensee LTSY or KErrNotSupported if
+ * the Licensee LTSY does not support this request.
+ */
+ {
+ TSYLOGENTRYEXIT;
+ TInt ret = KErrNotSupported;
+
+ __ASSERT_DEBUG(aDataPackage, CtsyDispatcherPanic(EInvalidNullPtr));
+
+ // Call Handle... method in Licensee LTSY
+ if (iLtsyDispatchCellBroadcastSetBroadcastFilterSetting)
+ {
+ TCbsCbmiAndLangAndFilter* cbsFilter = NULL;
+ aDataPackage->UnPackData(&cbsFilter);
+
+ __ASSERT_DEBUG(cbsFilter, CtsyDispatcherPanic(EInvalidNullPtr));
+
+ ret = iLtsyDispatchCellBroadcastSetBroadcastFilterSetting->HandleSetBroadcastFilterSettingReqL(cbsFilter->iSetting);
+ }
+
+ return TSYLOGSETEXITERR(ret);
+ } // CCellBroadcastDispatcher::DispatchSetBroadcastFilterSettingL
+
+TInt CCellBroadcastDispatcher::DispatchActivateBroadcastReceiveMessageL(const CMmDataPackage* aDataPackage)
+/**
+ * Unpack data related to EMobileBroadcastMessagingReceiveMessage
+ * and pass request on to Licensee LTSY.
+ *
+ * @return Returns error code returned by the Licensee LTSY or KErrNotSupported if
+ * the Licensee LTSY does not support this request.
+ */
+ {
+ TSYLOGENTRYEXIT;
+ TInt ret = KErrNotSupported;
+
+ __ASSERT_DEBUG(aDataPackage, CtsyDispatcherPanic(EInvalidNullPtr));
+
+ // Call Handle... method in Licensee LTSY
+ if (iLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage)
+ {
+ TCbsCbmiAndLangAndFilter* cbsFilter = NULL;
+ aDataPackage->UnPackData(&cbsFilter);
+
+ __ASSERT_DEBUG(cbsFilter, CtsyDispatcherPanic(EInvalidNullPtr));
+
+ ret = iLtsyDispatchCellBroadcastActivateBroadcastReceiveMessage->HandleActivateBroadcastReceiveMessageReqL(cbsFilter->iSetting);
+ }
+
+
+ return TSYLOGSETEXITERR(ret);
+ } // CCellBroadcastDispatcher::DispatchActivateBroadcastReceiveMessageL
+
+TInt CCellBroadcastDispatcher::DispatchReceiveMessageCancelL(const CMmDataPackage* aDataPackage)
+/**
+ * Unpack data related to EMobileBroadcastMessagingReceiveMessageCancel
+ * and pass request on to Licensee LTSY.
+ *
+ * @return Returns error code returned by the Licensee LTSY or KErrNotSupported if
+ * the Licensee LTSY does not support this request.
+ */
+ {
+ TSYLOGENTRYEXIT;
+ TInt ret = KErrNotSupported;
+
+ __ASSERT_DEBUG(aDataPackage, CtsyDispatcherPanic(EInvalidNullPtr));
+
+ // Call Handle... method in Licensee LTSY
+ if (iLtsyDispatchCellBroadcastReceiveMessageCancel)
+ {
+ TCbsCbmiAndLangAndFilter* cbsFilter = NULL;
+ aDataPackage->UnPackData(&cbsFilter);
+
+ __ASSERT_DEBUG(cbsFilter, CtsyDispatcherPanic(EInvalidNullPtr));
+
+ ret = iLtsyDispatchCellBroadcastReceiveMessageCancel->HandleReceiveMessageCancelReqL(cbsFilter->iSetting);
+ }
+
+ return TSYLOGSETEXITERR(ret);
+ } // CCellBroadcastDispatcher::DispatchReceiveMessageCancelL
+
+TInt CCellBroadcastDispatcher::DispatchStartSimCbTopicBrowsingL()
+/**
+ * Pass ECustomStartSimCbTopicBrowsingIPC request on to Licensee LTSY.
+ *
+ * @return Returns error code returned by the Licensee LTSY or KErrNotSupported if
+ * the Licensee LTSY does not support this request.
+ */
+ {
+ TSYLOGENTRYEXIT;
+ TInt ret = KErrNotSupported;
+
+ // Call Handle... method in Licensee LTSY
+ if (iLtsyDispatchCellBroadcastStartSimCbTopicBrowsing)
+ {
+ ret = iLtsyDispatchCellBroadcastStartSimCbTopicBrowsing->HandleStartSimCbTopicBrowsingReqL();
+ }
+
+ return TSYLOGSETEXITERR(ret);
+ } // CCellBroadcastDispatcher::DispatchReceiveMessageCancelL
+
+TInt CCellBroadcastDispatcher::DispatchDeleteSimCbTopicL(const CMmDataPackage* aDataPackage)
+/**
+ * Pass ECustomDeleteSimCbTopicIPC request on to Licensee LTSY.
+ *
+ * @return Returns error code returned by the Licensee LTSY or KErrNotSupported if
+ * the Licensee LTSY does not support this request.
+ */
+ {
+ TSYLOGENTRYEXIT;
+ TInt ret = KErrNotSupported;
+
+ __ASSERT_DEBUG(aDataPackage, CtsyDispatcherPanic(EInvalidNullPtr));
+
+ // Call Handle... method in Licensee LTSY
+ if (iLtsyDispatchCellBroadcastDeleteSimCbTopic)
+ {
+ TUint expIndex;
+ TBool deleteFlag;
+ aDataPackage->UnPackData(expIndex, deleteFlag);
+ ret = iLtsyDispatchCellBroadcastDeleteSimCbTopic->HandleDeleteSimCbTopicReqL(expIndex, deleteFlag);
+ }
+
+
+ return TSYLOGSETEXITERR(ret);
+ } // CCellBroadcastDispatcher::DispatchActivateBroadcastReceiveMessageL
+
+
+//
+// Callback handlers follow
+//
+
+
+
+void CCellBroadcastDispatcher::CallbackGsmBroadcastNotifyMessageReceived(TInt aError, const TDesC8& aCbsMsg)
+/**
+ * Callback function to be used by the request to complete
+ * CCtsyDispatcherCallback::CallbackCellBroadcastGsmBroadcastNotifyMessageReceivedInd()
+ *
+ * @param aError The error code to be returned to the CTSY Dispatcher.
+ * @param aCbsMsg CB message.
+ */
+ {
+ TSYLOGENTRYEXITARGS(_L8("aError=%d"), aError);
+
+ __ASSERT_DEBUG( (aCbsMsg.Length() < RMobileBroadcastMessaging::KBroadcastPageSize) , CtsyDispatcherPanic(EBadLength));
+
+ // Pack the data to return to the Common TSY
+ CMmDataPackage data;
+ TGsmCbsMsg gsmCbsMsg;
+ gsmCbsMsg.iCbsMsg.Copy(aCbsMsg.Left(RMobileBroadcastMessaging::KBroadcastPageSize));
+ data.PackData(&gsmCbsMsg);
+
+ iMessageManagerCallback.Complete(EMmTsyGsmBroadcastNotifyMessageReceived, &data, aError);
+
+ } // CCellBroadcastDispatcher::CallbackGsmBroadcastNotifyMessageReceived
+
+void CCellBroadcastDispatcher::CallbackWcdmaBroadcastMessageReceived(TInt aError, const TDesC8& aWcdmaCbsData,
+ const DispatcherCellBroadcast::TWcdmaCbsMsgBase& aWcdmaCbsMsgBase, TBool aMoreToCome)
+/**
+ * Callback function to be used by the request to complete
+ * CCtsyDispatcherCallback::CallbackCellBroadcastWcdmaBroadcastMessageReceivedInd()
+ *
+ * @param aError The error code to be returned to the CTSY Dispatcher.
+ * @param aWcdmaCbsData Broadcast message WCDMA.
+ * @param aWcdmaCbsMsgBase base wcdma cbs data structure.
+ * @param aIsLast Is it the last WCDMA message to pass to CTSY.
+ */
+ {
+ TSYLOGENTRYEXITARGS(_L8("aError=%d, aMoreToCome=%d"), aError, aMoreToCome);
+ if(aError != KErrNone)
+ {
+ __ASSERT_DEBUG(aMoreToCome==EFalse, CtsyDispatcherPanic(EInvalidParameter));
+ }
+
+ //A TRAP here is expensive, do a non overloaded new operator and check for NULL.
+ TWcdmaCbsMsg* wcdmaCbsMsgPtr = new TWcdmaCbsMsg();
+ if (!wcdmaCbsMsgPtr)
+ {
+ // not proceeding
+ __ASSERT_DEBUG(NULL, CtsyDispatcherPanic(EInvalidNullPtr));
+ return;
+ }
+ // allocation ok:
+ __ASSERT_DEBUG( (aWcdmaCbsData.Length() < RMobileBroadcastMessaging::KBroadcastPageSize) , CtsyDispatcherPanic(EBadLength));
+ wcdmaCbsMsgPtr->iWcdmaCbsData.Copy(aWcdmaCbsData);
+ wcdmaCbsMsgPtr->iSbNumber = 0; // not used
+ wcdmaCbsMsgPtr->iNumberOfPages = aWcdmaCbsMsgBase.iNumberOfPages;
+ wcdmaCbsMsgPtr->iMessageType = aWcdmaCbsMsgBase.iMessageType;
+ wcdmaCbsMsgPtr->iMessageId = aWcdmaCbsMsgBase.iMessageId;
+ wcdmaCbsMsgPtr->iSerialNum = aWcdmaCbsMsgBase.iSerialNum;
+ wcdmaCbsMsgPtr->iDCS = aWcdmaCbsMsgBase.iDCS;
+ wcdmaCbsMsgPtr->iInfoLength = aWcdmaCbsMsgBase.iInfoLength;
+
+ TRAPD(err,iCbsMsg->AppendL(wcdmaCbsMsgPtr));
+ if(err != KErrNone)
+ {
+ delete wcdmaCbsMsgPtr;
+ wcdmaCbsMsgPtr = NULL;
+ }
+
+ if (!aMoreToCome)
+ {
+ TUint8 wcdmaPageNumber = (TUint8)iCbsMsg->Count();
+ // Pack the data to return to the Common TSY
+ CMmDataPackage dataPackage;
+ dataPackage.PackData(&iCbsMsg, &wcdmaPageNumber);
+
+ iMessageManagerCallback.Complete(EMmTsyWcdmaBroadcastNotifyMessageReceived, &dataPackage, aError);
+
+ // handle case, when error on completion:
+ if(aError != KErrNone)
+ {
+ iCbsMsg->ResetAndDestroy();
+ }
+ else
+ {
+ iCbsMsg->Reset();
+ }
+ }
+
+ } // CCellBroadcastDispatcher::CallbackWcdmaBroadcastMessageReceived
+
+void CCellBroadcastDispatcher::CallbackStartSimCbTopicBrowsing(TInt aError,
+ const CArrayFixFlat<RMmCustomAPI::TSimCbTopic>& aSimTopicArray )
+/**
+ * Callback function to be used by the request to complete
+ * CCtsyDispatcherCallback::CallbackCellBroadcastStartSimCbTopicBrowsingComp()
+ *
+ * @param aError The error code to be returned to the CTSY Dispatcher.
+ * @param aSimTopicArray array of TSimCbTopic.
+ */
+ {
+ TSYLOGENTRYEXITARGS(_L8("aError=%d, aSimTopicArray.Count()=%d"), aError, aSimTopicArray.Count());
+
+ CArrayFixFlat<RMmCustomAPI::TSimCbTopic>* simTopicArrayPtr = &const_cast<CArrayFixFlat<RMmCustomAPI::TSimCbTopic>&>(aSimTopicArray);
+
+ // Pack the data to return to the Common TSY
+ CMmDataPackage dataPackage;
+ dataPackage.PackData(&simTopicArrayPtr);
+
+ iMessageManagerCallback.Complete(ECustomStartSimCbTopicBrowsingIPC, &dataPackage, aError);
+
+ } // CCellBroadcastDispatcher::CallbackWcdmaBroadcastMessageReceived
+
+void CCellBroadcastDispatcher::CallbackDeleteSimCbTopic(TInt aError)
+/**
+ * Callback function to be used by the request to complete
+ * CCtsyDispatcherCallback::CallbackCellBroadcastDeleteSimCbTopicComp()
+ *
+ * @param aError The error code to be returned to the CTSY Dispatcher.
+ */
+ {
+ TSYLOGENTRYEXITARGS(_L8("aError=%d"), aError);
+
+ iMessageManagerCallback.Complete(ECustomDeleteSimCbTopicIPC, aError);
+
+ } // CCellBroadcastDispatcher::CallbackWcdmaBroadcastMessageReceived
+
+void CCellBroadcastDispatcher::CallbackSetBroadcastFilterSetting(TInt aError)
+/**
+ * Callback function to be used by the request to complete
+ * CCtsyDispatcherCallback::CallbackCellBroadcastSetBroadcastFilterSettingComp()
+ *
+ * @param aError The error code to be returned to the CTSY Dispatcher.
+ */
+ {
+ TSYLOGENTRYEXITARGS(_L8("aError=%d"), aError);
+
+ iMessageManagerCallback.Complete(EMobileBroadcastMessagingSetFilterSetting, aError);
+
+ } // CCellBroadcastDispatcher::CallbackSetBroadcastFilterSetting
+
+void CCellBroadcastDispatcher::CallbackActivateBroadcastReceiveMessage(TInt aError)
+/**
+ * Callback function to be used by the request to complete
+ * CCtsyDispatcherCallback::CallbackCellBroadcastActivateBroadcastReceiveMessageComp()
+ *
+ * @param aError The error code to be returned to the CTSY Dispatcher.
+ */
+ {
+ TSYLOGENTRYEXITARGS(_L8("aError=%d"), aError);
+
+ iMessageManagerCallback.Complete(EMobileBroadcastMessagingReceiveMessage, aError);
+
+ } // CCellBroadcastDispatcher::CallbackActivateBroadcastReceiveMessage
+
+void CCellBroadcastDispatcher::CallbackReceiveMessageCancel(TInt aError)
+/**
+ * Callback function to be used by the request to complete
+ * CCtsyDispatcherCallback::CallbackCellBroadcastReceiveMessageCancelComp()
+ *
+ * @param aError The error code to be returned to the CTSY Dispatcher.
+ */
+ {
+ TSYLOGENTRYEXITARGS(_L8("aError=%d"), aError);
+
+ iMessageManagerCallback.Complete(EMobileBroadcastMessagingReceiveMessageCancel, aError);
+
+ } // CCellBroadcastDispatcher::CallbackReceiveMessageCancel
+
+void CCellBroadcastDispatcher::CallbackSync(CRequestQueueOneShot::TIpcDataPackage& aIpcDataPackage)
+/**
+ * Part of the MDispatcherCallback interface. Used to complete requests handled
+ * synchronously by the Licensee LTSY asynchronously back to the Common TSY.
+ *
+ * @param aIpcDataPackage Package encapsulating the request.
+ *
+ * @see MDispatcherCallback::CallbackSync
+ */
+ {
+ TSYLOGENTRYEXIT;
+
+ switch (aIpcDataPackage.iIpc)
+ {
+
+ default:
+ LOG(_L8("WARNING: CCellBroadcastDispatcher::CallbackSync unhandled IPC=%d"), aIpcDataPackage.iIpc);
+ __ASSERT_DEBUG(NULL, CtsyDispatcherPanic(EUnhandledCtsyIpc));
+ break;
+ } // switch (aIpcDataPackage.iIpc)
+
+ } // CCellBroadcastDispatcher::CallbackSync
+
+
+