testexecmgmt/ucc/Source/MobileTermination/CLog.cpp
changeset 0 3da2a79470a7
--- /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;
+}
+