X-Git-Url: http://git.asbjorn.biz/?p=swftools.git;a=blobdiff_plain;f=lib%2Flog.c;h=312a6dd0b9b92863fe3aa4be8b4a3187dd22aeba;hp=6c705ee1568534d719657c8b3a795fba62ab3eca;hb=e448c7a56df8e289c9dbd5b8d87753addd541091;hpb=ee47ae6458aa34dca06c864ac8ccf778d081cf50 diff --git a/lib/log.c b/lib/log.c index 6c705ee..312a6dd 100644 --- a/lib/log.c +++ b/lib/log.c @@ -1,252 +1,252 @@ -/* log.c - Logging facilities for displaying information on screen, as well as - (optional) storing it to a file and transmitting it over the network. - - Part of the swftools package. - - Copyright (c) 2001 Matthias Kramm - - This file is distributed under the GPL, see file COPYING for details */ - -#ifdef __NT__ -#include "stdafx.h" -#include -#include -#include -#include -#if _MSC_VER > 1000 -#pragma once -#endif // _MSC_VER > 1000 -#else -#include -#include -#include -#include -#include -#endif - -#include "log.h" - -#define LOGLEVEL_FATAL 0 -#define LOGLEVEL_ERROR 1 -#define LOGLEVEL_WARNING 2 -#define LOGLEVEL_NOTICE 3 -#define LOGLEVEL_VERBOSE 4 -#define LOGLEVEL_DEBUG 5 - -int screenloglevel; -int fileloglevel; -int socketloglevel; -FILE *logFile = 0; -#ifdef __NT__ -SOCKET logSocket; -#else -int logSocket = 0; -#endif - -char bLogToSock = 0; - -void initlogSocket(char* servAddr, char* logPort); - -void initLog(char* pLogName, int fileloglevel, char* servAddr, char* logPort, int serverlevel, int screenlevel) -{ - screenloglevel = screenlevel; - fileloglevel = fileloglevel; - socketloglevel = screenlevel; - logFile = NULL; - bLogToSock = 0; - - if (pLogName && fileloglevel>=0) - logFile = fopen(pLogName, "a+"); - bLogToSock = (servAddr && logPort && (serverlevel>=0)); - if(bLogToSock) - initlogSocket(servAddr, logPort); -} - -void initlogSocket(char* servAddr, char* logPort) -{ -#ifndef __NT__ - bLogToSock = 0; -#else - // init winsock - // check and prepare WinSock DLL - WORD wVersionRequested = MAKEWORD( 2, 2 ); - WSADATA wsaData; - if ( WSAStartup(wVersionRequested, &wsaData) != 0 ) - { - bLogToSock = false; - return; - } - // Confirm that the WinSock DLL supports 2.2. - // Note that if the DLL supports versions greater - // than 2.2 in addition to 2.2, it will still return - // 2.2 in wVersion since that is the version we - // requested. - - if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) - { - bLogToSock = false; - return; - } - - struct hostent *hp; - hp = gethostbyname(servAddr); - if (hp == NULL) // we don't know who this host is - { - bLogToSock = false; - return; - } - - // connect socket - sockaddr_in SocketAddress; - - memset(&SocketAddress, 0, sizeof(SocketAddress)); - memcpy((char*)&SocketAddress.sin_addr, hp->h_addr, hp->h_length); // set address - SocketAddress.sin_family = hp->h_addrtype; - SocketAddress.sin_port = htons((u_short)atoi(logPort)); - - logSocket = socket(hp->h_addrtype, SOCK_STREAM, 0); - if (logSocket == INVALID_SOCKET) - { - bLogToSock = false; - return; - } - - // try to connect to the specified socket - if ( connect(logSocket, (struct sockaddr*)&SocketAddress, sizeof (SocketAddress)) == SOCKET_ERROR) { - bLogToSock = false; - return; - } - bLogToSock = true; -#endif -} - -void exitLog() -{ - // close socket communication - if(bLogToSock) -#ifndef __NT__ - close(logSocket); -#else - closesocket(logSocket); -#endif - // close file - if(logFile != NULL) - fclose(logFile); -} - - -static char * logimportance[]= {"Fatal","Error","Warning","Notice","Verbose","Debug"}; -static int loglevels=6; -static char * logimportance2[]= {" ","FATAL ","ERROR ","WARNING","NOTICE ","VERBOSE","DEBUG "}; -void log(char* logString) -{ - char timebuffer[32]; - char* logBuffer; - char dbuffer[9]; - char tbuffer[9]; - int level; - char*lt; - char*gt; - int l; - - logBuffer = (char*)malloc (strlen(logString) + 24 + 15); -#ifndef __NT__ - { - /*time_t t = time(0); - tm*t2 = localtime(t); - strftime(dbuffer, 8, "%m %d", t2); - strftime(tbuffer, 8, "%m %d", t2); - dbuffer[0]=0; //FIXME - tbuffer[0]=0;*/ - time_t t = time(0); - char* a = ctime(&t); - int l = strlen(a); - while(a[l-1] == 13 || a[l-1] == 10) - l--; - a[l]=0; - sprintf(timebuffer, "%s", a); - } -#else - _strdate( dbuffer ); - _strtime( tbuffer ); - sprintf(timebuffer, "%s - %s",dbuffer,tbuffer); -#endif - - // search for field - level = -1; - lt=strchr(logString, '<'); - gt=strchr(logString, '>'); - if(lt && gt && lt=0) - { - logBuffer[l]=0; - l--; - } - - if (level <= screenloglevel) - { - printf("%s\n", logBuffer); - fflush(stdout); - } - - if (level <= fileloglevel) - { - if (logFile != NULL) - { - fprintf(logFile, "%s\n", logBuffer); - fflush(logFile); - } - } - - if (level <= socketloglevel) - { - if (bLogToSock) - { - // send data -#ifndef __NT__ - write(logSocket, logBuffer, strlen(logBuffer)); -#else - send(logSocket, logBuffer, strlen(logBuffer), 0); -#endif - } - } - free (logBuffer); -} - -void logf(const char* pszFormat, ...) -{ - char buf[1024]; - va_list arglist; - va_start(arglist, pszFormat); - buf[0] = 0; - vsprintf(&buf[strlen(buf)], pszFormat, arglist); - va_end(arglist); - strcat(buf, "\n"); - log(buf); -} - +/* log.c + Logging facilities for displaying information on screen, as well as + (optional) storing it to a file and transmitting it over the network. + + Part of the swftools package. + + Copyright (c) 2001 Matthias Kramm + + This file is distributed under the GPL, see file COPYING for details */ + +#ifdef __NT__ +#include "stdafx.h" +#include +#include +#include +#include +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 +#else +#include +#include +#include +#include +#include +#endif + +#include "log.h" + +#define LOGLEVEL_FATAL 0 +#define LOGLEVEL_ERROR 1 +#define LOGLEVEL_WARNING 2 +#define LOGLEVEL_NOTICE 3 +#define LOGLEVEL_VERBOSE 4 +#define LOGLEVEL_DEBUG 5 + +int screenloglevel; +int fileloglevel; +int socketloglevel; +FILE *logFile = 0; +#ifdef __NT__ +SOCKET logSocket; +#else +int logSocket = 0; +#endif + +char bLogToSock = 0; + +void initlogSocket(char* servAddr, char* logPort); + +void initLog(char* pLogName, int fileloglevel, char* servAddr, char* logPort, int serverlevel, int screenlevel) +{ + screenloglevel = screenlevel; + fileloglevel = fileloglevel; + socketloglevel = screenlevel; + logFile = NULL; + bLogToSock = 0; + + if (pLogName && fileloglevel>=0) + logFile = fopen(pLogName, "a+"); + bLogToSock = (servAddr && logPort && (serverlevel>=0)); + if(bLogToSock) + initlogSocket(servAddr, logPort); +} + +void initlogSocket(char* servAddr, char* logPort) +{ +#ifndef __NT__ + bLogToSock = 0; +#else + // init winsock + // check and prepare WinSock DLL + WORD wVersionRequested = MAKEWORD( 2, 2 ); + WSADATA wsaData; + if ( WSAStartup(wVersionRequested, &wsaData) != 0 ) + { + bLogToSock = false; + return; + } + // Confirm that the WinSock DLL supports 2.2. + // Note that if the DLL supports versions greater + // than 2.2 in addition to 2.2, it will still return + // 2.2 in wVersion since that is the version we + // requested. + + if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) + { + bLogToSock = false; + return; + } + + struct hostent *hp; + hp = gethostbyname(servAddr); + if (hp == NULL) // we don't know who this host is + { + bLogToSock = false; + return; + } + + // connect socket + sockaddr_in SocketAddress; + + memset(&SocketAddress, 0, sizeof(SocketAddress)); + memcpy((char*)&SocketAddress.sin_addr, hp->h_addr, hp->h_length); // set address + SocketAddress.sin_family = hp->h_addrtype; + SocketAddress.sin_port = htons((u_short)atoi(logPort)); + + logSocket = socket(hp->h_addrtype, SOCK_STREAM, 0); + if (logSocket == INVALID_SOCKET) + { + bLogToSock = false; + return; + } + + // try to connect to the specified socket + if ( connect(logSocket, (struct sockaddr*)&SocketAddress, sizeof (SocketAddress)) == SOCKET_ERROR) { + bLogToSock = false; + return; + } + bLogToSock = true; +#endif +} + +void exitLog() +{ + // close socket communication + if(bLogToSock) +#ifndef __NT__ + close(logSocket); +#else + closesocket(logSocket); +#endif + // close file + if(logFile != NULL) + fclose(logFile); +} + + +static char * logimportance[]= {"Fatal","Error","Warning","Notice","Verbose","Debug"}; +static int loglevels=6; +static char * logimportance2[]= {" ","FATAL ","ERROR ","WARNING","NOTICE ","VERBOSE","DEBUG "}; +void log(char* logString) +{ + char timebuffer[32]; + char* logBuffer; + char dbuffer[9]; + char tbuffer[9]; + int level; + char*lt; + char*gt; + int l; + + logBuffer = (char*)malloc (strlen(logString) + 24 + 15); +#ifndef __NT__ + { + /*time_t t = time(0); + tm*t2 = localtime(t); + strftime(dbuffer, 8, "%m %d", t2); + strftime(tbuffer, 8, "%m %d", t2); + dbuffer[0]=0; //FIXME + tbuffer[0]=0;*/ + time_t t = time(0); + char* a = ctime(&t); + int l = strlen(a); + while(a[l-1] == 13 || a[l-1] == 10) + l--; + a[l]=0; + sprintf(timebuffer, "%s", a); + } +#else + _strdate( dbuffer ); + _strtime( tbuffer ); + sprintf(timebuffer, "%s - %s",dbuffer,tbuffer); +#endif + + // search for field + level = -1; + lt=strchr(logString, '<'); + gt=strchr(logString, '>'); + if(lt && gt && lt=0) + { + logBuffer[l]=0; + l--; + } + + if (level <= screenloglevel) + { + printf("%s\n", logBuffer); + fflush(stdout); + } + + if (level <= fileloglevel) + { + if (logFile != NULL) + { + fprintf(logFile, "%s\n", logBuffer); + fflush(logFile); + } + } + + if (level <= socketloglevel) + { + if (bLogToSock) + { + // send data +#ifndef __NT__ + write(logSocket, logBuffer, strlen(logBuffer)); +#else + send(logSocket, logBuffer, strlen(logBuffer), 0); +#endif + } + } + free (logBuffer); +} + +void logf(const char* pszFormat, ...) +{ + char buf[1024]; + va_list arglist; + va_start(arglist, pszFormat); + buf[0] = 0; + vsprintf(&buf[strlen(buf)], pszFormat, arglist); + va_end(arglist); + strcat(buf, "\n"); + log(buf); +} +