commsfwsupport/commselements/serverden/inc/sd_minterceptmsgs.h
changeset 0 dfb7c4ff071f
--- /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 <elements/sd_mintercept_macro.h>
+#include <elements/sd_apiextensionclient.h>
+#include <elements/nm_signatures.h>
+
+//[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<KMaxNodeTagLength> 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<Messages::TNodeSignal::TMessageId>& aArray);
+			IMPORT_C TInitFallibleMsgModeMsg();
+			IMPORT_C virtual void DispatchL(NetInterfaces::TInterfaceControl& aIntfCtl,
+			                                TSessionUniqueId aClientUniqueId,
+	                                        Elements::RResponseMsg& aResponseMsg);
+			IMPORT_C void InitL(RArray<Messages::TNodeSignal::TMessageId>& aArray);
+			DECLARE_MVIP_CTR(TInitFallibleMsgModeMsg)
+			EXPORT_DATA_VTABLE_AND_FN
+
+		private:
+			TBuf8<TMIMessages::KMaxExternalisedReqAndRespMsgSize> 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
+
+