williamr@2: // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@2: // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #ifndef __LOGWRAP_H__ williamr@2: #define __LOGWRAP_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include // For CResourceFile williamr@2: #include williamr@2: #include williamr@2: williamr@2: #ifndef __WINC__ williamr@2: #include williamr@2: #endif williamr@2: williamr@2: /** williamr@2: String lengths williamr@2: @internalAll williamr@2: */ williamr@2: const TInt KLogMaxRemotePartyLength = 64; williamr@2: const TInt KLogMaxDirectionLength = 64; williamr@2: const TInt KLogMaxStatusLength = 64; williamr@2: const TInt KLogMaxSubjectLength = 64; williamr@2: const TInt KLogMaxDescriptionLength = 64; williamr@2: const TInt KLogMaxSharedStringLength = 64; williamr@2: const TInt KLogMaxNumberLength = 100; williamr@2: williamr@2: /** williamr@2: Big enough to contain any of the above strings williamr@2: Defines a modifiable buffer descriptor into which a standard string from the williamr@2: resource in the logwrap.dll resource file can be safely put. williamr@2: williamr@2: @see CLogClient::GetString() williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: typedef TBuf<64> TLogString; williamr@2: williamr@2: /** williamr@2: Type definitions williamr@2: The unique event ID associated with a log event. williamr@2: williamr@2: @see CLogEvent williamr@2: @see CLogViewDuplicate williamr@2: @see CLogViewRecent williamr@2: @see CLogClient williamr@2: @see CLogBase williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: typedef TInt32 TLogId; williamr@2: /** williamr@2: The duration type of an event. williamr@2: williamr@2: @see CLogEvent williamr@2: @see CLogFilter williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: typedef TInt8 TLogDurationType; williamr@2: typedef TInt8 TLogRecentList; williamr@2: typedef TUint16 TLogSize; williamr@2: typedef TUint8 TLogRecentSize; williamr@2: /** williamr@2: Duration of an event, expressed as the number of seconds since the time of williamr@2: the event. williamr@2: williamr@2: @see CLogEvent williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: typedef TUint32 TLogDuration; williamr@2: typedef TUint32 TLogAge; williamr@2: /** williamr@2: Link value relating a log event to an entity in another application. williamr@2: williamr@2: @see CLogEvent williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: typedef TUint32 TLogLink; williamr@2: typedef TInt16 TLogStringId; williamr@2: typedef TInt16 TLogTypeId; williamr@2: /** williamr@2: The duration type of an event. williamr@2: williamr@2: @see CLogEvent williamr@2: @see CLogFilter williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: typedef TInt8 TLogDurationType; williamr@2: /** williamr@2: Event flags. williamr@2: williamr@2: @see CLogEvent williamr@2: @see CLogFilter williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: typedef TUint8 TLogFlags; williamr@2: williamr@2: /** williamr@2: @internalAll williamr@2: */ williamr@2: typedef TUint32 TLogViewId; williamr@2: williamr@2: /** williamr@2: Limits williamr@2: @internalAll williamr@2: */ williamr@2: const TLogId KLogNullId = -1; williamr@2: const TLogDurationType KLogNullDurationType = -1; williamr@2: const TLogDuration KLogNullDuration = 0; williamr@2: const TLogLink KLogNullLink = 0; williamr@2: const TLogRecentList KLogNullRecentList = -1; williamr@2: const TLogStringId KLogNullStringId = -1; williamr@2: const TLogTypeId KLogNullTypeId = -1; williamr@2: const TLogFlags KLogNullFlags = 0; williamr@2: const TLogFlags KLogFlagsMask = 0xF; williamr@2: const TInt KLogFlagsCount = 4; williamr@2: const TInt KLogNeverUsedId = -2; williamr@2: williamr@2: /** williamr@2: @internalAll williamr@2: */ williamr@2: const TInt KLogActiveDoNotCompleteIfActive = KMaxTInt-1; williamr@2: williamr@2: //********************************** williamr@2: // CLogActive williamr@2: //********************************** williamr@2: williamr@2: class CLogActive : public CActive williamr@2: /** williamr@2: Common active object behaviour. williamr@2: williamr@2: This is an abstract class that defines common active object behaviour for williamr@2: the log engine classes. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C ~CLogActive(); williamr@2: // williamr@2: protected: williamr@2: IMPORT_C CLogActive(TInt aPriority); williamr@2: IMPORT_C void Queue(TRequestStatus& aStatus); williamr@2: IMPORT_C void Complete(TInt aStatus); williamr@2: IMPORT_C void DoCancel(); williamr@2: // williamr@2: private: williamr@2: // williamr@2: IMPORT_C void RunL(); williamr@2: virtual void DoRunL()=0; williamr@2: IMPORT_C virtual void DoComplete(TInt&); williamr@2: // williamr@2: private: williamr@2: TRequestStatus* iReport; williamr@2: }; williamr@2: williamr@2: //********************************** williamr@2: // CLogEvent williamr@2: //********************************** williamr@2: williamr@2: class CLogEvent : public CBase williamr@2: /** williamr@2: Encapsulates the details of an event. williamr@2: williamr@2: Where time is used, it must be specified as UTC rather than local time. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CLogEvent* NewL(); williamr@2: IMPORT_C ~CLogEvent(); williamr@2: // williamr@2: public: williamr@2: inline TLogId Id() const; williamr@2: inline void SetId(TLogId aId); williamr@2: // williamr@2: inline TUid EventType() const; williamr@2: inline void SetEventType(TUid aId); williamr@2: // williamr@2: inline const TDesC& RemoteParty() const; williamr@2: inline void SetRemoteParty(const TDesC& aRemote); williamr@2: // williamr@2: inline const TDesC& Direction() const; williamr@2: inline void SetDirection(const TDesC& aDirection); williamr@2: // williamr@2: inline const TTime& Time() const; williamr@2: inline void SetTime(const TTime& aTime); williamr@2: // williamr@2: inline TLogDurationType DurationType() const; williamr@2: inline void SetDurationType(TLogDurationType aDurationType); williamr@2: // williamr@2: inline TLogDuration Duration() const; williamr@2: inline void SetDuration(TLogDuration aDuration); williamr@2: // williamr@2: inline const TDesC& Status() const; williamr@2: inline void SetStatus(const TDesC& aStatus); williamr@2: // williamr@2: inline const TDesC& Subject() const; williamr@2: inline void SetSubject(const TDesC& aSubject); williamr@2: // williamr@2: inline const TDesC& Number() const; williamr@2: inline void SetNumber(const TDesC& aNumber); williamr@2: // williamr@2: inline TLogContactItemId Contact() const; williamr@2: inline void SetContact(TLogContactItemId aContact); williamr@2: // williamr@2: inline TLogLink Link() const; williamr@2: inline void SetLink(TLogLink aLink); williamr@2: // williamr@2: inline const TDesC& Description() const; williamr@2: inline void SetDescription(const TDesC& aDescription); williamr@2: // williamr@2: inline TLogFlags Flags() const; williamr@2: inline void SetFlags(TLogFlags aFlags); williamr@2: inline void ClearFlags(TLogFlags aFlags); williamr@2: // williamr@2: inline const TDesC8& Data() const; williamr@2: IMPORT_C void SetDataL(RReadStream& aStream, TInt aLen); williamr@2: IMPORT_C void SetDataL(const TDesC8& aData); williamr@2: // williamr@2: IMPORT_C void CopyL(const CLogEvent& aEvent); williamr@2: williamr@2: IMPORT_C void InternalizeL(RReadStream& aStream); williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream) const; williamr@2: williamr@2: // williamr@2: private: williamr@2: CLogEvent(); williamr@2: void ConstructL(); williamr@2: void InternalizeBufL(RReadStream& aStream, HBufC*& aDes); williamr@2: // williamr@2: private: williamr@2: TLogId iId; williamr@2: TUid iEventType; williamr@2: TTime iTime; williamr@2: TLogDurationType iDurationType; williamr@2: TLogDuration iDuration; williamr@2: TLogContactItemId iContact; williamr@2: TLogLink iLink; williamr@2: TLogFlags iFlags; williamr@2: HBufC* iDescription; williamr@2: HBufC* iRemoteParty; williamr@2: HBufC* iDirection; williamr@2: HBufC* iStatus; williamr@2: HBufC* iSubject; williamr@2: HBufC* iNumber; williamr@2: HBufC8* iData; williamr@2: }; williamr@2: williamr@2: //********************************** williamr@2: // CLogBase williamr@2: //********************************** williamr@2: williamr@2: class CLogBase : public CLogActive williamr@2: /** williamr@2: Base class for the log engine implementation. williamr@2: williamr@2: This class defines the interface that client code uses to perform simple actions williamr@2: on the log database. williamr@2: williamr@2: The class provides default implementations for the event handling functions. williamr@2: The Log Engine, i.e. an instance of CLogClient, is derived from this class williamr@2: and provides implementations for the event handling functions. williamr@2: williamr@2: The class also deals with some aspects of resource file handling. williamr@2: williamr@2: An instance of this class is constructed by the log wrapper, CLogWrapper, williamr@2: if the phone does not implement logging. williamr@2: williamr@2: An instance of this class is never constructed by clients. williamr@2: williamr@2: @see CLogClient williamr@2: @see CLogWrapper williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C CLogBase(TInt aPriority); williamr@2: IMPORT_C ~CLogBase(); williamr@2: // williamr@2: IMPORT_C virtual void GetEvent(CLogEvent& aEvent, TRequestStatus& aStatus); williamr@2: IMPORT_C virtual void AddEvent(CLogEvent& aEvent, TRequestStatus& aStatus); williamr@2: IMPORT_C virtual void ChangeEvent(const CLogEvent& aEvent, TRequestStatus& aStatus); williamr@2: IMPORT_C virtual void DeleteEvent(TLogId aId, TRequestStatus& aStatus); williamr@2: // williamr@2: IMPORT_C virtual TInt GetString(TDes& aString, TInt aId) const; williamr@2: // williamr@2: protected: williamr@2: IMPORT_C void LoadResourcesL(RFs& aFs); williamr@2: inline const CResourceFile* ResourceFile() const; williamr@2: // williamr@2: private: williamr@2: void DoRunL(); williamr@2: // williamr@2: private: williamr@2: CResourceFile* iResourceFile; williamr@2: williamr@2: // williamr@2: private: williamr@2: IMPORT_C virtual void CLogBase_Reserved1(); williamr@2: TAny* CLogBase_Reserved; williamr@2: }; williamr@2: williamr@2: //********************************** williamr@2: // CLogWrapper williamr@2: //********************************** williamr@2: williamr@2: class CLogWrapper : public CBase williamr@2: /** williamr@2: The log wrapper. williamr@2: williamr@2: As some UI variants do not use a Log Engine, the log wrapper provides a consistent williamr@2: interface to clients that need to work, without being changed, with multiple williamr@2: UI variants. williamr@2: williamr@2: The log wrapper is provided in its own DLL, the logwrap.dll. williamr@2: williamr@2: If a Log Engine is not installed on a phone, the log wrapper creates an instance williamr@2: of the CLogBase class, whose event handling requests complete with KErrNotSupported williamr@2: and whose functions return KErrNotSupported. williamr@2: williamr@2: If a Log Engine is installed on a phone, the log wrapper creates an instance williamr@2: of the CLogClient class, provided in a separate DLL, the logcli.dll . The williamr@2: CLogClient class derives from CLogBase and provides implementations for the williamr@2: event handling requests and functions. williamr@2: williamr@2: @see CLogBase williamr@2: @see CLogClient williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CLogWrapper* NewL(RFs& aFs, TInt aPriority = CActive::EPriorityStandard); williamr@2: IMPORT_C ~CLogWrapper(); williamr@2: // williamr@2: inline CLogBase& Log(); williamr@2: IMPORT_C TBool ClientAvailable() const; williamr@2: // williamr@2: private: williamr@2: CLogWrapper(); williamr@2: void ConstructL(RFs& aFs, TInt aPriority); williamr@2: // williamr@2: private: williamr@2: CLogBase* iBase; williamr@2: }; williamr@2: williamr@2: #include williamr@2: #include williamr@2: williamr@2: #endif