diff -r 86a2e675b80a -r 813b186005b6 hti/PC_Tools/HTIGateway/HtiGateway/src/util.cpp --- a/hti/PC_Tools/HTIGateway/HtiGateway/src/util.cpp Mon Jun 28 15:36:07 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,739 +0,0 @@ -/* -* Copyright (c) 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: -* This module contains the implementation of Util class member functions. -* Util class provides static utility functions for logging and string -* manipulation. -*/ - -// INCLUDE FILES -#include "util.h" - -// command line parameters -extern map g_parameters; - -//********************************************************************************** -// Class Util -// -// Provides static utility functions for logging and string handling. -//********************************************************************************** - -// The default verbose level for Util output is error -Util::VerboseLevel Util::iVerbose(Util::error); - -// The default output is without timestamp -int Util::iTimestamp(0); - -#ifdef ENABLE_LOG_SYNC - Mutex Util::iCritical; -#endif - -/*------------------------------------------------------------------------------- - - Class: Util - - Method: SetVerboseLevel - - Description: Sets new verbose level by string: - - "none" - "result" - "error" - "info" - "debug" - - Parameters: const string& aVerbose : in: Verbose level as string - - Return Values: None - - Errors/Exceptions: None - --------------------------------------------------------------------------------*/ -void Util::SetVerboseLevel(const string& aVerbose) -{ - string verbose(aVerbose); - ToLower(verbose); - if (verbose.compare("result") == 0) - { - iVerbose = result; - } - else if (verbose.compare("error") == 0) - { - iVerbose = error; - } - else if (verbose.compare("info") == 0) - { - iVerbose = info; - } - else if (verbose.compare("debug") == 0) - { - iVerbose = debug; - } - else - { - iVerbose = none; - } -} - -/*------------------------------------------------------------------------------- - - Class: Util - - Method: SetVerboseLevel - - Description: Sets new verbose level by enumeration. - - Parameters: const VerboseLevel aVerbose : in: Verbose level - - Return Values: None - - Errors/Exceptions: None - --------------------------------------------------------------------------------*/ -void Util::SetVerboseLevel(const VerboseLevel aVerbose) -{ - iVerbose = aVerbose; -} - -/*------------------------------------------------------------------------------- - - Class: Util - - Method: GetVerboseLevel - - Description: Returns current verbose level. - - Parameters: None - - Return Values: VerboseLevel : Current verbose level - - Errors/Exceptions: None - --------------------------------------------------------------------------------*/ -Util::VerboseLevel Util::GetVerboseLevel() -{ - return iVerbose; -} - -/*------------------------------------------------------------------------------- - - Class: Util - - Method: SetTimestamp - - Description: Enables/disables timestamp from output by string "yes" or "no". - - Parameters: const string& aTimestamp : in : "yes" to enable timestamp, "no" to - disable. - - Return Values: None - - Errors/Exceptions: None - --------------------------------------------------------------------------------*/ -void Util::SetTimestamp(const string& aTimestamp) -{ - string timestamp(aTimestamp); - ToLower(timestamp); - if (timestamp.compare("true") == 0) - { - SetTimestamp(1); - } - else - { - SetTimestamp(0); - } -} - -/*------------------------------------------------------------------------------- - - Class: Util - - Method: SetTimestamp - - Description: Enables/disables timestamp from output. 0 is disabled. - - Parameters: const int aTimestamp : in : Enable/disable time stamp - - Return Values: None - - Errors/Exceptions: None - --------------------------------------------------------------------------------*/ -void Util::SetTimestamp(const int aTimestamp) -{ - iTimestamp = aTimestamp; -} - -/*------------------------------------------------------------------------------- - - Class: Util - - Method: ParseCmdLine - - Description: Parses command line parameters to map. The map which is passed - as argument must contain all valid keys (command line swicthes). - Function adds values to map to all keys found from command line. - The command line switch is form =. Default values for - keys can be specified. - - Parameters: const int aArgc : in : The number of arguments - char **aArgs : in : Pointer array to arguments - map& aMap : in/out : Map containing possible command - line switches (keys). Values of - switches are returned as values. - - Return Values: None - - Errors/Exceptions: UtilError - --------------------------------------------------------------------------------*/ -void Util::ParseCmdLine(const int aArgc, - char **aArgs, - map& aMap) throw (UtilError) -{ - for (int i = 1; i < aArgc; i++) - { - string p(aArgs[i]); - string v; - int idx = p.find_first_of("="); - if (idx != string::npos) - { - if ((idx + 1) == p.length()) - { - string err("Parameter '" + p.substr(0, idx) + "' without value"); - throw UtilError(err, ERR_UTIL_NO_PARAM_VALUE); - } - v = &aArgs[i][idx + 1]; - p = p.substr(0, idx); - } - else - { - v = ""; - } - - // 28.03.06 Disabled this "check" to enable parameter passing to plug-ins also - //string def; - //GetValue(p, aMap, def); - aMap[p] = v; - } -} - -/*------------------------------------------------------------------------------- - - Class: Util - - Method: GetValue - - Description: Returns value by key from a map. - - Parameters: const string& aKey : in : Key to value - map& aMap : in : Map containing valid keys - string& aValue : out : Value of key - - Return Values: None - - Errors/Exceptions: UtilError - --------------------------------------------------------------------------------*/ -void Util::GetValue(const string& aKey, - const map& aMap, string& aValue) throw (UtilError) -{ - map::const_iterator i = aMap.find(aKey); - if (i != aMap.end()) - { - aValue = i->second; - } - else - { - string err("Unknown parameter '" + aKey + "'"); - throw UtilError(err, ERR_UTIL_UNKNOWN_PARAM); - } -} - -/*------------------------------------------------------------------------------- - - Class: Util - - Method: ReadProperties - - Description: Reads properties from a file to a map. Line beginning with - hash character ('#') are considered as comments. The form - of prooerties in file is = . - - Parameters: const string& aFilename : in : Filename where properties are read - map& aMap : out : Map where property values are put - - Return Values: None - - Errors/Exceptions: UtilError - --------------------------------------------------------------------------------*/ -void Util::ReadProperties(const string& aFilename, - map& aMap) throw (UtilError) -{ - ifstream in(aFilename.c_str()); - if (!in) - { - string err("Cannot open properties file '"); - err += aFilename + "'."; - throw UtilError(err, ERR_UTIL_PROPERTIES_NOT_FOUND); - } - while (in) - { - char tmp[256]; - in.getline(tmp, 256); - string line(tmp); - if (line.length() == 0 || line.find_first_of("#") == 0) - { - continue; - } - int idx = line.find_first_of('='); - string v, p; - if (idx != string::npos) - { - p = line.substr(0, idx); - int r = p.find(" "); - while (r != string::npos) - { - p.replace(r, 1, ""); - r = p.find(" "); - } - v = line.substr(idx + 1); - string::iterator i = v.begin(); - int spaces = 0; - while (i != v.end() && *i == ' ') - { - ++spaces; - ++i; - } - v.erase(0, spaces); - if (v.length() == 0) - { - string err = "Value not specified for parameter '"; - err += line.substr(0, idx) + "'."; - throw UtilError(err, ERR_UTIL_NO_PROPERTY_VALUE); - } - } - else - { - p = line; - v = ""; - } - aMap[p] = v; - } -} - -/*------------------------------------------------------------------------------- - - Class: Util - - Method: Error - - Description: Prints message to output in error level. - - Parameters: const string& aMsg : in : Error message to output - - Return Values: None - - Errors/Exceptions: None - --------------------------------------------------------------------------------*/ -void Util::Error(const string& aMsg) -{ - Print(cerr, aMsg, error); -} - -/*------------------------------------------------------------------------------- - - Class: Util - - Method: Error - - Description: Prints message to output in error level with error code number. - - Parameters: const string& aMsg : in : Error message to output - const long aCode : in : Error code to output - - Return Values: None - - Errors/Exceptions: None - --------------------------------------------------------------------------------*/ -void Util::Error(const string& aMsg, const long aCode) -{ - Print(cerr, aMsg, error, aCode); -} - -/*------------------------------------------------------------------------------- - - Class: Util - - Method: Log - - Description: Prints message to output in result level. - - Parameters: const string& aMsg : in : Result message to output - - Return Values: None - - Errors/Exceptions: None - --------------------------------------------------------------------------------*/ -void Util::Log(const string& aMsg) -{ - Print(cout, aMsg, result); -} - -/*------------------------------------------------------------------------------- - - Class: Util - - Method: Info - - Description: Prints message to output in info level. - - Parameters: const string& aMsg : in : Info message to output - - Return Values: None - - Errors/Exceptions: None - --------------------------------------------------------------------------------*/ -void Util::Info(const string& aMsg) -{ - Print(cout, aMsg, info); -} - -/*------------------------------------------------------------------------------- - - Class: Util - - Method: Debug - - Description: Prints message to output in debug level. - - Parameters: const string& aMsg : in : Debug message to output - - Return Values: None - - Errors/Exceptions: None - --------------------------------------------------------------------------------*/ -void Util::Debug(const string& aMsg) -{ - Print(cout, aMsg, debug); -} - -/*------------------------------------------------------------------------------- - - Class: Util - - Method: Print - - Description: Prints output to a stream. - - Parameters: ostream& out : in : Stream where to write - const string& aMsg : in : Message to output - const VerboseLevel aLevel : in : Verbose level of message - const long aCode : in : Possible error code if != 0 - - Return Values: None - - Errors/Exceptions: None - --------------------------------------------------------------------------------*/ -void Util::Print(ostream& out, - const string& aMsg, - const VerboseLevel aLevel, - const long aCode) -{ -#ifdef ENABLE_LOG_SYNC - iCritical.Lock(); -#endif - - if (aLevel <= iVerbose) - { - if (iTimestamp) - { - char timestamp[128]; - _strdate(timestamp); - char tmp[16]; - _strtime(tmp); - strcat(timestamp, " "); - strcat(timestamp, tmp); - struct _timeb tb; - _ftime(&tb); - sprintf(tmp, ".%03d", tb.millitm); - strcat(timestamp, tmp); - out << "[" << timestamp << "] "; - } - //out << "[" << GetCurrentThreadId() << "] "; - out << aMsg; - //if (aLevel == debug) - { - OutputDebugString(aMsg.c_str()); - OutputDebugString("\r\n"); - } - if (aCode != 0) - { - out.setf(ios_base::hex, ios_base::basefield); - out << " (error: 0x" << aCode << ")"; - } - out << endl; - } -#ifdef ENABLE_LOG_SYNC - iCritical.Unlock(); -#endif -} - -/*------------------------------------------------------------------------------- - - Class: Util - - Method: ToLower - - Description: Converts string to lower case. - - Parameters: string& aString : in/out : String which is converted to lower case - - Return Values: string& : Reference to converted string. - - Errors/Exceptions: None - --------------------------------------------------------------------------------*/ -string& Util::ToLower(string& aString) -{ - string::iterator p = aString.begin(); - while (p != aString.end()) - { - *p = tolower(*p); - ++p; - } - return aString; -} - -/*------------------------------------------------------------------------------- - - Class: Util - - Method: ToUpper - - Description: Converts string to upper case. - - Parameters: string& aString : in/out : String which is converted to upper case - - Return Values: string& : Reference to converted string. - - Errors/Exceptions: None - --------------------------------------------------------------------------------*/ -string& Util::ToUpper(string& aString) -{ - string::iterator p = aString.begin(); - while (p != aString.end()) - { - *p = toupper(*p); - ++p; - } - return aString; -} - -/*------------------------------------------------------------------------------- - - Class: Util - - Method: Hex - - Description: Prints hex dump of char table to output. - - Parameters: const char aData[] : in : Data to be output as hex dump - - Return Values: None - - Errors/Exceptions: None - --------------------------------------------------------------------------------*/ -void Util::Hex(const char aData[]) -{ - string s(aData); - Hex(s); -} - -/*------------------------------------------------------------------------------- - - Class: Util - - Method: Hex - - Description: Prints hex dump of string to output. - - Parameters: const string& aMsg : in : Data to be output as hex dump - - Return Values: None - - Errors/Exceptions: None - --------------------------------------------------------------------------------*/ -void Util::Hex(const string& aMsg) -{ - Hex((const unsigned char *)aMsg.c_str(), aMsg.length()); -} - -/*------------------------------------------------------------------------------- - - Class: Util - - Method: Hex - - Description: Prints hex dump of data to output. - - Parameters: const unsigned char* aData : in : Pointer to data to be output - as hex dump - const int aLength : in : The lenght of data - - Return Values: None - - Errors/Exceptions: None - --------------------------------------------------------------------------------*/ -void Util::Hex(const unsigned char* aData, const int aLength) -{ - Hex((void *)aData, aLength); -} - -/*------------------------------------------------------------------------------- - - Class: Util - - Method: Hex - - Description: Prints hex dump of data to output. - - Parameters: void *aData : in : Pointer to data to be output as hex dump - const int aLength : in : The lenght of data - - Return Values: None - - Errors/Exceptions: None - --------------------------------------------------------------------------------*/ -void Util::Hex(void *aData, const int aLength) -{ - Hex(aData, aLength, NULL); -} - -void Util::Hex(void* aData, const int aLength, string* aHexDump) -{ -#ifdef ENABLE_LOG_SYNC - iCritical.Lock(); -#endif - - char line[16]; - int line_len = 16; - int bytes_to_copy = 0; - int printed = 0; - bool print_out = (aHexDump == NULL ? true : false); - unsigned char *data = (unsigned char *)aData; - - if (print_out) - { - printf("\n"); - } - else - { - aHexDump->append("\r\n"); - } - while (printed < aLength) - { - bytes_to_copy = ((aLength - printed >= line_len ? line_len : (aLength - printed))); - memset(line, 0, sizeof(line)); - memcpy(line, &data[printed], bytes_to_copy); - for (int j = 0; j < line_len; j++) - { - char hex[4]; - sprintf(hex, "%02X ", (unsigned char)line[j]); - if (print_out) - { - printf("%s", hex); - } - else - { - string s(hex); - aHexDump->append(s); - } - } - if (print_out) printf(" | "); - for (int j = 0; j < line_len; j++) - { - char c = line[j]; - if (c >= ' ' && c <= 'z') - { - if (print_out) - { - printf("%c", c); - } - else - { - char tmp[2]; - sprintf(tmp, "%c", c); - string s(tmp); - aHexDump->append(s); - } - } - else - { - if (print_out) - { - printf("."); - } - else - { - aHexDump->append("."); - } - } - } - if (print_out) - { - printf("\n"); - } - else - { - aHexDump->append("\r\n"); - } - if ((printed - line_len) < aLength) - { - printed += 16; - } - else - { - printed = aLength - printed; - } - } - if (print_out) printf("\n"); - -#ifdef ENABLE_LOG_SYNC - iCritical.Unlock(); -#endif -} - -void Util::CheckCommandlineParam( const string& paramname, string& paramvalue ) -{ - // Command line parameter overrides ini-file value - if ( !g_parameters[paramname].empty() ) - paramvalue = g_parameters[paramname]; -} - -// End of the file \ No newline at end of file