datacommsserver/esockserver/inc/ss_nodemessages_internal.h
changeset 0 dfb7c4ff071f
child 14 8b5d60ce1e94
child 16 d3f948f1301a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/inc/ss_nodemessages_internal.h	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,359 @@
+// Copyright (c) 2008-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_NODEMESSAGES_INTERNAL_H__
+#define __SS_NODEMESSAGES_INTERNAL_H__
+
+#include <comms-infras/ss_nodemessages.h>
+#include <es_enum.h>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <es_enum_partner.h>
+#endif
+
+#include <elements/nm_address.h>
+#include <elements/nm_messages_base.h>
+#include <comms-infras/ss_common.h>
+#include <comms-infras/ss_logext.h>
+
+class CSockManData; //must be seen in global namespace before being a friend in ESock namespace
+//otherwise silly compiler confused since it interprets friend class as a forward declaration
+//for no reason
+
+class CParameterBundleBase;
+
+namespace Messages
+{
+	class RNodeInterface;
+}
+
+namespace ESock
+{
+class MPlatsecApiExt;
+class CCommsFactoryBase;
+
+class CMetaConnectionProviderFactoryBase;
+
+
+struct TFlowParams
+/** Conveys attributes of a flow request
+*/
+	{
+	enum TFlowRequestType
+		{
+		EImplicit, EExplicitSubConnection, EExplicitConnection
+		};
+
+	explicit TFlowParams(
+		TInt aAddrFamily,
+		TInt aSocketType,
+		TInt aProtocol,
+		TInt aFlowRequestType,
+		TAny* aSessionProxy,
+		TBool aFlowLoadsProtocol = ETrue
+		) :
+			iAddrFamily(aAddrFamily),
+			iSocketType(aSocketType),
+			iProtocol(aProtocol),
+			iFlowRequestType(aFlowRequestType),
+			iSessionProxy(aSessionProxy),
+			iFlowLoadsProtocol(aFlowLoadsProtocol) {}
+
+	explicit TFlowParams() :
+		iAddrFamily(NULL), iSocketType(NULL), iProtocol(NULL),
+		iFlowRequestType(NULL), iSessionProxy(NULL), iFlowLoadsProtocol(ETrue) {}
+
+	TInt iAddrFamily;
+	TInt iProtocol;
+	TInt iSocketType;
+	TInt iFlowRequestType;
+	TAny* iSessionProxy;
+	TBool iFlowLoadsProtocol;
+	};
+
+
+/**
+@internalTechnology
+Special Meta Type to increase refcount on RMetaExtensionContainers when they are posted.
+Relies on fact that one serialisation will occur per post.
+*/
+NONSHARABLE_CLASS(TMetaExtensionContainerMetaType) : public Meta::MMetaType
+	{
+public:
+	inline static Meta::MMetaType* NewL(const TAny* aMem, const TAny* aData)
+		{
+		return ::new ((TUint8*)aMem) TMetaExtensionContainerMetaType(reinterpret_cast<const RMetaExtensionContainerC*>(aData));
+		}
+
+	inline virtual TInt Load(TPtrC8& aBuffer)
+		{
+		TInt len = Length();
+		if (aBuffer.Length() < len)
+			{
+			return KErrArgument;
+			}
+		Mem::Copy(const_cast<RMetaExtensionContainerC*>(iData), aBuffer.Ptr(), len);
+		aBuffer.Set(aBuffer.Ptr()+len, aBuffer.Length()-len); //update pointer
+		return KErrNone;
+		}
+
+	inline virtual TInt Store(TDes8& aBuffer) const
+		{
+		const_cast<RMetaExtensionContainerC*>(iData)->Open();
+		TInt len = Length();
+		if (aBuffer.MaxLength() - aBuffer.Length() < len)
+			{
+			return KErrOverflow;
+			}
+		aBuffer.Append((TUint8*)iData, len);
+		return KErrNone;
+		}
+
+	inline virtual void Copy(const TAny* aData)
+		{
+		Mem::Copy((TAny*)iData, aData, Length());
+		}
+
+	inline virtual TInt Length() const
+		{
+		return sizeof(RMetaExtensionContainerC);
+		}
+
+private:
+	inline TMetaExtensionContainerMetaType::TMetaExtensionContainerMetaType(const RMetaExtensionContainerC* aData)
+		: iData(aData)
+		{
+		__ASSERT_DEBUG(iData!=NULL, User::Panic(_L("RMECMeta"),KErrArgument));
+		}
+
+private:
+	const RMetaExtensionContainerC* iData;
+	};
+
+//
+// Signature classes
+//
+
+DECLARE_MESSAGE_SIG_1(SigConnectionInfo, TConnectionInfo, ConnectionInfo)
+DECLARE_MESSAGE_SIG_1(SigSubConNotification, CRefCountOwnedSubConNotification*, RefCountOwnedSubConNotification)
+DECLARE_MESSAGE_SIG_1(SigPlaneNotification, CRefCountOwnedNotification*, RefCountOwnedNotification)
+DECLARE_MESSAGE_SIG_1(SigSubConnOpenedEvent, TSubConnectionOpenedEvent, SubConnectionOpenedEvent)
+DECLARE_MESSAGE_SIG_1(SigSubConnClosedEvent, TSubConnectionClosedEvent, SubConnectionClosedEvent)
+DECLARE_MESSAGE_SIG_1(SigStateChange, Elements::TStateChange, StateChange)
+DECLARE_MESSAGE_SIG_1(SigFlowParams, TFlowParams, FlowParams)
+
+class CConnectionInfo;
+DECLARE_MESSAGE_SIG_1(SigConnectionInfoPtr, ESock::CConnectionInfo*, Ptr)
+
+#ifdef SYMBIAN_NETWORKING_UPS
+struct TPolicyCheckRequestParams
+/**
+Parameters passed in a TPolicyCheckRequest message
+*/
+	{
+	inline TPolicyCheckRequestParams()
+		{ };
+
+	inline TPolicyCheckRequestParams(const TProcessId& aProcessId, const TThreadId& aThreadId, TInt aPlatSecResult,
+									 const TUpsDestinationAddr& aDestinationAddr, const TUpsDestinationAddrType& aDestinationAddrType)
+	  : iProcessId(aProcessId), iThreadId(aThreadId), iPlatSecResult(aPlatSecResult),
+	    iDestinationAddr(aDestinationAddr), iDestinationAddrType(aDestinationAddrType),
+	    iCommsId(Messages::TNodeId::NullId())
+	    
+		{ };
+
+	inline TPolicyCheckRequestParams(const TProcessId& aProcessId, const TThreadId& aThreadId, TInt aPlatSecResult,
+									 const TUpsDestinationAddr& aDestinationAddr, const TUpsDestinationAddrType& aDestinationAddrType, const Messages::TNodeId& aCommsId)
+		  : iProcessId(aProcessId), iThreadId(aThreadId), iPlatSecResult(aPlatSecResult),
+		    iDestinationAddr(aDestinationAddr), iDestinationAddrType(aDestinationAddrType), iCommsId(aCommsId)
+			{ };	    
+	    
+	TProcessId				iProcessId;
+	TThreadId				iThreadId;
+	TInt					iPlatSecResult;			// result of Platform Security policy check
+	TUpsDestinationAddr		iDestinationAddr;		// destination (e.g. IP address where available)
+	TUpsDestinationAddrType	iDestinationAddrType;	// form of iDestinationAddr (e.g. string, IP address etc)
+	Messages::TNodeId 		iCommsId;
+	};
+
+DECLARE_MESSAGE_SIG_1(SigUpsParameters, TPolicyCheckRequestParams, Params)
+
+struct TUPSStatusChangeParams
+/**
+Parameters passed in a UPS Status Change message
+*/
+	{
+	inline TUPSStatusChangeParams()
+		{ };
+	
+	inline TUPSStatusChangeParams(const TProcessId& aProcessId, const TThreadId& aThreadId, const Messages::TNodeId& aCommsId)
+		  : iProcessId(aProcessId), iThreadId(aThreadId), iCommsId(aCommsId)
+			{ };	    
+	    
+	TProcessId				iProcessId;
+	TThreadId				iThreadId;
+	Messages::TNodeId 		iCommsId;
+	};
+
+DECLARE_MESSAGE_SIG_1(SigUpsStatusChangeParameters, TUPSStatusChangeParams, Params)
+#endif
+
+template<TInt id, TInt32 realm> struct TMessageSigSelectionPrefs;
+template<TInt id, TInt32 realm> struct TCFMessageSigConnPrefList;
+template<TInt id, TInt32 realm> struct TMessageSigSelectComplete;
+template<TInt id, TInt32 realm> struct TCFMessageTransportHookError;
+
+
+//any new enum added here needs to go into one of the utracedecoder definition files
+//NEVER INSERT ANYTHING IN HERE ONLY ADD THE PENALTY IS SUDDEN DEATH!
+class TCFMessage
+	{
+  private:
+  	enum
+ 	{
+	ECFSubConnDataTransferred		= 94, //email details to remek including comparison of conn and subconn
+	EStateChange                    = 95,
+	
+	ECFTransportNotification		= 100,  // For SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+	
+    ECFProvisionConnectionInfo      = 101
+	};
+protected:
+	friend class ::CSockManData;
+
+/*
+ * Utility functions to register/deregister internal transport messages
+ * @internalComponent
+ * @released 9.3
+ */
+	static void RegisterL();
+	static void DeRegister();
+
+public:
+    enum { ERealmId = 0x10285A57 }; //UID allocated on 21/11/2007
+    /*==========================================================================
+    <<Keys:>>
+    [Name]:      <messagename>
+    [Semantics]: Message semantics
+
+    [Type]:      Request for <responsemsg>|Response to <requestmsg>|Notification/[Peerless]
+                 Where:
+                 Request      - request to perform an action. Sender should expect <responsemsg>
+                                to ackowledge the completion of the action.
+                 Response     - acknowledgement that the previous request is now completed.
+                 Notification - a one-off message flagging an event.
+                 Peerless     - the message is peerless, i.e.: the sender doesn't have to
+                                be the recipient's client.
+    [Fallible]:  Yes|No
+                 Only applicable to requests and denotes whether the request can fail or not,
+                 or, in other words, whether the request can be completed to with TError.
+
+    [Structure]:
+    Every message defined in this realm has at least:
+    param        iSender      - the message sender
+    param        iActivityId  - depending on the message type:
+                 Request      - the activity id the response should be addressed to.
+                                Request senders fill up this param to match the response
+                                with the local activity. Activity id on the sender side
+                                should uniquelly identify the activity expecting the response.
+                 Response     - the activity on the recipient side expecting this response.
+                                the activityid to put here has been previously conveyed
+                                with the request.
+                 Notification - ignored.
+    ===========================================================================*/
+    //[399TODO] RZ: the list of messages that follow is pretty long. I was then thinking
+    //that perhaps we could chop it (with namespaces) into conceptual interfaces. Even better,
+    //perhaps we could even make some runtime checks on message reception to panic if a message
+    //received doesn't belong to any of the interfaces implemented locally.
+
+//--Generic framework--
+    //typedef Messages::TMessageSigVoid<ECFNull, TCFMessage::ERealmId> TNull;
+
+   /****************************************************************************
+    **
+    ****************************************************************************
+    **
+    **
+    **
+    **
+    **
+    **
+    ** INTERFACE: Unasigned
+    **
+    **
+    **
+    **
+    **
+    **
+    ****************************************************************************
+    **
+    ****************************************************************************/
+
+    /*==========================================================================
+    [Name]:      TSubConnDataTransferred
+    [Semantics]: [399TODO] RZ: Simon please finish.
+
+    [Type]:
+    [Fallible]:
+
+    [Structure]:
+    ===========================================================================*/
+	typedef Messages::TMessageSigNumberNumberNumber<ECFSubConnDataTransferred, TCFMessage::ERealmId> TSubConnDataTransferred;
+
+	/*==========================================================================
+	[Name]:      TStateChange
+	[Semantics]: Sender flags its state change. The state represents the legacy concept of a progress
+			and is only sent during connection start or stop.
+
+	[Type]:      Notification
+	===========================================================================*/
+	typedef TMessageSigStateChange<EStateChange, TCFMessage::ERealmId> TStateChange;
+
+#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+	/*==========================================================================
+	[Name]:      TTransportNotification
+	[Semantics]: Sender sends this message to Data clients which will have a notification.
+			Presently used to notify the data clients for the change in underlying bearer
+			which will enable the SAP to used set the TCP receive window size and Maximum
+			window size (which will be used for scaling negotiation). The window sizes will
+			be retrieved using the pointer to the Lookup Table.
+
+	[Type]:      Notification
+	
+	===========================================================================*/
+	typedef Messages::TMessageSigVoid <ECFTransportNotification, TCFMessage::ERealmId> TTransportNotification;
+
+#endif //SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW
+
+	   /**
+	    The message provisions connection information during the selection request
+
+	    @li Type:  Notification
+
+	    IMPORTANT: There is no response to TProvisionConnectionInfo. If the recipient finds out
+	    that the configuration received is in any way inadequate, it cannot flag this
+	    fact until it is requested to do something (e.g.: TCFDataClient::Start)
+	    */
+	    typedef TMessageSigConnectionInfoPtr<ECFProvisionConnectionInfo, TCFMessage::ERealmId> TProvisionConnectionInfo;
+	};
+} //namespace ESock
+
+#endif
+// __SS_NODEMESSAGES_INTERNAL_H__
+