--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/inc/ss_api_ext.h Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,264 @@
+// 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:
+//
+
+/**
+ @file
+ @internalTechnology
+*/
+
+#ifndef SS_API_EXT_H
+#define SS_API_EXT_H
+
+#define SYMBIAN_NETWORKING_UPS
+
+#include <es_sock.h>
+#include <comms-infras/api_ext_msg.h>
+#include <comms-infras/api_ext_list.h>
+#include <elements/interfacetable.h>
+#include <elements/responsemsg.h>
+#include <ecom/ecom.h>
+
+/**
+ Forward declaration to avoid including mm_context.h
+*/
+namespace MeshMachine
+{
+ class TNodeContextBase;
+}
+
+namespace ESock
+{
+
+/**
+ @internalTechnology
+*/
+class CExtItfMsgPluginInfo : public CBase
+ {
+public:
+ IMPORT_C static CExtItfMsgPluginInfo* NewInstanceL(const STypeId& aTypeId);
+ IMPORT_C ~CExtItfMsgPluginInfo();
+
+ virtual const TImplementationProxy* ImplementationProxy() const = 0;
+ virtual TInt ImplementationProxyTableSize() const = 0;
+
+private:
+ TUid iDestroyUid;
+ };
+
+/**
+ @internalTechnology
+*/
+class CCommsApiExtResponder : public CBase
+ {
+public:
+ IMPORT_C static void Complete(CCommsApiExtResponder*& aThis, TInt aError);
+
+protected:
+ IMPORT_C explicit CCommsApiExtResponder();
+ IMPORT_C virtual ~CCommsApiExtResponder();
+
+private:
+ virtual void DoComplete(TInt aError) = 0;
+ };
+
+/**
+ @internalTechnology
+*/
+class CCommsApiExtIpcResponder : public CCommsApiExtResponder
+ {
+public:
+ IMPORT_C static CCommsApiExtIpcResponder* NewL(const RMessage2& aMessage);
+ IMPORT_C static CCommsApiExtIpcResponder* NewL(Elements::RResponseMsg& aResponseMsg);
+
+protected:
+ explicit CCommsApiExtIpcResponder(const RMessage2& aMessage)
+ : iResponseMsg(aMessage, aMessage.Int0(), 1, 2)
+ {
+ }
+ explicit CCommsApiExtIpcResponder(Elements::RResponseMsg& aResponseMsg)
+ : iResponseMsg(aResponseMsg)
+ {
+ }
+
+protected:
+ IMPORT_C virtual void DoComplete(TInt aError);
+
+protected:
+ Elements::RResponseMsg iResponseMsg;
+ };
+
+/**
+ Specialised responder for Legacy messages. Wraps all RMessage2 functionallity,
+ so that it cannot be completed without us knowing about it.
+
+ @publishedPartner
+ @released since tb92
+*/
+class RLegacyResponseMsg : public Elements::RResponseMsg
+ {
+public:
+ IMPORT_C RLegacyResponseMsg();
+ IMPORT_C explicit RLegacyResponseMsg(MeshMachine::TNodeContextBase& aContext);
+ IMPORT_C explicit RLegacyResponseMsg(MeshMachine::TNodeContextBase& aContext, const RMessage2& aMessage, TInt aInterfaceId, TInt aRequestMsgParam = -1, TInt aResponseMsgParam = -1);
+ IMPORT_C explicit RLegacyResponseMsg(MeshMachine::TNodeContextBase& aContext, const RMessage2& aMessage, const Den::TApiExtIdentification& aInterfaceId, TInt aRequestMsgParam = -1, TInt aResponseMsgParam = -1);
+
+ IMPORT_C void Complete(TInt aError) const;
+ IMPORT_C void Panic(const TDesC& aCategory, TInt aReason) const;
+
+ IMPORT_C TBool IsNull() const;
+
+private:
+ mutable Messages::TNodeCtxId iNodeAddr;
+ };
+
+/**
+ @internalTechnology
+*/
+class CCommsApiExtLegacyIpcResponder : public CCommsApiExtResponder
+ {
+public:
+ IMPORT_C static CCommsApiExtLegacyIpcResponder* NewL(MeshMachine::TNodeContextBase& aContext, const RMessage2& aMessage);
+ IMPORT_C static CCommsApiExtLegacyIpcResponder* NewL(RLegacyResponseMsg& aResponseMsg);
+
+protected:
+ explicit CCommsApiExtLegacyIpcResponder(MeshMachine::TNodeContextBase& aContext, const RMessage2& aMessage)
+ : iResponseMsg(aContext, aMessage, aMessage.Int0(), 1, 2)
+ {
+ }
+ explicit CCommsApiExtLegacyIpcResponder(RLegacyResponseMsg& aResponseMsg)
+ : iResponseMsg(aResponseMsg)
+ {
+ }
+
+protected:
+ IMPORT_C virtual void DoComplete(TInt aError);
+
+protected:
+ RLegacyResponseMsg iResponseMsg;
+ };
+
+
+/**
+ @internalTechnology
+*/
+class CCommsApiExtIpcOpenResponder : public CCommsApiExtIpcResponder
+ {
+public:
+ IMPORT_C static CCommsApiExtIpcOpenResponder* NewL(TSupportedCommsApiExt aInterfaceId, TSubSessionUniqueId aClientId, const RMessage2& aMessage);
+
+protected:
+ explicit CCommsApiExtIpcOpenResponder(TSupportedCommsApiExt aInterfaceId, TSubSessionUniqueId aClientId, const RMessage2& aMessage)
+ : CCommsApiExtIpcResponder(aMessage),
+ iInterfaceId(aInterfaceId),
+ iClientId(aClientId)
+ {
+ }
+
+protected:
+ IMPORT_C virtual void DoComplete(TInt aError);
+
+protected:
+ const TSupportedCommsApiExt iInterfaceId;
+ const TSubSessionUniqueId iClientId;
+ };
+
+
+/**
+ @internalTechnology
+*/
+class MExtensionInterfaceBase
+ {
+public:
+ virtual void OpenExtensionInterface(TSubSessionUniqueId aClientId, const Messages::TRuntimeCtxId& aControlClient, CCommsApiExtResponder* aResponder) = 0;
+ virtual void CloseExtensionInterface(TSubSessionUniqueId aClientId) = 0;
+ virtual void CancelExtensionInterface(TSubSessionUniqueId aClientId) = 0;
+ };
+
+class AExtensionInterfaceThickBase : public MExtensionInterfaceBase
+ {
+public:
+ // From MExtensionInterfaceBase
+ IMPORT_C virtual void OpenExtensionInterface(TSubSessionUniqueId aClientId, const Messages::TRuntimeCtxId& aControlClient, CCommsApiExtResponder* aResponder);
+ IMPORT_C virtual void CloseExtensionInterface(TSubSessionUniqueId aClientId);
+ IMPORT_C virtual void CancelExtensionInterface(TSubSessionUniqueId aClientId);
+
+ const Meta::STypeId& MsgImplTid() const
+ {
+ return iMsgImplTid;
+ }
+
+protected:
+ IMPORT_C AExtensionInterfaceThickBase(const Meta::STypeId& aMsgImplTid);
+ IMPORT_C virtual ~AExtensionInterfaceThickBase();
+
+private:
+ const Meta::STypeId iMsgImplTid;
+ };
+
+
+/**
+ @internalTechnology
+
+ Minimum functionality for an extension interface. OpenL()
+ and Close() provided as a means of resource reservation and
+ release.
+*/
+template <TInt32 MSG_IMPL_UID, TInt32 MSG_IMPL_TYPEID = 0>
+class AExtensionInterfaceBase : public AExtensionInterfaceThickBase
+ {
+protected:
+ AExtensionInterfaceBase()
+ : AExtensionInterfaceThickBase(Meta::STypeId::CreateSTypeId(MSG_IMPL_UID,MSG_IMPL_TYPEID))
+ {
+ }
+ //@todo - should AExtensionInterfaceThickBase have a gratuitous pure virtual to try to force use of this template? seems lame...
+ };
+
+/**
+ @internalTechnology
+*/
+class AIPCClientInfo
+ {
+public:
+ IMPORT_C TInt ClientUidType(TSubSessionUniqueId aSubSessionUniqueId, TUidType& aUidType) const;
+ IMPORT_C TInt ClientSid(TSubSessionUniqueId aSubSessionUniqueId, TSecureId& aSid) const;
+
+protected:
+ IMPORT_C TInt OpenClientProcess(TSubSessionUniqueId aSubSessionUniqueId, RProcess& aProcess) const;
+#ifndef SYMBIAN_NETWORKING_UPS
+private:
+#endif //SYMBIAN_NETWORKING_UPS
+ TInt GetSubsessionOwnerInfo(TSubSessionUniqueId aSubSessionUniqueId, TProcessId& aProcessId, TUidType& aUidType, TThreadId& aThreadId) const;
+ };
+
+/**
+ @internalTechnology
+*/
+class AIPCClientPlatsecInfo : public AIPCClientInfo
+ {
+public:
+ IMPORT_C TInt SecureId(TSubSessionUniqueId aSubSessionUniqueId, TSecureId& aResult) const;
+ IMPORT_C TInt VendorId(TSubSessionUniqueId aSubSessionUniqueId, TVendorId& aResult) const;
+ IMPORT_C TBool HasCapability(TSubSessionUniqueId aSubSessionUniqueId, const TCapability aCapability) const;
+ IMPORT_C TInt CheckPolicy(TSubSessionUniqueId aSubSessionUniqueId, const TSecurityPolicy& aPolicy) const;
+#ifdef SYMBIAN_NETWORKING_UPS
+ IMPORT_C TInt GetProcessAndThreadId(TSubSessionUniqueId aSubSessionUniqueId, TProcessId& aProcessId, TThreadId& aThreadId) const;
+#endif //SYMBIAN_NETWORKING_UPS
+ };
+
+} //namespace ESock
+
+#endif // SS_API_EXT_H
+