--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tsrc/VCXTestCommon/src/CIptvTestMobilecrashWatcher.cpp Mon Jan 18 20:21:12 2010 +0200
@@ -0,0 +1,299 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <BAUTILS.H>
+#include <S32FILE.H>
+
+#include "CIptvTestMobilecrashWatcher.h"
+#include "VCXTestLog.h"
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+_LIT(KDriveC, "C:\\");
+_LIT(KDriveE, "E:\\");
+_LIT(KDriveF, "F:\\");
+
+// -----------------------------------------------------------------------------
+// CIptvTestMobilecrashWatcher::
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CIptvTestMobilecrashWatcher* CIptvTestMobilecrashWatcher::NewL()
+ {
+ VCXLOGLO1(">>>CIptvTestMobilecrashWatcher::NewL");
+ CIptvTestMobilecrashWatcher* self = new (ELeave) CIptvTestMobilecrashWatcher( );
+ CleanupStack::PushL(self);
+ self->ConstructL(ETrue);
+ CleanupStack::Pop();
+ VCXLOGLO1("<<<CIptvTestMobilecrashWatcher::NewL");
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CIptvTestMobilecrashWatcher::
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CIptvTestMobilecrashWatcher* CIptvTestMobilecrashWatcher::NewL(TBool aPanicEnabled)
+ {
+ VCXLOGLO1(">>>CIptvTestMobilecrashWatcher::NewL");
+ CIptvTestMobilecrashWatcher* self = new (ELeave) CIptvTestMobilecrashWatcher( );
+ CleanupStack::PushL(self);
+ self->ConstructL(aPanicEnabled);
+ CleanupStack::Pop();
+ VCXLOGLO1("<<<CIptvTestMobilecrashWatcher::NewL");
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CIptvTestMobilecrashWatcher::~CIptvTestMobilecrashWatcher
+// destructor
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CIptvTestMobilecrashWatcher::~CIptvTestMobilecrashWatcher()
+ {
+ VCXLOGLO1(">>>CIptvTestMobilecrashWatcher::~CIptvTestMobilecrashWatcher");
+
+ iCrashesBefore.ResetAndDestroy();
+ iCrashesNow.ResetAndDestroy();
+ iFsSession.Close();
+
+ VCXLOGLO1("<<<CIptvTestMobilecrashWatcher::~CIptvTestMobilecrashWatcher");
+ }
+
+// -----------------------------------------------------------------------------
+// CIptvTestMobilecrashWatcher::CIptvTestMobilecrashWatcher
+// -----------------------------------------------------------------------------
+//
+CIptvTestMobilecrashWatcher::CIptvTestMobilecrashWatcher()
+ {
+ VCXLOGLO1(">>>CIptvTestMobilecrashWatcher::CIptvTestMobilecrashWatcher");
+
+
+ VCXLOGLO1("<<<CIptvTestMobilecrashWatcher::CIptvTestMobilecrashWatcher");
+ }
+
+
+// -----------------------------------------------------------------------------
+// CIptvTestMobilecrashWatcher::ConstructL()
+// -----------------------------------------------------------------------------
+//
+void CIptvTestMobilecrashWatcher::ConstructL(TBool aPanicEnabled)
+ {
+ VCXLOGLO1(">>>CIptvTestMobilecrashWatcher::ConstructL");
+
+ iPanicEnabled = aPanicEnabled;
+ iFsSession.Connect();
+
+ iCrashesBefore.ResetAndDestroy();
+ TRAP_IGNORE( ReadMobilecrashesL(iCrashesBefore, KDriveC) );
+ TRAP_IGNORE( ReadMobilecrashesL(iCrashesBefore, KDriveE) );
+ TRAP_IGNORE( ReadMobilecrashesL(iCrashesBefore, KDriveF) );
+ VCXLOGLO1("<<<CIptvTestMobilecrashWatcher::ConstructL");
+ }
+
+// -----------------------------------------------------------------------------
+// CIptvTestMobilecrashWatcher::ReadMobilecrashesL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CIptvTestMobilecrashWatcher::ReadMobilecrashesL( RPointerArray<HBufC>& aCrashes, const TDesC& aDrive )
+ {
+ VCXLOGLO1(">>>CIptvTestMobilecrashWatcher::ReadMobilecrashes");
+
+ CDir* dirList = NULL;
+
+ TBuf<KMaxFileName> path(aDrive);
+
+ if(aDrive == KDriveC)
+ {
+ path.Append(_L("data\\"));
+ }
+
+ path.Append(_L("*.*"));
+
+ if( !iFsSession.IsValidDrive(EDriveE) )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+ if ( iFsSession.GetDir( path, KEntryAttMatchExclude|KEntryAttDir, ESortByName, dirList ) == KErrNone )
+ {
+ CleanupStack::PushL( dirList );
+
+ for ( TInt file = 0; file < dirList->Count(); file++ )
+ {
+ HBufC* fileName = HBufC::NewL(KMaxFileName);
+ CleanupStack::PushL( fileName );
+
+ fileName->Des().Append(aDrive);
+ fileName->Des().Append((*dirList)[file].iName);
+
+ if(fileName->Des().FindF( _L("mobilecrash") ) >= 0)
+ {
+ CleanupStack::Pop( fileName );
+ aCrashes.Append(fileName);
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy( fileName );
+ }
+ }
+ CleanupStack::PopAndDestroy( dirList );
+ }
+
+ VCXLOGLO1("<<<CIptvTestMobilecrashWatcher::ReadMobilecrashes");
+ }
+
+// -----------------------------------------------------------------------------
+// CIptvTestMobilecrashWatcher::CompareMobilecrashesL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CIptvTestMobilecrashWatcher::CompareMobilecrashesL(RPointerArray<HBufC>& aCrashesBefore, RPointerArray<HBufC>& aCrashesNow)
+ {
+ VCXLOGLO1(">>>CIptvTestMobilecrashWatcher::CompareMobilecrashesL");
+ TBool newCrashes = EFalse;
+
+ TInt i = 0;
+ TInt e = 0;
+
+ VCXLOGLO2("CIptvTestMobilecrashWatcher:: crash files before: %d", aCrashesBefore.Count());
+ VCXLOGLO2("CIptvTestMobilecrashWatcher:: crash files now: %d", aCrashesNow.Count());
+
+ // remove crashesBefore from crashesNow
+
+ // Check is the mobilecrash log in the before array
+ for(e=0;e<aCrashesBefore.Count();e++)
+ {
+ for(i=0; i<aCrashesNow.Count(); i++)
+ {
+ TPtrC before = aCrashesBefore[e]->Des();
+ TPtrC now = aCrashesNow[i]->Des();
+
+ if(before == now )
+ {
+ HBufC* buf = aCrashesNow[i];
+ aCrashesNow.Remove(i);
+ delete buf;
+ break;
+ }
+ }
+ }
+
+ if(aCrashesNow.Count() > 0)
+ {
+ newCrashes = ETrue;
+ VCXLOGLO1("CIptvTestMobilecrashWatcher:: New mobilecrashes:");
+ for(i=0;i<aCrashesNow.Count(); i++)
+ {
+ TPtr16 file = aCrashesNow[i]->Des();
+ VCXLOGLO2("CIptvTestMobilecrashWatcher:: %S", &file);
+ }
+ }
+
+ VCXLOGLO1("<<<CIptvTestMobilecrashWatcher::CompareMobilecrashesL");
+ return newCrashes;
+ }
+
+// -----------------------------------------------------------------------------
+// CIptvTestMobilecrashWatcher::CheckNewCrashesL()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CIptvTestMobilecrashWatcher::CheckNewCrashesL()
+ {
+ VCXLOGLO1(">>>CIptvTestMobilecrashWatcher::CheckNewCrashesL");
+
+ iCrashesNow.ResetAndDestroy();
+ TRAP_IGNORE( ReadMobilecrashesL(iCrashesNow, KDriveC) );
+ TRAP_IGNORE( ReadMobilecrashesL(iCrashesNow, KDriveE) );
+ TRAP_IGNORE( ReadMobilecrashesL(iCrashesNow, KDriveF) );
+ if( CompareMobilecrashesL(iCrashesBefore, iCrashesNow) )
+ {
+ VCXLOGLO1("CIptvTestMobilecrashWatcher:: * ERROR * There's new mobilecrashes, panicing!");
+ User::Panic(_L("New mobilecrash log"), KErrGeneral);
+ }
+
+ VCXLOGLO1("<<<CIptvTestMobilecrashWatcher::CheckNewCrashesL");
+ }
+
+// -----------------------------------------------------------------------------
+// CIptvTestMobilecrashWatcher::ReturnNewCrashes()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CIptvTestMobilecrashWatcher::ReturnNewCrashes(RPointerArray<HBufC>& aArray)
+ {
+ VCXLOGLO1(">>>CIptvTestMobilecrashWatcher::CheckNewCrashesL");
+
+ aArray.ResetAndDestroy();
+ TRAP_IGNORE( ReadMobilecrashesL(aArray, KDriveC) );
+ TRAP_IGNORE( ReadMobilecrashesL(aArray, KDriveE) );
+ TRAP_IGNORE( ReadMobilecrashesL(aArray, KDriveF) );
+ TBool newCrashes = CompareMobilecrashesL(iCrashesBefore, aArray);
+ if( newCrashes )
+ {
+ VCXLOGLO1("CIptvTestMobilecrashWatcher:: * ERROR * There's new mobilecrashes!");
+ }
+
+ VCXLOGLO1("<<<CIptvTestMobilecrashWatcher::CheckNewCrashesL");
+ return newCrashes;
+ }
+
+// -----------------------------------------------------------------------------
+// CIptvTestMobilecrashWatcher::ReturnMobileCrashCount()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CIptvTestMobilecrashWatcher::ReturnMobileCrashCount()
+ {
+ VCXLOGLO1(">>>CIptvTestMobilecrashWatcher::ReturnMobileCrashCount");
+
+ RPointerArray<HBufC> array;
+
+ array.ResetAndDestroy();
+ TRAP_IGNORE( ReadMobilecrashesL(array, KDriveC) );
+ TRAP_IGNORE( ReadMobilecrashesL(array, KDriveE) );
+ TRAP_IGNORE( ReadMobilecrashesL(array, KDriveF) );
+ TInt count = array.Count();
+ array.ResetAndDestroy();
+
+ VCXLOGLO1("<<<CIptvTestMobilecrashWatcher::ReturnMobileCrashCount");
+ return count;
+ }
+
+// ---------------------------------
+// End of File