--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commsfwsupport/commselements/serverden/src/sd_apiextension.cpp Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,94 @@
+// Copyright (c) 2005-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:
+// SS_API_EXT.CPP
+// TODO PREQ1116 disabled to get catchup to build #define SYMBIAN_NETWORKING_UPS
+//
+//
+
+/**
+ @file
+ @released
+*/
+
+#include "sd_apiextension.h"
+
+
+#ifdef _DEBUG
+// Panic category for "absolutely impossible!" vanilla ASSERT()-type panics from this module
+// (if it could happen through user error then you should give it an explicit, documented, category + code)
+_LIT(KSpecAssert_ElemSvrDenApiXC, "ElemSvrDenApiXC");
+#endif
+
+using namespace Elements;
+using namespace Den;
+using namespace Messages;
+using namespace Meta;
+
+//
+// CExtItfMsgPluginInfo
+//
+
+EXPORT_C CExtItfMsgPluginInfo* CExtItfMsgPluginInfo::NewInstanceL(const STypeId& aTypeId)
+ {
+ TUid destroyUid;
+ CExtItfMsgPluginInfo* obj = reinterpret_cast<CExtItfMsgPluginInfo*>(REComSession::CreateImplementationL(aTypeId.iUid, destroyUid, (TAny*)aTypeId.iType));
+ obj->iDestroyUid = destroyUid;
+ return obj;
+ }
+
+EXPORT_C CExtItfMsgPluginInfo::~CExtItfMsgPluginInfo()
+ {
+ __ASSERT_DEBUG(iDestroyUid.iUid!=0, User::Panic(KSpecAssert_ElemSvrDenApiXC, 1));
+ REComSession::DestroyedImplementation(iDestroyUid);
+ }
+
+
+//
+// AIpcExtensionInterfaceBase
+//
+EXPORT_C AIpcExtensionInterfaceBase::AIpcExtensionInterfaceBase()
+: iMsgPluginInfo(NULL)
+ {
+ }
+
+void AIpcExtensionInterfaceBase::RegisterMessagesL()
+ {
+ //RegisterInterfaceL is reference counted, make sure you always call
+ //it from RegisterMessagesL to avoid premature deregistration scenarios.
+ Meta::STypeId msgTid = MsgImplTid();
+ CExtItfMsgPluginInfo* msgPluginInfo = iMsgPluginInfo;
+ if (iMsgPluginInfo==NULL)
+ {
+ __ASSERT_DEBUG(msgTid.iUid.iUid!=0, User::Panic(KSpecAssert_ElemSvrDenApiXC, 2));
+ msgPluginInfo = static_cast<CExtItfMsgPluginInfo*>(CExtItfMsgPluginInfo::NewInstanceL(msgTid));
+ CleanupStack::PushL(msgPluginInfo);
+ }
+
+ const TImplementationProxy* implProxyTable = msgPluginInfo->ImplementationProxy();
+ TlsGlobals::Get().RegisterInterfaceL(msgTid.iUid, msgPluginInfo->ImplementationProxyTableSize(), implProxyTable);
+ if (iMsgPluginInfo==NULL)
+ {
+ CleanupStack::Pop(msgPluginInfo);
+ iMsgPluginInfo = msgPluginInfo; //Set only when all done
+ }
+ }
+
+void AIpcExtensionInterfaceBase::DeregisterMessages()
+ {
+ TlsGlobals::Get().DeregisterInterface(MsgImplTid().iUid);
+ delete iMsgPluginInfo;
+ iMsgPluginInfo = NULL;
+ }
+
+