os/mm/devsoundextensions/ciextnfactoryplugins/ciextnserverplugin/src/ciextnserverpluginwrapper.cpp
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/mm/devsoundextensions/ciextnfactoryplugins/ciextnserverplugin/src/ciextnserverpluginwrapper.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,149 @@
1.4 +/*
1.5 + * Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies).
1.6 + * All rights reserved.
1.7 + * This component and the accompanying materials are made available
1.8 + * under the terms of "Eclipse Public License v1.0"
1.9 + * which accompanies this distribution, and is available
1.10 + * at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.11 + *
1.12 + * Initial Contributors:
1.13 + * Nokia Corporation - initial contribution.
1.14 + *
1.15 + * Contributors:
1.16 + *
1.17 + * Description: Class definition of server plugin wrapper implementing S60 custom interface.
1.18 + *
1.19 + */
1.20 +
1.21 +#include "ciextnserverpluginwrapper.h"
1.22 +#include "citraces.h"
1.23 +#include <AudioInputMessageTypes.h>
1.24 +#include <ecom.h>
1.25 +
1.26 +#define KMuxTempBufferSize 20
1.27 +
1.28 +#ifdef __WINSCW__
1.29 +class MyMCustomInterface
1.30 + {
1.31 +public:
1.32 + virtual TAny* CustomInterface(TUid aCustomeInterface) = 0;
1.33 + virtual void Release() = 0;
1.34 + virtual void PassDestructionKey(TUid aUid) = 0;
1.35 + };
1.36 +#endif
1.37 +
1.38 +CIExtnServerPluginWrapper* CIExtnServerPluginWrapper::NewL(
1.39 + MCustomInterface& aInterfaceRef)
1.40 + {
1.41 + DEB_TRACE0(_L("CIExtnServerPluginWrapper::NewL Begin"));
1.42 + CIExtnServerPluginWrapper* self = new (ELeave) CIExtnServerPluginWrapper(
1.43 + aInterfaceRef);
1.44 + CleanupStack::PushL(self);
1.45 + self->ConstructL();
1.46 + CleanupStack::Pop(self);
1.47 + DEB_TRACE0(_L("CIExtnServerPluginWrapper::NewL End"));
1.48 + return self;
1.49 + }
1.50 +
1.51 +CIExtnServerPluginWrapper::~CIExtnServerPluginWrapper()
1.52 + {
1.53 + DEB_TRACE0(_L("CIExtnServerPluginWrappers::~CIExtnServerPluginWrapper Begin"));
1.54 + DEB_TRACE0(_L("CIExtnServerPluginWrapper::~CIExtnServerPluginWrapper End"));
1.55 + }
1.56 +
1.57 +CIExtnServerPluginWrapper::CIExtnServerPluginWrapper(
1.58 + MCustomInterface& aInterfaceRef) :
1.59 + iCustomInterfaceRef(&aInterfaceRef)
1.60 + {
1.61 + }
1.62 +
1.63 +void CIExtnServerPluginWrapper::ConstructL()
1.64 + {
1.65 +#ifdef __WINSCW__
1.66 + DEB_TRACE0(_L("Try Loading CI Stub Plugin"));
1.67 + TUid interfaceUid =
1.68 + {
1.69 + 0x10207C71
1.70 + };
1.71 + TAny* pluginRef;
1.72 + TRAPD(error, pluginRef = REComSession::CreateImplementationL( interfaceUid, iDtor_ID_Key ));
1.73 + if (pluginRef)
1.74 + {
1.75 + DEB_TRACE1(_L("CreateImplementationL Uid [0x%x]"), iDtor_ID_Key.iUid);
1.76 + iCustomInterfaceStub = (MyMCustomInterface*) pluginRef;
1.77 + iCustomInterfaceStub->PassDestructionKey(iDtor_ID_Key);
1.78 + DEB_TRACE0(_L("CI Stub Loaded"));
1.79 + }
1.80 +#endif
1.81 +
1.82 + }
1.83 +
1.84 +MCustomInterface* CIExtnServerPluginWrapper::GetInterface()
1.85 + {
1.86 + DEB_TRACE0(_L("CIExtnServerPluginWrappers::GetInterface"));
1.87 + return (MCustomInterface*) this;
1.88 + }
1.89 +
1.90 +TAny* CIExtnServerPluginWrapper::CustomInterface(TUid aInterfaceId)
1.91 + {
1.92 + DEB_TRACE0(_L("*CI* CIExtnServerPluginWrapper::CustomInterface"));
1.93 + TAny* pluginRef = NULL;
1.94 + pluginRef = iCustomInterfaceRef->CustomInterface(aInterfaceId);
1.95 +#ifdef __WINSCW__
1.96 + if (!pluginRef)
1.97 + {
1.98 + DEB_TRACE0(_L("*CI* Try Loading CI Stub if present"));
1.99 + pluginRef = iCustomInterfaceStub->CustomInterface(aInterfaceId);
1.100 + if (pluginRef)
1.101 + {
1.102 + DEB_TRACE0(_L("*CI* CI Stub Loaded"));
1.103 + }
1.104 + }
1.105 +#endif
1.106 + return pluginRef;
1.107 + }
1.108 +
1.109 +void CIExtnServerPluginWrapper::Release()
1.110 + {
1.111 + DEB_TRACE0(_L("CIExtnServerPluginWrappers::Release >> ENTER"));
1.112 +#ifdef __WINSCW__
1.113 + iCustomInterfaceStub->Release();
1.114 +#endif
1.115 + DEB_TRACE0(_L("CIExtnServerPluginWrappers::Release >> EXIT"));
1.116 + delete this;
1.117 + }
1.118 +
1.119 +/*
1.120 + TAny* CIExtnServerPluginWrapper::CustomInterface(TUid aInterfaceId)
1.121 + {
1.122 + DEB_TRACE0(_L("CIExtnServerPluginWrappers::CustomInterface"));
1.123 + TUid interfaceUid =
1.124 + {
1.125 + 0x10207C49
1.126 + };
1.127 + TEComResolverParams resolverParams;
1.128 + DEB_TRACE1(_L("Findig CustomInterface with Uid [0x%x]"),aInterfaceId.iUid);
1.129 + TInt uidAsInteger = aInterfaceId.iUid;
1.130 + TBuf8<KMuxTempBufferSize> tempBuffer;
1.131 + tempBuffer.Num(uidAsInteger, EHex);
1.132 + resolverParams.SetDataType(tempBuffer);
1.133 +
1.134 + TAny* ptr = NULL;
1.135 + TRAPD(err, ptr=REComSession::CreateImplementationL(
1.136 + interfaceUid,
1.137 + _FOFF(CIExtnServerPluginWrapper, iDtor_ID_Key),resolverParams));
1.138 + if (err != KErrNone)
1.139 + {
1.140 + DEB_TRACE1(_L("No Custom Interface found: Error [%d]"),err);
1.141 + }
1.142 + if (ptr)
1.143 + {
1.144 + DEB_TRACE1(_L("Stub Present for Uid [0x%x]"),interfaceUid);
1.145 + return ptr;
1.146 + }
1.147 + else
1.148 + {
1.149 + return iCustomInterfaceRef->CustomInterface(aInterfaceId);
1.150 + }
1.151 + }
1.152 + */