diff -r 000000000000 -r dfb7c4ff071f datacommsserver/esockserver/inc/ss_nodemessages_internal.h --- /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 +#include +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif + +#include +#include +#include +#include + +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(aData)); + } + + inline virtual TInt Load(TPtrC8& aBuffer) + { + TInt len = Length(); + if (aBuffer.Length() < len) + { + return KErrArgument; + } + Mem::Copy(const_cast(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(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 struct TMessageSigSelectionPrefs; +template struct TCFMessageSigConnPrefList; +template struct TMessageSigSelectComplete; +template 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 + /*========================================================================== + <> + [Name]: + [Semantics]: Message semantics + + [Type]: Request for |Response to |Notification/[Peerless] + Where: + Request - request to perform an action. Sender should expect + 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 TNull; + + /**************************************************************************** + ** + **************************************************************************** + ** + ** + ** + ** + ** + ** + ** INTERFACE: Unasigned + ** + ** + ** + ** + ** + ** + **************************************************************************** + ** + ****************************************************************************/ + + /*========================================================================== + [Name]: TSubConnDataTransferred + [Semantics]: [399TODO] RZ: Simon please finish. + + [Type]: + [Fallible]: + + [Structure]: + ===========================================================================*/ + typedef Messages::TMessageSigNumberNumberNumber 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 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 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 TProvisionConnectionInfo; + }; +} //namespace ESock + +#endif +// __SS_NODEMESSAGES_INTERNAL_H__ +