diff -r 000000000000 -r 8e480a14352b messagingfw/wappushfw/pushutils/src/PushDispatcher.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/wappushfw/pushutils/src/PushDispatcher.cpp Mon Jan 18 20:36:02 2010 +0200 @@ -0,0 +1,119 @@ +// Copyright (c) 2001-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: +// Local includes +// +// + +// System includes +// +#include "pushdispatcher.h" +#include +#include +#include +#include + +/** Loads the Wap Push Application or Content Handler Plugin. + * + * The plug-in returned is responsible for its own destruction. + * This behaviour is provided using the plug-in killer, which deletes + * the plug-in owner on request when the plugin is ready to kill itself. + * + * @param aData Data identifying specific handlers + * @param aType Uid of Wap Push App Handling Plugin + * @return Plugin Owner + * @leave EWapErrPluginNotFound (-10018) if the plug-in server was unable to + * find the requested plug-in. + */ +CPushHandlerBase* PushAppDispatcher::CreatePluginFromDataL(const TDesC& aData, const TUid& aType, MWapPushLog& aLog, MConnManObserver& aManager) + { + CPushHandlerBase* pushHandler = CPushHandlerBase::NewL(aData, aType); + CleanupStack::PushL(pushHandler); + + CPluginKiller* pluginKiller = new (ELeave) CPluginKiller(pushHandler); + CleanupStack::Pop(pushHandler); + + // Set some data + pushHandler->SetKiller(*pluginKiller); + pushHandler->SetLogger(aLog); + pushHandler->SetManager(aManager); + + return pushHandler; + } + + +/** Loads the Application Handler Plugin using App ID. + * + * @param aAppId Uid for identifying specific Handlers in the App Plugin + * @param aLog Logging Utility Mixin class + * @param aManager Connection Manger Observer Mixin Class + * @return Reference to Push Handler Plugin Base + */ +EXPORT_C CPushHandlerBase& PushAppDispatcher::GetHandlerL(TInt aAppId, MWapPushLog& aLog, MConnManObserver& aManager) + { + __LOG_PAR_DEBUG("PushAppDispatcher called"); + const TInt KAppIdLength =10; + TBuf appIdBuf; + _LIT(KAppIdBufFormat, "0x%08x"); + appIdBuf.Format(KAppIdBufFormat, aAppId); + + CPushHandlerBase* pushHandler = CreatePluginFromDataL(appIdBuf, KUidPushHandlerBase, aLog, aManager); + + return *pushHandler; + } + + +/** Loads the Application Handler Plugin using App URI. + * + * The AppURI string needs to be widened from 8 bit to 16 bit + * Unicode text; this is done by the descriptor Copy() method. + * + * @param aAppURI URI for identifying specific Handlers in the App Plugin + * @param aLog Logging Utility Mixin class + * @param aManager Connection Manger Observer Mixin Class + * @return Reference to the Push Handler Plugin Base + */ +EXPORT_C CPushHandlerBase& PushAppDispatcher::GetHandlerL(const TDesC8& aAppURI, MWapPushLog& aLog, MConnManObserver& aManager) + { + __LOG_PAR_DEBUG("PushAppDispatcher called"); + HBufC16* applicationURI = HBufC16::NewL(aAppURI.Length()); + CleanupStack::PushL(applicationURI); + applicationURI->Des().Copy(aAppURI); + + CPushHandlerBase* pushHandler = CreatePluginFromDataL(*applicationURI, KUidPushHandlerBase, aLog, aManager); + CleanupStack::PopAndDestroy(applicationURI); + + return *pushHandler; + } + + +/** Loads the Content-type Handler Plugin using content type string. + * + * @param aContentType Content Type requested + * @param aLog Logging Utility Mixin class + * @param aManager Connection Manger Observer Mixin Class + * @return Reference to the Push Handler Plugin Base + */ +EXPORT_C CContentHandlerBase& PushContentTypeDispatcher::GetHandlerL(const TDesC16& aContentType, MWapPushLog& aLog, MConnManObserver& aManager) + { + __LOG_PAR_DEBUG("Push Content Type Dispatcher called") + + CPushHandlerBase* pushHandler = PushAppDispatcher::CreatePluginFromDataL(aContentType, + KUidPushContentHandlerBase, + aLog, + aManager); + // This line was added instead of returning directly explicitly to remove a warning under armi + CContentHandlerBase* handlerBase = REINTERPRET_CAST(CContentHandlerBase*, pushHandler); + + return *handlerBase; + }