datacommsserver/esockserver/inc/ss_nodemessages_legacy_internal.h
changeset 0 dfb7c4ff071f
child 4 928ed51ddc43
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/inc/ss_nodemessages_legacy_internal.h	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,585 @@
+// 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:
+// Link CPR Node Messages
+// 
+//
+
+/**
+ @file
+ @internalTechnology
+*/
+
+#ifndef SS_NODEMESSAGES_LEGACY_INTERNAL_INCLUDED
+#define SS_NODEMESSAGES_LEGACY_INTERNAL_INCLUDED
+
+#include <comms-infras/ss_nodeinterfaces.h>
+#include <comms-infras/ss_dispatchers.h>
+#include <elements/responsemsg.h>
+#include <es_enum.h>
+
+#include <comms-infras/api_ext_list.h>
+#include <comms-infras/ss_platsec_apiext.h>
+#include <comms-infras/ss_datamon_apiext.h>
+#include <comms-infras/ss_datamonitoringprovider.h>
+#include <comms-infras/ss_nodemessages_legacy.h>
+
+#include <comms-infras/ss_legacyinterfaces.h>
+
+namespace ESock
+{
+
+//-=========================================================
+//
+//Extension messages
+//
+//-=========================================================
+
+class TCFLegacyMessageInternal
+	{
+public:
+	enum EMessageTypeInternal //message signatures only (NOT messages) messages are declared under class TCFMessage
+		{
+		EGetOrSetParameters				=200,
+
+		ECprRetrieveProgress			=201, 
+		ECprRetrieveLastProgressError	=202,
+		ECprRequestServiceNotification	=203,
+		
+		ECprSendIoctl					=204,
+		ECprAllSubConnectionNotificationEnable		=205,
+		ECprEnumerateConnections		=206,
+		
+		ELegacyDataMonitoringTransferredRequest		= 207,
+		ELegacyDataMonitoringNotificationRequest	= 208,
+		
+		ELegacySubConnectionActiveRequest			= 209,
+		
+		ELegacyEnumerateSubConnections				= 210,
+		
+		ELegacyControlMessage           =211,
+		ELegacyConnEnumMessage          =212,
+		
+		ESignatureRMessage2Response     =213,
+		ELegacyGetSubConnectionInfo     =214
+		};
+	};
+/**
+A self-propagating extension message. It advances down the stack looking for
+a MeshMachine::AMMNodeBase that implements MLinkCprExtensionApi. When found, the message
+calls MLinkCprExtensionApi::ProgressL and completes the original request (see aMessage
+in the c'tor).
+
+@internalComponent
+*/
+class TCprRetrieveProgress : public TCFSigLegacyRMessage2Ext,
+							 public Messages::TSignatureBase::TTypeToMessageId<TCFLegacyMessageInternal::ECprRetrieveProgress, TCFLegacyMessage::ERealmId>
+    {
+public:
+    inline TCprRetrieveProgress() {};
+	TCprRetrieveProgress(const Den::RSafeMessage& aMessage, Elements::TStateChange& aLastProgress)
+        : TCFSigLegacyRMessage2Ext(Messages::TNodeSignal::TMessageId(EId, ERealm), aMessage), iLastProgress(aLastProgress)
+        {
+        }
+
+protected:
+	virtual TBool CanProcess(MeshMachine::TNodeContextBase& aContext);
+    virtual void ForwardL(MeshMachine::TNodeContextBase& aContext);
+    virtual void ProcessL(MeshMachine::TNodeContextBase& aContext);
+	virtual TInt CheckError(MeshMachine::TNodeContextBase& aContext, TInt aError);
+
+public:
+    DECLARE_MVIP_CTR(TCprRetrieveProgress)
+protected:
+    DATA_VTABLE
+
+private:
+    Elements::TStateChange iLastProgress;
+    };
+
+
+/**
+A self-propagating extension message. It advances down the stack looking for
+a MeshMachine::AMMNodeBase that implements MLinkCprExtensionApi. When found, the message
+calls MLinkCprExtensionApi::LastProgressError and completes the original request (see
+aMessage in the c'tor).
+
+@internalComponent
+*/
+class TCprRetrieveLastProgressError : public TCFSigLegacyRMessage2Ext,
+									  public Messages::TSignatureBase::TTypeToMessageId<TCFLegacyMessageInternal::ECprRetrieveLastProgressError, TCFLegacyMessage::ERealmId>
+    {
+public:
+    inline TCprRetrieveLastProgressError() {};
+	TCprRetrieveLastProgressError(const Den::RSafeMessage& aMessage, Elements::TStateChange& aLastProgressError)
+        : TCFSigLegacyRMessage2Ext(Messages::TNodeSignal::TMessageId(EId, ERealm), aMessage), iLastProgressError(aLastProgressError)
+        {
+        }
+
+protected:
+	virtual TBool CanProcess(MeshMachine::TNodeContextBase& aContext);
+    virtual void ForwardL(MeshMachine::TNodeContextBase& aContext);
+    virtual void ProcessL(MeshMachine::TNodeContextBase& aContext);
+	virtual TInt CheckError(MeshMachine::TNodeContextBase& aContext, TInt aError);
+
+public:
+    DECLARE_MVIP_CTR(TCprRetrieveLastProgressError)
+protected:
+    DATA_VTABLE
+
+private:
+    Elements::TStateChange iLastProgressError;
+    };
+
+
+/**
+A self-propagating extension message. It advances down the stack looking for
+a MeshMachine::AMMNodeBase that implements MLinkCprExtensionApi. When found, the message
+calls MLinkCprExtensionApi::RequestServiceChangeNotificationL
+
+@internalComponent
+*/
+class TCprRequestServiceNotification : public TCFSigLegacyRMessage2Ext,
+									   public Messages::TSignatureBase::TTypeToMessageId<TCFLegacyMessageInternal::ECprRequestServiceNotification, TCFLegacyMessage::ERealmId>
+    {
+public:
+	TCprRequestServiceNotification(const Messages::TNodeId& aSender, const Den::RSafeMessage& aMessage)
+		:	TCFSigLegacyRMessage2Ext(Messages::TNodeSignal::TMessageId(EId, ERealm), aMessage), iSender(aSender)
+		{
+		}
+
+protected:
+	virtual TBool CanProcess(MeshMachine::TNodeContextBase& aContext);
+    virtual void ForwardL(MeshMachine::TNodeContextBase& aContext);
+    virtual void ProcessL(MeshMachine::TNodeContextBase& aContext);
+
+	virtual void Cancel(MeshMachine::TNodeContextBase& aContext);
+
+public:
+    DECLARE_MVIP_CTR(TCprRequestServiceNotification)
+
+protected:
+	inline TCprRequestServiceNotification() {};
+    DATA_VTABLE
+	Messages::TNodeId iSender;
+    };
+
+/**
+A self-propagating extension message. It advances down the stack looking for
+a MeshMachine::AMMNodeBase that implements MLinkCprExtensionApi. When found, the message
+calls MLinkCprExtensionApi::SendIoctlMessageL and completes the original
+request (see aMessage in the c'tor).
+
+@internalComponent
+*/
+class TCprSendIoctl : public TCFSigLegacyRMessage2Ext,
+					  public Messages::TSignatureBase::TTypeToMessageId<TCFLegacyMessageInternal::ECprSendIoctl, TCFLegacyMessage::ERealmId>
+    {
+public:
+    inline TCprSendIoctl() {};
+	TCprSendIoctl(const Den::RSafeMessage& aMessage)
+        : TCFSigLegacyRMessage2Ext(Messages::TNodeSignal::TMessageId(EId, ERealm), aMessage)
+        {
+        }
+
+protected:
+	virtual TBool CanProcess(MeshMachine::TNodeContextBase& aContext);
+    virtual void ForwardL(MeshMachine::TNodeContextBase& aContext);
+    virtual void ProcessL(MeshMachine::TNodeContextBase& aContext);
+
+	virtual void Cancel(MeshMachine::TNodeContextBase& aContext);
+
+public:
+    DECLARE_MVIP_CTR(TCprSendIoctl)
+protected:
+    DATA_VTABLE
+    };
+
+
+/**
+A self-propagating extension message. It advances down the stack looking for
+a MeshMachine::AMMNodeBase that implements MLinkCprExtensionApi. When found, the message
+calls MLinkCprExtensionApi::AllSubConnectionNotificationEnable and completes the original
+request (see aMessage in the c'tor).
+
+@internalComponent
+*/
+class TCprAllSubConnectionNotificationEnable : public Messages::TSignalBase, public TCFClientItfExt<TCFClientType::ECtrl>
+    {
+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:
+    DECLARE_MVIP_CTR(TCprAllSubConnectionNotificationEnable)
+protected:
+    DATA_VTABLE
+    };
+
+
+/**
+@internalComponent
+*/
+class TCprFactEnumerateConnections : public TCFSigLegacyRMessage2Ext,
+									 public Messages::TSignatureBase::TTypeToMessageId<TCFLegacyMessageInternal::ECprEnumerateConnections, TCFLegacyMessage::ERealmId>
+    {
+public:
+    TCprFactEnumerateConnections()
+        {
+        }
+
+	TCprFactEnumerateConnections(RPointerArray<TSourcedConnectionInfo>& aConnectionInfoPtrArray, const Den::RSafeMessage& aMessage)
+        :TCFSigLegacyRMessage2Ext(Messages::TNodeSignal::TMessageId(EId, ERealm), aMessage), iConnectionInfoPtrArray(&aConnectionInfoPtrArray)
+        {
+        }
+
+protected:
+	virtual TBool CanProcess(MeshMachine::TNodeContextBase& aContext);
+    virtual void ForwardL(MeshMachine::TNodeContextBase& aContext);
+    virtual void ProcessL(MeshMachine::TNodeContextBase& aContext);
+
+public:
+    DECLARE_MVIP_CTR(TCprFactEnumerateConnections)
+protected:
+    DATA_VTABLE
+	RPointerArray<TSourcedConnectionInfo>* iConnectionInfoPtrArray;
+    };
+
+
+/**
+ *
+ *  DATA MONITORING
+ *
+ */
+
+/**
+	A self-propagating extension message. It advances down the stack looking for
+	a MeshMachine::AMMNodeBase that implements EDataMonitoringApiExt.
+
+	@internalComponent
+*/
+class TLegacyDataMonitoringTransferredRequest : public TCFSigLegacyRMessage2Ext,
+												public Messages::TSignatureBase::TTypeToMessageId<TCFLegacyMessageInternal::ELegacyDataMonitoringTransferredRequest, TCFLegacyMessage::ERealmId>
+    {
+public:
+	TLegacyDataMonitoringTransferredRequest() : TCFSigLegacyRMessage2Ext() {}
+												
+	TLegacyDataMonitoringTransferredRequest(TSubSessionUniqueId aClientId, const Den::RSafeMessage& aMessage)
+        : TCFSigLegacyRMessage2Ext(Messages::TNodeSignal::TMessageId(EId, ERealm), aMessage), iClientId(aClientId)
+        {
+        }
+
+protected:
+	virtual TBool CanProcess(MeshMachine::TNodeContextBase& aContext);
+    virtual void ForwardL(MeshMachine::TNodeContextBase& aContext);
+    virtual void ProcessL(MeshMachine::TNodeContextBase& aContext);
+
+	virtual void Cancel(MeshMachine::TNodeContextBase& aContext);
+	virtual TInt CheckError(MeshMachine::TNodeContextBase& aContext, TInt aError);
+
+private:
+	TBool HasServiceProviderL(const Messages::TRuntimeCtxId& aRecipient);
+
+public:
+    DECLARE_MVIP_CTR(TLegacyDataMonitoringTransferredRequest)
+
+protected:
+    DATA_VTABLE
+
+    TSubSessionUniqueId iClientId;
+    };
+
+class TLegacyDataMonitoringTransferredRequest;
+class TLegacyDataMonitoringNotificationRequest;	
+	
+/**
+	IPC responder to support the legacy data monitoring APIs on RConnection.
+
+	Inherits from CDataMonitoringResponder as there's shared code needed by the legacy and api ext versions
+
+	@internalTechnology
+*/
+class CLegacyDataMonitoringResponder : public CDataMonitoringResponder
+	{
+friend class TLegacyDataMonitoringTransferredRequest;
+friend class TLegacyDataMonitoringNotificationRequest;
+
+public:
+	virtual void DoCancelRequest();
+	virtual void DoDataTransferred(TUint32 aReceivedBytes, TUint32 aSentBytes);
+	virtual void DoDataSentNotification(TUint32 aSentBytes);
+	virtual void DoDataReceivedNotification(TUint32 aReceivedBytes);
+
+private:
+	IMPORT_C static CLegacyDataMonitoringResponder* NewL(ESock::RLegacyResponseMsg& aResponseMsg);
+	CLegacyDataMonitoringResponder(ESock::RLegacyResponseMsg& aResponseMsg);
+
+private:
+	ESock::RLegacyResponseMsg iLegacyResponseMsg;
+	};
+
+/**
+	A self-propagating extension message. It advances down the stack looking for
+	a MeshMachine::AMMNodeBase that implements EDataMonitoringApiExt.
+
+	@internalComponent
+*/
+class TLegacyDataMonitoringNotificationRequest : public TCFSigLegacyRMessage2Ext,
+												 public Messages::TSignatureBase::TTypeToMessageId<TCFLegacyMessageInternal::ELegacyDataMonitoringNotificationRequest, TCFLegacyMessage::ERealmId>
+    {
+public:
+    inline TLegacyDataMonitoringNotificationRequest() {};
+    TLegacyDataMonitoringNotificationRequest(TDataMonitoringDirection aDirection, TSubSessionUniqueId aClientId, const Den::RSafeMessage& aMessage)
+        : TCFSigLegacyRMessage2Ext(Messages::TNodeSignal::TMessageId(EId, ERealm), aMessage), iDirection(aDirection), iClientId(aClientId)
+        {
+        }
+
+protected:
+	virtual TBool CanProcess(MeshMachine::TNodeContextBase& aContext);
+    virtual void ForwardL(MeshMachine::TNodeContextBase& aContext);
+    virtual void ProcessL(MeshMachine::TNodeContextBase& aContext);
+
+	virtual void Cancel(MeshMachine::TNodeContextBase& aContext);
+	virtual TInt CheckError(MeshMachine::TNodeContextBase& aContext, TInt aError);
+
+public:
+    DECLARE_MVIP_CTR(TLegacyDataMonitoringNotificationRequest)
+
+	TDataMonitoringDirection iDirection;
+    TSubSessionUniqueId iClientId;
+
+protected:
+    DATA_VTABLE
+    };
+
+/**
+	A self-propagating extension message. It advances down the stack looking for
+	a MeshMachine::AMMNodeBase that implements xxx.
+
+	@internalComponent
+*/
+class TLegacyEnumerateSubConnections : public TCFSigLegacyRMessage2Ext,
+									   public Messages::TSignatureBase::TTypeToMessageId<TCFLegacyMessageInternal::ELegacyEnumerateSubConnections, TCFLegacyMessage::ERealmId>
+    {
+public:
+    TLegacyEnumerateSubConnections()
+        {
+        }
+
+	TLegacyEnumerateSubConnections(const Den::RSafeMessage& aMessage)
+        : TCFSigLegacyRMessage2Ext(Messages::TNodeSignal::TMessageId(EId, ERealm), aMessage)
+        {
+        }
+
+protected:
+	virtual TBool CanProcess(MeshMachine::TNodeContextBase& aContext);
+    virtual void ForwardL(MeshMachine::TNodeContextBase& aContext);
+    virtual void ProcessL(MeshMachine::TNodeContextBase& aContext);
+
+public:
+    DECLARE_MVIP_CTR(TLegacyEnumerateSubConnections)
+
+protected:
+    DATA_VTABLE
+    };
+
+/**
+A self-propagating extension message. It advances down the stack looking for
+a MeshMachine::AMMNodeBase that implements MLegacyControlExtApi and wants to handle the
+requested control message.
+@internalComponent
+*/
+class TLegacyControlMessage : public TCFSigLegacyRMessage2PlatsecExt,
+							  public Messages::TSignatureBase::TTypeToMessageId<TCFLegacyMessageInternal::ELegacyControlMessage, TCFLegacyMessage::ERealmId>
+    {
+public:
+    TLegacyControlMessage()
+        {
+        }
+
+	TLegacyControlMessage(const Den::RSafeMessage& aMessage)
+        : TCFSigLegacyRMessage2PlatsecExt(Messages::TNodeSignal::TMessageId(EId, ERealm), aMessage)
+        {
+        }
+
+protected:
+	virtual TBool CanProcess(MeshMachine::TNodeContextBase& aContext);
+    virtual void ForwardL(MeshMachine::TNodeContextBase& aContext);
+    virtual void ProcessL(MeshMachine::TNodeContextBase& aContext);
+	
+public:
+    DECLARE_MVIP_CTR(TLegacyControlMessage)
+
+protected:
+    DATA_VTABLE
+    };
+
+/** Self-dispatching messages supporting the legacy enumeration of connection clients and sockets
+*/
+NONSHARABLE_CLASS(TLegacyConnectionEnumRequest) : public Messages::TSignalBase
+	{
+public:
+	TLegacyConnectionEnumRequest()
+		{
+		}
+
+    TLegacyConnectionEnumRequest(RArray<Messages::TNodeId>& aSCPRCandidates, TLegacyConnEnumClients aClientType);
+
+public:
+    DECLARE_MVIP_CTR(TLegacyConnectionEnumRequest)
+protected:
+    DATA_VTABLE
+
+	void DispatchL(const Messages::TRuntimeCtxId& aSender, const Messages::TRuntimeCtxId& aRecipient);
+	void Error(const Messages::TRuntimeCtxId& aSender, const Messages::TRuntimeCtxId& aRecipient, TInt aError);
+public:
+	RArray<Messages::TNodeId>* iSCPRCandidates;	// owned by sender; data thread only references
+	TLegacyConnEnumClients iClientType;
+	};
+
+/**
+	A self-propagating extension message. It advances down the stack looking for
+	a MeshMachine::AMMNodeBase that implements ELegacySubConnectionActiveApiExt.
+
+	@internalComponent
+*/
+NONSHARABLE_CLASS(TLegacySubConnectionActiveRequest) : public TCFSigLegacyRMessage2Ext,
+													   public Messages::TSignatureBase::TTypeToMessageId<TCFLegacyMessageInternal::ELegacySubConnectionActiveRequest, TCFLegacyMessage::ERealmId>
+    {
+public:
+    inline TLegacySubConnectionActiveRequest() {};
+	inline TLegacySubConnectionActiveRequest(TSubSessionUniqueId aClientId, const Den::RSafeMessage& aMessage)
+		: TCFSigLegacyRMessage2Ext(Messages::TNodeSignal::TMessageId(EId, ERealm), aMessage), iClientId(aClientId)
+		{}
+
+protected:
+	virtual TBool CanProcess(MeshMachine::TNodeContextBase& aContext);
+    virtual void ForwardL(MeshMachine::TNodeContextBase& aContext);
+    virtual void ProcessL(MeshMachine::TNodeContextBase& aContext);
+	virtual void Cancel(MeshMachine::TNodeContextBase& aContext);
+
+public:
+    DECLARE_MVIP_CTR(TLegacySubConnectionActiveRequest)
+
+	TSubSessionUniqueId iClientId;
+protected:
+    DATA_VTABLE
+    };
+
+/**
+	A self-propagating extension message. It advances down the stack looking for
+	a MeshMachine::AMMNodeBase that implements ELegacySubConnectionInfoxt.
+
+	@internalComponent
+*/
+NONSHARABLE_CLASS(TLegacyGetSubConnectionInfo) : public TCFSigLegacyRMessage2Ext,
+												 public Messages::TSignatureBase::TTypeToMessageId<TCFLegacyMessageInternal::ELegacyGetSubConnectionInfo, TCFLegacyMessage::ERealmId>
+    {
+public:
+    inline TLegacyGetSubConnectionInfo() {};
+	inline TLegacyGetSubConnectionInfo(TSubSessionUniqueId aClientId, TSubConnectionInfo& aSubConnectionInfo, const Den::RSafeMessage& aMessage)
+		: TCFSigLegacyRMessage2Ext(Messages::TNodeSignal::TMessageId(EId, ERealm), aMessage), iClientId(aClientId), iSubConnectionInfo(aSubConnectionInfo)
+		{}
+
+protected:
+	virtual TBool CanProcess(MeshMachine::TNodeContextBase& aContext);
+    virtual void ForwardL(MeshMachine::TNodeContextBase& aContext);
+    virtual void ProcessL(MeshMachine::TNodeContextBase& aContext);
+
+public:
+    DECLARE_MVIP_CTR(TLegacyGetSubConnectionInfo)
+
+	TSubSessionUniqueId iClientId;
+	TSubConnectionInfo iSubConnectionInfo;
+	
+protected:
+    DATA_VTABLE
+    };
+
+
+class CClientRequest;
+class ALegacySubConnectionActiveApiExt;
+
+/**
+@internalComponent
+*/
+NONSHARABLE_CLASS(CLegacySubConnectionActiveResponder) : public CCommsApiExtLegacyIpcResponder
+	{
+	friend class TLegacySubConnectionActiveRequest;
+	friend class ALegacySubConnectionActiveApiExt;
+	friend class CClientRequest;
+
+public:
+	static CLegacySubConnectionActiveResponder* NewL(ESock::RLegacyResponseMsg& aResponseMsg, TUint aTimerPeriod, TUint aClientId);
+
+	inline TUint ClientId()
+		{
+		return iClientId;
+		}
+
+	inline TInt TimerPeriod()
+		{
+		return iTimerPeriod;
+		}
+
+	inline TBool ClientPerceivedState()
+		{
+		return iClientPerceivedState;
+		}
+	
+protected:
+	CLegacySubConnectionActiveResponder(ESock::RLegacyResponseMsg& aResponseMsg, TUint aTimerPeriod, TUint aClientId)
+		: CCommsApiExtLegacyIpcResponder(aResponseMsg), iTimerPeriod(aTimerPeriod), iClientId(aClientId)
+		{
+		}
+
+private:
+	void SubConnectionActive(TBool aState);
+	void Error(TInt aError);
+	void Complete(TInt aError); 
+	
+private:
+	TBool iClientPerceivedState;
+	TInt iTimerPeriod;
+	TUint iClientId;
+	};
+
+
+/**
+	@internalComponent
+*/
+
+/**
+	@internalComponent
+*/
+class CLegacyEnumerateSubConnectionsResponder : public CCommsApiExtLegacyIpcResponder
+	{
+	friend class TLegacyEnumerateSubConnections;
+
+public:
+	IMPORT_C static void CompleteClient(CLegacyEnumerateSubConnectionsResponder*& aThis, TInt aCount);
+
+protected:
+	CLegacyEnumerateSubConnectionsResponder(RLegacyResponseMsg& aResponseMsg)
+		: CCommsApiExtLegacyIpcResponder(aResponseMsg)
+		{
+		}
+
+private:
+	static CLegacyEnumerateSubConnectionsResponder* NewL(RLegacyResponseMsg& aResponseMsg);
+	};
+
+}//namespace ESock
+
+#endif
+