diff -r 000000000000 -r dfb7c4ff071f commsfwsupport/commselements/serverden/inc/sd_minterceptmsgs.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commsfwsupport/commselements/serverden/inc/sd_minterceptmsgs.h Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,317 @@ +// 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 SYMBIAN_ELEMENTS_MSGINTERCEPTMSGS_H +#define SYMBIAN_ELEMENTS_MSGINTERCEPTMSGS_H + +#include +#include +#include + +//[MZ]: Please consider connecting MI at the transport level. +// The macro solution does not scale too well. + +/* ELEMENTS_DEBUG_MESSAGES_THUNK_POINT +// to be reviewed since Message interceptor is decoupled from esock +Elements debug messages currently fit the MIR well as it's a disconnect global blob (mostly disconnected; +worker thread knows about it for init & cleanup & everybody else has macro hiding it). But for some +debugging features closer coupling is required & many of the key classes aren't exported, ie the +obvious home for the debugging code is inside ESOCK. Making them the debug dispatches friends isn't +very good either as it risks hard-to-debug problems where ESOCKSVR is compiled without the support but +the helper DLL is & so dereferences non-existant debug members, etc (and this is particularly likely +on hardware where people always juggle weird mixes of UDEB & UREL to get a small enough ROM & this will +be very hard to debug) + +Hence the addition of code ptrs to this MIR structure - poor man's vtbl. Really this shouldn't be in the MIR +but a general debug DLL but (a) it's very slim functionality and (b) the MIR is already a bit ambiguous whether +it's "a" debug DLL or "the". +*/ + +namespace Den + { + const TUint KMaxNodeTagLength = 32; + typedef TBuf8 TNodeTag; + + class TNodeSpecifier; + class CPattern; + class TEventSummaryTriple; + + // Basic types + //------------ + + //TODO: TNodeExpression needs to be based on a more dynamic mechanism + //to allow for tech specific node descriptions + class TNodeExpression + { + public: + TNodeExpression() {} + + TNodeExpression(TUid aUid, const TDesC8& aTagToApply = KNullDesC8) : + iMatchType(EMatchByUid), iUid(aUid), iTagToApplyOnMatch(aTagToApply) {} + + TNodeExpression(const TDesC8& aNodeTag) : + iMatchType(EMatchByInstance), iMatchTag(aNodeTag), iTagToApplyOnMatch(KNullDesC8) {} + + TBool Compare(const TNodeSpecifier& aNode) const; + TBool SetTagOnMatch() const {return (iTagToApplyOnMatch.Length() > 0);} + const TNodeTag& TagToSet() const {return iTagToApplyOnMatch;} + + private: + // Matching by node info + TUid iUid; + + // Todo: Include when APId and TierId are implemented for Multimedia + //TUint iAPId; + //TUid iTierId; + TNodeTag iTagToApplyOnMatch; + + // Matching by node name + TNodeTag iMatchTag; + + enum TMatchType {EMatchByUid, EMatchByInstance} iMatchType; + }; + + class TMsgExpression + { + public: + TMsgExpression() : iMessageId(0), iRealm(0) {}; + TMsgExpression(TUint aMessageId, TUint aRealm) : iMessageId(aMessageId), iRealm(aRealm) {} + TBool Compare(const Messages::TNodeSignal& aMessage) const; + + private: + TUint iMessageId; + TUint iRealm; + }; + + class TEventExpression + { + public: + TEventExpression() : iSenderExpression(), iMsgExpression(), iReceiverExpression() {} + TEventExpression( + const TNodeExpression& aSender, + const TMsgExpression& aMsg, + const TNodeExpression& aReceiver) : + iSenderExpression(aSender), iMsgExpression(aMsg), iReceiverExpression(aReceiver) + {} + + const TMsgExpression& MessageExpression() const {return iMsgExpression;} + const TNodeExpression& SenderExpression() const {return iSenderExpression;} + const TNodeExpression& ReceiverExpression() const {return iReceiverExpression;} + + private: + TNodeExpression iSenderExpression; + TMsgExpression iMsgExpression; + TNodeExpression iReceiverExpression; + }; + + class TAction + { + public: + typedef enum {ENoAction, ELeaveAction, EPanicAction} TActionType; + + TAction(TActionType aAction, TInt aError) : + iAction(aAction), iError(aError) {} + TAction() : iAction(ENoAction), iError(KErrNone) {} + + TActionType Action() const {return iAction;} + TInt Error() const {return iError;} + + TInt ExecuteActionL(); + + private: + TActionType iAction; + TInt iError; + }; + + // MI messages + //------------ + class TMIMessages + { + public: + static const TInt KMaxExternalisedReqAndRespMsgSize = 240; //size of the biggest message any direction.. + + public: + static TUid ImplementationUid(); + static TInt ImplementationProxyTableSize(); + static const TImplementationProxy* ImplementationProxyTable(); + }; + + // Reset + class TSoftResetMsg : public Den::TApiExtSessionReqMsg + { + public: + IMPORT_C TSoftResetMsg(); + IMPORT_C virtual void DispatchL(NetInterfaces::TInterfaceControl& aIntfCtl, + TSessionUniqueId aClientUniqueId, + Elements::RResponseMsg& aResponseMsg); + DECLARE_MVIP_CTR(TSoftResetMsg) + EXPORT_DATA_VTABLE_AND_FN + }; + + // Enable + class TEnableMsg : public Den::TApiExtSessionReqMsg + { + public: + IMPORT_C TEnableMsg(); + IMPORT_C virtual void DispatchL(NetInterfaces::TInterfaceControl& aIntfCtl, + TSessionUniqueId aClientUniqueId, + Elements::RResponseMsg& aResponseMsg); + DECLARE_MVIP_CTR(TEnableMsg) + EXPORT_DATA_VTABLE_AND_FN + }; + + // EnableFallibleMsgMode + class TEnableFallibleMsgModeMsg : public Den::TApiExtSessionReqMsg + { + public: + IMPORT_C TEnableFallibleMsgModeMsg(); + IMPORT_C TEnableFallibleMsgModeMsg(TInt aCount); + IMPORT_C virtual void DispatchL(NetInterfaces::TInterfaceControl& aIntfCtl, + TSessionUniqueId aClientUniqueId, + Elements::RResponseMsg& aResponseMsg); + DECLARE_MVIP_CTR(TEnableFallibleMsgModeMsg) + EXPORT_DATA_VTABLE_AND_FN + protected: + TInt iCount; + }; + + // InitFallibleMsgMode + class TInitFallibleMsgModeMsg : public Den::TApiExtSessionReqMsg + { + public: + //TInitFallibleMsgModeMsg(RArray& aArray); + IMPORT_C TInitFallibleMsgModeMsg(); + IMPORT_C virtual void DispatchL(NetInterfaces::TInterfaceControl& aIntfCtl, + TSessionUniqueId aClientUniqueId, + Elements::RResponseMsg& aResponseMsg); + IMPORT_C void InitL(RArray& aArray); + DECLARE_MVIP_CTR(TInitFallibleMsgModeMsg) + EXPORT_DATA_VTABLE_AND_FN + + private: + TBuf8 iArray; //TODO: consider alternatives + }; + + // CheckFallibleMsgMode + class TCheckFallibleMsgModeMsg : public Den::TApiExtSessionReqMsg + { + public: + IMPORT_C TCheckFallibleMsgModeMsg(); + IMPORT_C virtual void DispatchL(NetInterfaces::TInterfaceControl& aIntfCtl, + TSessionUniqueId aClientUniqueId, + Elements::RResponseMsg& aResponseMsg); + DECLARE_MVIP_CTR(TCheckFallibleMsgModeMsg) + EXPORT_DATA_VTABLE_AND_FN + }; + + // Disable + class TDisableMsg : public Den::TApiExtSessionReqMsg + { + public: + IMPORT_C TDisableMsg(); + IMPORT_C virtual void DispatchL(NetInterfaces::TInterfaceControl& aIntfCtl, + TSessionUniqueId aClientUniqueId, + Elements::RResponseMsg& aResponseMsg); + DECLARE_MVIP_CTR(TDisableMsg) + EXPORT_DATA_VTABLE_AND_FN + }; + + // Append expression + class TAppendExpressionMsg : public Den::TApiExtSessionReqMsg + { + public: + IMPORT_C TAppendExpressionMsg(); + IMPORT_C TAppendExpressionMsg(const TEventExpression& aExpression); + IMPORT_C virtual void DispatchL(NetInterfaces::TInterfaceControl& aIntfCtl, + TSessionUniqueId aClientUniqueId, + Elements::RResponseMsg& aResponseMsg); + DECLARE_MVIP_CTR(TAppendExpressionMsg) + EXPORT_DATA_VTABLE_AND_FN + + protected: + TEventExpression iExpression; + }; + + // Append action + class TAppendActionMsg : public Den::TApiExtSessionReqMsg + { + public: + IMPORT_C TAppendActionMsg(); + IMPORT_C TAppendActionMsg(const TAction& aAction); + IMPORT_C virtual void DispatchL(NetInterfaces::TInterfaceControl& aIntfCtl, + TSessionUniqueId aClientUniqueId, + Elements::RResponseMsg& aResponseMsg); + DECLARE_MVIP_CTR(TAppendActionMsg) + EXPORT_DATA_VTABLE_AND_FN + + protected: + TAction iAction; + }; + + // Query complete + class TQueryCompleteMsg : public Den::TApiExtSessionReqMsg + { + public: + IMPORT_C TQueryCompleteMsg(); + IMPORT_C virtual void DispatchL(NetInterfaces::TInterfaceControl& aIntfCtl, + TSessionUniqueId aClientUniqueId, + Elements::RResponseMsg& aResponseMsg); + DECLARE_MVIP_CTR(TQueryCompleteMsg) + EXPORT_DATA_VTABLE_AND_FN + }; + + + //************************************************************************* + // + //Response messages + // + //************************************************************************* + const TInt KMessageInterceptResponseMsgImplementationUid = 0x10285C8D; + + /** + */ + enum TMIResponseMsgImplementations + { + ECheckFallibleMsgModeResponseMsg = 1 + }; + + /** + Ecom response message from server to client on call to RMessageInterceptorFM::Check() + */ + class TCheckFallibleMsgModeResponseMsg : public Den::TApiExtRespMsg + { + public: + EXPORT_DATA_VTABLE_AND_FN + + public: + IMPORT_C static TCheckFallibleMsgModeResponseMsg* NewL(); //For the ecom factory + IMPORT_C TCheckFallibleMsgModeResponseMsg(); + + public: + TBool iCheckResult; + }; + + } // Den + + +#endif +//SYMBIAN_ELEMENTS_MSGINTERCEPTMSGS_H + +