diff -r 000000000000 -r 4e1aa6a622a0 mediator/inc/Server/MediatorDebug.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mediator/inc/Server/MediatorDebug.h Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,464 @@ +/* +* Copyright (c) 2005 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: Mediator logging services +* +*/ + +#ifndef MEDIATORDEBUG_H +#define MEDIATORDEBUG_H + +// INCLUDES +#include +#include +#include +#include "MediatorServiceDefs.h" +#include "MediatorCommon.h" +#include "MediatorDebug.hrh" + +// CONSTANTS +const TInt KMediatorDebugBufferLength = 512; + +// FORWARD DECLARATIONS +class CMediatorServer; +class CMediatorServerSession; + +using namespace MediatorService; + +// CLASS DECLARATION + +/** +* Mediator logging services +* +* +* @lib MediatorServer.exe +* @since S60 3.1 +*/ +class RMediatorDebug + { + public: + + /** + * Mediator logging service initialization + * @since S60 3.1 + * @param aMediator mediator server + * @return void + */ + inline static void Initialize(CMediatorServer* aMediator); + + /** + * Mediator logging service uninitialization + * @since S60 3.1 + * @return void + */ + inline static void Uninitialize(); + + /** + * Prints debug information of the operation + * @since S60 3.1 + * @param aMessage message + * @param aSession session + * @return void + */ + inline static void Log(const RMessage2& aMessage, CMediatorServerSession& aSession); + + /** + * Prints event list + * @since S60 3.1 + * @param aMessage message + * @param aSession session + * @param aEventList event list + * @return void + */ + inline static void LogData(const RMessage2& aMessage, CMediatorServerSession& aSession, const MediatorService::REventList& aEventList); + + /** + * Prints a single event + * @since S60 3.1 + * @param aMessage message + * @param aSession session + * @param aEvent event + * @return void + */ + inline static void LogData(const RMessage2& aMessage, CMediatorServerSession& aSession, const MediatorService::TEvent& aEvent); + + /** + * Prints command list + * @since S60 3.1 + * @param aMessage message + * @param aSession session + * @param aCommandList command list + * @return void + */ + inline static void LogData(const RMessage2& aMessage, CMediatorServerSession& aSession, const MediatorService::RCommandList& aCommandList); + + /** + * Prints a single command + * @since S60 3.1 + * @param aMessage message + * @param aSession session + * @param aCommand command + * @return void + */ + inline static void LogData(const RMessage2& aMessage, CMediatorServerSession& aSession, const MediatorService::TCommand& aCommand); + + /** + * Prints a list of UIDs, depending on context either list of domains or categories + * @since S60 3.1 + * @param aMessage message + * @param aSession session + * @param aCategoryList category list + * @return void + */ + inline static void LogData(const RMessage2& aMessage, CMediatorServerSession& aSession, const MediatorService::RCategoryList& aCategoryList); + + /** + * Prints raw parameter data + * @since S60 3.1 + * @param aMessage message + * @param aSession session + * @param aData data + * @return void + */ + inline static void LogData(const RMessage2& aMessage, CMediatorServerSession& aSession, const TDesC8& aData); + + /** + * Prints status report for mediator + * @since S60 3.1 + * @return void + */ + inline static void LogStatus(); + + /** + * Prints the error information of the failed operation + * @since S60 3.1 + * @param aMessage message + * @param aError error identifier + * @return void + */ + inline static void LogError(const RMessage2& aMessage, TInt aError); + + /** + * Prints implementation information of the plugin + * @since S60 3.1 + * @param aImpl plugin implementation + * @return void + */ + inline static void LogPlugin(const CImplementationInformation* aImpl); + + /** + * C++ default destructor. + */ + ~RMediatorDebug(); + + private: + + /** + * C++ default constructor. + */ + RMediatorDebug(); + + /** + * Two-phased constructor. + */ + static RMediatorDebug* NewL(CMediatorServer* aMediator); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(CMediatorServer* aMediator); + + /** + * Checks whether the log for the message should be printed. + * @since S60 3.1 + * @param aMessage message + * @param aSession session + * @return TBool ETrue if log should be printed, otherwise EFalse. + */ + TBool ShouldPrintLogL(const RMessage2& aMessage, CMediatorServerSession& aSession); + + /** + * Prints debug information of the operation + * @since S60 3.1 + * @param aMessage message + * @param aSession session + * @return void + */ + void PrintOperationL(const RMessage2& aMessage, CMediatorServerSession& aSession); + + /** + * Prints the error information of the failed operation + * @since S60 3.1 + * @param aMessage message + * @param aError error identifier + * @return void + */ + void PrintErrorL(const RMessage2& aMessage, TInt aError); + + /** + * Prints status report for mediator + * @since S60 3.1 + * @return void + */ + void PrintServerStatusL(); + + /** + * Prints raw parameter data + * @since S60 3.1 + * @param aMessage message + * @param aSession session + * @param aData data + * @return void + */ + void PrintRawL(const RMessage2& aMessage, CMediatorServerSession& aSession, const TDesC8& aData); + + /** + * Prints a single event + * @since S60 3.1 + * @param aMessage message + * @param aSession session + * @param aEvent event + * @return void + */ + void PrintEventL(const RMessage2& aMessage, CMediatorServerSession& aSession, const MediatorService::TEvent& aEvent, TInt aEventNmbr); + + /** + * Prints event list + * @since S60 3.1 + * @param aMessage message + * @param aSession session + * @param aEventList event list + * @return void + */ + void PrintEventListL(const RMessage2& aMessage, CMediatorServerSession& aSession, const MediatorService::REventList& aList); + + /** + * Prints a single command + * @since S60 3.1 + * @param aMessage message + * @param aSession session + * @param aCommand command + * @return void + */ + void PrintCommandL(const RMessage2& aMessage, CMediatorServerSession& aSession, const MediatorService::TCommand& aCmd, TInt aCmdNmbr); + + /** + * Prints command list + * @since S60 3.1 + * @param aMessage message + * @param aSession session + * @param aCommandList command list + * @return void + */ + void PrintCommandListL(const RMessage2& aMessage, CMediatorServerSession& aSession, const MediatorService::RCommandList& aList); + + /** + * Prints a list of UIDs, depending on context either list of domains or categories + * @since S60 3.1 + * @param aMessage message + * @param aSession session + * @param aCategoryList category list + * @return void + */ + void PrintCategoryListL(const RMessage2& aMessage, CMediatorServerSession& aSession, const MediatorService::RCategoryList& aList); + + /** + * Prints implementation information of the plugin + * @since S60 3.1 + * @param aImpl plugin implementation + * @return void + */ + void PrintPluginL(const CImplementationInformation* aImpl); + + /** + * Prints the data stored in internal write buffer. + * @since S60 3.1 + * @param None + * @return void + */ + void PrintL(); + + /** + * Prints the text passed as parameter. Depending on configuration, + * the print target can console and/or file. + * @since S60 3.1 + * @param aText text to be printed + * @return void + */ + void Print(const TDesC& aText); + + /** + * Prints the current configuration of logging service. + * + * @since S60 3.1 + * @param None. + * @return None. + */ + void RMediatorDebug::PrintConfigurationL(); + + /** + * Handles internal error (usually leave due to buffer overflow), + * if one occurs + * @since S60 3.1 + * @param aError error code + * @return void + */ + void HandleInternalError(TInt aError); + + /** + * Returns whether operation has a category. + * @since S60 3.1 + * @param aMessage operation message + * @return ETrue if category exists for this operation. + */ + TBool HasCategory(const RMessage2& aMessage); + + /** + * Returns whether operation has a domain. + * @since S60 3.1 + * @param aMessage operation message + * @return ETrue if domain exists for this operation. + */ + TBool HasDomain(const RMessage2& aMessage); + + /** + * Returns string presentation of an operation. + * @since S60 3.1 + * @param aOperation operation code + * @return TPtrC string descriptor containing operation's name. + */ + TPtrC OperationString(TInt aOperation); + + /** + * Returns string presentation of an error code. + * @since S60 3.1 + * @param aError error code + * @return TPtrC string descriptor containing error's name. + */ + TPtrC ErrorString(TInt aError); + + /** + * Returns abbreviated (2-3 letters) string presentation of a capability. + * @since S60 3.1 + * @param aCapability capability + * @return TPtrC string descriptor containing abbreviated capability name. + */ + TPtrC CapabilityString( TCapability aCapability ); + + /** + * Appends list of capability names specifiec in capability set + * into internal print buffer. + * @since S60 3.1 + * @param aCaps capability set + * @return None. + */ + void AppendCapabilitiesL( const TCapabilitySet& aCaps ); + + /** + * Handles initialization error + * @since S60 3.1 + */ + static void HandleInitError( TInt aError ); + + /** + * Overflow handler for buffer overlow checking. + * + * + * @lib MediatorServer.exe + * @since S60 3.1 + */ + class TDebugOverflow : public TDesOverflow + { + /** + * From TDesOverflow. + * Handles overflow situation by resetting the buffer and + * raising a leave. + * @since S60 3.1 + * @param aBufferThatOverflowed buffer that caused overflow + * @return TPtrC string descriptor containing error's name. + */ + void Overflow(TDes& aBufferThatOverflowed) + { + aBufferThatOverflowed.Zero(); // reset buffer for new usage + + /* + This non-leaving method can leave because implementing this oveflow + check functionality would lead to more bloated and error-prone code. + This method will be only called from functions that can leave and the leaves + are trapped in the highest abstraction level of logging services. + */ + User::Leave(KErrOverflow); + } + }; + + private: // Data + + /** + * mediator server + * Not own. + */ + CMediatorServer* iMediator; + + /** + * filtering options for domains + */ + EDebugLogMode iDomainOptions; + + /** + * filtered domains + */ + RArray iDomains; + + /** + * filtering options for categories + */ + EDebugLogMode iCategoryOptions; + + /** + * filtered categories + */ + RArray iCategories; + + /** + * general logging options + */ + TInt iOptions; + + /** + * print buffer + */ + TBuf iBuf; + + /** + * overflow handler for internal buffers + */ + TDebugOverflow iOf; + + /** + * The only instance of this class + * Own. + */ + static RMediatorDebug* iInstance; + + /** + * File logger. + */ + RFileLogger iFileLogger; + + }; + +#include "MediatorDebug.inl" + +#endif // MEDIADOR_DEBUG_H + +// End of File \ No newline at end of file