internetradio2.0/sessionloginc/irsessionlogger.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 19 Apr 2010 14:01:53 +0300
changeset 0 09774dfdd46b
child 12 608f67c22514
permissions -rw-r--r--
Revision: 201011 Kit: 201015

/*
* 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