diff -r 000000000000 -r dfb7c4ff071f datacommsserver/esockserver/inc/ss_nodemessages.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/datacommsserver/esockserver/inc/ss_nodemessages.h Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,310 @@ +// 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 + @publishedPartner + @released +*/ + +#ifndef SYMBIAN_NODEMESSAGES_H +#define SYMBIAN_NODEMESSAGES_H + +#define SYMBIAN_NETWORKING_UPS +#include +#include +#include +#include +#include +#include +#include +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif + + +#include +#include + +#ifdef SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW +#include +#endif // SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW + +#ifdef SYMBIAN_NETWORKING_UPS +#include +#endif +#include +#include + + +#include + +#include + +namespace ESock +{ + + +/** +Factory query payload base class. +Note: The multiple inheritance is safe to do as the vptr size is always less than STypeID +size. + +@publishedPartner +@released +*/ +class TFactoryQueryBase : public Meta::SMetaDataNetCtor, public Factories::MFactoryQuery + { +public: + static const TInt KMaxInlineFactoryQuerySize = 48; + }; + +/** +Attribute creation policy using Sockman globals. + +@publishedPartner +@released +*/ +class TVCFromSockManAttributeCreationPolicy + { +public: + IMPORT_C static Meta::SMetaData* New(TPtrC8& aSrc, TPtr8& aDst); + }; + +class TAlwaysFindFactoryQuery : public TFactoryQueryBase + { +protected: + IMPORT_C virtual Factories::MFactoryQuery::TMatchResult Match(Factories::TFactoryObjectInfo& aObjectInfo); + +public: + IMPORT_C explicit TAlwaysFindFactoryQuery (); + + DECLARE_MVIP_CTR(TAlwaysFindFactoryQuery) + EXPORT_DATA_VTABLE_AND_FN + }; + +class TMetaConnectionFactoryQuery : public TFactoryQueryBase + { +public: + IMPORT_C TMetaConnectionFactoryQuery(); + + IMPORT_C explicit TMetaConnectionFactoryQuery(const TProviderInfo& aProviderInfo, const TUid aTierImplUid); + +protected: + IMPORT_C virtual Factories::MFactoryQuery::TMatchResult Match(Factories::TFactoryObjectInfo& aFactoryObjectInfo); + +public: + //We have it by value here as we need the XMetaConnectionFactoryQuery object + //to be sent in a message. + TProviderInfo iProviderInfo; + TUid iTierImplUid; // Tier Implementation Uid == Tier factory id + + DECLARE_MVIP_CTR(TMetaConnectionFactoryQuery) + EXPORT_DATA_VTABLE_AND_FN + }; + +class TDefaultConnectionFactoryQuery : public TFactoryQueryBase +/** Class implementing MFactoryQuery to find a connection provider. + +@publishedPartner +@released +*/ + { +public: + IMPORT_C explicit TDefaultConnectionFactoryQuery(const Messages::TNodeId& aMCprId); + + + IMPORT_C explicit TDefaultConnectionFactoryQuery(); + +protected: + IMPORT_C virtual Factories::MFactoryQuery::TMatchResult Match(Factories::TFactoryObjectInfo& aFactoryObjectInfo); + +public: + const Messages::TNodeId iMCprId; + DECLARE_MVIP_CTR(TDefaultConnectionFactoryQuery) + EXPORT_DATA_VTABLE_AND_FN + }; + +class TDefaultSCPRFactoryQuery : public TFactoryQueryBase +/** +@publishedPartner +@released +*/ + { +public: + IMPORT_C TDefaultSCPRFactoryQuery(); + + //used to look up sub-connection from control side + IMPORT_C TDefaultSCPRFactoryQuery(const Messages::TNodeId& aControlProvider, TSubConnOpen::TSubConnType aSCPRType); +protected: + IMPORT_C virtual Factories::MFactoryQuery::TMatchResult Match(Factories::TFactoryObjectInfo& aFactoryObjectInfo); +public: + Messages::TNodeId iControlProvider; + TSubConnOpen::TSubConnType iSCPRType; //default/reserved + + DECLARE_MVIP_CTR(TDefaultSCPRFactoryQuery) + EXPORT_DATA_VTABLE_AND_FN + }; + +class TDefaultFlowFactoryQuery : public TFactoryQueryBase +/** +@publishedPartner +@released +*/ + { +public: + IMPORT_C TDefaultFlowFactoryQuery(); + + IMPORT_C TDefaultFlowFactoryQuery(const Messages::TNodeId& aSCprId); + IMPORT_C TDefaultFlowFactoryQuery(const Messages::TNodeId& aCprId, const Messages::TNodeId& aSCprId); + IMPORT_C TDefaultFlowFactoryQuery(const Messages::TNodeId& aCprId, const Messages::TNodeId& aSCprId, Messages::TNodeSignal::TMessageId aMessageId, TInt aProtocolType); +protected: + IMPORT_C virtual Factories::MFactoryQuery::TMatchResult Match(Factories::TFactoryObjectInfo& aFactoryObjectInfo); +public: + Messages::TNodeId iCprId; + Messages::TNodeId iSCprId; + Messages::TNodeSignal::TMessageId iMessageId; + TInt iProtocolType; + + DECLARE_MVIP_CTR(TDefaultFlowFactoryQuery) + EXPORT_DATA_VTABLE_AND_FN + }; + +class TDefaultProtocolIntfFactoryQuery : public TFactoryQueryBase +/** +@publishedPartner +@released +*/ + { +public: + IMPORT_C TDefaultProtocolIntfFactoryQuery(); + IMPORT_C TDefaultProtocolIntfFactoryQuery(const Messages::TNodeId& aCprId); + +protected: + IMPORT_C virtual Factories::MFactoryQuery::TMatchResult Match(Factories::TFactoryObjectInfo& aFactoryObjectInfo); +public: + Messages::TNodeId iCprId; + DECLARE_MVIP_CTR(TDefaultProtocolIntfFactoryQuery) + EXPORT_DATA_VTABLE_AND_FN + }; + + +DECLARE_MESSAGE_SIG_1(SigFamilyBundle, RCFParameterFamilyBundleC, FamilyBundle) +DECLARE_MESSAGE_SIG_2(SigNumberFamilyBundle, TInt, Value, RCFParameterFamilyBundleC, FamilyBundle) +DECLARE_MESSAGE_SIG_3(SigPlayerRoleUidFactoryQuery, TInt, FactoryContainerType, TUid, Uid, ESock::TFactoryQueryBase*, Query) +DECLARE_MESSAGE_SIG_1(SigSubConnParams, CSubConParameterBundle*, SubConParameterBundle) +DECLARE_MESSAGE_SIG_2(SigNumberSubConnParams, TInt, Value, const CSubConParameterBundle*, SubConParameterBundle) +DECLARE_MESSAGE_SIG_2(SigBundleRMessage2, CRefCountOwnedParameterBundle*, Bundle, const RMessage2*, Message) +DECLARE_MESSAGE_SIG_1(SigBundle, CRefCountOwnedParameterBundle*, Bundle) +DECLARE_MESSAGE_SIG_3(SigNodeIdClientTypeUid, Messages::TNodeId, NodeId, Messages::TClientType, ClientType, TUid, Uid) +DECLARE_MESSAGE_SIG_3(SigNodeIdClientTypeNumber, Messages::TNodeId, NodeId, Messages::TClientType, ClientType, TUint, Value) + + +/** +Message signature to carry and own a reference on a RMetaExtensionContainerC +The reference will be automatically aquired upon explicit construction +The reference will be automatically released after dispatch or on error +The RMetaExtensionContainerC to be posted MUST be open else a panic will occur (in udeb) +*/ +struct TSigMetaExtContainer : public Messages::TSignatureBase + { +public: + IMPORT_C virtual void DispatchL(const Messages::TRuntimeCtxId& aSender, const Messages::TRuntimeCtxId& aRecipient); + IMPORT_C virtual void Error(const Messages::TRuntimeCtxId& aSender, const Messages::TRuntimeCtxId& aRecipient, TInt aError); + +protected: + inline TSigMetaExtContainer() {} + inline explicit TSigMetaExtContainer(const Messages::TNodeSignal::TMessageId& aMessageId, RMetaExtensionContainerC& aConfig) + : Messages::TSignatureBase(aMessageId), iConfig(aConfig) + { + } + +public: + DECLARE_MVIP_CTR( TSigMetaExtContainer ) + EXPORT_DATA_VTABLE_AND_FN + RMetaExtensionContainerC iConfig; + }; + +template +class TMessageSigMetaExtContainer : public TSigMetaExtContainer, public Messages::TSignatureBase::TTypeToMessageId + { +public: + explicit TMessageSigMetaExtContainer(RMetaExtensionContainerC& aConfig) + : TSigMetaExtContainer(Messages::TNodeSignal::TMessageId(id, realm), aConfig) + { + } + }; + + + +template +class TMessageSigFamilyBundleDefaultToNull : public TSigFamilyBundle, public Messages::TSignatureBase::TTypeToMessageId +/** +Message to carry a RCFParameterFamilyBundle. +Can be instantiated with no parameters, in which case the null RCFParameterFamilyBundle is used +*/ + { +public: + TMessageSigFamilyBundleDefaultToNull(const RCFParameterFamilyBundleC& aFamilyBundle = RCFParameterFamilyBundleC()) + : TSigFamilyBundle(Messages::TNodeSignal::TMessageId(id, realm), aFamilyBundle) + {} + }; + +template +class TMessageSigNumberDefaultFamilyBundleDefaultToNull : public TSigNumberFamilyBundle, public Messages::TSignatureBase::TTypeToMessageId +/** +Message to carry a Number and a RCFParameterFamilyBundle. +Can be instantiated with no parameters, in which case 0 and the null RCFParameterFamilyBundle are used. +*/ + { +public: + TMessageSigNumberDefaultFamilyBundleDefaultToNull(TInt aValue = 0, const RCFParameterFamilyBundleC& aFamilyBundle = RCFParameterFamilyBundleC()) + : TSigNumberFamilyBundle(Messages::TNodeSignal::TMessageId(id, realm), aValue, aFamilyBundle) + {} + }; + +template +class TCFMessageSigNodeIdClientTypeNumberDefault : public TSigNodeIdClientTypeNumber, public Messages::TSignatureBase::TTypeToMessageId + { +public: + TCFMessageSigNodeIdClientTypeNumberDefault(Messages::TNodeId aNodeId, Messages::TClientType aClientType, TUint aValue = 0) + : TSigNodeIdClientTypeNumber(Messages::TNodeSignal::TMessageId(id, realm), aNodeId, aClientType, aValue) + {} + }; + +} //namespace ESock + +namespace Meta + { + // Ugly hack: mingw does not evaulate macros early enough to pass as template arguments so we hard code the + // value for the x86gcc platform. A compile time assertion ensures that the value stays correct. + #if defined(__GCCXML__) || defined(__X86GCC__) + #define KSigPlayerRoleUidFactory_iQuery 20 + #else + #define KSigPlayerRoleUidFactory_iQuery ( _FOFF(ESock::TSigPlayerRoleUidFactoryQuery, iQuery) ) + #endif + + __ASSERT_COMPILE( KSigPlayerRoleUidFactory_iQuery == _FOFF(ESock::TSigPlayerRoleUidFactoryQuery, iQuery) ); + + typedef Messages::TSignatureWithPolymorphicPayloadMetaType TMetaHandler; + } + + +#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#endif + +#endif //SYMBIAN_NODEMESSAGES_H +