diff --git a/actube.workspace b/actube.workspace index b21adfd1..e0162c79 100644 --- a/actube.workspace +++ b/actube.workspace @@ -1,11 +1,11 @@ - + - + diff --git a/src/ac/ac_main.c b/src/ac/ac_main.c index 6911c7fa..4abddd97 100644 --- a/src/ac/ac_main.c +++ b/src/ac/ac_main.c @@ -98,15 +98,20 @@ extern void test_sets(); int main(int argc, char *argv[]) { +/* cw_log_init(); + cw_log(LOG_ERROR,"Hello Debug World222"); + exit(0); +*/ +/* char * dump_data = "Eine kleine Mickey Maus zog sich mal die Hosen\ aus, zog sie wieder an, und du bist dran. Dran bist du noch lange nicht\ musst erst sagen, wie alt du bist."; - char * result = cw_format_dump(dump_data,strlen(dump_data),0); + char * result = cw_format_dump(dump_data,strlen(dump_data),NULL); printf("Dump Result:\n%s\n", result); exit(0); - +*/ /* char data[100]; mavl_t im; diff --git a/src/cw/cw_format_dump.c b/src/cw/cw_format_dump.c index 6aec84cb..12752285 100644 --- a/src/cw/cw_format_dump.c +++ b/src/cw/cw_format_dump.c @@ -7,34 +7,53 @@ static struct cw_FormatDumpSettings CW_FORMAT_DUMP_SETTINGS = { - 32/*CW_FORMAT_DUMP_ROW_LEN*/, /* rowlen */ - 1, /* ascii */ - 0, /* settings->invlen */ - "\n\t", /* dump_prefix */ + 32, /* row_len */ + 8, /* marker_distance */ + '|', /* marker_char */ + 1, /* ascii */ + 0, /* inv_len */ + '*', /* inv_char */ + "\n\t", /* dump_prefix */ + " ", /* ascii_prefix */ + "\n\t" /* newline */ }; +void cw_format_get_dump_defaults(struct cw_FormatDumpSettings * settings) +{ + memcpy(settings, &CW_FORMAT_DUMP_SETTINGS, + sizeof(struct cw_FormatDumpSettings)); +} +static int cw_format_dump_row(char *dst, const uint8_t * data, int len, + struct cw_FormatDumpSettings * settings){ + char *pdst, marker; + int i; -static int cw_format_dump_row(char *dst, const uint8_t * data, int len){ - char *pdst = dst; - int i; - char *sp; + pdst = dst; for (i = 0; i < len; i++) { - sp = ((i+1)%4==0 && imarker_distance==0 && imarker_char + : ' '; + pdst += sprintf(pdst, "%02X%c", data[i] & 0xff, marker); } - pdst+=sprintf(pdst," "); - for (i = 0; i < len; i++) { - int c = data[i] & 0xff; - if (c < 0x20 || c > 0x7f) - c = '.'; - pdst+=sprintf(pdst,"%c",c); + if (settings->ascii){ + for(i=len; irow_len; i++){ + pdst += sprintf(pdst," "); + } + + pdst+=sprintf(pdst,"%s",settings->ascii_prefix); + for (i = 0; i < len; i++) { + int c = data[i] & 0xff; + if (c < 0x20 || c > 0x7f) + c = '.'; + pdst+=sprintf(pdst,"%c",c); + } } - pdst+=sprintf(pdst,"%s","\n"); + pdst+=sprintf(pdst,"%s",settings->newline); return pdst-dst; } @@ -52,84 +71,44 @@ static int cw_format_dump_row(char *dst, const uint8_t * data, int len){ char *cw_format_dump(const uint8_t * data, int len, struct cw_FormatDumpSettings *settings) { - int i; - - int row,rows; + int row,rows,size; + char *dst, *pdst; - - - if (!settings) settings = &CW_FORMAT_DUMP_SETTINGS; - rows = len / settings->rowlen; + rows = len / settings->row_len; + if (len % settings->row_len) + rows++; + + size = strlen(settings->dump_prefix) + + rows * strlen(settings->newline) + + (settings->ascii ? rows*settings->row_len*3 : len * 3); + + if (settings->ascii){ + size += len + rows*strlen(settings->ascii_prefix); + } - printf("Number fo rows: %d\n",rows); - - int md; - if (settings->ascii) - md = 2; - else - md = 1; - - char *dst = malloc(2 * (md * (len * 3 + (rows * 2) + 8 ))); + dst = malloc(size+1); if (!dst) return NULL; - if (len % settings->rowlen) - rows++; - - char *pdst = dst; - - pdst += sprintf(pdst, "%s",settings->dump_prefix); -/* pdst += 2; */ - - char asc_buffer[128]; - char *ascdst = asc_buffer; - pdst = dst; - for (row; rowrowlen,settings->rowlen); - } - return dst; + pdst += sprintf(pdst, "%s",settings->dump_prefix); - - for (i = 0; i < len; i++) { - char *sp = " "; - if (i == settings->invlen - 1) - sp = "|"; - - pdst += sprintf(pdst, "%02X%s", data[i] & 0xff, sp); - if (settings->ascii) { - int c = data[i] & 0xff; - if (c < 0x20 || c > 0x7f) - c = '.'; - *ascdst = c; - ascdst++; + for (row=0; rowrow_len; + if (len - pos > settings->row_len){ + rlen = settings->row_len; } - - if ((i + 1) % settings->rowlen == 0) { - int l; - if (settings->ascii) { - *ascdst = 0; - l = sprintf(pdst, " | %s\n\t", asc_buffer); - ascdst = asc_buffer; - - } else { - l = sprintf(pdst, "\n\t"); - } - pdst += l; + else{ + rlen = len-pos; } - - } - - if (settings->ascii) { - *ascdst = 0; - if (strlen(asc_buffer)) - pdst += sprintf(pdst, " | %s", asc_buffer); + pdst += cw_format_dump_row(pdst,data+pos, rlen, settings); } return dst; + } diff --git a/src/cw/dbg.c b/src/cw/dbg.c index 6a9ebbd8..5478dcf4 100644 --- a/src/cw/dbg.c +++ b/src/cw/dbg.c @@ -54,10 +54,10 @@ */ - +/* void (*cw_dbg_cb) (int level, const char *format, ...) = CW_LOG_DEFAULT_LOG; void (*cw_dbg_vcb) (int level, const char *fromat, va_list args) = CW_LOG_DEFAULT_VLOG; - +*/ uint32_t cw_dbg_opt_display = 0; @@ -613,7 +613,8 @@ void cw_dbg_colored(int level, const char *file, int line, const char *format, . va_list args; va_start(args, format); - cw_log_vcb(level, fbuf, args); +/* cw_log_vcb(level, fbuf, args);*/ + cw_log_console_writer.write(LOG_DEBUG,fbuf,args,&cw_log_console_writer); va_end(args); } diff --git a/src/cw/debug.c b/src/cw/debug.c index 7da2a1f9..1dadcd39 100644 --- a/src/cw/debug.c +++ b/src/cw/debug.c @@ -4,8 +4,11 @@ #include "dbg.h" #include "log.h" + + void cw_debug(const char * file, int line, struct dbg_Context *ctx, int level, const char * format, ...){ + va_list args; if (!(cw_dbg_is_level(level))) return; @@ -18,9 +21,9 @@ void cw_debug(const char * file, int line, struct dbg_Context *ctx, int level, ); */ - va_list args; + va_start(args, format); - cw_log_vcb(level, format, args); + cw_log_console_writer.write(LOG_DEBUG,format,args,&cw_log_console_writer); va_end(args); } diff --git a/src/cw/format.h b/src/cw/format.h index 0fcdee28..729908fc 100644 --- a/src/cw/format.h +++ b/src/cw/format.h @@ -85,21 +85,27 @@ int format_dot11_fc(char *dst, uint16_t fc); -#ifndef CW_FORMAT_DUMP_ROW_LEN - #define CW_FORMAT_DUMP_ROW_LEN 16 -#endif struct cw_FormatDumpSettings { - int rowlen; + int row_len; + int marker_distance; + char marker_char; int ascii; - int invlen; + + int inv_len; + char inv_char; const char * dump_prefix; + const char * ascii_prefix; + const char *newline; }; char *cw_format_dump(const uint8_t * data, int len, struct cw_FormatDumpSettings *settings); +void cw_format_get_dump_defaults(struct cw_FormatDumpSettings * settings); + + /**@}*/ #endif diff --git a/src/cw/log.c b/src/cw/log.c index 69594f5a..8579f9b2 100644 --- a/src/cw/log.c +++ b/src/cw/log.c @@ -19,108 +19,98 @@ #include #include +#include "strlist.h" #include "log.h" +/* void (*cw_log_cb)(int level,const char * fromat, ...) = CW_LOG_DEFAULT_LOG; void (*cw_log_vcb)(int level,const char * fromat, va_list args) = CW_LOG_DEFAULT_VLOG; +*/ + +const char * cw_log_name = "actube"; -const char * cw_log_name = "cw"; -static int colored=1; +static struct cw_strlist_elem prefix[] = { + {LOG_DEBUG, "DBG"}, + {LOG_INFO, "INF" }, + {LOG_NOTICE, "NOTICE"}, + {LOG_WARNING, "WARNING"}, + {LOG_ERR,"ERROR"}, + {CW_STR_STOP, NULL} +}; + +static struct cw_strlist_elem prefix_color[] = { + {LOG_DEBUG, ""}, + {LOG_INFO, "" }, + {LOG_NOTICE, ""}, + {LOG_WARNING, ""}, + {LOG_ERR,"\033[1;31m"}, + {CW_STR_STOP, NULL} +}; + +static struct cw_strlist_elem text_color[] = { + {LOG_DEBUG, ""}, + {LOG_INFO, "" }, + {LOG_NOTICE, ""}, + {LOG_WARNING, ""}, + {LOG_ERR,"\033[22m"}, + {CW_STR_STOP, NULL} +}; + +static struct cw_strlist_elem end_color[] = { + {LOG_DEBUG, ""}, + {LOG_INFO, "" }, + {LOG_NOTICE, ""}, + {LOG_WARNING, ""}, + {LOG_ERR,"\033[22;39m"}, + {CW_STR_STOP, NULL} +}; + +static struct cw_LogWriter * writers[] = { + &cw_log_syslog_writer, + &cw_log_console_writer, + NULL +}; -static const char * get_log_prefix(int level) +void cw_log(int prio, const char *format, ...) { - switch(level){ - case LOG_DEBUG: - return "DBG"; - case LOG_INFO: - return "INF"; - case LOG_ERR: - return "ERROR"; - case LOG_WARNING: - return "WARNING"; - - } - return ""; -} - -static const char * get_log_color_on(int level){ - if ( !colored ) - return ""; - - - switch(level){ - case LOG_DEBUG: - return ""; - case LOG_INFO: - return ""; - case LOG_ERR: - return "\033[1;31m"; - } - return ""; - -} - -static const char * get_log_color_ontext(int level){ - if ( !colored ) - return ""; - - - switch(level){ - case LOG_DEBUG: - return ""; - case LOG_INFO: - return ""; - case LOG_ERR: - return "\033[22m"; - } - return ""; - -} - - - - -static const char * get_log_color_off(int level){ - if ( !colored ) - return ""; - - - switch(level){ - case LOG_DEBUG: - return ""; - case LOG_INFO: - return ""; - case LOG_ERR: - return "\033[22;39m"; - } - return ""; - -} - - - - - -void cw_log_colored(int level, const char *format, ...) -{ - char fbuf[1024]; - - sprintf(fbuf, "%s%s%s: %s%s", - get_log_color_on(level), - get_log_prefix(level), - get_log_color_ontext(level), - format, - get_log_color_off(level) - ); - - va_list args; - va_start(args, format); - cw_log_vcb(level,fbuf,args); - va_end(args); + char fbuf[1024]; + int i; + + + + for (i=0; writers[i]; i++){ + + if (writers[i]->colored){ + sprintf(fbuf, "%s%s%s: %s%s", + cw_strlist_get_str(prefix_color,prio), + cw_strlist_get_str(prefix,prio), + cw_strlist_get_str(text_color,prio), + format, + cw_strlist_get_str(end_color,prio) + ); + + } + else{ + sprintf(fbuf, "%s: %s", + cw_strlist_get_str(prefix,prio), + format + ); + + } + va_start(args, format); + writers[i]->write(prio,fbuf,args,writers[i]); + va_end(args); + } } +void cw_log_init(){ + int i; + for (i=0; writers[i]; i++){ + writers[i]->open(); + } +} diff --git a/src/cw/log.h b/src/cw/log.h index 1f7f567f..1720079f 100644 --- a/src/cw/log.h +++ b/src/cw/log.h @@ -39,71 +39,42 @@ #define CW_LOG_DEFAULT_VLOG cw_log_vfile #endif +struct cw_LogWriter { + const char * name; + int colored; + void (*open) (); + void (*write) (int prio, const char *format, va_list args, struct cw_LogWriter *w); + void (*close) (); + void * priv; +}; + +extern struct cw_LogWriter cw_log_syslog_writer; +extern struct cw_LogWriter cw_log_console_writer; + +void cw_log_init(); +void cw_log(int level, const char *format, ...); +extern const char *cw_log_name; +/****/ - - - -/* - -//extern void cw_log_dbg_(int type, const char *file, int line, const char *fromat, ...); -//extern void cw_log_dbg_dmp_(int type, const char *file, int line, const uint8_t * data, - //int len, const char *format, ...); - -*/ - - -/*#ifdef WITH_CW_LOG*/ -/*#define cw_log(level,...) cw_log_colored(level,__VA_ARGS__)*/ - -#define cw_log cw_log_colored - -/*#else -#define cw_log(...) -#endif -*/ -/* -//#ifdef WITH_CW_LOG_DEBUG - - -//#define cw_log_dbg(type,...) cw_log_dbg_(type,__FILE__,__LINE__,__VA_ARGS__) - - - -//#define cw_log_dbg_dmp(type,str,len,...) cw_log_dbg_dmp_(type,__FILE__,__LINE__,str,len,__VA_ARGS__) -//#define cw_dbg_dmp(type,str,len,...) cw_log_dbg_dmp_(type,__FILE__,__LINE__,str,len,__VA_ARGS__) - -//#define cw_dbg_msgelem(msgtype,msgelemtype,msgbuf,msglen) cw_dbg_msgelem_(msgtype,msgelemtype,msgbuf,msglen) -//#define cw_dbg_missing_mand_elems(conn, msgtyoe, mand) cw_dbg_missing_mand_elems_(conn, msgtyoe, mand) - -//#define lw_dbg_elem(msgtype,msgelemtype,msgbuf,msglen) lw_dbg_elem_(msgtype,msgelemtype,msgbuf,msglen) - -//#else -//#define cw_log_dbg(...) -//#define cw_dbg(...) - -//#define cw_dbg_missing_mand_elems(conn, msgtyoe, mand) - -//#endif -*/ - - -extern void (*cw_log_cb) (int level, const char *fromat, ...); +/*extern void (*cw_log_cb) (int level, const char *fromat, ...); extern void (*cw_log_vcb) (int level, const char *fromat, va_list args); - +*/ /* Syslog functins */ -extern void cw_log_syslog(int level, const char *format, ...); -extern void cw_log_vsyslog(int level,const char * format, va_list args); + + /* Log to File functions */ + +/* void cw_log_vfile(int level,const char * format, va_list args); void cw_log_file(int level,const char *format, ...); +*/ -void cw_log_colored(int level, const char *format, ...); /* @@ -112,6 +83,8 @@ void cw_log_colored(int level, const char *format, ...); //extern void (*cw_log_debug_cbs[]) (const char *fromat, ...); */ + +/* extern int cw_log_debug_dump_(int level, const uint8_t * data, int len, const char *format, ...); @@ -138,6 +111,6 @@ struct cw_dbg_cfgstrs { extern struct cw_dbg_cfgstrs cw_dbg_cfgstrs[]; - +*/ #endif diff --git a/src/cw/log_file.c b/src/cw/log_file.c index b9abb44f..f3895d9a 100644 --- a/src/cw/log_file.c +++ b/src/cw/log_file.c @@ -4,23 +4,23 @@ #include "log.h" -int cw_log_file_flags = LOG_PERROR; -char * cw_log_filename = NULL; +static void open(){ +} +static void close(){ -void cw_log_vfile(int level,const char * format, va_list args) +} +static void write(int level,const char * format, va_list args, struct cw_LogWriter * w) { - vprintf(format,args); + vprintf(format,args); printf("\n"); } -void cw_log_file(int level,const char *format, ...) -{ - va_list args; - va_start(args, format); - cw_log_vfile(level,format,args); - va_end(args); - closelog(); -} - - +struct cw_LogWriter cw_log_console_writer = { + "syslog", /* name */ + 1, /* colored */ + open, /* open */ + write, /* write */ + close, /* close */ + NULL /* priv */ +}; diff --git a/src/cw/log_syslog.c b/src/cw/log_syslog.c index 628add20..46113742 100644 --- a/src/cw/log_syslog.c +++ b/src/cw/log_syslog.c @@ -17,21 +17,29 @@ */ #include +#include + #include "log.h" -void cw_log_vsyslog(int level,const char * format, va_list args) +static void open(){ +/* openlog (cw_log_name, LOG_PERROR | LOG_CONS | LOG_PID | LOG_NDELAY, LOG_USER); */ + openlog (cw_log_name, LOG_NDELAY, LOG_USER); +} + +static void close(){ + +} +static void write(int level,const char * format, va_list args, struct cw_LogWriter * w) { - openlog (cw_log_name, LOG_PERROR | LOG_CONS | LOG_PID | LOG_NDELAY, LOG_DEBUG); vsyslog(level,format,args); } -void cw_log_syslog(int level,const char *format, ...) -{ - va_list args; - va_start(args, format); - cw_log_vsyslog(level,format,args); - va_end(args); - closelog(); -} - +struct cw_LogWriter cw_log_syslog_writer = { + "syslog", /* name */ + 0, /* colored */ + open, /* open */ + write, /* write */ + close, /* close */ + NULL /* priv */ +};