From f7dbcac0d8e484727e8cc9f3abd52ddd068504c2 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Mon, 25 Aug 2014 21:39:26 +0000 Subject: [PATCH] cw_dbg_missing_mand_elems added. FossilOrigin-Name: 8c59a56c7d6388abc4c4bef75e96b7302e9ea6a714fdaf5a68cba84bd8066073 --- src/capwap/cw_log.h | 6 + src/capwap/cw_log_debug.c | 246 +++++++++++++++++++------------------- 2 files changed, 130 insertions(+), 122 deletions(-) diff --git a/src/capwap/cw_log.h b/src/capwap/cw_log.h index a8942f5f..f3b1ee74 100644 --- a/src/capwap/cw_log.h +++ b/src/capwap/cw_log.h @@ -94,6 +94,7 @@ extern int cw_dbg_opt_level; #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) #else #define cw_log_dbg(...) @@ -108,6 +109,9 @@ extern int cw_dbg_opt_level; #define cw_log_debug0_dump(level,str,len) #define cw_log_debug1_dump(level,str,len) #define cw_log_debug2_dump(level,str,len) + + #define cw_dbg_missing_mand_elems(conn, msgtyoe, mand) + #endif extern void (*cw_log_cb)(int level,const char * fromat, ...); @@ -121,6 +125,8 @@ extern void cw_log_tofile(int level,const char *format, ...); extern void cw_dbg_msgelem_(int msg, int msgelem, const uint8_t *msgbuf,int len); +struct conn; +extern void cw_dbg_missing_mand_elems_(struct conn * conn,int msgtyoe, int * mand); diff --git a/src/capwap/cw_log_debug.c b/src/capwap/cw_log_debug.c index fa0233ee..b6206fcc 100644 --- a/src/capwap/cw_log_debug.c +++ b/src/capwap/cw_log_debug.c @@ -23,98 +23,101 @@ #include "cw_log.h" #include "capwap.h" +#include "cw_util.h" -static void cw_log_debug0_(const char *format, ...) +static void cw_log_debug0_(const char *format, ...) { - if (cw_log_debug_level<0) + if (cw_log_debug_level < 0) return; va_list args; - va_start(args, format); - cw_vlog_(LOG_DEBUG,format,args); + va_start(args, format); + cw_vlog_(LOG_DEBUG, format, args); va_end(args); - closelog(); + closelog(); } -static void cw_log_debug1_(const char *format, ...) +static void cw_log_debug1_(const char *format, ...) { - if (cw_log_debug_level<1) + if (cw_log_debug_level < 1) return; va_list args; - va_start(args, format); - cw_vlog_(LOG_DEBUG,format,args); + va_start(args, format); + cw_vlog_(LOG_DEBUG, format, args); va_end(args); - closelog(); + closelog(); } -static void cw_log_debug2_(const char *format, ...) +static void cw_log_debug2_(const char *format, ...) { - if (cw_log_debug_level<2) + if (cw_log_debug_level < 2) return; va_list args; - va_start(args, format); - cw_vlog_(LOG_DEBUG,format,args); + va_start(args, format); + cw_vlog_(LOG_DEBUG, format, args); va_end(args); - closelog(); + closelog(); } -int cw_log_debug_dump_(int level,const uint8_t * data, int len,const char * format, ...) +int cw_log_debug_dump_(int level, const uint8_t * data, int len, + const char *format, ...) { - int maxtlen=2048; + int maxtlen = 2048; int i; int rowlen = CW_LOG_DUMP_ROW_LEN; - int rows = len/rowlen; - int tlen=0; + int rows = len / rowlen; + int tlen = 0; - char * dst = malloc(len*3+(rows*2) + 8+maxtlen); - if ( !dst ) + char *dst = malloc(len * 3 + (rows * 2) + 8 + maxtlen); + if (!dst) return 0; - if (format != NULL){ + if (format != NULL) { va_list args; - va_start(args,format); - tlen = vsnprintf(dst,maxtlen,format,args); + va_start(args, format); + tlen = vsnprintf(dst, maxtlen, format, args); va_end(args); } - if (len%CW_LOG_DUMP_ROW_LEN) + if (len % CW_LOG_DUMP_ROW_LEN) rows++; - - char * pdst=dst+tlen; - sprintf(pdst,"\n\t"); - pdst+=2; - for (i=0; i0x80) - c='.'; - *ascdst=c; + if (cw_dbg_opt_detail & DBG_DETAIL_ASC_DMP) { + int c = data[i] & 0xff; + if (c < 0x20 || c > 0x80) + c = '.'; + *ascdst = c; ascdst++; } - - pdst+=3; - if ((i+1)%rowlen==0){ - int l; - if (cw_dbg_opt_detail & DBG_DETAIL_ASC_DMP){ - *ascdst=0; - l=sprintf(pdst," | %s\n\t",asc_buffer); - ascdst=asc_buffer; + pdst += 3; + if ((i + 1) % rowlen == 0) { + int l; + if (cw_dbg_opt_detail & DBG_DETAIL_ASC_DMP) { + *ascdst = 0; + l = sprintf(pdst, " | %s\n\t", asc_buffer); + ascdst = asc_buffer; + + } else { + l = sprintf(pdst, "\n\t"); } - else{ - l=sprintf(pdst,"\n\t"); - } - pdst+=l; + pdst += l; } } - if (cw_dbg_opt_detail & DBG_DETAIL_ASC_DMP){ - *ascdst=0; + if (cw_dbg_opt_detail & DBG_DETAIL_ASC_DMP) { + *ascdst = 0; if (strlen(asc_buffer)) - pdst+=sprintf(pdst," | %s",asc_buffer); + pdst += sprintf(pdst, " | %s", asc_buffer); } if (cw_dbg_opt_detail & DBG_DETAIL_LINE_NUMBERS) - cw_log(LOG_DEBUG,"%s:%d: %s",file,line,dst); + cw_log(LOG_DEBUG, "%s:%d: %s", file, line, dst); else - cw_log(LOG_DEBUG,dst); + cw_log(LOG_DEBUG, dst); - free (dst); + free(dst); return; } @@ -230,59 +234,57 @@ void cw_log_dbg_dmp_(int level,const char * file, int line, const uint8_t * data -void (*cw_log_debug_cbs[])(const char * fromat, ...) = { - cw_log_debug0_, - cw_log_debug1_, - cw_log_debug2_ -}; +void (*cw_log_debug_cbs[]) (const char *fromat, ...) = { +cw_log_debug0_, cw_log_debug1_, cw_log_debug2_}; /** - * print debug info - */ + * print debug info for message elements + */ -void cw_dbg_msgelem_(int msg, int msgelem, const uint8_t *msgbuf,int len) +void cw_dbg_msgelem_(int msg, int msgelem, const uint8_t * msgbuf, int len) { if (!cw_dbg_is_level(DBG_CW_MSGELEM)) return; - const char * elemname; + const char *elemname; char vendorname[256]; - if (msgelem==CWMSGELEM_VENDOR_SPECIFIC_PAYLOAD){ - int vendor = ntohl(*((uint32_t*)msgbuf)); - int type = ntohs( * ((uint16_t*)(msgbuf+4)) ); - sprintf(vendorname,"%s/%s/%d", - (char*)cw_msgelemtostr(msgelem), - (char*)cw_ianavendoridtostr(vendor), - type); - elemname=vendorname; - } - else{ - elemname=cw_msgelemtostr(msgelem); + if (msgelem == CWMSGELEM_VENDOR_SPECIFIC_PAYLOAD) { + int vendor = ntohl(*((uint32_t *) msgbuf)); + int type = ntohs(*((uint16_t *) (msgbuf + 4))); + sprintf(vendorname, "%s/%s/%d", + (char *) cw_msgelemtostr(msgelem), + (char *) cw_ianavendoridtostr(vendor), type); + elemname = vendorname; + } else { + elemname = cw_msgelemtostr(msgelem); } if (!cw_dbg_is_level(DBG_CW_MSGELEM_DMP)) - cw_dbg(DBG_CW_MSGELEM,"Reading %s msgelem, type=%d (%s), len=%d", - cw_msgtostr(msg), - msgelem, - elemname, - len); + cw_dbg(DBG_CW_MSGELEM, + "Reading %s msgelem, type=%d (%s), len=%d", + cw_msgtostr(msg), msgelem, elemname, len); else - cw_dbg_dmp(DBG_CW_MSGELEM,msgbuf,len,"Reading %s msgelem, type=%d (%s), len=%d\n\t Dump ...", - cw_msgtostr(msg), - msgelem, - elemname, - len); - - + cw_dbg_dmp(DBG_CW_MSGELEM, msgbuf, len, + "Reading %s msgelem, type=%d (%s), len=%d\n\t Dump ...", + cw_msgtostr(msg), msgelem, elemname, len); +} +void cw_dbg_missing_mand_elems_(struct conn *conn, int msgtype, int *mand) +{ + if (!cw_dbg_is_level(DBG_CW_RFC)) + return; + if (cw_is_missing_mand_elems(mand)) { + char str[512]; + cw_get_missing_mand_elems(str, mand); + cw_dbg(DBG_CW_RFC, "Missing msgelems in %s: %s", + cw_msgtostr(msgtype), str); + } } //cw_dbg(DBG_CW_MSGELEM,"Process discovery req msgelem, type=%d (%s), len=%d",type,cw_msgelemtostr(type),len); //cw_dbg_dmp(DBG_CW_MSGELEM_DMP,msgelem,len,"Dump for msgelem ..."); - -