./ MultiCS.r82 / debug.c
#include "common.h" #include <stdio.h> #include <string.h> #include <stdarg.h> #include <unistd.h> #include <stdint.h> #ifdef WIN32 #include <windows.h> #include <sys/types.h> #else #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <signal.h> #include <errno.h> #include <sys/time.h> #include <time.h> #include <sys/socket.h> #include <netdb.h> #include <netinet/in.h> #include <netinet/ip.h> #include <netinet/tcp.h> #include <errno.h> #endif #include "debug.h" int flag_debugtrace=0; struct trace_data trace; char dbgline[MAX_DBGLINES][512]; int idbgline = 0; void add_dbgline(char *line) { strcpy( dbgline[idbgline], line ); idbgline++; if (idbgline>=MAX_DBGLINES) idbgline = 0; } void encryptstr( unsigned char *src, unsigned char *dest) { unsigned char last = 0; *dest= 0; dest++; while(*src) { *dest = *src^0xA5^last; last = *src; src++; dest++; } *dest = 0; } void decryptstr( char *src, char *dest) { unsigned char last = 0; if (*src!=0) return; src++; while (*src) { *dest = *src^0xA5^last; last = *dest; src++; dest++; } *dest = 0; } void debug(char *str) { add_dbgline(str); if (flag_debugscr) printf( "%s", str ); if (flag_debugfile) { FILE *fhandle; fhandle=fopen(debug_file, "at"); if (fhandle!=0) { fprintf(fhandle,"%s", str ); fclose(fhandle); } } if ( flag_debugtrace ) sendto(trace.sock, str, strlen(str), 0, (struct sockaddr *)&trace.addr, sizeof(trace.addr) ); } char* debugtime(char *str) { struct timeval tv; gettimeofday( &tv, NULL ); int ms = tv.tv_usec / 1000; int hr = (1+(tv.tv_sec/3600)) % 24; int mn = (tv.tv_sec % 3600) /60; int sd = (tv.tv_sec % 60); sprintf( str, "[%02d:%02d:%02d.%03d]", hr,mn,sd,ms); return str; } /* struct { int type; // ALL, CCcam, Servers, Profiles/Newcamd, Mgcamd union { struct { int srv; // 0 all int cli; } cccam; struct { int cli; } mgcamd; struct { int peer; } cache; struct { int profiles; int newcamdcli; } profiles; struct { int server; } servers; } fdebug; 0xff ff ff ff TYPE, SRV/PROFILEID/ */ uint32_t flagdebug = 0; // ALL uint32_t getdbgflag( int i, int j, int k) { return (i<<24) | (j<<16) | k; } // to see servers/clients when profile is for debug uint32_t getdbgflagpro( int i, int j, int k, int csid ) { if ( (flagdebug>>24)==DBG_NEWCAMD ) return ( (DBG_NEWCAMD<<24) | (csid<<16) ); else return (i<<24) | (j<<16) | k; } int chkdbgflag( uint32_t f ) { uint32_t i,j; // i = flagdebug>>24; if (!i) return 1; // ok j = f>>24; if (i!=j) return 0; // i = 0xff&(flagdebug>>16); j = 0xff&(f>>16); if (i!=j) { if (i!=0) return 0; // nok } // i = 0xffff&flagdebug; if (!i) return 1; // ok j = 0xffff&f; if (i!=j) return 0; return 1; } // Formatted Debug void debugf(uint32_t flag, char *format, ...) { if (!chkdbgflag(flag)) return; int index; char debugline[1024]; char fstr[1024]; if (format[0]==0) { // DECRYPT decryptstr(format, fstr); } else strcpy(fstr, format); if (fstr[0]==' ') { // ADD TIME struct timeval tv; gettimeofday( &tv, NULL ); int ms = tv.tv_usec / 1000; int hr = (1+(tv.tv_sec/3600)) % 24; int mn = (tv.tv_sec % 3600) /60; int sd = (tv.tv_sec % 60); sprintf( debugline, "[%02d:%02d:%02d.%03d]", hr,mn,sd,ms); index = strlen(debugline); } else index=0; va_list args; va_start (args, fstr); vsprintf( debugline+index, fstr, args); va_end( args ); debug(debugline); } #define DUMP_LENGTH 0x10 void debughex(uint8_t *buffer, int len) { int i; for ( i = 0; i < len; ++i ) { if (!(i%DUMP_LENGTH)) debugf(0," \t %04x: ",i); debugf(0,"%02X ", buffer[i]); if (!((i+1)%DUMP_LENGTH)) debug("\n"); } if (i%DUMP_LENGTH) debug("\n"); } #define DUMP_LENGTH 0x10 void bin2hex(uint8_t *src, uint8_t *buf, int len) { int pos = 0; int i; for ( i = 0; i < len; ++i ) { if (!(i%DUMP_LENGTH)) { sprintf( buf+pos, " \t %04x: ",i); pos += 10; } sprintf(buf+pos, "%02X ", src[i]); pos += 3; if (!((i+1)%DUMP_LENGTH)) { buf[pos] = '\n'; pos++; } } if (i%DUMP_LENGTH) { buf[pos] = '\n'; pos++; } buf[pos] = 0; } void fdebug(char *str) { FILE *fhandle; // sprintf( fdebug_file,"%s.log", config_file); fhandle=fopen(debug_file, "at"); if (fhandle!=0) { fprintf(fhandle,"%s", str ); fclose(fhandle); } } // Formatted fdebug void fdebugf(char *format, ...) { int index; char fdebugline[4096]; if (format[0]==' ') { // ADD TIME struct timeval tv; gettimeofday( &tv, NULL ); int ms = tv.tv_usec / 1000; int hr = (1+(tv.tv_sec/3600)) % 24; int mn = (tv.tv_sec % 3600) /60; int sd = (tv.tv_sec % 60); sprintf( fdebugline, "[%02d:%02d:%02d.%03d]", hr,mn,sd,ms); index = strlen(fdebugline); } else index=0; va_list args; va_start (args, format); vsprintf( fdebugline+index, format, args); va_end( args ); fdebug(fdebugline); }