From 34646183a1e2fbdc5a8c0c44c5b1133c845c350c Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Mon, 19 Mar 2018 16:26:01 +0000 Subject: [PATCH] Debugging colored, cool FossilOrigin-Name: b62ab94004ae914a6c042383ef399141a1a82e49408b6ae3b1422ba3c72733b1 --- actube.workspace | 4 +- libcw.project | 3 +- src/ac/ac_main.c | 2 +- src/cw/ansi_colors.h | 4 +- src/cw/conn_process_packet.c | 30 ++---- src/cw/conn_q_get_packet.c | 3 +- src/cw/{timer_inline.c => cw_clock_lap.c} | 2 - src/cw/cw_in_generic.c | 23 ++-- src/cw/cw_ktv_add.c | 8 +- src/cw/cw_ktv_dump.c | 27 ----- src/cw/cw_process_element.c | 21 ++-- src/cw/cw_put_msg.c | 2 +- src/cw/dbg.c | 45 +++++--- src/cw/dbg.h | 16 +-- src/cw/dbg_strings.c | 2 + src/cw/dtls_openssl.c | 67 ++++++------ src/cw/hdr_print.c | 123 ---------------------- src/cw/ktv.h | 41 ++++++-- src/cw/log.h | 1 + src/cw/mavl.h | 5 +- src/cw/mavl_add.c | 15 +-- src/cw/mlist_create.c | 9 +- src/cw/msgset.c | 4 +- src/cw/sock.h | 7 +- src/cw/timer.h | 4 +- src/mod/capwap/capwap_actions_ac.c | 4 +- src/mod/capwap/capwap_in_wtp_board_data.c | 2 +- src/wtp/wtp_main.c | 2 +- 28 files changed, 194 insertions(+), 282 deletions(-) rename src/cw/{timer_inline.c => cw_clock_lap.c} (99%) delete mode 100644 src/cw/hdr_print.c diff --git a/actube.workspace b/actube.workspace index e0162c79..b8870938 100644 --- a/actube.workspace +++ b/actube.workspace @@ -3,9 +3,9 @@ - + - + diff --git a/libcw.project b/libcw.project index b494f2ab..3019eb5d 100644 --- a/libcw.project +++ b/libcw.project @@ -43,7 +43,6 @@ - @@ -236,7 +235,6 @@ - @@ -299,6 +297,7 @@ + diff --git a/src/ac/ac_main.c b/src/ac/ac_main.c index 8feb7094..fc2aae6d 100644 --- a/src/ac/ac_main.c +++ b/src/ac/ac_main.c @@ -227,7 +227,7 @@ int main (int argc, char *argv[]) fclose(file); - cw_ktv_dump(global_cfg,DBG_INFO,NULL,"CFG:",NULL); + cw_dbg_ktv_dump(global_cfg,DBG_INFO,NULL,"CFG:",NULL); actube_global_cfg = global_cfg; diff --git a/src/cw/ansi_colors.h b/src/cw/ansi_colors.h index 55c1049d..36e4db73 100644 --- a/src/cw/ansi_colors.h +++ b/src/cw/ansi_colors.h @@ -10,7 +10,7 @@ #define ANSI_YELLOW "\x1b[33m" #define ANSI_BLUE "\x1b[34m" #define ANSI_MAGENTA "\x1b[35m" -#define ANSI_CYAN "\x1b[35m" +#define ANSI_CYAN "\x1b[36m" #define ANSI_WHITE "\x1b[37m" #define ANSI_BBLACK "\x1b[90m" @@ -19,7 +19,7 @@ #define ANSI_BYELLOW "\x1b[93m" #define ANSI_BBLUE "\x1b[94m" #define ANSI_BMAGENTA "\x1b[95m" -#define ANSI_BCYAN "\x1b[95m" +#define ANSI_BCYAN "\x1b[96m" #define ANSI_BWHITE "\x1b[97m" #define ANSI_ITALIC "\x1b[3m" diff --git a/src/cw/conn_process_packet.c b/src/cw/conn_process_packet.c index 2e3aebca..95dc6a6b 100644 --- a/src/cw/conn_process_packet.c +++ b/src/cw/conn_process_packet.c @@ -355,7 +355,7 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len, mand_found = mavl_create_conststr(); unrecognized = mlist_create(NULL,NULL,sizeof(uint8_t*)); - cw_dbg(DBG_MSG_PARSING ,"*** parsing message elemtns in %d - (%s) ***", + cw_dbg(DBG_MSG_PARSING ,"*** Parsing message of type %d - (%s) ***", message->type,message->name); /* iterate through message elements */ cw_foreach_elem(elem, elems_ptr, elems_len) { @@ -394,6 +394,10 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len, mlist_append(unrecognized,&elem); continue; } + + if (rc < 0 ){ + continue; + } } @@ -403,32 +407,16 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len, cw_check_missing_mand(message,mand_found); - cw_dbg(DBG_MSG_PARSING," *** done parsing message elements in %d (%s) ***", + cw_dbg(DBG_MSG_PARSING," *** Done parsing message of type %d (%s) ***", message->type,message->name); mavl_destroy(mand_found); + + cw_dbg_ktv_dump(conn->remote_cfg,DBG_CFG_DMP, + " *** Remote CFG dump ***", "CFG:", " *** End of remote CFG dump"); { - mavliter_t it; - const struct cw_Type * type; - cw_dbg (DBG_INFO, "********** THE REMOTE CFG **************\n"); - mavliter_init(&it,conn->remote_cfg); - - - mavliter_foreach(&it){ - char value[500]; - struct cw_KTV * data; - data = mavliter_get(&it); - type = data->type; - type->to_str(data,value,0); - - cw_dbg(DBG_INFO,"RMTCFG: %s (%s): %s",data->key,type->name, value); - } - - - - { mlistelem_t *e; mlist_foreach(e,unrecognized){ diff --git a/src/cw/conn_q_get_packet.c b/src/cw/conn_q_get_packet.c index 15b9e507..81c9c45e 100644 --- a/src/cw/conn_q_get_packet.c +++ b/src/cw/conn_q_get_packet.c @@ -21,6 +21,7 @@ uint8_t * conn_q_get_packet(struct conn * conn) { + int qrpos; struct timespec timespec; clock_gettime(CLOCK_REALTIME,×pec); timespec.tv_sec++; @@ -30,7 +31,7 @@ uint8_t * conn_q_get_packet(struct conn * conn) return NULL; }; - int qrpos = conn->qrpos+1; + qrpos = conn->qrpos+1; if (qrpos==conn->qsize) qrpos=0; conn->qrpos=qrpos; diff --git a/src/cw/timer_inline.c b/src/cw/cw_clock_lap.c similarity index 99% rename from src/cw/timer_inline.c rename to src/cw/cw_clock_lap.c index 19b42ff0..21896afe 100644 --- a/src/cw/timer_inline.c +++ b/src/cw/cw_clock_lap.c @@ -11,5 +11,3 @@ double cw_clock_lap(struct timeval *tv) gettimeofday(&lap, NULL); return (cw_timevaltodouble(&lap) - cw_timevaltodouble(tv)) / 1000000.0; } - - diff --git a/src/cw/cw_in_generic.c b/src/cw/cw_in_generic.c index d23e64e2..302e4532 100644 --- a/src/cw/cw_in_generic.c +++ b/src/cw/cw_in_generic.c @@ -1,26 +1,23 @@ + +#include "capwap.h" #include "msgset.h" #include "ktv.h" #include "log.h" int cw_in_generic(struct cw_ElemHandler * handler, struct cw_ElemHandlerParams * params, - uint8_t * elem_data, int elem_len){ -/* mavldata_t data, *result; - char str[30]; -*/ + uint8_t * elem_data, int elem_len) +{ + cw_KTV_t * result; if (!handler->type){ cw_log(LOG_ERR,"Can't handle element: %s, no type defined",handler->name); - return 0; + return CAPWAP_RESULT_UNRECOGNIZED_MESSAGE_ELEMENT; } - cw_ktv_add(params->conn->remote_cfg, handler->key, handler->type, elem_data,elem_len); + result = cw_ktv_add(params->conn->remote_cfg, handler->key, + handler->type, elem_data,elem_len); -/* - result = handler->type->get(&data,elem_data,elem_len); - result->kv.key = strdup(handler->key); + params->elem=result; - handler->type->to_str(result,str,30); - mavl_add(conn->remote_cfg, result); -*/ - return 0; + return CAPWAP_RESULT_SUCCESS; } diff --git a/src/cw/cw_ktv_add.c b/src/cw/cw_ktv_add.c index f4ec3a8f..ffcedb8c 100644 --- a/src/cw/cw_ktv_add.c +++ b/src/cw/cw_ktv_add.c @@ -4,7 +4,7 @@ #include "log.h" #include "dbg.h" -const char * cw_ktv_add(mavl_t kvtstore, const char *key, const struct cw_Type *type, +cw_KTV_t * cw_ktv_add(mavl_t kvtstore, const char *key, const struct cw_Type *type, const uint8_t * data, int len) { cw_KTV_t mdata, *mresult; @@ -15,7 +15,7 @@ const char * cw_ktv_add(mavl_t kvtstore, const char *key, const struct cw_Type * */ mdata.key=cw_strdup(key); if (!mdata.key){ - cw_log(LOG_ERR, "Can't allocate memory for key %s: %s", + cw_log(LOG_ERR, "Can't allocate memory for KTV key %s: %s", key,strerror(errno)); return NULL; } @@ -35,8 +35,8 @@ const char * cw_ktv_add(mavl_t kvtstore, const char *key, const struct cw_Type * free(mdata.key); if (type->del) type->del(&mdata); - return key; + return mresult; } - return mdata.key; + return mresult; } diff --git a/src/cw/cw_ktv_dump.c b/src/cw/cw_ktv_dump.c index 85be29c4..1935e302 100644 --- a/src/cw/cw_ktv_dump.c +++ b/src/cw/cw_ktv_dump.c @@ -1,30 +1,3 @@ #include "ktv.h" #include "dbg.h" - -void cw_ktv_dump(mavl_t ktv, uint32_t dbglevel, - const char *header, const char *prefix, const char *footer ) -{ - char value[500]; - struct cw_KTV * data; - mavliter_t it; - const struct cw_Type * type; - - if (header != NULL) - cw_dbg (dbglevel, header); - - mavliter_init(&it,ktv); - - mavliter_foreach(&it){ - - data = mavliter_get(&it); - type = data->type; - type->to_str(data,value,0); - - cw_dbg(dbglevel,"%s%s (%s): %s",prefix,data->key,type->name, value); - } - - if (footer != NULL) - cw_dbg (dbglevel, footer); - -} diff --git a/src/cw/cw_process_element.c b/src/cw/cw_process_element.c index f91e5fef..cd37e10d 100644 --- a/src/cw/cw_process_element.c +++ b/src/cw/cw_process_element.c @@ -17,6 +17,9 @@ int cw_process_element(struct cw_ElemHandlerParams *params, int proto, int vendo struct cw_ElemHandler * handler; struct cw_ElemData * elem_data, elem_data_search; + int rc; + + params->elem=NULL; /* try to retrieve a handler for this message element */ handler = cw_msgset_get_elemhandler(params->conn->msgset,proto, vendor, elem_id); @@ -37,10 +40,6 @@ int cw_process_element(struct cw_ElemHandlerParams *params, int proto, int vendo return CAPWAP_RESULT_UNRECOGNIZED_MESSAGE_ELEMENT; } - if (elem_data->mand){ - mavl_add_str(params->mand_found,handler->key); - } - /* check the length of the message */ if (len < handler->min_len) { cw_dbg(DBG_ELEM_ERR, @@ -49,6 +48,13 @@ int cw_process_element(struct cw_ElemHandlerParams *params, int proto, int vendo handler->min_len); return -1; } + + + if (elem_data->mand){ + mavl_add_str(params->mand_found,handler->key); + } + + if (len > handler->max_len && handler->max_len) { cw_dbg(DBG_ELEM_ERR, "%d (%s) message element too big, len=%d, max len=%d", handler->id, @@ -57,8 +63,11 @@ int cw_process_element(struct cw_ElemHandlerParams *params, int proto, int vendo return -1; } - cw_dbg_elem(DBG_ELEM_IN, params->conn, params->msgdata->type, handler, params, + cw_dbg_elem(DBG_ELEM_IN, params->conn, params->msgdata->type, handler, data,len); - return handler->get(handler, params, data, len); + rc = handler->get(handler, params, data, len); + + + return rc; } diff --git a/src/cw/cw_put_msg.c b/src/cw/cw_put_msg.c index 72b80edb..dcc1baf5 100644 --- a/src/cw/cw_put_msg.c +++ b/src/cw/cw_put_msg.c @@ -88,7 +88,7 @@ int cw_put_msg(struct conn *conn, uint8_t * rawout) l = handler->put(handler,¶ms,dst+len); if(l>0) - cw_dbg_elem(DBG_ELEM_OUT,conn,type,handler,¶ms,dst+len,l); + cw_dbg_elem(DBG_ELEM_OUT,conn,type,handler,dst+len,l); len += l; } diff --git a/src/cw/dbg.c b/src/cw/dbg.c index fb720cb2..6e8fd701 100644 --- a/src/cw/dbg.c +++ b/src/cw/dbg.c @@ -90,6 +90,7 @@ static struct cw_StrListElem color_on[] = { {DBG_X, "\x1b[31m"}, {DBG_WARN, ANSI_CYAN}, {DBG_MOD, ANSI_WHITE}, + {DBG_CFG_DMP, ANSI_BCYAN }, {CW_STR_STOP, ""} @@ -129,6 +130,7 @@ static struct cw_StrListElem prefix[] = { {DBG_DTLS_DETAIL, " DTLS - "}, {DBG_WARN, " Warning - "}, {DBG_MOD, " Mod - "}, + {DBG_X, "XXXXX - "}, {CW_STR_STOP, ""} @@ -466,9 +468,7 @@ void cw_dbg(int level, const char *format, ...){ void cw_dbg_elem(int level, struct conn *conn, int msg, - struct cw_ElemHandler * handler, - struct cw_ElemHandlerParams *params, - const uint8_t * msgbuf, int len) + struct cw_ElemHandler * handler, const uint8_t * msgbuf, int len) { char vendorname[256]; char vendor_details[265]; @@ -486,17 +486,9 @@ void cw_dbg_elem(int level, struct conn *conn, int msg, sprintf(vendorname,""); } - if (params->elem == NULL) { - cw_dbg(level,"%s %d (%s), len=%d ",vendorname,handler->id, + + cw_dbg(level,"%s %d (%s), len=%d ",vendorname,handler->id, handler->name,len); - }else { - char str[512]; - params->elem->type->to_str(params->elem,str,512); - cw_dbg(level,"%s %d (%s), len=%d, val=%s ",vendorname,handler->id, - handler->name,len, str); - - } - if (cw_dbg_is_level(DBG_ELEM_DMP)) { /*dmp = cw_format_dump(msgbuf,len,NULL);*/ @@ -510,6 +502,33 @@ void cw_dbg_elem(int level, struct conn *conn, int msg, +void cw_dbg_ktv_dump(mavl_t ktv, uint32_t dbglevel, + const char *header, const char *prefix, const char *footer ) +{ + char value[500]; + struct cw_KTV * data; + mavliter_t it; + const struct cw_Type * type; + + if (header != NULL) + cw_dbg (dbglevel, header); + + mavliter_init(&it,ktv); + + mavliter_foreach(&it){ + + data = mavliter_get(&it); + type = data->type; + type->to_str(data,value,0); + + cw_dbg(dbglevel,"%s%s (%s): %s",prefix,data->key,type->name, value); + } + + if (footer != NULL) + cw_dbg (dbglevel, footer); + +} + diff --git a/src/cw/dbg.h b/src/cw/dbg.h index 70994e53..56dc46a2 100644 --- a/src/cw/dbg.h +++ b/src/cw/dbg.h @@ -112,6 +112,8 @@ enum cw_dbg_levels{ /** Show DTLS Details */ DBG_DTLS_DETAIL, + + DBG_CFG_DMP, /** Debug Mods */ DBG_MOD, @@ -133,17 +135,18 @@ enum cw_dbg_levels{ #define DBG_LN __FILE__,__LINE__ - +/* struct dbg_Context{ int level; }; +*/ void cw_dbg_set_level (int level, int on); int cw_dbg_set_level_from_str(const char *level); - +/* void cw_dbg_elem_(struct conn * conn, int msg, int msgelem, const uint8_t * msgbuf, int len); - +*/ /* void cw_dbg_missing_mand(int level,struct conn *conn,cw_action_in_t ** ml,int n,cw_action_in_t *a); */ @@ -195,9 +198,7 @@ void cw_dbg_dmp_(int level, const uint8_t * data, int len, const char *format, . void cw_dbg_elem(int level, struct conn *conn, int msg, - struct cw_ElemHandler * handler, struct - cw_ElemHandlerParams * params, - const uint8_t * msgbuf, int len); + struct cw_ElemHandler * handler, const uint8_t * msgbuf, int len); void cw_dbg_pkt_nc(int level,struct netconn *nc, uint8_t * packet, int len,struct sockaddr *from); @@ -206,7 +207,8 @@ void cw_dbg_msg(int level,struct conn *conn, uint8_t * packet, int len,struct so char * cw_dbg_mkdmp(const uint8_t * data, int len); void cw_dbg_version_subelem(int level, const char *context, int subtype, uint32_t vendor_id, const uint8_t * vstr, int len); - +void cw_dbg_ktv_dump(mavl_t ktv, uint32_t dbglevel, + const char *header, const char *prefix, const char *footer ); /** * Set debug level diff --git a/src/cw/dbg_strings.c b/src/cw/dbg_strings.c index 91da9065..d6f7709e 100644 --- a/src/cw/dbg_strings.c +++ b/src/cw/dbg_strings.c @@ -63,6 +63,8 @@ struct cw_StrListElem cw_dbg_strings[] = { { DBG_DTLS_BIO_DMP, "dtls_bio_dmp"}, { DBG_DTLS_DETAIL, "dtls_detail"}, + {DBG_CFG_DMP, "cfg_dmp" }, + { DBG_WARN, "warn" }, { DBG_MOD,"mod"}, diff --git a/src/cw/dtls_openssl.c b/src/cw/dtls_openssl.c index ff751f62..6fb3af87 100644 --- a/src/cw/dtls_openssl.c +++ b/src/cw/dtls_openssl.c @@ -48,8 +48,8 @@ static const char * ssl_version2str(int version) return "TLSv1"; case DTLS1_VERSION: return "DTLSv1"; -// case DTLS1_2_VERSION: -// return "DTLSv1.2"; +/* case DTLS1_2_VERSION: + return "DTLSv1.2"; */ } return "Version unknown"; } @@ -65,7 +65,7 @@ static void dtls_debug_cb(int write_p,int version,int type, const void * buf,siz s += sprintf(s,"SSL msg in: "); s+=sprintf(s,"type = %d (0x%02X), %s (%08x), len = %d",type,type,ssl_version2str(version),version,(int)len); -// cw_dbg(DBG_DTLS_DETAIL,buffer); +/* cw_dbg(DBG_DTLS_DETAIL,buffer); */ } #endif @@ -121,7 +121,7 @@ int pem_passwd_cb(char *buf, int size, int rwflag, void *password) if (rsa_1024) rsa_tmp=rsa_1024; else - exit(0); //should_not_happen_in_this_example(); + exit(0); /* should_not_happen_in_this_example(); */ break; default: /* Generating a key on the fly is very costly, so use what is there */ @@ -139,9 +139,10 @@ int pem_passwd_cb(char *buf, int size, int rwflag, void *password) int dtls_openssl_init() { + int rc; const char * version = SSLeay_version(SSLEAY_VERSION); cw_dbg(DBG_INFO,"Init SSL library - %s",version); - int rc = SSL_library_init(); + rc = SSL_library_init(); ERR_clear_error(); SSL_load_error_strings(); OpenSSL_add_all_algorithms(); @@ -151,11 +152,12 @@ int dtls_openssl_init() int dtls_openssl_log_error_queue(const char *txt) { + char errstr[256]; + int e = ERR_get_error(); if (e==0) return 0; - char errstr[256]; while (e!=0){ ERR_error_string(e,errstr); cw_log(LOG_ERR,"%s - %s",txt,errstr); @@ -166,16 +168,18 @@ int dtls_openssl_log_error_queue(const char *txt) int dtls_openssl_log_error(SSL * ssl, int rc, const char *txt) { + char errstr[256]; + int e; int en = errno; /* save errno */ if (!ssl){ return dtls_openssl_log_error_queue(txt); } - int e; + e = SSL_get_error(ssl,rc); - char errstr[256]; + ERR_error_string(e,errstr); cw_log(LOG_ERR,"%s - %s","SSSSS",errstr); @@ -254,10 +258,8 @@ int generate_session_id(const SSL *ssl, unsigned char * id, unsigned int *id_len /* BIO * b = SSL_get_rbio(ssl); struct conn * conn = b->ptr; */ - - - printf ("MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMaking session id\n"); const char * sessid = "9123456789"; +/* printf ("MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMaking session id\n");*/ memcpy(id,sessid,strlen(sessid)); *id_len=strlen(sessid); return 1; @@ -267,11 +269,11 @@ int generate_session_id(const SSL *ssl, unsigned char * id, unsigned int *id_len static int dtls_verify_peer_callback (int ok, X509_STORE_CTX *ctx) { - printf ("Verify callback called with ok = %d\n",ok); +/* printf ("Verify callback called with ok = %d\n",ok);*/ -// SSL *ssl; +/*// SSL *ssl; // ssl = X509_STORE_CTX_get_ex_data(ctx, SSL_get_ex_data_X509_STORE_CTX_idx()); - +*/ char buf[1024]; X509 *err_cert; @@ -304,6 +306,7 @@ static unsigned int psk_server_cb(SSL *ssl,const char *identity, unsigned char * struct dtls_openssl_data * dtls_openssl_data_create(struct conn * conn, const SSL_METHOD * method, BIO_METHOD * bio) { + int rc; struct dtls_openssl_data * d = malloc(sizeof(struct dtls_openssl_data)); if (!d) return NULL; @@ -317,7 +320,7 @@ struct dtls_openssl_data * dtls_openssl_data_create(struct conn * conn, const SS } - int rc = SSL_CTX_set_cipher_list(d->ctx, conn->dtls_cipher); + rc = SSL_CTX_set_cipher_list(d->ctx, conn->dtls_cipher); if (!rc){ dtls_openssl_log_error(0,rc,"DTLS setup cipher error:"); dtls_openssl_data_destroy(d); @@ -372,28 +375,29 @@ struct dtls_openssl_data * dtls_openssl_data_create(struct conn * conn, const SS -// SSL_CTX_set_session_cache_mode(d->ctx, SSL_SESS_CACHE_BOTH); +/*// SSL_CTX_set_session_cache_mode(d->ctx, SSL_SESS_CACHE_BOTH);*/ SSL_CTX_set_options(d->ctx, SSL_OP_NO_SSLv2 |SSL_OP_NO_SSLv3 ); -// SSL_CTX_set_generate_session_id(d->ctx,generate_session_id); +/*// SSL_CTX_set_generate_session_id(d->ctx,generate_session_id);*/ SSL_CTX_set_timeout(d->ctx,30); - +/* // rc =SSL_CTX_set_max_proto_version (d->ctx,DTLS1_VERSION); // printf("MAXMAMX = %d\n",rc); +*/ - +/* // SSL_CTX_set_verify(d->ctx, SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE, dtls_verify_callback); // SSL_CTX_set_verify(d->ctx, SSL_VERIFY_PEER, dtls_verify_callback); // SSL_CTX_set_tmp_rsa_callback(d->ctx,tmp_rsa_callback); // SSL_CTX_set_mode(d->ctx,SSL_MODE_SEND_SERVERHELLO_TIME); +*/ - - +/* // rsa_512 = RSA_generate_key(512,RSA_F4,NULL,NULL); // if (rsa_512 == NULL) // evaluate_error_queue(); @@ -404,7 +408,7 @@ struct dtls_openssl_data * dtls_openssl_data_create(struct conn * conn, const SS // printf ("Ver cookie rc %d\n",rc); - +*/ /* if (conn->dtls_key_file && conn->dtls_cert_file){ @@ -489,15 +493,17 @@ out_err: #include -//#include +/*//#include */ #include int dtls_openssl_shutdown(struct conn *conn) { + struct dtls_openssl_data * d ; + conn->write = conn->send_packet; conn->read = conn->recv_packet; - struct dtls_openssl_data * d = (struct dtls_openssl_data*)conn->dtls_data; + d = (struct dtls_openssl_data*)conn->dtls_data; if (!d) return 0; @@ -525,13 +531,14 @@ int dtls_openssl_shutdown(struct conn *conn) -//int cookie_initialized=0; +/*//int cookie_initialized=0; //#define COOKIE_SECRET_LENGTH 16 //unsigned char cookie_secret[COOKIE_SECRET_LENGTH]; - +*/ int dtls_openssl_generate_cookie(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len) { char sock_buf[SOCK_ADDR_BUFSIZE]; + char sock_buf2[SOCK_ADDR_BUFSIZE]; BIO * b = SSL_get_rbio(ssl); struct conn * conn = b->ptr; @@ -540,7 +547,7 @@ int dtls_openssl_generate_cookie(SSL *ssl, unsigned char *cookie, unsigned int * /* we "missuse" sockaddr2str to convert our cookie to a hex str */ cw_dbg(DBG_DTLS,"DTLS session cookie for %s generated: %s", - sock_addr2str(&conn->addr,sock_buf), sock_hwaddr2idstr(conn->dtls_cookie,sizeof(conn->dtls_cookie))); + sock_addr2str(&conn->addr,sock_buf), sock_hwaddr2idstr(conn->dtls_cookie,sizeof(conn->dtls_cookie),sock_buf2)); memcpy(cookie,conn->dtls_cookie,sizeof(conn->dtls_cookie)); *cookie_len=sizeof(conn->dtls_cookie); @@ -548,17 +555,15 @@ int dtls_openssl_generate_cookie(SSL *ssl, unsigned char *cookie, unsigned int * } - - - int dtls_openssl_verify_cookie(SSL *ssl, unsigned char *cookie, unsigned int len) { char sock_buf[SOCK_ADDR_BUFSIZE]; + char sock_buf2[SOCK_ADDR_BUFSIZE]; BIO * b = SSL_get_rbio(ssl); struct conn * conn = b->ptr; cw_dbg(DBG_DTLS,"Verifying DTLS cookie from %s: %s", - sock_addr2str(&conn->addr,sock_buf),sock_hwaddr2idstr(conn->dtls_cookie,len)); + sock_addr2str(&conn->addr,sock_buf),sock_hwaddr2idstr(conn->dtls_cookie,len,sock_buf2)); if (len != sizeof(conn->dtls_cookie)){ return 0; diff --git a/src/cw/hdr_print.c b/src/cw/hdr_print.c deleted file mode 100644 index cdb09a13..00000000 --- a/src/cw/hdr_print.c +++ /dev/null @@ -1,123 +0,0 @@ -/* - This file is part of libcapwap. - - libcapwap is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - libcapwap is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with Foobar. If not, see . - -*/ - - -#include -#include - -#include "capwap.h" -#include "sock.h" - -/* - -int hdr_print(char *str, uint8_t *packet, int len) -{ - - - char *s = str; - - - if (len<1){ - s+=sprintf(s,"\tNo info available."); - return s-str; - } - - int preamble = cw_get_hdr_preamble(packet); //CWTH_GET_PREAMBLE(packet); - - if (preamble==01){ - s+=sprintf(s,"\tEncrypted data."); - return s-str; - } - - if (preamble!=00){ - s+=sprintf(s,"\tWrong CAPWAP version or encryption type."); - return s-str; - } - - - if (len < 4){ - s+=sprintf(s,"\tNo more data. Packet too short."); - return s-str; - } - - - - int hlen = cw_get_hdr_hlen(packet); //CWTH_GET_HLEN(packet); - int rid = cw_get_hdr_rid(packet); - int wbid = cw_get_hdr_wbid(packet); - s+=sprintf(s,"\tHLEN: %d, RID: %02X, WBID %02X",hlen,rid,wbid); - - - - s+=sprintf(s," Flags: (T=%d,F=%d,L=%d,W=%d,M=%d,K=%d)\n", - cw_get_hdr_flag_t(packet), - cw_get_hdr_flag_f(packet), - cw_get_hdr_flag_l(packet), - cw_get_hdr_flag_w(packet), - cw_get_hdr_flag_m(packet), - cw_get_hdr_flag_k(packet) - ); - if (cw_get_hdr_flag_m(packet)){ - uint8_t * rmac = cw_get_hdr_rmac(packet); - s+=sprintf(s,"\tRadio MAC: %s\n",sock_hwaddr2str(bstr_data(rmac), - bstr_len(rmac))); - - } - - - if (len < 8){ - s+=sprintf(s,"\tNo more data. Packet too short."); - return s-str; - } - - int frag_id = cw_get_hdr_fragid(packet); - int frag_offs = cw_get_hdr_fragoffset(packet); - s+=sprintf(s,"\tFrag Id: %d, Frag Offs:: %d\n",frag_id,frag_offs); - - - int bhlen = 4*hlen; - if (cw_get_hdr_flag_f(packet) && frag_offs!=0){ - s+=sprintf(s,"\tFragment data ..."); - return s-str; - } - - - if (len>24; - int msgelemlen = 0xFF & ((ntohl(*((uint32_t*)(packet+bhlen+4))))>>8); - - s+=sprintf(s,", SeqNum: %d, MsgelemLen:%d",seqnum,msgelemlen); - - - return s-str; -} - -*/ diff --git a/src/cw/ktv.h b/src/cw/ktv.h index 35f51ac5..d15f820e 100644 --- a/src/cw/ktv.h +++ b/src/cw/ktv.h @@ -6,6 +6,18 @@ #include "mavl.h" + +/** + * @addtogroup DATAMGMT Data Structures & Algos + * @{ + */ + + +/** + * @defgroup KTV Key-Type-Value-Store + * @{ + */ + #define CW_KTV_MAX_KEY_LEN 1024 struct cw_KTV { @@ -21,7 +33,12 @@ struct cw_KTV { }; typedef struct cw_KTV cw_KTV_t; - +/** + * @class cw_Type + * @author 7u83 + * @file ktv.h + * @brief Representation of a cw_Type objetc + */ struct cw_Type { /** A human readable name for this type */ const char *name; @@ -36,8 +53,13 @@ struct cw_Type { struct cw_KTV *(*get) (struct cw_KTV * data, const uint8_t * src, int len); /** A pointer to a function to convert elements of this type to a string. - This function is mainly used to store elements to an SQL database - or to json strings */ + * This function is mainly used to store elements to an SQL database + * or to json strings + * @param data pointer to KTV object + * @param dst buffer where to put the string in + * @param max_len maximum length of buffer + * @return The number of bytes written to dst + */ int (*to_str) (const struct cw_KTV * data, char *dst, int max_len); /** Cereate an item of this type from a string, which was previously @@ -63,7 +85,7 @@ extern const struct cw_Type cw_type_bstr16; /* void cw_kvstore_mavl_delete(const void *data); */ -const char *cw_ktv_add(mavl_t kvstore, const char *key, const struct cw_Type *type, +cw_KTV_t *cw_ktv_add(mavl_t kvstore, const char *key, const struct cw_Type *type, const uint8_t * data, int len); const char * cw_ktv_add_from_str(mavl_t kvtstore, const char *key, const struct cw_Type *type, @@ -74,6 +96,10 @@ int cw_ktv_mavlcmp_type_by_name(const void *v1,const void *v2); void cw_ktv_mavldel(void *data); +/** + * Create a KTV store + * @return a #mavl_t object representing the KTV store + */ #define cw_ktv_create()\ mavl_create(cw_ktv_mavlcmp, cw_ktv_mavldel, sizeof(cw_KTV_t)) @@ -85,12 +111,13 @@ int cw_ktv_read_file(FILE * file, mavl_t ktv, mavl_t types); cw_KTV_t * cw_ktv_get(mavl_t ktv, const char *key, const cw_Type_t * type); uint8_t cw_ktv_get_byte(mavl_t ktv,const char *key, uint8_t def); uint16_t cw_ktv_get_word(mavl_t ktv,const char *key, uint16_t def); - -void cw_ktv_dump(mavl_t ktv, uint32_t dbglevel, - const char *header, const char *prefix, const char *footer ); extern const cw_Type_t * cw_ktv_std_types[]; #define CW_KTV_STD_TYPES cw_ktv_std_types +/** + * @} KTV + * @} DATAMGMT + */ #endif /* __KVT_H */ diff --git a/src/cw/log.h b/src/cw/log.h index 2057f15b..78fff79f 100644 --- a/src/cw/log.h +++ b/src/cw/log.h @@ -16,6 +16,7 @@ */ + /** *@file *@brief Definitions for logging and debugging. diff --git a/src/cw/mavl.h b/src/cw/mavl.h index 7ae4cc2d..8fec7d5d 100644 --- a/src/cw/mavl.h +++ b/src/cw/mavl.h @@ -157,8 +157,11 @@ void *mavl_replace_data ( struct mavl *t, void *data, int len ); - +/** + * An alias gor #mavl_get + */ #define mavl_find(t,d) mavl_get(t,d) + #define mavl_find_ptr(tree,search_ptr) mavl_get_ptr(tree,search_ptr) #define mavl_insert(t,d) mavl_add(t,d) diff --git a/src/cw/mavl_add.c b/src/cw/mavl_add.c index 8274d177..fd8bbed1 100644 --- a/src/cw/mavl_add.c +++ b/src/cw/mavl_add.c @@ -182,13 +182,14 @@ static int mavl_add0 ( struct mavl *t, struct mavlnode **parent, const void ** d * Add an element to an AVL tree * * @param t mavl - * @param data pointer to element - * - * @return A pointer to the element in the tree. If teh returned pointer - * equals to the pointer given in the data argument, the element has already - * been in the tree. If the function returns NULL, there was en error, e.g. - * no memory left. Consult therefore errno. - * + * @param data pointer to the element to add + * @param exists pointer to an interger vairable which wil be set to 1, if + * the element to add already exists in the tree. If the element did't + * exist, the variable ist to 0. + * @return A pointer to the element in the tree. If the element was added, + * it the pointer to newly created element. If the element had already existed, + * the pointer points to the existing element. mavl_add returns thero, if + * something else went wrong. Therefore consult errno. * @example mavl_add_example.c */ diff --git a/src/cw/mlist_create.c b/src/cw/mlist_create.c index 87db5027..0c0d772f 100644 --- a/src/cw/mlist_create.c +++ b/src/cw/mlist_create.c @@ -1,5 +1,12 @@ #include "mlist.h" - +/** + * @brief Create a mlist object + * @param v1 + * @param v2 + * @param data_size + * @return a pointer to the created object or NULL if something + * wnet wrong. + */ mlist_t mlist_create(int (*cmp) (const void *v1, const void *v2), void (*del)(void*), size_t data_size) diff --git a/src/cw/msgset.c b/src/cw/msgset.c index f8d60422..08780ac8 100644 --- a/src/cw/msgset.c +++ b/src/cw/msgset.c @@ -167,8 +167,8 @@ static int update_msgdata(struct cw_MsgSet *set, struct cw_MsgData *msgdata, elemdef->vendor, elemdef->id); /* check if a handler for our element already exists */ if (!handler) { - cw_log(LOG_ERR, "No handler for message element: %d %d %d", - elemdef->proto, elemdef->vendor, elemdef->id); + cw_log(LOG_ERR, "Creating message set: No handler for message element: %d %d %d [%s]", + elemdef->proto, elemdef->vendor, elemdef->id, cw_strelem(elemdef->id)); continue; } diff --git a/src/cw/sock.h b/src/cw/sock.h index d299addf..ba4c1b6e 100644 --- a/src/cw/sock.h +++ b/src/cw/sock.h @@ -86,7 +86,10 @@ char *sock_addrtostr(const struct sockaddr *sa, char *s, size_t maxlen, int addp #define SOCK_ADDR_BUFSIZE 64 +/* #define SOCK_ADDR_BUF_DEFINE char __sock_buf__[SOCK_ADDR_BUFSIZE] +*/ + /** * Convert a sockaddr structure to a human readable string @@ -113,8 +116,8 @@ char *sock_addrtostr(const struct sockaddr *sa, char *s, size_t maxlen, int addp -#define sock_hwaddr2str(s,l) ( sock_hwaddrtostr( s,l, (char[64]){0}, ":" ) ) -#define sock_hwaddr2idstr(s,l) ( sock_hwaddrtostr( s,l, (char[64]){0}, "" ) ) +#define sock_hwaddr2str(s,l,buf) ( sock_hwaddrtostr( s,l, buf, ":" ) ) +#define sock_hwaddr2idstr(s,l,buf) ( sock_hwaddrtostr( s,l, buf, "" ) ) /* //#define sock_addrtostr(s,str,n) sock_addrtostr(s,str,n,1) diff --git a/src/cw/timer.h b/src/cw/timer.h index 5f74ba11..3eb8b2ad 100644 --- a/src/cw/timer.h +++ b/src/cw/timer.h @@ -42,7 +42,7 @@ typedef time_t cw_timer_t; * @code * cw_timer_t timer = cw_timer_start(60); * while (!cw_timer_timeout(timer)){ - * // Do something for max. 60 seconds ... + * @startcomment Do something for max. 60 seconds ... @endcomment * } * @endcode */ @@ -78,7 +78,7 @@ typedef time_t cw_timer_t; * @code * CW_CLOCK_DEFINE(clk); * cw_clock_start(clk); - * // do something ... + * @startcomment do something ... @endcomment * int t = cw_clock_lap(clk); * printf("Caclulation took %d seconds\n",t); * @endcode diff --git a/src/mod/capwap/capwap_actions_ac.c b/src/mod/capwap/capwap_actions_ac.c index 134bc461..590c8fea 100644 --- a/src/mod/capwap/capwap_actions_ac.c +++ b/src/mod/capwap/capwap_actions_ac.c @@ -54,7 +54,7 @@ static struct cw_ElemHandler handlers[] = { "WTP Board Data", /* name */ CAPWAP_ELEM_WTP_BOARD_DATA, /* Element ID */ 0,0, /* Vendor / Proto */ - 4,128, /* min/max length */ + 14,1024, /* min/max length */ NULL, /* type */ CW_KEY_WTP_BOARD_DATA, /* Key */ capwap_in_wtp_board_data, /* get */ @@ -65,7 +65,7 @@ static struct cw_ElemHandler handlers[] = { "WTP Descriptor", /* name */ CAPWAP_ELEM_WTP_DESCRIPTOR, /* Element ID */ 0,0, /* Vendor / Proto */ - 4,128, /* min/max length */ + 33,1024, /* min/max length */ NULL, /* type */ CW_KEY_WTP_DESCRIPTOR, /* Key */ capwap_in_wtp_descriptor, /* get */ diff --git a/src/mod/capwap/capwap_in_wtp_board_data.c b/src/mod/capwap/capwap_in_wtp_board_data.c index 12f01514..23be0d0f 100644 --- a/src/mod/capwap/capwap_in_wtp_board_data.c +++ b/src/mod/capwap/capwap_in_wtp_board_data.c @@ -55,7 +55,7 @@ static void readsubelems_wtp_board_data(mavl_t cfg, uint8_t * msgelem, return; } - cw_dbg(DBG_SUBELEM, "Reading WTP board data sub-element, type=%d, len=%d", + cw_dbg(DBG_SUBELEM, "WTP board data sub-element, type=%d, len=%d", subtype, sublen); switch (subtype) { diff --git a/src/wtp/wtp_main.c b/src/wtp/wtp_main.c index dc5191b6..6019011c 100644 --- a/src/wtp/wtp_main.c +++ b/src/wtp/wtp_main.c @@ -108,7 +108,7 @@ int main (int argc, char **argv) cw_ktv_read_file(file,global_cfg,types_tree); - cw_ktv_dump(global_cfg,DBG_INFO,"----- global cfg start -----","","----- global cfg end -----"); + cw_dbg_ktv_dump(global_cfg,DBG_CFG_DMP,"----- global cfg start -----","","----- global cfg end -----"); mod = cw_mod_load(bootcfg.modname, global_cfg, CW_ROLE_WTP);