--- a/internetradio2.0/sessionlogsrc/irsessionlogger.cpp Tue Jul 06 14:07:20 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1224 +0,0 @@
-/*
-* 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
-*
-*/
-
-
-#include <coemain.h>
-#include <ezgzip.h>
-#include <sysutil.h>
-#include <utf.h>
-#include <etel3rdparty.h>
-#include <imcvcodc.h>
-#include "irdebug.h"
-#include "irreportsettings.h"
-#include "irsessiondb.h"
-#include "irsessionlogger.h"
-#include "irsessionloggerutility.h"
-#include "irsettings.h"
-#include "irnmslogdb.h"
-#include "irnmslogger.h"
-#include "irdbstatusobserver.h"
-#include "irphoneinfo.h"
-
-const TUint KFieldPosition = 5;
-const TInt KAmpMaxLength = 5;
-const TInt KFormatBuffMaxLength = 6;
-const TInt KMaxUrlSize = 256;
-
-const TUint KSessionLogGranularity = 4;
-const TUint KNmsLogGranularity = 5;
-
-const TUint KSessionLogThreshold = 5; // Session Log Maximum 15
-const TUint KNmsLogThreshold = 5; // Nms Log Maximum 15
-
-// ---------------------------------------------------------------------------
-// Function: OpenL
-// Two phase constructor returns the instance of CIRReportGenerator
-// this is a single ton implementation
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CIRReportGenerator* CIRReportGenerator::OpenL()
- {
- IRLOG_DEBUG( "CIRReportGenerator::OpenL" );
- CIRReportGenerator* reportGenerator = reinterpret_cast<CIRReportGenerator*>(Dll::Tls());
-
- if (reportGenerator)
- {
- User::LeaveIfError(reportGenerator->Open());
- IRLOG_INFO( "CIRReportGenerator::OpenL - Opened singleton for new user." );
- }
- else
- {
- reportGenerator = new (ELeave) CIRReportGenerator;
- CleanupClosePushL(*reportGenerator);
- reportGenerator->ConstructL();
- User::LeaveIfError(Dll::SetTls(reportGenerator));
- CleanupStack::Pop(reportGenerator);
- IRLOG_INFO( "CIRSessionLogger::OpenL - Created the CIRReportGenerator singleton." );
- }
- IRLOG_DEBUG( "CIRReportGenerator::OpenL - Exiting." );
- return reportGenerator;
- }
-
-
-// ---------------------------------------------------------------------------
-// Function: ~CIRReportGenerator
-// default destructor
-// ---------------------------------------------------------------------------
-//
-CIRReportGenerator::~CIRReportGenerator()
- {
- IRLOG_DEBUG( "CIRReportGenerator::~CIRReportGenerator" );
-
- delete iImeiBase64;
- iImeiBase64 = NULL;
-
- delete iPhoneInfo;
- iPhoneInfo = NULL;
-
- //operation settings instance is removed
- if( iSettingsData )
- {
- iSettingsData->Close(); // delete is handled like this.
- }
-
- delete iSessionLog;
- delete iNmsLog;
-
- delete iLogSessionDb;
- delete iNmsLogDb;
-
- //session data is also removed
- if (iSessionData)
- {
- iSessionData->ResetAndDestroy();
- }
- delete iSessionData;
-
- //NmsLog data is also removed
- if (iNmsLogData)
- {
- iNmsLogData->ResetAndDestroy();
- }
- delete iNmsLogData;
-
- iBrowseLog.Close(); //browse log array is closed
- iLogFile.Close();
- //file session is closed
- iFsSession.Close();
- delete iPreviousSessionLog;
- delete iPreviousNmsLog;
- Dll::FreeTls();
- IRLOG_DEBUG( "CIRReportGenerator::~CIRReportGenerator - Exiting." );
- }
-
-// ---------------------------------------------------------------------------
-// Function: ConstructL
-// Two phase constructor
-// ---------------------------------------------------------------------------
-//
-void CIRReportGenerator::ConstructL()
- {
- IRLOG_DEBUG( "CIRReportGenerator::ConstructL" );
- iSessionEndCalled = 0;
- //file session is connected
- //Create the IROperation Settings Instance
- iSettingsData = CIRSettings::OpenL();
-
- User::LeaveIfError(iFsSession.Connect());
-
- //session logger is created
- iSessionLog = CIRSessionLogger::NewL();
- //session logger is created
- iNmsLog = CIRNmsLogger::NewL();
-
- //session db is created
- iLogSessionDb = CIRSessionDb::NewL();
- //NmsLog db is created
- iNmsLogDb = CIRNmsLogDb::NewL();
-
- iSessFile =iSettingsData->PrivatePath();
- iSessFile.Append(KSession);
- TInt error = iLogSessionDb->CreateDbConditional(iSessFile);
- if ( error )
- {
- iSessionDbCreationFailed = ETrue;
- }
- else
- {
- iSessionDbCreationFailed = EFalse;
- }
-
- iNmsLogFile =iSettingsData->PrivatePath();
- iNmsLogFile.Append(KNmsLog);
- TInt nmsError = iNmsLogDb->CreateDbConditional(iNmsLogFile);
- if ( nmsError )
- {
- iNmsDbCreationFailed = ETrue;
- }
- else
- {
- iNmsDbCreationFailed = EFalse;
- }
-
- //session log for five session are to be stored
- //and is stored in session data
- iSessionData = new (ELeave) CArrayPtrFlat<CIRSessionLogger>(KSessionLogGranularity);
- iNmsLogData = new (ELeave) CArrayPtrFlat<CIRNmsLogger>(KNmsLogGranularity);
-
- iPhoneInfo = CPhoneInfo::NewL(this);
- iPhoneInfo->StartUpdating();
-
- IRLOG_DEBUG( "CIRReportGenerator::ConstructL - Exiting." );
- }
-
-// ---------------------------------------------------------------------------
-// Function: CIRReportGenerator
-// default constructor
-// ---------------------------------------------------------------------------
-//
-CIRReportGenerator::CIRReportGenerator():iPhoneInfo(NULL),
- iDbStatusObserver(NULL),
- iNmsLogDbUpdated(EFalse),
- iSessionLogDbUpdated(EFalse),
- iUnComfirmedReportSent(EFalse),
- iSessionLogUpdationFailed(EFalse),
- iNmsLogUpdationFailed(EFalse),
- iSessionDbCreationFailed(EFalse),
- iNmsDbCreationFailed(EFalse),
- iImeiBase64(NULL)
- {
- //No Implementation
- }
-
-// ---------------------------------------------------------------------------
-// Function: LogServerResult
-// logs server connection result
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::LogServerResult(const TDesC& aUrl,TResponse aResult)
- {
- iSessionLog->LogServerResult(aUrl,aResult);
- }
-
-// ---------------------------------------------------------------------------
-// Function: LogSongRecog
-// logs song recog
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::LogSongRecog()
- {
- //taking the session start time in GMT
- iSongRecogTimestamp.UniversalTime();
- TTimeIntervalSeconds offset(iSettingsData->TimeCorrection());
- iSongRecogTimestamp -= offset;
- iDate = iSongRecogTimestamp.DateTime();
- TBuf<64> songRecogTimestamp;
- FormatDateTime(songRecogTimestamp,iDate);
- iSessionLog->LogSongRecog(songRecogTimestamp);
- }
-
-// ---------------------------------------------------------------------------
-// Function: UpdateCurrentBrowseNetwork
-// logs network browsing
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::UpdateCurrentBrowseNetwork(TInt aNetwork)
- {
- iCurrentBrowseNetwork = aNetwork;
- }
-
-// ---------------------------------------------------------------------------
-// Function: LogBrowse
-// logs browse url and status information
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::LogBrowse(const TDesC8& aUrl,TInt aStatus)
- {
- IRLOG_DEBUG( "CIRReportGenerator::LogBrowse" );
- //browse url is copied
- iRBrowseLog.iBrowseUrl.Copy(aUrl);
- //time stamp in GMT is onbtained
- iBrowseLogTimeStamp.UniversalTime();
-
- TInt time_val = 0;
- time_val = iSettingsData->TimeCorrection();
- TTimeIntervalSeconds offset(time_val);
-
- iBrowseLogTimeStamp -= offset;
- iDate = iBrowseLogTimeStamp.DateTime();
- //formated
- FormatDateTime(iRBrowseLog.iTimeStamp,iDate);
- _LIT(KFormat,"%d");
- (iRBrowseLog.iCurrentNetwork).Format(KFormat,
- iCurrentBrowseNetwork);
- //status is stored
- iRBrowseLog.iStatus = aStatus;
- TRAP_IGNORE(iBrowseLog.AppendL(iRBrowseLog))
- IRLOG_DEBUG( "CIRReportGenerator::LogBrowse - Exiting." );
- }
-
-// ---------------------------------------------------------------------------
-// Function: SessionStartedL
-// starts a new session
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::SessionStartedL()
- {
- IRLOG_DEBUG( "CIRReportGenerator::SessionStartedL" );
- //gets the session id for new session
- iSessionLog->ResetResource();
-
- iSessionLog->UpdateSessionId(iSettingsData->GetLogRunningNo());
- iSettingsData->SetLogRunningNoL();
- iFileWritePos = 0;
-
- iLogFilePath = iSettingsData->PrivatePath();
- iLogFilePath.Append(KLogFileName);
- //taking the session start time in GMT
- iSessionStartTime.UniversalTime();
- iSessionLog->UpdateSessionStartGMTTime();
- TTimeIntervalSeconds offset(iSettingsData->TimeCorrection());
- iSessionStartTime -= offset;
- iDate = iSessionStartTime.DateTime();
- FormatDateTime(iSessionLog->StartTime(),iDate);
- iSessionLog->UnMarkSession();
- //collect the neccessary information
- CollectSettingsData();
- iSessionLogUpdationFailed = EFalse;
- //start adding the intial information in db
- IRLOG_DEBUG( "CIRReportGenerator::SessionStartedL - Exiting." );
- }
-// ---------------------------------------------------------------------------
-// Function: NmsLogStartedL
-// starts a new nmslog
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::NmsLogStartedL()
- {
- IRLOG_DEBUG( "CIRReportGenerator::SessionStartedL" );
- iNmsTimestamp.UniversalTime();
- TInt time_val = 0;
- time_val = iSettingsData->TimeCorrection();
- TTimeIntervalSeconds offset(time_val);
-
- iNmsTimestamp -= offset;
- iDate = iNmsTimestamp.DateTime();
- //formated
- FormatDateTime(iNmsLog->StartTime(),iDate);
- iNmsLogUpdationFailed = EFalse;
- //start adding the intial information in db
- IRLOG_DEBUG( "CIRReportGenerator::SessionStartedL - Exiting." );
- }
-
-// ---------------------------------------------------------------------------
-// Function: SessionEnd
-// marks the a session
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::SessionEndL( TBool aForcedTermination )
- {
- IRLOG_DEBUG( "CIRReportGenerator::SessionEndL" );
- iSessionEndCalled++;
- //session end
- if( aForcedTermination )
- {
- //forced ending of session log
- ForcedSessionEndedL();
- }
- else
- {
- //unforced ending of session log
- iSessionLog->EndLogging();
- UnForceSessionEndedL(iSessionLog);
- }
-
- IRLOG_DEBUG( "CIRReportGenerator::SessionEndL - Exiting." );
- }
-
-// ---------------------------------------------------------------------------
-// Function: UpdateTerminatedBy
-// updates the termination status
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::UpdateTerminatedBy(TTerminationStatus
- aTerminatedBy)
- {
- IRLOG_DEBUG( "CIRReportGenerator::UpdateTerminatedBy" );
- iSessionLog->UpdateTerminationStatus(aTerminatedBy);
- }
-
-// ---------------------------------------------------------------------------
-// Function: GetConnectedFrom
-// connected information is stored
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::UpdateConnectedFrom(TConnectedFrom aConnectedFrom)
- {
- IRLOG_DEBUG( "CIRReportGenerator::UpdateConnectedFrom" );
- iSessionLog->GetConnectedFrom(aConnectedFrom);
- }
-
-// ---------------------------------------------------------------------------
-// Function: BrowseUrl
-// logs browse url and result
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::BrowseUrl(const TDesC& aBrowseUrl,
- TInt aStatus)
- {
- IRLOG_DEBUG( "CIRReportGenerator::BrowseUrl" );
- _LIT(KAmp,"&");
- TBuf8<KAmpMaxLength> amp;
- amp.Copy(KAmp);
- TBuf8<KMaxUrlSize> url;
- url.Copy(aBrowseUrl);
- _LIT8(KAmpnd,"&");
- TInt pos = url.Find(KAmpnd);
- if(pos > 0)
- {
- url.Replace(pos,1,amp);
- }
- LogBrowse(url,aStatus);
- IRLOG_DEBUG( "CIRReportGenerator::BrowseUrl - Exiting." );
- }
-
-// ---------------------------------------------------------------------------
-// Function: UpdateChannelID
-// updates the channel id
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::UpdateChannelID(TInt aChanneldID)
- {
- IRLOG_DEBUG( "CIRReportGenerator::UpdateChannelID" );
- iSessionLog->UpdateChannelID(aChanneldID);
- }
-
-// ---------------------------------------------------------------------------
-// Function: UpdateCurrentNetwork
-// updates the current network
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::UpdateCurrentNetwork(TInt aCurrentNetwork)
- {
- IRLOG_DEBUG( "CIRReportGenerator::UpdateCurrentNetwork" );
- iSessionLog->UpdateCurrentNetwork(aCurrentNetwork);
- }
-
-// ---------------------------------------------------------------------------
-// Function: UpdateHomeOperator
-// updates the home network
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::UpdateHomeOperator(TInt aHomeOperator)
- {
- IRLOG_DEBUG( "CIRReportGenerator::UpdateHomeOperator" );
- iSessionLog->UpdateHomeOperator(aHomeOperator);
- }
-
-// ---------------------------------------------------------------------------
-// Function: MarkSessionStart
-// updates the termination status
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::MarkSessionStart()
- {
- iSessionStartTime.UniversalTime();
-
- TInt time_val = 0;
- time_val = iSettingsData->TimeCorrection();
- TTimeIntervalSeconds offset(time_val);
-
- iSessionStartTime -= offset;
- iDate = iSessionStartTime.DateTime();
- FormatDateTime(iSessionLog->StartTime(),iDate);
- //setting session start time
- iSessionLog->UpdateSessionStartGMTTime();
- iSessionLog->MarkSession();
- if( iPreviousSessionLog )
- {
- //if previous session exist it added to the log
- TRAP_IGNORE( UnForceSessionEndedL(iPreviousSessionLog) )
- delete iPreviousSessionLog;
- iPreviousSessionLog = NULL;
- }
- }
-
-// ---------------------------------------------------------------------------
-// Function: HandleStopEvents
-// function handles session state changes
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::HandleStopEvents(TBool aIsSessionProgressing )
- {
- IRLOG_DEBUG( "CIRReportGenerator::HandleStopEvents" );
- if( !aIsSessionProgressing )
- {
- iSessionLog->HandleStopEvents();
- }
- else
- {
- iSessionLog->HandleStartEvents();
- }
- IRLOG_DEBUG( "CIRReportGenerator::HandleStopEvents - Exiting." );
- }
-
-// ---------------------------------------------------------------------------
-// Function: ReStorePreviousSession
-// restore the previous session
-// ---------------------------------------------------------------------------
-//
-EXPORT_C TBool CIRReportGenerator::ReStorePreviousSession()
- {
- if( iPreviousSessionLog )
- {
- //if previous session exist that is restored
- //ETrue is returned.
- iSessionLog->GetBackedUp(*iPreviousSessionLog);
- delete iPreviousSessionLog;
- iPreviousSessionLog = NULL;
- return ETrue;
- }
- else
- {
- //if previous session doesn't exist EFalse is returned
- return EFalse;
- }
- }
-
-// ---------------------------------------------------------------------------
-// Function: UpdateConnectionType
-// updates the connection type
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::UpdateConnectionType(const TDesC&
- aConnectionType)
- {
- IRLOG_DEBUG( "CIRReportGenerator::UpdateConnectionType" );
- iSessionLog->UpdateConnectionType(aConnectionType);
- }
-
-// ---------------------------------------------------------------------------
-// Function: UpdateNmsType
-// updates the connection type
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::UpdateNmsType(const TDesC& aNmsType)
- {
- IRLOG_DEBUG( "CIRReportGenerator::UpdateNmsType" );
- iNmsLog->UpdateNmsType(aNmsType);
- }
-
-// ---------------------------------------------------------------------------
-// Function: SetDbStatusObserser
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::SetDbStatusObserser(MIRLogDbStatusObserver *aDbStatusObserver)
-{
- iDbStatusObserver = aDbStatusObserver;
-}
-
-// ---------------------------------------------------------------------------
-// Function: reportSent
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::ReportSent()
-{
- iUnComfirmedReportSent = ETrue;
-}
-
-
-// ---------------------------------------------------------------------------
-// Function : ReponseFromISDSObtained
-// This function is called when session log is successfully sent
-// removes all session log entries from sessiondb
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::ReponseFromISDSObtained()
- {
- IRLOG_DEBUG( "CIRReportGenerator::ReponseFromISDSObtained" );
- iUnComfirmedReportSent = EFalse;
- TRAP_IGNORE(iLogSessionDb->DeleteAllSessionL())
- TRAP_IGNORE(iNmsLogDb->DeleteAllNmsLogL())
- for(TInt i = 0; i < iBrowseLogsCntToXml; i++)
- {
- if(iBrowseLog.Count() > 0)
- iBrowseLog.Remove(0);
- }
- }
-
-// ---------------------------------------------------------------------------
-// Function: CollectSettingsData
-// collect information during starting of session
-// like irid, version information.
-// ---------------------------------------------------------------------------
-//
-void CIRReportGenerator::CollectSettingsData()
- {
- IRLOG_DEBUG( "CIRReportGenerator::CollectSettingsData" );
- _LIT(KData,"1.0");
- _LIT(KIRID,"NO IRID");
-
-
-
- //gets irid from opsetting
- TRAP_IGNORE( iIRId.Copy(iSettingsData->GetIRIDL()) );
- //if length of irid is zero "no irid" is assigned
- if((iIRId).Length() == 0)
- {
- iIRId.Copy(KIRID);
- }
- //version copied
- iReportVersion.Copy(KData);
- IRLOG_DEBUG( "CIRReportGenerator::CollectSettingsData - Exiting." );
- }
-
-// ---------------------------------------------------------------------------
-// Function: WriteToXmlL
-// gathers the information and generates sesion log file and zip file
-// file will be stored in private path
-// ---------------------------------------------------------------------------
-//
-void CIRReportGenerator::WriteToXmlL()
- {
- IRLOG_DEBUG( "CIRReportGenerator::WriteToXmlL" );
- //1. log file is created
- User::LeaveIfError(iLogFile.Replace(iFsSession,iLogFilePath,EFileWrite));
- iLogFile.Seek(ESeekStart,iFileWritePos);
-
-
- //2. Write file header.
- iUniCodeBuf.Copy(KXmlHeader);
- CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
- WriteBufferToLogFile();
-
- //3. Write Version + IRID + IMEI
- iUniCodeBuf.Copy(KRPSTARTTAG);
- iFileWritePos = iUniCodeBuf.Find(KField);
- //3.1 Write Version
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,iReportVersion);
- iFileWritePos = iUniCodeBuf.Find(KField);
- //3.2 Write IRID
- RBuf tempIRID;
- TRAP_IGNORE( tempIRID.Create(iSettingsData->GetIRIDL()) );
- if((tempIRID).Length() != 0)
- {
- iIRId.Copy(tempIRID);
- }
- tempIRID.Close();
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,iIRId);
- //3.3 Write IMEI
- iFileWritePos = iUniCodeBuf.Find(KField);
- if(NULL == iImeiBase64)
- {
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,KNullDesC);
- }
- else
- {
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,*iImeiBase64);
- }
- CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
- WriteBufferToLogFile();
-
- //4. Write session log
- if(!iSessionLogUpdationFailed)
- {
- for(TInt count = 0; count<(iSessionData->Count()); count++)
- {
- WriteSessionData(count);
- }
- }
-
- //5. Write browse log
- WriteBrowseLog();
-
- //6. Write nms log
- if(!iNmsLogUpdationFailed)
- {
- iUniCodeBuf.Copy(KNMSLOGSTARTTAG);
- CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
- WriteBufferToLogFile();
-
- for(TInt count = 0; count<(iNmsLogData->Count()); count++)
- {
- WriteNmsLogData(count);
- }
- iUniCodeBuf.Copy(KNMSLOGENDTAG);
- CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
- WriteBufferToLogFile();
- }
-
- //7. Write file ending
- iUniCodeBuf.Copy(KRPENDTAG);
- CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
- WriteBufferToLogFile();
-
- iLogFile.Close();
- ZipFileL();
-
- iBrowseLogsCntToXml = iBrowseLog.Count();
-
- IRLOG_DEBUG( "CIRReportGenerator::WriteToXmlL - Exiting." );
- }
-// ---------------------------------------------------------------------------
-// Function: WriteNmsLogtoXmlL
-// logs nmsEvents to Xml file
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::WriteNmsLogtoXmlL()
- {
- IRLOG_DEBUG( "CIRReportGenerator::WriteNmsLogtoXmlL" );
- if(iSessionEndCalled == 0)
- {
- ForcedSessionEndedL();
- iSessionEndCalled++;
- }
- iNmsEventFlag = ETrue;
- UnForceSessionEndedL(iSessionLog);
- iNmsEventFlag = EFalse;
- IRLOG_DEBUG( "CIRReportGenerator::WriteNmsLogtoXmlL - Leaving" );
- }
-
-// ---------------------------------------------------------------------------
-// Function: WriteSessionData
-// gathers session log data and writes to XML file
-// ---------------------------------------------------------------------------
-//
-void CIRReportGenerator::WriteSessionData(TInt aIndex)
- {
- IRLOG_DEBUG( "CIRReportGenerator::WriteSessionData" );
-
- ASSERT( aIndex >= 0 && aIndex < iSessionData->Count() );
- TBuf<KFormatBuffMaxLength> FormatBuff;
- _LIT(KConvert,"%d");
-
- // 1. session start time is copied
- iUniCodeBuf.Copy(KSESSIONSTARTTAG);
- iFileWritePos = iUniCodeBuf.Find(KField);
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,(iSessionData->
- At(aIndex))->StartTime());
-
- // 2. session duration is copied
- iFileWritePos = iUniCodeBuf.Find(KField);
- TInt duration = (iSessionData->At(aIndex))->SessionDuration();
- FormatBuff.Format(KConvert,duration);
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,FormatBuff);
-
- // 3. termination status is copied
- iFileWritePos = iUniCodeBuf.Find(KField);
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,(iSessionData->
- At(aIndex))->TerminationStatus());
-
- // 4. connected from information is copied
- iFileWritePos = iUniCodeBuf.Find(KField);
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,(iSessionData->
- At(aIndex))->ConnectedFrom());
-
- // 5. session id is copied
- iFileWritePos = iUniCodeBuf.Find(KField);
- FormatBuff.Format(KConvert,(iSessionData->At(aIndex))->SessionId());
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,FormatBuff);
-
- // 6. channel id is copied
- iFileWritePos = iUniCodeBuf.Find(KField);
- FormatBuff.Format(KConvert,(iSessionData->At(aIndex))->ChannelID());
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,FormatBuff);
- CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
-
- WriteBufferToLogFile();
-
- // 8. Write ServerResult
- TInt ServerResultCount = (iSessionData->At(aIndex))->
- SessionData().Count();
- for(TInt count=0; count < ServerResultCount;count++)
- {
- //channel server urls are copied for the session
- iUniCodeBuf.Copy(KSERVERRESULTTAG);
- iFileWritePos = iUniCodeBuf.Find(KField);
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,(iSessionData->
- At(aIndex)->SessionData()[count].iServerUrl));
-
- //status is copied
- iFileWritePos = iUniCodeBuf.Find(KField);
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,(iSessionData->
- At(aIndex)->SessionData()[count].iServerResult));
- CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
- //writting the information to the xml file
- WriteBufferToLogFile();
- }
-
- // 9. connection type is copied
- iUniCodeBuf.Copy(KCONNECTIONTAG);
- iFileWritePos = iUniCodeBuf.Find(KField);
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,(iSessionData->
- At(aIndex))->ConnectionType());
-
- // 10. current network is copied
- iFileWritePos = iUniCodeBuf.Find(KField);
- FormatBuff.Format(KConvert,(iSessionData->At(aIndex))->
- CurrentNetwork());
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,FormatBuff);
-
- // 11. home operator is copied
- iFileWritePos = iUniCodeBuf.Find(KField);
- FormatBuff.Format(KConvert,(iSessionData->At(aIndex))->HomeOperator());
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,FormatBuff);
- CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
-
- WriteBufferToLogFile();
-
- // 12. Write Song Recog Log
- iUniCodeBuf.Copy(KSONGRECOGLOGSTARTTAG);
- CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
- WriteBufferToLogFile();
-
- TInt songRecogLogCount = (iSessionData->At(aIndex))->
- SongRecogLog().Count();
- for(TInt count=0; count < songRecogLogCount; count++)
- {
- iUniCodeBuf.Copy(KSONGRECOGEVENTTAG);
- iFileWritePos = iUniCodeBuf.Find(KField);
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,(iSessionData->
- At(aIndex)->SongRecogLog()[count].iTimeStamp));
- CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
- WriteBufferToLogFile();
- }
-
- iUniCodeBuf.Copy(KSONGRECOGLOGENDTAG);
- CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
- WriteBufferToLogFile();
-
- // write ending tag </session>
- iUniCodeBuf.Copy(KSESSIONENDTAG);
- //tags are also written into xml file
- CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
- WriteBufferToLogFile();
- IRLOG_DEBUG( "CIRReportGenerator::WriteSessionData - Exiting." );
- }
-
-// ---------------------------------------------------------------------------
-// Function: WriteBrowseLog
-// gathers browse log data and writes to XML file
-// ---------------------------------------------------------------------------
-//
- void CIRReportGenerator::WriteBrowseLog()
- {
- IRLOG_DEBUG( "CIRReportGenerator::WriteBrowseLog" );
- //browse log
- //browse log tag is written
- iUniCodeBuf.Copy(KBROWSESTARTTAG);
- CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
- WriteBufferToLogFile();
- for(TInt count = 0; count < (iBrowseLog.Count());count++)
- {
- //browse log url is copied
- iUniCodeBuf.Copy(KBROWSETAG);
- iFileWritePos = iUniCodeBuf.Find(KField);
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,
- (iBrowseLog).operator[](count).iBrowseUrl);
- iFileWritePos = iUniCodeBuf.Find(KField);
- //browse log time stamp is copied
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,
- (iBrowseLog).operator[](count).iTimeStamp);
- iFileWritePos = iUniCodeBuf.Find(KField);
- //browse log current network is copied
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,
- (iBrowseLog).operator[](count).iCurrentNetwork);
- CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
- //browse log is written to xml
- WriteBufferToLogFile();
- }
-
- //browse log end tag is copied
- iUniCodeBuf.Copy(KBROWSEENDTAG);
- CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
- WriteBufferToLogFile();
- IRLOG_DEBUG( "CIRReportGenerator::WriteBrowseLog - Exiting." );
- }
-
-// ---------------------------------------------------------------------------
-// Function: ZipFileL
-// generates the zip file from the input xml file
-// output file is in gzip format and is stored in private path
-// ---------------------------------------------------------------------------
-//
- void CIRReportGenerator::ZipFileL()
- {
- IRLOG_DEBUG( "CIRReportGenerator::ZipFileL" );
- //input file is the xml file in private path and output is a gzip file stored
- //private path
- //xml file
- RFile iplogfile;
- //getting path of zip file
- TFileName gzipfilepath = iSessionLog->FileName();
- gzipfilepath.Append(KGZipLogFileName);
-
- iLogFilePath = iSettingsData->PrivatePath();
- iLogFilePath.Append(KLogFileName);
-
- //input file is opened
- TInt error = iplogfile.Open(iFsSession,iLogFilePath,EFileStream | EFileRead);
- CleanupClosePushL( iplogfile );
-
- if( KErrNone != error )
- {
- User::LeaveIfError(error);
- }
-
- //generating zip file
-
- TInt fileSize(0);
- TInt err = iplogfile.Size( fileSize );
-
- if(!err)
- {
- TParse zipParse;
- zipParse.Set( iLogFilePath, NULL, NULL );
-
- TPtrC zipDrive = zipParse.Drive();
-
- TChar driveChar = zipDrive[0];
- TInt driveNum(0);
- RFs::CharToDrive( driveChar, driveNum );
-
- TDriveInfo driveInfo;
- TInt driveErr = iplogfile.Drive( driveNum, driveInfo );
- if( !driveErr
- && driveNum != EDriveZ
- && !SysUtil::DiskSpaceBelowCriticalLevelL(
- &CCoeEnv::Static()->FsSession(), iUTF8Buffer.Size(), driveNum ) )
- {
- // disk space is not below critical level
- // Next generate the zip file
- CEZFileToGZip* zip = CEZFileToGZip::NewLC(iFsSession,gzipfilepath, iplogfile);
- while(zip->DeflateL())
- {
- }
- CleanupStack::PopAndDestroy(zip);
- }
- else
- {
- // disk space is below critical level
- // Do not generate the zip file
- }
- }
-
- //file is closed
- CleanupStack::PopAndDestroy(); // iplogfile
- IRLOG_DEBUG( "CIRReportGenerator::ZipFileL - Exiting." );
- }
-
-// ---------------------------------------------------------------------------
-// Function: FormatDateTime
-// formats the date time given in "%d-%d-%d %d:%d:%d GMT\n" format
-// copies the result to a descriptor
-// ---------------------------------------------------------------------------
-//
-void CIRReportGenerator::FormatDateTime(TDes& aBuffer,TDateTime aDateTime)
- {
- IRLOG_DEBUG( "CIRReportGenerator::FormatDateTime" );
- _LIT(KFormatTxt,"%d-%d-%d %d:%d:%d GMT\n");
- aBuffer.Format(KFormatTxt,aDateTime.Year(),TInt(aDateTime.Month()+1),
- //Format the month as a TInt to preserve locale independence
- //aDateTime.Day()+1,
- aDateTime.Day()+1,
- // Day and month ranges begin at zero (0-30 and 0-11),
- // so add one when formatting
- aDateTime.Hour(), aDateTime.Minute(), aDateTime.Second()
- //aDateTime.MicroSecond()
- );
- IRLOG_DEBUG( "CIRReportGenerator::FormatDateTime - Exiting." );
- }
-
-// ---------------------------------------------------------------------------
-// Function: WriteBufferToLogFile
-// Writes the content of iUTF8Buffer to iLogFile
-// ---------------------------------------------------------------------------
-//
-void CIRReportGenerator::WriteBufferToLogFile()
- {
- IRLOG_DEBUG( "CIRReportGenerator::WriteBufferToLogFile" );
- // Get the drive where iLogFile is located.
-
- TInt driveNumber(0);
- TDriveInfo driveInfo;
-
- TInt err = iLogFile.Drive( driveNumber, driveInfo );
-
- // Write the log file only if:
- // Drive was fetched successflly,
- // the drive is not Z
- // and free disk space is not below critical level (128kB)
-
- if( !err && driveNumber!=EDriveZ )
- {
- TBool ret = ETrue;
- TRAP_IGNORE( ret = SysUtil::DiskSpaceBelowCriticalLevelL(
- &CCoeEnv::Static()->FsSession(),iUTF8Buffer.Size(), driveNumber ))
- if( !ret )
- {
- iLogFile.Write( iUTF8Buffer );
- }
- else
- {
- // Do not write the session log.
- }
- }
- else
- {
- // Do not write the session log.
- }
- IRLOG_DEBUG( "CIRReportGenerator::WriteBufferToLogFile - Exiting." );
- }
-
-// ---------------------------------------------------------------------------
-// Function: UnForceSessionEndedL
-// Handles Unforced end of the session
-// ---------------------------------------------------------------------------
-//
-void CIRReportGenerator::UnForceSessionEndedL( CIRSessionLogger* aSession )
- {
- // 1. retrieve session log from db
- if(iSessionDbCreationFailed)
- {
- iSessionLogUpdationFailed = ETrue;
- }
- else
- {
- if(iNmsEventFlag)
- {
- TRAPD(error,
- //count is stored
- iLogSessionDb->GetAllSessionL(*iSessionData);
- );
- if(error)
- {
- iSessionLogUpdationFailed = ETrue;
- }
- }
- else
- {
- TRAPD( error,
- //loads the information into the db at the end of the session
- iLogSessionDb->AddSessionStartL(*aSession);
- //count is stored
- iLogSessionDb->GetAllSessionL(*iSessionData);
- );
- if(error)
- {
- iSessionLogUpdationFailed = ETrue;
- }
- else
- {
- TInt count = iSessionData->Count();
- if((count>0) && (count%KSessionLogThreshold == 0))
- {
- iSessionLogDbUpdated = ETrue;
- }
- }
- }
- }
-
- // 2. retrieve nms log from db
- if(iNmsDbCreationFailed)
- {
- iNmsLogUpdationFailed = ETrue;
- }
- else
- {
- if(!iNmsEventFlag)
- {
- TRAPD( error, iNmsLogDb->GetAllNmsLogL(*iNmsLogData) );
- if(error)
- {
- iNmsLogUpdationFailed = ETrue;
- }
- }
- else
- {
- TRAPD( error,
- //loads the information into the db at the end of the session
- iNmsLogDb->AddNmsLogStartL(*iNmsLog);
- //count is stored
- iNmsLogDb->GetAllNmsLogL(*iNmsLogData);
- );
- if(error)
- {
- iNmsLogUpdationFailed = ETrue;
- }
- else
- {
- TInt count = iNmsLogData->Count();
- if((count>0) && (count%KNmsLogThreshold == 0))
- {
- iNmsLogDbUpdated = ETrue;
- }
- }
- }
- }
-
- //xml file is created and is zipped
- WriteToXmlL();
-
- if( iDbStatusObserver &&
- ( iNmsLogDbUpdated ||
- iSessionLogDbUpdated ||
- iUnComfirmedReportSent
- )
- )
- {
- iDbStatusObserver->LogDbNeedFlush();
- iNmsLogDbUpdated = EFalse;
- iSessionLogDbUpdated = EFalse;
- }
- }
-
-// ---------------------------------------------------------------------------
-// Function: ForcedSessionEndedL
-// Handles forced end of the session
-// ---------------------------------------------------------------------------
-//
-void CIRReportGenerator::ForcedSessionEndedL()
- {
- iSessionLog->EndLogging();
- iPreviousSessionLog = CIRSessionLogger::NewL();
- iPreviousSessionLog->GetBackedUp(*iSessionLog);
- iPreviousNmsLog = CIRNmsLogger::NewL();
- iPreviousNmsLog->GetBackedUp(*iNmsLog);
- }
-
-/**
- * The following methods are for Nms Event Usage Logging
- */
-// ---------------------------------------------------------------------------
-// Function: UpdateNmsCurrentNetwork
-// logs network during Music Store launching
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::UpdateNmsCurrentNetwork(TInt aNetwork)
- {
- iNmsLog->UpdateCurrentNetwork(aNetwork);
- }
-
-// ---------------------------------------------------------------------------
-// Function: UpdateNmsHomeOperator
-// logs network during Music Store Launching
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::UpdateNmsHomeOperator(TInt aNetwork)
- {
- iNmsLog->UpdateHomeOperator(aNetwork);
- }
-
-// ---------------------------------------------------------------------------
-// Function: UpdateNmsChannelID
-// updates the channel id
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRReportGenerator::UpdateNmsChannelID(TInt aChanneldID)
- {
- IRLOG_DEBUG( "CIRReportGenerator::UpdateNmsChannelID" );
- iNmsLog->UpdateChannelID(aChanneldID);
- }
-
-// ---------------------------------------------------------------------------
-// Function: WriteNmsLogData
-// gathers Nmslog data and writes to XML file
-// ---------------------------------------------------------------------------
-//
-void CIRReportGenerator::WriteNmsLogData(TInt aIndex)
- {
- IRLOG_DEBUG( "CIRReportGenerator::WriteNmsLogData" );
- TBuf<KFormatBuffMaxLength> FormatBuff;
- _LIT(KConvert,"%d");
-
- //NmsEvent Tag is written
- iUniCodeBuf.Copy(KNMSEVENTTAG);
-
- iFileWritePos = iUniCodeBuf.Find(KField);
- //Nms Event timestamp is copied
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,(iNmsLogData->
- At(aIndex))->StartTime());
-
- //channel id is copied
- iFileWritePos = iUniCodeBuf.Find(KField);
- ASSERT( aIndex >= 0 && aIndex < iNmsLogData->Count() );
- FormatBuff.Format(KConvert,(iNmsLogData->At(aIndex))->ChannelID());
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,FormatBuff);
-
- //type is copied
- iFileWritePos = iUniCodeBuf.Find(KField);
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,(iNmsLogData->
- At(aIndex))->NmsType());
- iFileWritePos = iUniCodeBuf.Find(KField);
-
- //current network is copied
- ASSERT( aIndex >= 0 && aIndex < iNmsLogData->Count() );
- FormatBuff.Format(KConvert,(iNmsLogData->At(aIndex))->
- CurrentNetwork());
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,FormatBuff);
- iFileWritePos = iUniCodeBuf.Find(KField);
-
- //home operator is copied
- ASSERT( aIndex >= 0 && aIndex < iNmsLogData->Count() );
- FormatBuff.Format(KConvert,(iNmsLogData->At(aIndex))->HomeOperator());
- iUniCodeBuf.Replace(iFileWritePos,KFieldPosition,FormatBuff);
-
- CnvUtfConverter::ConvertFromUnicodeToUtf8(iUTF8Buffer,iUniCodeBuf);
- //writting the information to the xml file
- WriteBufferToLogFile();
-
- IRLOG_DEBUG( "CIRReportGenerator::WriteNmsLogData - Exiting." );
- }
-
-// ---------------------------------------------------------------------------
-// Function: ImeiUpdated
-// From MIRPhoneInfoObserver
-// ---------------------------------------------------------------------------
-//
-void CIRReportGenerator::ImeiUpdatedL(const TDesC& aImei)
- {
- if(0 == aImei.Length())
- {
- iPhoneInfo->StartUpdating();
- return;
- }
- // prepare base64 codec input
- HBufC8 *imei = HBufC8::NewLC( aImei.Length() );
- TPtr8 imeiPtr = imei->Des();
- imeiPtr.Copy(aImei);
-
- // prepare base64 codec output
- HBufC8 *buffer = HBufC8::NewLC( aImei.Length() * 2 );
- TPtr8 bufferPtr = buffer->Des();
-
- // Encoding
- TImCodecB64 base64Codec;
- base64Codec.Initialise();
- base64Codec.Encode(*imei, bufferPtr);
-
- // store to data member
- if(NULL == iImeiBase64)
- {
- iImeiBase64 = HBufC16::NewL( aImei.Length() * 2 );
- }
- TPtr imeiBase64Ptr = iImeiBase64->Des();
- imeiBase64Ptr.Copy(bufferPtr);
-
- CleanupStack::PopAndDestroy(buffer);
- CleanupStack::PopAndDestroy(imei);
- }
-