--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testexecmgmt/ucc/Source/MobileTermination/CLog.cpp Mon Mar 08 15:04:18 2010 +0800
@@ -0,0 +1,182 @@
+/*
+* 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:
+* System Includes
+*
+*/
+
+
+
+#include <stdio.h>
+#include <assert.h>
+
+
+/*******************************************************************************
+ *
+ * Local Includes
+ *
+ ******************************************************************************/
+#include "CLog.h"
+
+
+/*******************************************************************************
+ *
+ * Definitions
+ *
+ ******************************************************************************/
+#define MIN(a,b) (((a) < (b)) ? (a) : (b))
+#define PRINT_ENTRY_PREFIX_LEN 16
+#define PRINT_ENTRY_SEPARATOR (" - ")
+#define PRINT_ENTRY_SEPARATOR_LEN 3
+#define MAXLINESIZE (PRINT_ENTRY_PREFIX_LEN + PRINT_ENTRY_SEPARATOR_LEN + MAXWHOSIZE + MAXMSGSIZE)
+#ifndef WIN32
+#define _snprintf snprintf
+#endif
+
+/*******************************************************************************
+ *
+ * Statics
+ *
+ ******************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Implementation
+ *
+ ******************************************************************************/
+CLog::CLog( int aFileBacked )
+{
+ assert( aFileBacked == 0 );
+ iLogVector = 0xFFFFFFFF;
+}
+
+
+void CLog::WriteLogEntry( TSeverity aSeverity, char *aWho, char *aMsg )
+{
+ TLogEntry entry;
+ int slen;
+
+ // copy message into struct
+ memset( &entry, 0, sizeof(entry) );
+ entry.iSeverity = aSeverity;
+ slen = strlen(aWho);
+ slen = MIN( slen, (MAXWHOSIZE-1) );
+ memcpy( entry.iWho, aWho, slen );
+ slen = strlen(aMsg);
+ slen = MIN( slen, (MAXMSGSIZE-1) );
+ memcpy( entry.iMsg, aMsg, slen );
+
+ // now add it to the vector
+ iLogEntries.push_back( entry );
+}
+
+
+void CLog::WriteLogEntry( TSeverity aSeverity, char *aWho, char *aErrorLocation, int aErrorA, int aErrorB )
+{
+ char buff[MAXMSGSIZE];
+ _snprintf( buff, MAXMSGSIZE, "%s (%d, %d)", aErrorLocation, aErrorA, aErrorB );
+ WriteLogEntry( aSeverity, aWho, buff );
+}
+
+
+void CLog::SetLogLevel( int aLogVector )
+{
+ iLogVector = aLogVector;
+}
+
+
+char *CLog::GetSeverityString( TSeverity aSeverity )
+{
+ switch( aSeverity ) {
+
+ case SV_INFO:
+ return "Info: ";
+
+ case SV_WARNING:
+ return "Warning: ";
+
+ case SV_ERROR:
+ return "Error: ";
+
+ case SV_RESOURCE:
+ return "Resource: ";
+
+ case SV_STATE:
+ return "State: ";
+
+ default:
+ return "Unknown: ";
+ }
+
+ // should never get here
+ assert( !"INVALID CODE PATH" );
+ return NULL;
+}
+
+
+int CLog::CalculateLogSize()
+{
+ char *severity_string;
+ char cline[MAXLINESIZE];
+ int log_size = 0;
+
+ vector<TLogEntry>::iterator iter;
+ for( iter = iLogEntries.begin(); iter != iLogEntries.end(); iter++ ) {
+ severity_string = GetSeverityString( iter->iSeverity );
+ sprintf( cline, "%s%s%s%s\n", severity_string, iter->iWho, PRINT_ENTRY_SEPARATOR, iter->iMsg );
+ log_size += strlen(cline);
+ }
+ log_size++;
+ return log_size;
+}
+
+
+void CLog::PrintLogToBuffer( int aBufferSize, char *aBuffer )
+{
+ char cline[MAXLINESIZE];
+ vector<TLogEntry>::iterator iter;
+ int slen, remaining_space;
+ char *severity_string;
+
+ // init params
+ assert( aBufferSize > 0 );
+ assert( aBuffer != NULL );
+
+ // init
+ aBuffer[0] = 0;
+ remaining_space = aBufferSize;
+
+ // process each entry
+ for( iter = iLogEntries.begin(); iter != iLogEntries.end(); iter++ ) {
+
+ // print the line to the temp buffer
+ severity_string = GetSeverityString( iter->iSeverity );
+ sprintf( cline, "%s%s%s%s\n", severity_string, iter->iWho, PRINT_ENTRY_SEPARATOR, iter->iMsg );
+
+ // check there is room left in the passed buffer
+ slen = strlen(cline);
+ if( remaining_space <= slen ) {
+ break;
+ }
+
+ // otherwise
+ strcat( aBuffer, cline );
+ remaining_space -= slen;
+ }
+
+ // done
+ return;
+}
+