new logger works now

FossilOrigin-Name: 8caefb55dcea0bebc0d75368d38571c71bbf656b7bcea4d4c34bfda93367982a
This commit is contained in:
7u83@mail.ru 2018-03-05 06:18:02 +00:00
parent cd45e604f3
commit 61183b47ae
10 changed files with 229 additions and 264 deletions

View File

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<CodeLite_Workspace Name="actube" Database="">
<Project Name="ac" Path="ac.project" Active="Yes"/>
<Project Name="ac" Path="ac.project" Active="No"/>
<Project Name="wtp" Path="wtp.project" Active="No"/>
<Project Name="mod_cipwap" Path="mod_cipwap.project" Active="No"/>
<Project Name="mod_capwap" Path="mod_capwap.project" Active="No"/>
<Project Name="mod_cisco" Path="mod_cisco.project" Active="No"/>
<Project Name="libcw" Path="libcw.project" Active="No"/>
<Project Name="libcw" Path="libcw.project" Active="Yes"/>
<Project Name="mod_capwap80211" Path="mod_capwap80211.project" Active="No"/>
<Project Name="mod_fortinet" Path="mod_fortinet.project" Active="No"/>
<BuildMatrix>

View File

@ -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;

View File

@ -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 && i<len-1) ? "|" : " ";
pdst += sprintf(pdst, "%02X%s", data[i] & 0xff, sp);
marker = ((i+1)% settings->marker_distance==0 && i<len-1)
? settings->marker_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; i<settings->row_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; row<rows; row++){
int n;
pdst += cw_format_dump_row(pdst,data+row*settings->rowlen,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; row<rows; row++){
int rlen, pos;
pos = row * settings->row_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;
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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

View File

@ -19,108 +19,98 @@
#include <stdio.h>
#include <stdarg.h>
#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();
}
}

View File

@ -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

View File

@ -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 */
};

View File

@ -17,21 +17,29 @@
*/
#include <stdarg.h>
#include <stdio.h>
#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 */
};