Merge docml changeset with recent Nokia delivery.
/*
* Copyright (c) 2006-2007 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: ?Description
*
*/
#ifndef IRSESSIONLOGGER_H
#define IRSESSIONLOGGER_H
#include <f32file.h>
#include "irsessionparams.h"
#include "mirphoneinfoobserver.h"
class CIRSessionDb;
class CIRSessionLogger;
class CIRSettings;
class CIRNmsLogDb;
class CIRNmsLogger;
class CPhoneInfo;
class MIRLogDbStatusObserver;
/**
* This class is used to provide usage log, various function are to log session
* information as well as others, like browse log information. Session logs can be
* stored in internel data base for last 5 session, it is deleted only if the
* response is given. If more than 5 session is happening at any point of time
* first one based on session id is removed.
* When you end a session a gzip file is generated in private path
* This zip file has (xml file) session log in xml format
* This is single ton implementation use DeleteInstance to delete its
* instance
*
* @lib irsessionlog.lib
* @since S_60 3.0
*
*/
//============================ class declaration ========================
NONSHARABLE_CLASS(CIRReportGenerator) : public CObject,
public MIRPhoneInfoObserver
{
//member function
public:
/**
* Function: NewL
* Two phase constructor returns the instance of CIRReportGenerator
* this is a single ton implementation
* @note Deleting this object directly is not allowed. Please use Close().
* @note CleanupClosePushL(generator) must be used if the object is to be pushed onto cleanup stack.
* @returns instance of CIRReportGenerator
*/
IMPORT_C static CIRReportGenerator* OpenL();
private:
/**
* Function: ~CIRReportGenerator
* default destructor
*/
~CIRReportGenerator();
/**
* Function: ConstructL
* Two phase constructor
*/
void ConstructL();
/**
* Function: CIRReportGenerator
* default constructor
*/
CIRReportGenerator();
public:
/**
* Function: LogServerResult
* logs server connection result
* @param URL to which connection is attempted
* @param response from server
*/
IMPORT_C void LogServerResult(const TDesC& aUrl,TResponse aResult);
/**
* Function: LogSongRecog
* logs song recog
*/
IMPORT_C void LogSongRecog();
/**
* Function: UpdateCurrentBrowseNetwork
* logs network during browsing
* @param mcc+ mnc code of current network
*/
IMPORT_C void UpdateCurrentBrowseNetwork(TInt aNetwork);
/**
* Function: LogBrowse
* logs browse url and status information
* @param browse url
* @param status information
*/
IMPORT_C void LogBrowse(const TDesC8& aUrl,TInt aStatus);
/**
* Function: SessionStartedL
* starts a new session
*/
IMPORT_C void SessionStartedL();
/**
* Function: NmsLogStartedL
* starts a new nmslog
*/
IMPORT_C void NmsLogStartedL();
/**
* Function: SessionEnd
* marks the a session
*/
IMPORT_C void SessionEndL( TBool aForcedTermination );
/**
* Function: MarkSessionStart
* marks the a start of a session
*/
IMPORT_C void MarkSessionStart();
/**
* Function: HandleStopEvents
* function handle session state change events
* @param ETrue if session is progressing and EFalse if not progressing
*/
IMPORT_C void HandleStopEvents(TBool aIsSessionProgressing );
/**
* Function: ReStorePreviousSession
* restore the previous session
* @return ETrue if restoring is possible else returns EFalse
*/
IMPORT_C TBool ReStorePreviousSession();
/**
* Function: UpdateTerminatedBy
* updates the termination status
* @param terminated by information
*/
IMPORT_C void UpdateTerminatedBy(TTerminationStatus aTerminatedBy);
/**
* Function: UpdateConnectedFrom
* connected information is stored
* @param connected from information
*/
IMPORT_C void UpdateConnectedFrom(TConnectedFrom aConnectedFrom);
/**
* Function: BrowseUrl
* logs browse url and result
* @param URL to which connection is attempted
* @param response from server
*/
IMPORT_C void BrowseUrl(const TDesC& aBrowseUrl,TInt aStatus);
/**
* Function: UpdateChannelID
* updates the channel id
* @param channel id
*/
IMPORT_C void UpdateChannelID(TInt aChanneldID);
/**
* Function: UpdateCurrentNetwork
* updates the current network
* @param current network
*/
IMPORT_C void UpdateCurrentNetwork(TInt aCurrentNetwork);
/**
* Function: UpdateHomeOperator
* updates the home network
* @param home network
*/
IMPORT_C void UpdateHomeOperator(TInt aHomeOperator);
/**
* Function: UpdateConnectionType
* updates the connection type
* @param connection type
*/
IMPORT_C void UpdateConnectionType(const TDesC& aConnectionType);
/**
* Function : ReponseFromISDSObtained
* This function is called when session log is successfully sent
* removes all session log entries from sessiondb
*/
IMPORT_C void ReponseFromISDSObtained();
/**
* The following methods are for Nms Event Usage Logging
*/
/**
* Function: UpdateNmsCurrentNetwork
* logs network during Music Store launching
* @param mcc+ mnc code of current network
*/
IMPORT_C void UpdateNmsCurrentNetwork(TInt aNetwork);
/**
* Function: UpdateNmsHomeOperator
* logs network during Music Store launching
*/
IMPORT_C void UpdateNmsHomeOperator(TInt aNetwork);
/**
* Function: WriteNmsLogtoXmlL
* logs nmsEvents to Xml file
*/
IMPORT_C void WriteNmsLogtoXmlL();
/**
* Function: UpdateNmsType
* updates the Nms type
* @param Nms type
*/
IMPORT_C void UpdateNmsType(const TDesC& aNmsType);
/**
* Function: UpdateNmsChannelID
* updates the Nms channel id
* @param Nms channel id
*/
IMPORT_C void UpdateNmsChannelID(TInt aChanneldID);
/**
* The following methods are for Song Recog Event Usage Logging
*/
/**
* The following methods are used for sending out Usage Logging
*/
/**
* Function: SetDbStatusObserser
* @param Db Status Observer
*/
IMPORT_C void SetDbStatusObserser(MIRLogDbStatusObserver *aDbStatusObserver);
/**
* Function: ReportSent();
* notify that the usage report is just sent out to isds server
*/
IMPORT_C void ReportSent();
private:
/**
* Function: CollectSettingsData
* collect information during starting of session
* like irid, version information.
*/
void CollectSettingsData();
/**
* Function: WriteToXmlL
* gathers the information and generates sesion log file and zip file
* file will be stored in private path
*/
void WriteToXmlL();
/**
* Function: WriteSessionData
* gathers session log data and writes to XML file
* @param no of urls tried to connect in that particular session
*/
void WriteSessionData(TInt aIndex);
/**
* Function: WriteBrowseLog
* gathers browse log data and writes to XML file
*/
void WriteBrowseLog();
/**
* Function: ZipFileL
* generates the zip file from the input xml file
* output file is in gzip format and is stored in private path
*/
void ZipFileL();
/**
* Function: FormatDateTime
* formats the date time given in "%d-%d-%d %d:%d:%d GMT\n" format
* copies the result to a descriptor
* @param reference of descriptor to which the data is to be copied
* @param time to be copied
*/
void FormatDateTime(TDes& aBuffer,TDateTime aDateTime);
/**
* Function : WriteSessionLog
* Write buffer content to log file
*/
void WriteBufferToLogFile();
/**
* Function : UnForceSessionEndedL
* Write session log
* @param instance of session which ended
*/
void UnForceSessionEndedL( CIRSessionLogger* aSession );
/**
* Function : ForcedSessionEndedL
* Write session log
*/
void ForcedSessionEndedL();
/**
* The following methods are for Nms Event Usage Logging
*/
/**
* Function: WriteNmsLogData
* gathers Nmslog data and writes to XML file
* @param position of the log in the log data array
*/
void WriteNmsLogData(TInt aIndex);
/**
* From MIRPhoneInfoObserver
*/
void ImeiUpdatedL(const TDesC& aImei);
private:
/**
* opsetting instance
*/
CIRSettings* iSettingsData;
/**
* Phone Info
*/
CPhoneInfo* iPhoneInfo;
/**
* instance of session logger
*/
CIRSessionLogger* iSessionLog;
/**
* instance of nms logger
*/
CIRNmsLogger* iNmsLog;
/**
* instance of previous session
*/
CIRSessionLogger* iPreviousSessionLog;
/**
* instance of previous session
*/
CIRNmsLogger* iPreviousNmsLog;
/**
* instance of sessiondb
*/
CIRSessionDb* iLogSessionDb;
/**
* instance of NmsLogdb
*/
CIRNmsLogDb* iNmsLogDb;
/**
* instance of Db Status Observer
*/
MIRLogDbStatusObserver *iDbStatusObserver;
/**
* Indicate whether Nms Log Db has been updated
*/
TBool iNmsLogDbUpdated;
/**
* Indicate whether Session Log Db has been updated
*/
TBool iSessionLogDbUpdated;
/**
* Indicate whether usage report sent to isds server has received successful response
*/
TBool iUnComfirmedReportSent;
/**
* it holds the sessions
*/
CArrayPtrFlat<CIRSessionLogger> *iSessionData;
/**
* it holds the NmsLog
*/
CArrayPtrFlat<CIRNmsLogger> *iNmsLogData;
/**
* position in xml file
*/
TInt iFileWritePos;
/**
* stores the network during browsing
*/
TInt iCurrentBrowseNetwork;
/**
* Checks whether any error has occured while
* writing or retriving from data base
*/
TBool iSessionLogUpdationFailed;
/**
* Checks whether any error has occured while
* writing or retriving from data base
*/
TBool iNmsLogUpdationFailed;
/**
* Checks whether db creation is failure or success
*/
TBool iSessionDbCreationFailed;
/**
* Checks whether db creation is failure or success
*/
TBool iNmsDbCreationFailed;
/*
* sets when an nms event is generated
*/
TBool iNmsEventFlag;
/**
* log file
*/
RFile iLogFile;
/*
* file session
*/
RFs iFsSession;
/**
* unicode buffer
*/
TBuf<256> iUniCodeBuf; //Unicode
/**
* utf 8 buffer
*/
TBuf8<256> iUTF8Buffer; //UTF-8
/**
* version number
*/
TBuf<5> iReportVersion;
/**
* irid
*/
TBuf<30> iIRId;
/**
* Base64 encoded IMEI
*/
HBufC *iImeiBase64;
/**
* session database file
*/
TFileName iSessFile;
/**
* session database file
*/
TFileName iNmsLogFile;
/**
* log files path
*/
TFileName iLogFilePath;
/**
* instance of browse log
*/
TIRBrowseLog iRBrowseLog;
/**
* session start time
*/
TTime iSessionStartTime;
/**
* Timestamp
*/
TTime iSongRecogTimestamp;
/**
* time stamp
*/
TTime iBrowseLogTimeStamp;
/**
* date
*/
TDateTime iDate;
/**
* array for storing browse log
*/
RArray<TIRBrowseLog> iBrowseLog;
/**
* number of browse logs written to xml
*/
TInt iBrowseLogsCntToXml;
/**
* The following methods are for Nms Event Usage Logging
*/
/**
* Timestamp
*/
TTime iNmsTimestamp;
/**
* Type of Event (i.e., "find" or "launch")
*/
TInt iNmsType;
/**
* Nms Event Current netwrok type
*/
TInt iNmsCurrentNetwork;
/**
* Nms Event Home Operator
*/
TInt iNmsHomeOperator;
/**
* The number of times session end called
*/
TInt iSessionEndCalled;
};
#endif //IRSESSIONLOGGER_H