--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/inc/ss_apiext_messages.h Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,189 @@
+// Copyright (c) 2006-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
+*/
+
+#if !defined(SS_APIEXT_MESSAGES_H_INCLUDED)
+#define SS_APIEXT_MESSAGES_H_INCLUDED
+
+#include <e32def.h>
+#include <comms-infras/ss_nodeinterfaces.h>
+#include <comms-infras/ss_dispatchers.h>
+#include <comms-infras/api_ext_list.h>
+#include <comms-infras/api_ext_msg.h>
+#include <elements/responsemsg.h>
+
+namespace ESock
+{
+
+const TInt KExtItfMsgImplementationUid = 0x102822F7;
+
+enum EExtItfMessageId
+ {
+ EApiExtMsgDispatcher = 0,
+ EOpenExtensionInterface,
+ ECloseExtensionInterface,
+ ECancelAndCloseAllClientExtItf
+ };
+
+/**
+ @internalTechnology
+
+ Utility class to register/deregister API extension interface messages
+*/
+struct TExtItfMsgTables
+ {
+ static void RegisterL();
+ static void DeRegister();
+ };
+
+/**
+ @internalTechnology
+
+ A self-forwarding message that walks the chain of service providers looking
+ for an implementor of the specified interface id.
+*/
+class TOpenExtensionInterface : public TCFSigRMessage2Ext
+ {
+public:
+ explicit TOpenExtensionInterface() {}
+ explicit TOpenExtensionInterface(TUint aClientId, TSupportedCommsApiExt aInterfaceId, const RMessage2& aMessage)
+ : TCFSigRMessage2Ext(aMessage),
+ iClientId(aClientId),
+ iInterfaceId(aInterfaceId)
+ {
+ }
+
+ DECLARE_MVIP_CTR(TOpenExtensionInterface)
+ DATA_VTABLE
+
+protected:
+ virtual void DispatchL(const Messages::TRuntimeCtxId& aSender, const Messages::TRuntimeCtxId& aRecipient);
+ virtual void Error(const Messages::TRuntimeCtxId& aSender, const Messages::TRuntimeCtxId& aRecipient, TInt aError);
+
+public:
+ TUint iClientId;
+ TSupportedCommsApiExt iInterfaceId;
+ };
+
+/**
+ @internalTechnology
+
+ A self-forwarding message that walks the chain of service providers looking
+ for an implementor of the specified interface id.
+*/
+class TCloseExtensionInterface : public TCFSigRMessage2Ext
+ {
+public:
+ explicit TCloseExtensionInterface() {}
+ explicit TCloseExtensionInterface(TUint aClientId, TSupportedCommsApiExt aInterfaceId, const RMessage2& aMessage)
+ : TCFSigRMessage2Ext(aMessage),
+ iClientId(aClientId),
+ iInterfaceId(aInterfaceId)
+ {
+ }
+
+ DECLARE_MVIP_CTR(TCloseExtensionInterface)
+ DATA_VTABLE
+
+protected:
+ virtual void DispatchL(const Messages::TRuntimeCtxId& aSender, const Messages::TRuntimeCtxId& aRecipient);
+ virtual void Error(const Messages::TRuntimeCtxId& aSender, const Messages::TRuntimeCtxId& aRecipient, TInt aError);
+
+public:
+ TUint iClientId;
+ TSupportedCommsApiExt iInterfaceId;
+ };
+
+/**
+ TCancelClientExtItfRequests forwards itself down the chain of service providers causing
+ all requests for the specified client to be cancelled.
+
+ @internalTechnology
+*/
+
+//MZ: This current hard-coded routing (and closing) behaviour is not ideal.
+
+//We should migrate ESockSvr to the solution in Den,
+//where each session & subsession has its own API ext register
+//and closes all opened extension when going out of scope.
+class TCancelAndCloseAllClientExtItf : public Messages::TSignalBase, public ESock::TCFClientItfExt<ESock::TCFClientType::ECtrl>
+ {
+public:
+ explicit TCancelAndCloseAllClientExtItf() {}
+ explicit TCancelAndCloseAllClientExtItf(TUint aClientId)
+ : iClientId(aClientId)
+ {
+ }
+
+ DECLARE_MVIP_CTR(TCancelAndCloseAllClientExtItf)
+ DATA_VTABLE
+
+protected:
+ virtual void DispatchL(const Messages::TRuntimeCtxId& aSender, const Messages::TRuntimeCtxId& aRecipient);
+ virtual void Error(const Messages::TRuntimeCtxId& aSender, const Messages::TRuntimeCtxId& aRecipient, TInt aError);
+
+private:
+ void CancelCloseAllAndForwardMsgL(const Messages::TRuntimeCtxId& aSender, Messages::TSignalBase& aMessage, Messages::ANode& aNode);
+
+private:
+ TUint iClientId;
+ };
+
+
+/**
+ TApiExtMsgDispatcher is a self-forwarding dispatcher of TCommsApiExtReqMsg messages.
+
+ @internalTechnology
+*/
+class TApiExtMsgDispatcher : public Messages::TSignalBase, public ESock::TCFClientItfExt<ESock::TCFClientType::ECtrl>
+ {
+public:
+ explicit TApiExtMsgDispatcher() { }
+ explicit TApiExtMsgDispatcher(TUint aClientId, const Elements::RResponseMsg& aResponseMsg)
+ : iClientId(aClientId), iResponseMsg(aResponseMsg)
+ {
+ }
+
+ DECLARE_MVIP_CTR(TApiExtMsgDispatcher)
+ DATA_VTABLE
+
+protected:
+ virtual void DispatchL(const Messages::TRuntimeCtxId& aSender, const Messages::TRuntimeCtxId& aRecipient);
+ virtual void Error(const Messages::TRuntimeCtxId& aSender, const Messages::TRuntimeCtxId& aRecipient, TInt aError);
+
+private:
+ TUint iClientId;
+ Elements::RResponseMsg iResponseMsg;
+ };
+
+
+/**
+@internalTechnology
+*/
+class TCommsClientSideApiExt
+ {
+public:
+ static TBool IsSupported(TSupportedCommsApiExt aApiExtensionId);
+ };
+
+} // namespace ESock
+
+
+#endif // SS_APIEXT_MESSAGES_H_INCLUDED
+