diff -r 6edeef394eb7 -r 9397a16b6eb8 testexecmdw/tef/tef/logger/src/client.cpp --- a/testexecmdw/tef/tef/logger/src/client.cpp Fri Sep 03 07:55:01 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,409 +0,0 @@ -/* -* Copyright (c) 2005-2009 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: -* Source file for the client api -* -*/ - - - -/** - @file Client.cpp -*/ -#include - - -const TInt KMaxFilename = 50; -const TInt KLowMemBufLength = 128; - -// EKA1 requires DLL entry point - - -EXPORT_C TInt RTestExecuteLogServ::Connect() -/** - * @return int - Standard error codes - * EKA2 all variants and EKA1 target. - * Server is an exe - */ - { - TVersion version(KTestExecuteLoggerMajorVersion,KTestExecuteLoggerMinorVersion,KTestExecuteLoggerBuildVersion); - // Assume the server is already running and attempt to create a session - TInt err = CreateSession(KTestExecuteLogServerName,version,8); - if(err == KErrNotFound) - { - // Server not running - // Construct the server binary name - _LIT(KEmpty,""); - // EKA2 is simple - // No path required - TBuf<32> serverFile; - serverFile.Copy(KTestExecuteLogServerName); - _LIT(KExe,".exe"); - serverFile.Append(KExe); - RProcess server; - err = server.Create(serverFile,KEmpty); - if(err != KErrNone) - return err; - // Synchronise with the server - TRequestStatus reqStatus; - server.Rendezvous(reqStatus); - server.Resume(); - // Server will call the reciprocal static synchronise call - User::WaitForRequest(reqStatus); - server.Close(); - if(reqStatus.Int() != KErrNone) - return reqStatus.Int(); - // Create the root server session - err = CreateSession(KTestExecuteLogServerName,version,8); - } - -#ifdef TEF_SHARE_AUTO - // Makes the session shared among all threads in the process - if( err == KErrNone ) - { - err = ShareAuto(); - } -#endif - - return err; - } - -/////// -EXPORT_C TInt RTestExecuteLogServ::CreateLog(const TDesC& aLogFilePath, TLogMode aMode) -/** - * @param aLogFilePath - Full path and filename of the log file - * @param aMode - Overwrite or Append - * Makes synchronous call to the log server to create a log session - */ - { - if(aLogFilePath.Length() > KMaxTestExecuteLogFilePath) - return KErrTooBig; - - iLogLevel = TLogSeverity(ESevrAll); - TIpcArgs args; - args.Set(0,&aLogFilePath); - args.Set(1,aMode); - return SendReceive(ECreateLog,args); - - } - -EXPORT_C void RTestExecuteLogServ::LogExtra(const TText8* aFile, TInt aLine, TInt aSeverity,TRefByValue aFmt,...) -/** - * @param aFile - Source file name - * @param aLine - Source file line number - * @param aSeverity - ERR, WARN, INFO - * @param aFmt - UNICODE format string - */ - { - if (aSeverity>iLogLevel) - { - return; - } - // Set up a Variable argument list and call private method - VA_LIST aList; - VA_START(aList, aFmt); - LogExtra(aFile, aLine, aSeverity, aFmt, aList); - VA_END(aList); - } - -EXPORT_C void RTestExecuteLogServ::WriteFormat(TRefByValue aFmt,...) -/** - * @param aFmt - UNICODE format string - */ - { - // Set up a Variable argument list and call private method - VA_LIST aList; - VA_START(aList, aFmt); - WriteFormat(aFmt, aList); - VA_END(aList); - } - - -EXPORT_C void RTestExecuteLogServ::Write(const TDesC& aLogBuffer) -/** - * @param aLogBuffer - Pre-formatted UNICODE buffer - */ - { - // Just call private method - // Ignore errors. Could put in ASSERT - TRAP_IGNORE(WriteL(aLogBuffer)); - } - - -EXPORT_C void RTestExecuteLogServ::WriteFormat(TRefByValue aFmt,...) -/** - * @param aFmt - Narrow format string - */ - { - // Set up a Variable argument list and call private method - VA_LIST aList; - VA_START(aList, aFmt); - WriteFormat(aFmt, aList); - VA_END(aList); - } - - -EXPORT_C void RTestExecuteLogServ::Write(const TDesC8& aLogBuffer) -/** - * @param aLogBuffer - Pre-formatted Narrow buffer - */ - { - // Create a larger buffer for adding terminators - // Could do more formatting but just allow for CRLF plus time stamp for the time being - HBufC8* buffer = HBufC8::New(aLogBuffer.Length()+20); - if(buffer) - { - TPtr8 ptr(buffer->Des()); - AddTime(ptr); - ptr.Append(aLogBuffer); - // Ignore error for the time being. Could do an ASSERT - TRAP_IGNORE(WriteL(ptr)); - delete buffer; - } - } - -void RTestExecuteLogServ::AddTime(TDes8& aLogBuffer) - { - TTime now; - now.UniversalTime(); - TDateTime dateTime = now.DateTime(); - _LIT8(KFormat,"%02d:%02d:%02d:%03d "); - // add the current time - aLogBuffer.AppendFormat(KFormat,dateTime.Hour(),dateTime.Minute(),dateTime.Second(),(dateTime.MicroSecond()/1000)); - } - -EXPORT_C void RTestExecuteLogServ::LogExtra(const TText8* aFile, TInt aLine, TInt aSeverity,TRefByValue aFmt, VA_LIST aList) -/** - * @param aFile - Source file name - * @param aLine - Source file line number - * @param aSeverity - ERR, WARN, INFO - * @param aFmt - UNICODE format string - * @param aList - Variable argument list - * - * Format a log output line - */ - { - if (aSeverity>iLogLevel) - { - return; - } - // Create a filename string - TBuf16 fileName; - GetCPPModuleName(fileName, aFile); - // Create a buffer for formatting - HBufC* buffer = HBufC::New(KMaxTestExecuteLogLineLength*2); - if (buffer) - { - TPtr ptr(buffer->Des()); - _LIT(KErr,"ERROR - "); - _LIT(KHigh,"HIGH - "); - _LIT(KWarn,"WARN - "); - _LIT(KMedium,"MEDIUM - "); - _LIT(KInfo,"INFO - "); - _LIT(KLow,"LOW - "); - _LIT(KFormat," %d %S %d "); - if(aSeverity == ESevrErr) - ptr.Append(KErr); - else if(aSeverity == ESevrHigh) - ptr.Append(KHigh); - else if(aSeverity == ESevrWarn) - ptr.Append(KWarn); - else if(aSeverity == ESevrMedium) - ptr.Append(KMedium); - else if (aSeverity == ESevrInfo) - ptr.Append(KInfo); - else if(aSeverity == ESevrLow) - ptr.Append(KLow); - else //if(aSeverity == ESevrAll) - ptr.Append(KInfo); - // Add the thread id - ptr.AppendFormat(KFormat,(TInt)RThread().Id(),&fileName, aLine); - TTEFDes16Overflow des16OverflowObject; - ptr.AppendFormatList(aFmt, aList, &des16OverflowObject); - - - TRAP_IGNORE(WriteL(ptr)); - delete buffer; - } - else - { - _LIT(KWarn,"WARN - "); - TBuf8 noMemory; - AddTime(noMemory); - noMemory.Append(KWarn); - noMemory.AppendFormat(_L8(" %d "), (TInt)RThread().Id()); - noMemory.Append(fileName); - noMemory.AppendFormat(_L8(" %d %S"), aLine, &KLoggerNotEnoughMemory8()); - TRAP_IGNORE(WriteL(noMemory)); - } - } - -EXPORT_C void RTestExecuteLogServ::WriteFormat(TRefByValue aFmt, VA_LIST aList) -/** - * @param aFmt - UNICODE format string - * @param aList - Variable argument list - */ - { - HBufC* buffer = HBufC::New(KMaxTestExecuteLogLineLength*2); - if (buffer) - { - TPtr ptr(buffer->Des()); - TTEFDes16Overflow des16OverflowObject; - ptr.AppendFormatList(aFmt, aList, &des16OverflowObject); - - TRAP_IGNORE(WriteL(ptr)); - delete buffer; - } - else - { - TRAP_IGNORE(WriteL((TDes8&)KLoggerNotEnoughMemory8())); - } - } - -EXPORT_C void RTestExecuteLogServ::WriteFormat(TRefByValue aFmt, VA_LIST aList) -/** - * @param aFmt - UNICODE format string - * @param aList - Variable argument list - */ - { - HBufC8* buffer = HBufC8::New(KMaxTestExecuteLogLineLength*2); - if (buffer) - { - TPtr8 ptr(buffer->Des()); - AddTime(ptr); - TTEFDes8Overflow des8OverflowObject; - ptr.AppendFormatList(aFmt, aList, &des8OverflowObject); - - TRAP_IGNORE(WriteL(ptr)); - delete buffer; - } - else - { - TRAP_IGNORE(WriteL((TDes8&)KLoggerNotEnoughMemory8())); - } - } - -void RTestExecuteLogServ::WriteL(const TDesC& aLogBuffer) -/** - * @param aLogBuffer - UNICODE buffer - */ - { - HBufC8* buffer = NULL; - TRAPD(err, buffer=HBufC8::NewL(aLogBuffer.Length()+20)); - if (KErrNoMemory == err) - { - _LIT8(KWarn,"WARN - "); - TInt startPos = 13; // The place change "INFO" to "WARN" - TInt endPos = 7; - TInt wordCount = 5; // The message before the actual log info - TBuf8 buffer; - AddTime(buffer); - TLex lex(aLogBuffer); - lex.Mark(); - for (TInt i=0; iDes()); - AddTime(ptr); - ptr.Append(aLogBuffer); - WriteL(ptr); - - CleanupStack::PopAndDestroy(buffer); - } - } - -void RTestExecuteLogServ::WriteL(TDes8& aLogBuffer) -/** - * @param aLogBuffer - pre-formatted narrow buffer - * - * Synchronous write to the server - */ - { - _LIT8(KEnd,"\r\n"); - // Check to see if there's room to add CRLF - if(aLogBuffer.Length()+2 > aLogBuffer.MaxLength()) - { - HBufC8* buffer = NULL; - TRAPD(err, buffer=HBufC8::NewL(aLogBuffer.Length()+2)); - if (KErrNoMemory == err) - { - aLogBuffer.Replace(aLogBuffer.Length()-2, 2, KEnd); - TIpcArgs args; - args.Set(0,&aLogBuffer); - args.Set(1,aLogBuffer.Length()); - User::LeaveIfError(SendReceive(EWriteLog,args)); - } - else - { - CleanupStack::PushL(buffer); - TPtr8 ptr(buffer->Des()); - ptr.Copy(aLogBuffer); - ptr.Append(KEnd); - TIpcArgs args; - args.Set(0,&ptr); - args.Set(1,ptr.Length()); - User::LeaveIfError(SendReceive(EWriteLog,args)); - CleanupStack::PopAndDestroy(buffer); - } - } - else - { - aLogBuffer.Append(KEnd); - TIpcArgs args; - args.Set(0,&aLogBuffer); - args.Set(1,aLogBuffer.Length()); - User::LeaveIfError(SendReceive(EWriteLog,args)); - } - } - -void RTestExecuteLogServ::GetCPPModuleName(TDes& aModuleName, const TText8* aCPPFileName) -/** - * @return aModuleName - Filename in descriptor - * @param aCppFileName - Filename - * Borrowed from scheduletest - */ - { - TPtrC8 fileNamePtrC8(aCPPFileName); - // We do our own filename munging here; TParse can't help us since that's - // expressly for EPOC filepaths and here we've got whatever the build system is - // At present Win32 and Unix directory delimiters are supported - TInt lastDelimiter = Max(fileNamePtrC8.LocateReverse('\\'), fileNamePtrC8.LocateReverse('/')); - if(lastDelimiter >= 0 && lastDelimiter < fileNamePtrC8.Length() - 1) - { - // Found a delimiter which isn't trailing; update the ptr to start at the next char - TInt fileNameLen = Min(KMaxFilename, fileNamePtrC8.Length() - (lastDelimiter + 1)); - fileNamePtrC8.Set(aCPPFileName + lastDelimiter + 1, fileNameLen); - } - else - { - // Didn't find a delimiter; take as much of the right-end of the name as fits - fileNamePtrC8.Set(aCPPFileName + Max(0, fileNamePtrC8.Length() - KMaxFilename), Min(fileNamePtrC8.Length(), KMaxFilename)); - } - aModuleName.Copy(fileNamePtrC8); - } - -EXPORT_C void RTestExecuteLogServ::SetLogLevel(TLogSeverity aSeverity) - { - iLogLevel = aSeverity; - }