diff --git a/actube.workspace b/actube.workspace index e0162c79..c63c2d68 100644 --- a/actube.workspace +++ b/actube.workspace @@ -4,8 +4,8 @@ - - + + diff --git a/libcw.project b/libcw.project index 33bb2126..4a32a17b 100644 --- a/libcw.project +++ b/libcw.project @@ -314,6 +314,11 @@ + + + + + diff --git a/src/ac/ac_main.c b/src/ac/ac_main.c index 2b8e2c5f..78dbfa9f 100644 --- a/src/ac/ac_main.c +++ b/src/ac/ac_main.c @@ -98,7 +98,32 @@ extern void test_sets(); int main(int argc, char *argv[]) { - +/* char data[100]; + mavl_t im; + mavldata_t val,itt; + mavliter_t myit; + + im = mavl_create(mavl_cmp_dword,NULL); + + for (itt.dword=100; itt.dword>0; itt.dword--){ + printf("Copunting: %d\n",itt.dword); + mavl_add(im,&itt); + } + + mavliter_init(&myit,im); + mavliter_foreach(&myit){ + union mavldata * result; + result = mavliter_get(&myit); + printf("Got Value %d\n",result->dword); + } + + mavl_destroy(im); +*/ + + + + + int rc = 0; /* parse arguments */ diff --git a/src/ac/db.c b/src/ac/db.c index 9ab4f9bf..bea8addf 100644 --- a/src/ac/db.c +++ b/src/ac/db.c @@ -1,6 +1,7 @@ #include +#include "cw/mbag.h" #include "cw/log.h" #include "cw/dbg.h" #include "cw/capwap_items.h" diff --git a/src/ac/wtpman.c b/src/ac/wtpman.c index 44f3b0e5..a0a9c383 100644 --- a/src/ac/wtpman.c +++ b/src/ac/wtpman.c @@ -428,9 +428,9 @@ void radios_to_sql(struct conn *conn) MAVLITER_DEFINE(it, conn->radios); mavliter_foreach(&it) { struct mbag_item * i = mavliter_get(&it); - int rid = i->iid; + int rid = i->u1.iid; - radio_to_sql(conn,wtp_id,rid,i->data); + radio_to_sql(conn,wtp_id,rid,i->u2.data); } diff --git a/src/cw/action.c b/src/cw/action.c index 100b7563..0874e004 100644 --- a/src/cw/action.c +++ b/src/cw/action.c @@ -21,7 +21,7 @@ * @brief Implementation of methods for actionlists. */ - +#include "mbag.h" #include #include diff --git a/src/cw/action.h b/src/cw/action.h index c6613084..dac0d00f 100644 --- a/src/cw/action.h +++ b/src/cw/action.h @@ -29,7 +29,7 @@ #include "mavl.h" #include "conn.h" -#include "mbag.h" +/*#include "mbag.h"*/ #include "strheap.h" #include "intavltree.h" #include "item.h" diff --git a/src/cw/capwap.h b/src/cw/capwap.h index 5cf24f5f..f063d8a7 100644 --- a/src/cw/capwap.h +++ b/src/cw/capwap.h @@ -27,7 +27,7 @@ #include - +#include "mbag.h" #include #include diff --git a/src/cw/capwap80211_items.c b/src/cw/capwap80211_items.c index 183e331b..54c39a84 100644 --- a/src/cw/capwap80211_items.c +++ b/src/cw/capwap80211_items.c @@ -1,3 +1,4 @@ +#include "mbag.h" #include "item.h" #include "capwap80211_items.h" #include "capwap80211_types.h" diff --git a/src/cw/capwap80211_type_rateset.c b/src/cw/capwap80211_type_rateset.c index bd4874be..f04d881a 100644 --- a/src/cw/capwap80211_type_rateset.c +++ b/src/cw/capwap80211_type_rateset.c @@ -11,7 +11,7 @@ static int to_str(void *item,char *dst) { mbag_item_t *it= item; - uint8_t *data = (uint8_t*)it->data; + uint8_t *data = (uint8_t*)it->u2.data; int n=*data; data++; @@ -83,7 +83,7 @@ static struct mbag_item * from_str(const char *src) *data=nrates; memcpy(data+1,rates,nrates); - item->data=data; + item->u2.data=data; return item; @@ -103,14 +103,14 @@ static struct mbag_item * get(const uint8_t *src,int len) } *data=len; memcpy(data+1,src,len); - item->data=data; + item->u2.data=data; return item; } static int put(struct mbag_item *i,uint8_t *dst) { - int l=*((uint8_t*)(i->data)); - memcpy(dst,i->data+1,l); + int l=*((uint8_t*)(i->u2.data)); + memcpy(dst,i->u2.data+1,l); return l; } diff --git a/src/cw/capwap_action_helpers.c b/src/cw/capwap_action_helpers.c index 4cfea1c9..e55969fc 100644 --- a/src/cw/capwap_action_helpers.c +++ b/src/cw/capwap_action_helpers.c @@ -1,4 +1,5 @@ +#include "mbag.h" #include "action.h" #include "capwap.h" diff --git a/src/cw/capwap_inline.c b/src/cw/capwap_inline.c index a9f0bb8e..6b0a6ae1 100644 --- a/src/cw/capwap_inline.c +++ b/src/cw/capwap_inline.c @@ -1,3 +1,4 @@ +#include "mbag.h" #include "capwap.h" diff --git a/src/cw/capwap_items.c b/src/cw/capwap_items.c index 06404c5f..7ff97e12 100644 --- a/src/cw/capwap_items.c +++ b/src/cw/capwap_items.c @@ -1,3 +1,4 @@ +#include "mbag.h" #include "item.h" #include "capwap_items.h" diff --git a/src/cw/capwap_msg_new.c b/src/cw/capwap_msg_new.c index ab8ffe57..91dedcbc 100644 --- a/src/cw/capwap_msg_new.c +++ b/src/cw/capwap_msg_new.c @@ -16,6 +16,7 @@ */ +#include "mbag.h" #include "capwap.h" struct capwap_msg * capwap_msg_new() diff --git a/src/cw/capwap_strings_board.c b/src/cw/capwap_strings_board.c index 3d54728e..4d14b556 100644 --- a/src/cw/capwap_strings_board.c +++ b/src/cw/capwap_strings_board.c @@ -1,3 +1,4 @@ +#include "mbag.h" #include "capwap.h" struct cw_strlist_elem capwap_strings_board[] = { diff --git a/src/cw/capwap_strings_elem.c b/src/cw/capwap_strings_elem.c index 1525585a..bc679a65 100644 --- a/src/cw/capwap_strings_elem.c +++ b/src/cw/capwap_strings_elem.c @@ -1,3 +1,4 @@ +#include "mbag.h" #include "capwap.h" struct cw_strlist_elem capwap_strings_elem[] = { diff --git a/src/cw/capwap_strings_elem80211.c b/src/cw/capwap_strings_elem80211.c index e28e190d..8af4e74a 100644 --- a/src/cw/capwap_strings_elem80211.c +++ b/src/cw/capwap_strings_elem80211.c @@ -1,3 +1,4 @@ +#include "mbag.h" #include "capwap80211.h" #include "strlist.h" diff --git a/src/cw/capwap_strings_msg.c b/src/cw/capwap_strings_msg.c index 66eaa868..59e35a45 100644 --- a/src/cw/capwap_strings_msg.c +++ b/src/cw/capwap_strings_msg.c @@ -19,7 +19,7 @@ * @file * @brief Definition of CAPWAP Message Strings */ - +#include "mbag.h" #include "capwap.h" /** diff --git a/src/cw/capwap_strings_result.c b/src/cw/capwap_strings_result.c index e8d6339e..d6e669e3 100644 --- a/src/cw/capwap_strings_result.c +++ b/src/cw/capwap_strings_result.c @@ -1,3 +1,4 @@ +#include "mbag.h" #include "capwap.h" diff --git a/src/cw/capwap_strings_state.c b/src/cw/capwap_strings_state.c index 69feda50..bfbad924 100644 --- a/src/cw/capwap_strings_state.c +++ b/src/cw/capwap_strings_state.c @@ -1,3 +1,4 @@ +#include "mbag.h" #include "capwap.h" struct cw_strlist_elem capwap_strings_state[] = { diff --git a/src/cw/capwap_strings_vendor.c b/src/cw/capwap_strings_vendor.c index 1e572813..3df86816 100644 --- a/src/cw/capwap_strings_vendor.c +++ b/src/cw/capwap_strings_vendor.c @@ -1,3 +1,4 @@ +#include "mbag.h" #include "capwap.h" #include "vendors.h" diff --git a/src/cw/cipwap_strings_elem.c b/src/cw/cipwap_strings_elem.c index 4297ff4d..3953f82b 100644 --- a/src/cw/cipwap_strings_elem.c +++ b/src/cw/cipwap_strings_elem.c @@ -1,4 +1,5 @@ +#include "mbag.h" #include "capwap.h" #include "cipwap.h" #include "capwap_cisco.h" diff --git a/src/cw/cisco.c b/src/cw/cisco.c index b58c37c5..6183683a 100644 --- a/src/cw/cisco.c +++ b/src/cw/cisco.c @@ -95,8 +95,8 @@ int cw_out_cisco_wtp_radio_cfg(struct conn *conn, struct cw_action_out *a, uint8 continue; } // l+=cw_put_elem_radio_info(dst+l,i->id,i->data); - l+=cw_put_elem_cisco_radio_cfg(dst+l,i->iid,i->data); - l+=cw_put_elem_cisco_ap_regulatory_domain(dst+l,i->iid,i->data); + l+=cw_put_elem_cisco_radio_cfg(dst+l,i->u1.iid,i->u2.data); + l+=cw_put_elem_cisco_ap_regulatory_domain(dst+l,i->u1.iid,i->u2.data); } return l; @@ -147,7 +147,7 @@ int cw_radio_cisco_set_state(struct conn * conn, uint8_t *data, int len, int cau MAVLITER_DEFINE(it,conn->radios); mavliter_foreach(&it){ mbag_item_t *i = mavliter_get(&it); - cw_radio_set_admin_state(conn->radios,i->iid,state,cause); + cw_radio_set_admin_state(conn->radios,i->u1.iid,state,cause); } return 1; diff --git a/src/cw/conn.h b/src/cw/conn.h index 54521f54..103f297a 100644 --- a/src/cw/conn.h +++ b/src/cw/conn.h @@ -32,12 +32,13 @@ #include "fragman.h" #include "cwmsg.h" -#include "action.h" +/*#include "action.h"*/ + +/*#include "mbag.h"*/ -#include "mbag.h" #include "intavltree.h" -#include "mbag.h" + #include "mod.h" diff --git a/src/cw/conn_clear_upd.c b/src/cw/conn_clear_upd.c index 9979957f..fc0e3c38 100644 --- a/src/cw/conn_clear_upd.c +++ b/src/cw/conn_clear_upd.c @@ -1,4 +1,6 @@ +#include "capwap.h" + #include "conn.h" #include "mavl.h" @@ -13,9 +15,9 @@ void conn_clear_upd(struct conn *conn, int merge) mavliter_foreach(&it){ struct mbag_item * ruitem = mavliter_get(&it); - mavl_t radio_upd = ruitem->data; + mavl_t radio_upd = ruitem->u2.data; - mbag_t radio = mbag_i_get_mbag(conn->radios,ruitem->iid,NULL); + mbag_t radio = mbag_i_get_mbag(conn->radios,ruitem->u1.iid,NULL); if (radio){ mavl_merge(radio,radio_upd); } diff --git a/src/cw/conn_create.c b/src/cw/conn_create.c index 64ccf6d6..8c04d593 100644 --- a/src/cw/conn_create.c +++ b/src/cw/conn_create.c @@ -26,9 +26,10 @@ #include #include "log.h" +#include "capwap.h" #include "conn.h" #include "sock.h" -#include "capwap.h" + /** diff --git a/src/cw/conn_create_noq.c b/src/cw/conn_create_noq.c index e609190f..ce737744 100644 --- a/src/cw/conn_create_noq.c +++ b/src/cw/conn_create_noq.c @@ -25,6 +25,7 @@ #include #include +#include "mbag.h" #include "conn.h" #include "sock.h" diff --git a/src/cw/conn_destroy.c b/src/cw/conn_destroy.c index b10f752d..9d1bbae6 100644 --- a/src/cw/conn_destroy.c +++ b/src/cw/conn_destroy.c @@ -21,6 +21,7 @@ */ #include +#include "mbag.h" #include "conn.h" /** diff --git a/src/cw/conn_init.c b/src/cw/conn_init.c index 330d9a48..74106574 100644 --- a/src/cw/conn_init.c +++ b/src/cw/conn_init.c @@ -24,6 +24,7 @@ #include +#include "mbag.h" #include "conn.h" #include "capwap.h" diff --git a/src/cw/conn_prepare_image_data_request.c b/src/cw/conn_prepare_image_data_request.c index 0b6d88de..03f57894 100644 --- a/src/cw/conn_prepare_image_data_request.c +++ b/src/cw/conn_prepare_image_data_request.c @@ -16,6 +16,7 @@ */ +#include "mbag.h" #include "capwap.h" #include "lwapp.h" diff --git a/src/cw/conn_q_add_packet.c b/src/cw/conn_q_add_packet.c index a71d03d1..02c96c25 100644 --- a/src/cw/conn_q_add_packet.c +++ b/src/cw/conn_q_add_packet.c @@ -19,6 +19,7 @@ #include #include +#include "mbag.h" #include "dbg.h" #include "conn.h" #include "sock.h" diff --git a/src/cw/conn_q_get_packet.c b/src/cw/conn_q_get_packet.c index 15b9e507..13b46c9c 100644 --- a/src/cw/conn_q_get_packet.c +++ b/src/cw/conn_q_get_packet.c @@ -15,7 +15,7 @@ along with Foobar. If not, see . */ - +#include "mbag.h" #include #include "conn.h" diff --git a/src/cw/conn_q_recv_packet.c b/src/cw/conn_q_recv_packet.c index cab52cd9..9fd4d676 100644 --- a/src/cw/conn_q_recv_packet.c +++ b/src/cw/conn_q_recv_packet.c @@ -19,7 +19,7 @@ #include #include #include - +#include "mbag.h" #include "conn.h" static int conn_q_recv_packet_(struct conn * conn, uint8_t * buffer,int len,int peek) diff --git a/src/cw/conn_recv_packet.c b/src/cw/conn_recv_packet.c index 9456180e..70052e51 100644 --- a/src/cw/conn_recv_packet.c +++ b/src/cw/conn_recv_packet.c @@ -22,6 +22,7 @@ #include #include +#include "mbag.h" #include "conn.h" #include "sock.h" diff --git a/src/cw/conn_send_data_packet.c b/src/cw/conn_send_data_packet.c index e4f81c2e..57c1c24b 100644 --- a/src/cw/conn_send_data_packet.c +++ b/src/cw/conn_send_data_packet.c @@ -19,6 +19,8 @@ #include #include #include "sock.h" +#include "capwap.h" + #include "conn.h" #include diff --git a/src/cw/conn_send_packet.c b/src/cw/conn_send_packet.c index 38261440..d84986ac 100644 --- a/src/cw/conn_send_packet.c +++ b/src/cw/conn_send_packet.c @@ -16,6 +16,7 @@ */ +#include "mbag.h" #include #include #include "sock.h" diff --git a/src/cw/connlist.c b/src/cw/connlist.c index 9ef3f4dc..43cbe3ee 100644 --- a/src/cw/connlist.c +++ b/src/cw/connlist.c @@ -28,6 +28,7 @@ #include +#include "mbag.h" #include "conn.h" #include "connlist.h" diff --git a/src/cw/cw_addelem_capwap_local_ip_addr.c b/src/cw/cw_addelem_capwap_local_ip_addr.c index a871193b..ec6c2b41 100644 --- a/src/cw/cw_addelem_capwap_local_ip_addr.c +++ b/src/cw/cw_addelem_capwap_local_ip_addr.c @@ -23,6 +23,7 @@ #include +#include "mbag.h" #include "capwap.h" #include "cwmsg.h" #include "conn.h" diff --git a/src/cw/cw_in_ac_name_with_priority.c b/src/cw/cw_in_ac_name_with_priority.c index dda3c14c..434068cf 100644 --- a/src/cw/cw_in_ac_name_with_priority.c +++ b/src/cw/cw_in_ac_name_with_priority.c @@ -1,4 +1,5 @@ +#include "mbag.h" #include "action.h" #include "dbg.h" #include "log.h" diff --git a/src/cw/cw_in_capwap_control_ip_address.c b/src/cw/cw_in_capwap_control_ip_address.c index ed03ba6a..0528363f 100644 --- a/src/cw/cw_in_capwap_control_ip_address.c +++ b/src/cw/cw_in_capwap_control_ip_address.c @@ -29,6 +29,7 @@ #include +#include "mbag.h" #include "action.h" #include "log.h" #include "mbag.h" diff --git a/src/cw/cw_in_check_cfg_update_req.c b/src/cw/cw_in_check_cfg_update_req.c index 6f46b436..a06c6cc9 100644 --- a/src/cw/cw_in_check_cfg_update_req.c +++ b/src/cw/cw_in_check_cfg_update_req.c @@ -1,4 +1,5 @@ +#include "mbag.h" #include "capwap.h" #include "intavltree.h" #include "dbg.h" diff --git a/src/cw/cw_in_check_chng_state_evnt_req.c b/src/cw/cw_in_check_chng_state_evnt_req.c index d72b5ff9..33b29b33 100644 --- a/src/cw/cw_in_check_chng_state_evnt_req.c +++ b/src/cw/cw_in_check_chng_state_evnt_req.c @@ -1,4 +1,5 @@ +#include "mbag.h" #include "capwap.h" #include "capwap_items.h" #include "cw.h" diff --git a/src/cw/cw_in_check_cipwap_join_req.c b/src/cw/cw_in_check_cipwap_join_req.c index 3fc5198c..17594a44 100644 --- a/src/cw/cw_in_check_cipwap_join_req.c +++ b/src/cw/cw_in_check_cipwap_join_req.c @@ -28,7 +28,7 @@ int cw_detect_capwap(struct conn *conn) mbag_item_t * item = mbag_get(is,CW_ITEM_WTP_SOFTWARE_VERSION); if (item) { - bstrv_t s = item->data; + bstrv_t s = item->u2.data; uint32_t v = bstrv_get_vendor_id(s); switch(v) { diff --git a/src/cw/cw_in_check_disc_resp.c b/src/cw/cw_in_check_disc_resp.c index f1a68ae9..2260714a 100644 --- a/src/cw/cw_in_check_disc_resp.c +++ b/src/cw/cw_in_check_disc_resp.c @@ -1,5 +1,6 @@ #include +#include "mbag.h" #include "capwap.h" #include "capwap_items.h" #include "intavltree.h" diff --git a/src/cw/cw_in_check_generic_resp.c b/src/cw/cw_in_check_generic_resp.c index fbbb06a9..1581c634 100644 --- a/src/cw/cw_in_check_generic_resp.c +++ b/src/cw/cw_in_check_generic_resp.c @@ -17,8 +17,8 @@ int cw_in_check_generic_resp(struct conn *conn, struct cw_action_in *a, uint8_t mbag_item_t * result = mbag_get(conn->incomming,CW_ITEM_RESULT_CODE); if (result ) { - if (!cw_rcok(result->dword)){ - return result->dword; + if (!cw_rcok(result->u2.dword)){ + return result->u2.dword; } } @@ -37,7 +37,7 @@ int cw_in_check_generic_resp(struct conn *conn, struct cw_action_in *a, uint8_t /* if we hava a result code, return it */ if ( result ) { - return result->dword; + return result->u2.dword; } return 0; diff --git a/src/cw/cw_in_check_img_data_req_ac.c b/src/cw/cw_in_check_img_data_req_ac.c index 1a1099d0..05b19e4f 100644 --- a/src/cw/cw_in_check_img_data_req_ac.c +++ b/src/cw/cw_in_check_img_data_req_ac.c @@ -1,6 +1,7 @@ #include #include +#include "mbag.h" #include "capwap.h" #include "dbg.h" #include "log.h" @@ -22,16 +23,16 @@ int cw_in_check_img_data_req_ac(struct conn *conn, struct cw_action_in *a, uint8 struct mbag_item *i = mbag_get(conn->incomming,CW_ITEM_IMAGE_IDENTIFIER); if (i) { - uint32_t vendor_id = bstrv_get_vendor_id(i->data); + uint32_t vendor_id = bstrv_get_vendor_id(i->u2.data); const char * image_dir; image_dir = mbag_get_str(conn->local,CW_ITEM_AC_IMAGE_DIR,"./img"); - char * image_filename = malloc(6+bstrv_len(i->data)+1+strlen(image_dir)); + char * image_filename = malloc(6+bstrv_len(i->u2.data)+1+strlen(image_dir)); if (!image_filename) return CAPWAP_RESULT_IMAGE_DATA_ERROR; - sprintf(image_filename,"%s%04X/%s",image_dir,vendor_id,bstrv_data(i->data)); + sprintf(image_filename,"%s%04X/%s",image_dir,vendor_id,bstrv_data(i->u2.data)); FILE *infile = fopen(image_filename,"rb"); diff --git a/src/cw/cw_in_check_img_data_req_wtp.c b/src/cw/cw_in_check_img_data_req_wtp.c index cede33bf..22d4117a 100644 --- a/src/cw/cw_in_check_img_data_req_wtp.c +++ b/src/cw/cw_in_check_img_data_req_wtp.c @@ -33,16 +33,16 @@ int cw_in_check_img_data_req_wtp(struct conn *conn, struct cw_action_in *a, uint struct mbag_item *i = mbag_get(conn->incomming,CW_ITEM_IMAGE_IDENTIFIER); if (i) { - uint32_t vendor_id = bstrv_get_vendor_id(i->data); + uint32_t vendor_id = bstrv_get_vendor_id(i->u2.data); const char * image_dir; image_dir = mbag_get_str(conn->local,CW_ITEM_AC_IMAGE_DIR,"./img"); - char * image_filename = malloc(6+bstrv_len(i->data)+1+strlen(image_dir)); + char * image_filename = malloc(6+bstrv_len(i->u2.data)+1+strlen(image_dir)); if (!image_filename) return CAPWAP_RESULT_IMAGE_DATA_ERROR; - sprintf(image_filename,"%s%04X/%s",image_dir,vendor_id,bstrv_data(i->data)); + sprintf(image_filename,"%s%04X/%s",image_dir,vendor_id,bstrv_data(i->u2.data)); FILE *infile = fopen(image_filename,"rb"); diff --git a/src/cw/cw_in_check_img_data_resp.c b/src/cw/cw_in_check_img_data_resp.c index 33890278..23ca4c58 100644 --- a/src/cw/cw_in_check_img_data_resp.c +++ b/src/cw/cw_in_check_img_data_resp.c @@ -1,6 +1,7 @@ #include #include +#include "mbag.h" #include "capwap.h" #include "dbg.h" #include "log.h" @@ -26,7 +27,7 @@ int cw_in_check_img_data_resp(struct conn *conn, struct cw_action_in *a, uint8_t mbag_item_t * iresult = mbag_get(conn->incomming, CW_ITEM_RESULT_CODE); if ( iresult ) { - return iresult->dword; + return iresult->u2.dword; } return 0; diff --git a/src/cw/cw_in_check_join_resp.c b/src/cw/cw_in_check_join_resp.c index 5cd6c89d..c43fbf60 100644 --- a/src/cw/cw_in_check_join_resp.c +++ b/src/cw/cw_in_check_join_resp.c @@ -15,8 +15,8 @@ int cw_in_check_join_resp(struct conn *conn, struct cw_action_in *a, uint8_t * d mbag_item_t * jresult = mbag_get(conn->incomming,CW_ITEM_RESULT_CODE); if (jresult ) { - if (!cw_rcok(jresult->dword)){ - return jresult->dword; + if (!cw_rcok(jresult->u2.dword)){ + return jresult->u2.dword; } } @@ -37,7 +37,7 @@ int cw_in_check_join_resp(struct conn *conn, struct cw_action_in *a, uint8_t * d if ( jresult ) { - return jresult->dword; + return jresult->u2.dword; } /* set result code to ok and change to configure state */ diff --git a/src/cw/cw_in_cisco_image_identifier.c b/src/cw/cw_in_cisco_image_identifier.c index e53b1f4b..7a119843 100644 --- a/src/cw/cw_in_cisco_image_identifier.c +++ b/src/cw/cw_in_cisco_image_identifier.c @@ -1,4 +1,4 @@ - +#include "mbag.h" #include "action.h" #include "dbg.h" #include "mbag.h" diff --git a/src/cw/cw_in_generic.c b/src/cw/cw_in_generic.c index 18f0f541..eed8dac9 100644 --- a/src/cw/cw_in_generic.c +++ b/src/cw/cw_in_generic.c @@ -1,4 +1,5 @@ +#include "mbag.h" #include "action.h" #include "dbg.h" #include "log.h" diff --git a/src/cw/cw_in_generic2.c b/src/cw/cw_in_generic2.c index 0100d0f9..c4c52227 100644 --- a/src/cw/cw_in_generic2.c +++ b/src/cw/cw_in_generic2.c @@ -1,4 +1,4 @@ - +#include "mbag.h" #include "action.h" #include "dbg.h" #include "log.h" diff --git a/src/cw/cw_in_radio_administrative_state.c b/src/cw/cw_in_radio_administrative_state.c index 043755ba..91708253 100644 --- a/src/cw/cw_in_radio_administrative_state.c +++ b/src/cw/cw_in_radio_administrative_state.c @@ -1,4 +1,5 @@ +#include "mbag.h" #include "action.h" #include "dbg.h" #include "log.h" diff --git a/src/cw/cw_in_radio_administrative_state_wtp.c b/src/cw/cw_in_radio_administrative_state_wtp.c index 7b284322..aab3178a 100644 --- a/src/cw/cw_in_radio_administrative_state_wtp.c +++ b/src/cw/cw_in_radio_administrative_state_wtp.c @@ -1,4 +1,5 @@ +#include "mbag.h" #include "action.h" #include "dbg.h" #include "log.h" diff --git a/src/cw/cw_in_radio_generic.c b/src/cw/cw_in_radio_generic.c index d941b79a..84a98054 100644 --- a/src/cw/cw_in_radio_generic.c +++ b/src/cw/cw_in_radio_generic.c @@ -1,4 +1,4 @@ - +#include "mbag.h" #include "action.h" #include "dbg.h" #include "log.h" diff --git a/src/cw/cw_out_80211_supported_rates.c b/src/cw/cw_out_80211_supported_rates.c index 99b01639..7f871e13 100644 --- a/src/cw/cw_out_80211_supported_rates.c +++ b/src/cw/cw_out_80211_supported_rates.c @@ -27,7 +27,7 @@ int cw_out_80211_supported_rates(struct conn *conn, struct cw_action_out *a, uin if ( i->type != MBAG_MBAG ) { continue; } - l+=cw_put_elem_80211_supported_rates(dst+l,i->iid,i->data); + l+=cw_put_elem_80211_supported_rates(dst+l,i->u1.iid,i->u2.data); } return l; } diff --git a/src/cw/cw_out_image_data.c b/src/cw/cw_out_image_data.c index 6ef159f1..10d5aed1 100644 --- a/src/cw/cw_out_image_data.c +++ b/src/cw/cw_out_image_data.c @@ -25,7 +25,7 @@ int cw_out_image_data(struct conn *conn, struct cw_action_out *a, uint8_t * dst) return 0; } - FILE *infile = item->data; + FILE *infile = item->u2.data; if (infile==NULL){ cw_log(LOG_ERR,"Image Data Request infile = NULL"); return 0; diff --git a/src/cw/cw_out_radio_administrative_states.c b/src/cw/cw_out_radio_administrative_states.c index 95234d78..92f150be 100644 --- a/src/cw/cw_out_radio_administrative_states.c +++ b/src/cw/cw_out_radio_administrative_states.c @@ -15,7 +15,7 @@ int cw_out_radio_administrative_states(struct conn *conn, struct cw_action_out * if ( i->type != MBAG_MBAG ) { continue; } - l+=cw_put_elem_radio_administrative_state(dst+l,i->iid,i->data); + l+=cw_put_elem_radio_administrative_state(dst+l,i->u1.iid,i->u2.data); } return l; diff --git a/src/cw/cw_out_radio_generic.c b/src/cw/cw_out_radio_generic.c index d7b612e3..c3c1735d 100644 --- a/src/cw/cw_out_radio_generic.c +++ b/src/cw/cw_out_radio_generic.c @@ -1,6 +1,6 @@ - +#include "mbag.h" #include "action.h" #include "cw.h" #include "cw/dbg.h" @@ -26,15 +26,15 @@ cw_dbg(DBG_X,"Radio Generic out %s",a->item_id); - struct mbag_item * item = mbag_get(radio->data,a->item_id); + struct mbag_item * item = mbag_get(radio->u2.data,a->item_id); if (!item){ -cw_dbg(DBG_X,"Not found! %s for rid %d",a->item_id,radio->iid); +cw_dbg(DBG_X,"Not found! %s for rid %d",a->item_id,radio->u1.iid); continue; } int len=0; - len += cw_put_byte(d+start,radio->iid); + len += cw_put_byte(d+start,radio->u1.iid); - cw_dbg(DBG_X, "Radio generic out '%s' fro rid %d",a->item_id,radio->iid); + cw_dbg(DBG_X, "Radio generic out '%s' fro rid %d",a->item_id,radio->u1.iid); len += cw_put_mbag_item(d + start+1, item); if (a->vendor_id) diff --git a/src/cw/cw_out_radio_info.c b/src/cw/cw_out_radio_info.c index aec11cba..71a72570 100644 --- a/src/cw/cw_out_radio_info.c +++ b/src/cw/cw_out_radio_info.c @@ -32,7 +32,7 @@ int cw_out_radio_infos(struct conn *conn, struct cw_action_out *a, uint8_t * dst if ( i->type != MBAG_MBAG ) { continue; } - l+=cw_put_elem_radio_info(dst+l,i->iid,i->data); + l+=cw_put_elem_radio_info(dst+l,i->u1.iid,i->u2.data); } return l; diff --git a/src/cw/cw_out_wtp_board_data.c b/src/cw/cw_out_wtp_board_data.c index b061a890..4ecff484 100644 --- a/src/cw/cw_out_wtp_board_data.c +++ b/src/cw/cw_out_wtp_board_data.c @@ -1,4 +1,5 @@ #include "log.h" +#include "mbag.h" #include "conn.h" #include "mbag.h" @@ -51,7 +52,7 @@ int cw_out_wtp_board_data(struct conn *conn, struct cw_action_out *a, uint8_t * } uint8_t *d = dst + 4; - d += cw_put_dword(d, i->dword); + d += cw_put_dword(d, i->u2.dword); char buf[90]; @@ -59,14 +60,14 @@ char buf[90]; if (i) { printf("We have got an i %p\n",i); -printf("len: %d\n",bstr16_len(i->data)); -memcpy(buf,bstr16_data(i->data),bstr16_len(i->data)); -buf[bstr16_len(i->data)]=0; +printf("len: %d\n",bstr16_len(i->u2.data)); +memcpy(buf,bstr16_data(i->u2.data),bstr16_len(i->u2.data)); +buf[bstr16_len(i->u2.data)]=0; printf("Val: %s\n",buf); d += cw_put_word(d, CW_BOARDDATA_MODELNO); - d += cw_put_word(d, bstr16_len(i->data)); - d += cw_put_data(d, bstr16_data(i->data), bstr16_len(i->data)); + d += cw_put_word(d, bstr16_len(i->u2.data)); + d += cw_put_data(d, bstr16_data(i->u2.data), bstr16_len(i->u2.data)); } else { cw_log(LOG_ERR, "Error: Can't set sub-element \"WTP Model Number\" in WTP Board Data."); @@ -75,8 +76,8 @@ printf("Val: %s\n",buf); i = mbag_get(board_data, CW_ITEM_WTP_BOARD_SERIALNO); if (i) { d += cw_put_word(d, CW_BOARDDATA_SERIALNO); - d += cw_put_word(d, bstr16_len(i->data)); - d += cw_put_data(d, bstr16_data(i->data), bstr16_len(i->data)); + d += cw_put_word(d, bstr16_len(i->u2.data)); + d += cw_put_data(d, bstr16_data(i->u2.data), bstr16_len(i->u2.data)); }else { cw_log(LOG_ERR, "Error: Can't set sub-element \"WTP Serial Number\" in WTP Board Data."); @@ -86,22 +87,22 @@ printf("Val: %s\n",buf); i = mbag_get(board_data, CW_ITEM_WTP_BOARD_ID); if (i) { d += cw_put_word(d, CW_BOARDDATA_BOARDID); - d += cw_put_word(d, bstr16_len(i->data)); - d += cw_put_data(d, bstr16_data(i->data), bstr16_len(i->data)); + d += cw_put_word(d, bstr16_len(i->u2.data)); + d += cw_put_data(d, bstr16_data(i->u2.data), bstr16_len(i->u2.data)); } i = mbag_get(board_data, CW_ITEM_WTP_BOARD_REVISION); if (i) { d += cw_put_word(d, CW_BOARDDATA_REVISION); - d += cw_put_word(d, bstr16_len(i->data)); - d += cw_put_data(d, bstr16_data(i->data), bstr16_len(i->data)); + d += cw_put_word(d, bstr16_len(i->u2.data)); + d += cw_put_data(d, bstr16_data(i->u2.data), bstr16_len(i->u2.data)); } i = mbag_get(board_data, CW_ITEM_WTP_BOARD_MACADDRESS); if (i) { d += cw_put_word(d, CW_BOARDDATA_MACADDRESS); - d += cw_put_word(d, bstr_len(i->data)); - d += cw_put_data(d, bstr_data(i->data), bstr_len(i->data)); + d += cw_put_word(d, bstr_len(i->u2.data)); + d += cw_put_data(d, bstr_data(i->u2.data), bstr_len(i->u2.data)); } int l = d - dst-4; diff --git a/src/cw/cw_out_wtp_descriptor.c b/src/cw/cw_out_wtp_descriptor.c index c6df904b..117653ae 100644 --- a/src/cw/cw_out_wtp_descriptor.c +++ b/src/cw/cw_out_wtp_descriptor.c @@ -1,6 +1,7 @@ #include "log.h" +#include "capwap.h" #include "conn.h" - +#include "capwap.h" //#include "itemstore.h" #include "capwap_items.h" #include "capwap.h" @@ -47,7 +48,7 @@ int cw_out_wtp_descriptor(struct conn *conn, struct cw_action_out *a, uint8_t * mbag_item_t * i; i = mbag_get(mbag,CW_ITEM_WTP_HARDWARE_VERSION); if ( i ) { - d += cw_put_version(d,CW_SUBELEM_WTP_HARDWARE_VERSION,i->data); + d += cw_put_version(d,CW_SUBELEM_WTP_HARDWARE_VERSION,i->u2.data); } else { cw_log(LOG_ERR, "Can't send Hardware Version in WTP Descriptor, not set."); @@ -55,7 +56,7 @@ int cw_out_wtp_descriptor(struct conn *conn, struct cw_action_out *a, uint8_t * i = mbag_get(mbag,CW_ITEM_WTP_SOFTWARE_VERSION); if ( i ) { - d += cw_put_version(d,CW_SUBELEM_WTP_SOFTWARE_VERSION,i->data); + d += cw_put_version(d,CW_SUBELEM_WTP_SOFTWARE_VERSION,i->u2.data); } else { cw_log(LOG_ERR, "Can't send Software Version in WTP descriptor, not set."); @@ -63,7 +64,7 @@ int cw_out_wtp_descriptor(struct conn *conn, struct cw_action_out *a, uint8_t * i = mbag_get(mbag,CW_ITEM_WTP_BOOT_VERSION); if ( i ) { - d += cw_put_version(d,CW_SUBELEM_WTP_BOOTLOADER_VERSION,i->data); + d += cw_put_version(d,CW_SUBELEM_WTP_BOOTLOADER_VERSION,i->u2.data); } else { cw_log(LOG_INFO, "Can't send Boot Version in WTP descriptor, not set."); @@ -71,7 +72,7 @@ int cw_out_wtp_descriptor(struct conn *conn, struct cw_action_out *a, uint8_t * i = mbag_get(mbag,CW_ITEM_WTP_OTHER_VERSION); if ( i ) { - d += cw_put_version(d,CW_SUBELEM_WTP_OTHERSOFTWARE_VERSION,i->data); + d += cw_put_version(d,CW_SUBELEM_WTP_OTHERSOFTWARE_VERSION,i->u2.data); } else { cw_log(LOG_INFO, "Can't send Other Version in WTP descriptor, not set."); diff --git a/src/cw/cw_out_wtp_reboot_statistics.c b/src/cw/cw_out_wtp_reboot_statistics.c index a8f4cbf2..186ca879 100644 --- a/src/cw/cw_out_wtp_reboot_statistics.c +++ b/src/cw/cw_out_wtp_reboot_statistics.c @@ -18,6 +18,7 @@ #include "log.h" +#include "mbag.h" #include "capwap_items.h" #include "action.h" @@ -46,7 +47,7 @@ int cw_out_wtp_reboot_statistics(struct conn *conn, struct cw_action_out *a, return 0; } - mbag_t rs = (mbag_t) i->data; + mbag_t rs = (mbag_t) i->u2.data; uint8_t *d = dst + 4; d += cw_put_word(d, mbag_get_word(rs, CW_ITEM_REBOOT_COUNT, 0)); diff --git a/src/cw/cw_put_local_ip_address.c b/src/cw/cw_put_local_ip_address.c index 66bcacdd..65bc502b 100644 --- a/src/cw/cw_put_local_ip_address.c +++ b/src/cw/cw_put_local_ip_address.c @@ -3,6 +3,7 @@ #include #include +#include "mbag.h" #include "log.h" #include "dbg.h" #include "cw.h" diff --git a/src/cw/cw_put_mbag_item.c b/src/cw/cw_put_mbag_item.c index c995c0bc..8422276f 100644 --- a/src/cw/cw_put_mbag_item.c +++ b/src/cw/cw_put_mbag_item.c @@ -33,40 +33,40 @@ int cw_put_mbag_item(uint8_t * dst, struct mbag_item *item) if (MBAG_STR == item->type ){ - return cw_put_data(dst, item->data, strlen((char *) item->data)); + return cw_put_data(dst, item->u2.data, strlen((char *) item->u2.data)); } if (MBAG_DATA == item->type){ - return cw_put_data(dst, item->data+1, *((uint8_t*)item->data)); + return cw_put_data(dst, item->u2.data+1, *((uint8_t*)item->u2.data)); } if (MBAG_BYTE == item->type){ - return cw_put_byte(dst, item->byte); + return cw_put_byte(dst, item->u2.byte); } if (MBAG_WORD == item->type){ - return cw_put_word(dst, item->word); + return cw_put_word(dst, item->u2.word); } if (MTYPE_DWORD == item->type){ - return cw_put_dword(dst, item->dword); + return cw_put_dword(dst, item->u2.dword); } if (MBAG_BSTR == item->type) { - return cw_put_bstr(dst, item->data); + return cw_put_bstr(dst, item->u2.data); } if ( MBAG_BSTR16 == item->type) - return cw_put_bstr16(dst,item->data); + return cw_put_bstr16(dst,item->u2.data); if (MBAG_VENDORSTR == item->type) { int l=0; - l+=cw_put_dword(dst, bstrv_get_vendor_id(item->data)); - l+=cw_put_data(dst+4, bstrv_data(item->data),bstrv_len(item->data)); + l+=cw_put_dword(dst, bstrv_get_vendor_id(item->u2.data)); + l+=cw_put_data(dst+4, bstrv_data(item->u2.data),bstrv_len(item->u2.data)); return l; } if (MBAG_MBAG == item->type){ - *((void**)dst)=item->data; + *((void**)dst)=item->u2.data; return sizeof(void *); } diff --git a/src/cw/cw_put_radio_operational_states.c b/src/cw/cw_put_radio_operational_states.c index 5191f4f4..c4d2321e 100644 --- a/src/cw/cw_put_radio_operational_states.c +++ b/src/cw/cw_put_radio_operational_states.c @@ -46,7 +46,7 @@ int xxcw_put_radio_operational_states(mbag_t radios, uint8_t * dst, int *nerror, mavliter_foreach(&it){ mbag_item_t * radioitem = mavliter_get(&it); - mbag_item_t *ositem = mbag_get(radioitem->data,CW_RADIOITEM_OPER_STATE); + mbag_item_t *ositem = mbag_get(radioitem->u2.data,CW_RADIOITEM_OPER_STATE); if (!ositem){ (*nerror)++; continue; @@ -54,10 +54,10 @@ int xxcw_put_radio_operational_states(mbag_t radios, uint8_t * dst, int *nerror, /* Put the radio ID */ - cw_put_byte(d+4,radioitem->iid); + cw_put_byte(d+4,radioitem->u1.iid); /* Get the operational state and cause */ - uint16_t os = ositem->word; + uint16_t os = ositem->u2.word; if ( d7mode ){ /* Isolate Oper Sate from cause */ @@ -77,7 +77,7 @@ int xxcw_put_radio_operational_states(mbag_t radios, uint8_t * dst, int *nerror, /* delete the operational state item, so it won't be sent again, until it is set by a change through Set Radio Admin State */ - mbag_del(radioitem->data,CW_RADIOITEM_OPER_STATE); + mbag_del(radioitem->u2.data,CW_RADIOITEM_OPER_STATE); } diff --git a/src/cw/cwmsg_addelem_mtu_discovery_padding.c b/src/cw/cwmsg_addelem_mtu_discovery_padding.c index 560e7f52..3303efac 100644 --- a/src/cw/cwmsg_addelem_mtu_discovery_padding.c +++ b/src/cw/cwmsg_addelem_mtu_discovery_padding.c @@ -18,6 +18,7 @@ #include +#include "mbag.h" #include "capwap.h" #include "conn.h" #include "cwmsg.h" diff --git a/src/cw/dbg.c b/src/cw/dbg.c index b50fd782..3aa24353 100644 --- a/src/cw/dbg.c +++ b/src/cw/dbg.c @@ -27,6 +27,7 @@ */ #include +#include "mbag.h" #include "capwap.h" #include "dbg.h" #include "sock.h" @@ -166,7 +167,6 @@ static const char *get_dbg_color_off(int level) static const char *get_dbg_prefix(int level) { return cw_strlist_get_str(prefix, level); - } static const char *get_dbg_color_ontext(int level) @@ -627,9 +627,9 @@ int cw_format_item(char *dst, mbag_item_t * item) { *dst = 0; if (item->type == MBAG_BSTR16) { - strncpy(dst, (char *) bstr16_data(item->data), bstr16_len(item->data)); - *(dst + bstr16_len(item->data)) = 0; - return bstr16_len(item->data); + strncpy(dst, (char *) bstr16_data(item->u2.data), bstr16_len(item->u2.data)); + *(dst + bstr16_len(item->u2.data)) = 0; + return bstr16_len(item->u2.data); } @@ -693,6 +693,23 @@ void cw_dbg_version_subelem(int level, const char *context, int subtype, bstrv_t } + + + + + + + + + + + + + + + + + /* void dbg_istore_dmp(mbag_t s) { diff --git a/src/cw/dbg.h b/src/cw/dbg.h index ba39f338..55eefb4c 100644 --- a/src/cw/dbg.h +++ b/src/cw/dbg.h @@ -51,15 +51,11 @@ void cw_dbg_packet(struct conn *conn, uint8_t * packet, int len); //#define DBGX(f,...) printf("hallo\n") -#ifdef WITH_CW_LOG_DEBUG + #define cw_dbg_elem(level,conn,msgtype,msgelemtype,msgbuf,msglen)\ cw_dbg_elem_colored(level,conn,msgtype,msgelemtype,msgbuf,msglen) -#else - - #define cw_dbg_elem(...) -#endif #endif @@ -67,78 +63,9 @@ void cw_dbg_packet(struct conn *conn, uint8_t * packet, int len); * @defgroup DbgOptions Debug Options * @{ */ +#include "debug.h" -/** - * Debug levels - */ -enum cw_dbg_levels{ - /** Show headers of incomming CAPWAP packets */ - DBG_PKT_IN=0, - /** Show headers of outgoing CAPWAP packets */ - DBG_PKT_OUT, - - /** Incomming CAPWAP packets with errors, wich would - usually silently discarded */ - DBG_PKT_ERR, - - /** Dump content of incomming packets */ - DBG_PKT_DMP, - - /** Display incomming CAPWAP/LWAPP messages */ - DBG_MSG_IN, - - /** Display outgoing CAPWAP/LWAPP messages */ - DBG_MSG_OUT, - - /** Message errors */ - DBG_MSG_ERR, - - /** Show message elements */ - DBG_ELEM, - - /** Show message element details */ - DBG_ELEM_DETAIL, - - /** Error in msg elements */ - DBG_ELEM_ERR, - - /** Show subelements */ - DBG_SUBELEM, - - /** Show dump of subelements */ - DBG_SUBELEM_DMP, - - /** hex dump elements */ - DBG_ELEM_DMP, - - /** General infos, like CAPWAP state */ - DBG_INFO, - - /** Misc. warnings */ - DBG_WARN, - - /** RFC related */ - DBG_RFC, - - /** DTLS related messages */ - DBG_DTLS, - - /** DTLS BIOs in/out */ - DBG_DTLS_BIO, - - /** Dump DTLS BIO i/o */ - DBG_DTLS_BIO_DMP, - - /** Show DTLS Details */ - DBG_DTLS_DETAIL, - - /** Debug Mods */ - DBG_MOD, - - DBG_X - - -}; +#define DBG_LN(level) level,__FILE__,__LINE__ /* driver specific debugs */ @@ -175,6 +102,7 @@ extern struct cw_strlist_elem cw_dbg_strings[]; if (cw_dbg_is_level(type)) cw_dbg_colored(type,__FILE__,__LINE__,__VA_ARGS__) + #define cw_dbg_dmp(type,...) cw_dbg_dmp_(type,__FILE__,__LINE__,__VA_ARGS__) diff --git a/src/cw/dbg_strings.c b/src/cw/dbg_strings.c index a10b6e65..a1178659 100644 --- a/src/cw/dbg_strings.c +++ b/src/cw/dbg_strings.c @@ -23,6 +23,7 @@ //#include +#include "mbag.h" #include "dbg.h" /** diff --git a/src/cw/dtls_bio.c b/src/cw/dtls_bio.c index 01c85c90..9279f6de 100644 --- a/src/cw/dtls_bio.c +++ b/src/cw/dtls_bio.c @@ -24,7 +24,7 @@ #include - +#include "mbag.h" #include "log.h" #include "dbg.h" #include "dtls.h" diff --git a/src/cw/dtls_gnutls.c b/src/cw/dtls_gnutls.c index 723f04d7..b6ae0cde 100644 --- a/src/cw/dtls_gnutls.c +++ b/src/cw/dtls_gnutls.c @@ -22,6 +22,7 @@ #include #include +#include "mbag.h" #include "dtls_common.h" #include "dtls_gnutls.h" diff --git a/src/cw/dtls_gnutls_accept.c b/src/cw/dtls_gnutls_accept.c index 33ac8a3d..371a6662 100644 --- a/src/cw/dtls_gnutls_accept.c +++ b/src/cw/dtls_gnutls_accept.c @@ -24,6 +24,7 @@ #include +#include "mbag.h" #include "conn.h" #include "dbg.h" #include "log.h" diff --git a/src/cw/dtls_gnutls_bio.c b/src/cw/dtls_gnutls_bio.c index 3afc6b16..12e365e9 100644 --- a/src/cw/dtls_gnutls_bio.c +++ b/src/cw/dtls_gnutls_bio.c @@ -27,7 +27,7 @@ #include - +#include "mbag.h" #include "dtls.h" #include "dtls_gnutls.h" #include "capwap.h" diff --git a/src/cw/dtls_gnutls_connect.c b/src/cw/dtls_gnutls_connect.c index 9a9ea80c..00ab2314 100644 --- a/src/cw/dtls_gnutls_connect.c +++ b/src/cw/dtls_gnutls_connect.c @@ -23,6 +23,7 @@ #include "gnutls/dtls.h" +#include "mbag.h" #include "dtls.h" #include "dtls_gnutls.h" diff --git a/src/cw/dtls_gnutls_get_cipher.c b/src/cw/dtls_gnutls_get_cipher.c index 1b98e11a..161f44c9 100644 --- a/src/cw/dtls_gnutls_get_cipher.c +++ b/src/cw/dtls_gnutls_get_cipher.c @@ -1,4 +1,5 @@ +#include "mbag.h" #include "dtls_common.h" #include "dtls_gnutls.h" diff --git a/src/cw/dtls_gnutls_get_peers_cert.c b/src/cw/dtls_gnutls_get_peers_cert.c index 9a122885..40e25580 100644 --- a/src/cw/dtls_gnutls_get_peers_cert.c +++ b/src/cw/dtls_gnutls_get_peers_cert.c @@ -2,6 +2,7 @@ #include #include +#include "mbag.h" #include "conn.h" #include "dtls.h" #include "dtls_gnutls.h" diff --git a/src/cw/dtls_openssl.c b/src/cw/dtls_openssl.c index c840302e..566f48c0 100644 --- a/src/cw/dtls_openssl.c +++ b/src/cw/dtls_openssl.c @@ -21,6 +21,7 @@ #include #include +#include "capwap.h" #include "dtls_openssl.h" #include "capwap.h" diff --git a/src/cw/dtls_openssl_accept.c b/src/cw/dtls_openssl_accept.c index f5952650..39acd240 100644 --- a/src/cw/dtls_openssl_accept.c +++ b/src/cw/dtls_openssl_accept.c @@ -18,6 +18,7 @@ #include +#include "mbag.h" #include "conn.h" #include "sock.h" #include "dtls_openssl.h" diff --git a/src/cw/dtls_openssl_bio.c b/src/cw/dtls_openssl_bio.c index d855b37d..c4294c6d 100644 --- a/src/cw/dtls_openssl_bio.c +++ b/src/cw/dtls_openssl_bio.c @@ -21,11 +21,13 @@ * @brief Functions for OpenSSL BIO */ +#include "mbag.h" #include #include #include "dtls_openssl.h" #include "dtls.h" +#include "mbag.h" #include "conn.h" #include "log.h" #include "dbg.h" diff --git a/src/cw/dtls_openssl_connect.c b/src/cw/dtls_openssl_connect.c index d4fb414e..f3fe0c8f 100644 --- a/src/cw/dtls_openssl_connect.c +++ b/src/cw/dtls_openssl_connect.c @@ -1,5 +1,6 @@ #include +#include "mbag.h" #include "dtls_openssl.h" #include "log.h" #include "dbg.h" diff --git a/src/cw/dtls_openssl_get_cipher.c b/src/cw/dtls_openssl_get_cipher.c index a2d971d0..dc752064 100644 --- a/src/cw/dtls_openssl_get_cipher.c +++ b/src/cw/dtls_openssl_get_cipher.c @@ -16,6 +16,7 @@ */ +#include "mbag.h" #include "dtls_openssl.h" const char * dtls_openssl_get_cipher(struct conn * conn) diff --git a/src/cw/item.c b/src/cw/item.c index 9f17b989..0aa39779 100644 --- a/src/cw/item.c +++ b/src/cw/item.c @@ -16,7 +16,7 @@ */ - +#include "mbag.h" #include "item.h" #include "log.h" diff --git a/src/cw/item.h b/src/cw/item.h index 179b840b..9a883f4c 100644 --- a/src/cw/item.h +++ b/src/cw/item.h @@ -20,7 +20,7 @@ #ifndef __CW_ITEM_H #define __CW_ITEM_H -#include "mbag.h" +/*#include "mbag.h"*/ extern const char CW_ITEM_NONE[]; extern const char CW_ITEM_ANY[]; diff --git a/src/cw/log.h b/src/cw/log.h index f0dc2da1..1f7f567f 100644 --- a/src/cw/log.h +++ b/src/cw/log.h @@ -55,12 +55,15 @@ */ -#ifdef WITH_CW_LOG -#define cw_log(level,...) cw_log_colored(level,__VA_ARGS__) -#else +/*#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 diff --git a/src/cw/lw_addelem.c b/src/cw/lw_addelem.c index f03a6d4a..06643dd7 100644 --- a/src/cw/lw_addelem.c +++ b/src/cw/lw_addelem.c @@ -3,6 +3,7 @@ #include "lwapp.h" #include "lwapp_cisco.h" +#include "mbag.h" #include "lw.h" #include "vendors.h" diff --git a/src/cw/lw_checksum.c b/src/cw/lw_checksum.c index 7f042c4c..d8c1aa3f 100644 --- a/src/cw/lw_checksum.c +++ b/src/cw/lw_checksum.c @@ -23,6 +23,7 @@ *@{ */ +#include "mbag.h" #include "lw.h" diff --git a/src/cw/lw_inline.c b/src/cw/lw_inline.c index a68a2d26..ced2acdb 100644 --- a/src/cw/lw_inline.c +++ b/src/cw/lw_inline.c @@ -1,3 +1,4 @@ +#include "mbag.h" #include "lw.h" /** diff --git a/src/cw/lw_put_ac_descriptor.c b/src/cw/lw_put_ac_descriptor.c index f2bd51cd..9ca2746b 100644 --- a/src/cw/lw_put_ac_descriptor.c +++ b/src/cw/lw_put_ac_descriptor.c @@ -1,5 +1,6 @@ #include +#include "mbag.h" #include "lwapp.h" #include "lw.h" diff --git a/src/cw/lw_put_cisco_path_mtu.c b/src/cw/lw_put_cisco_path_mtu.c index f6f264ac..74fa74d2 100644 --- a/src/cw/lw_put_cisco_path_mtu.c +++ b/src/cw/lw_put_cisco_path_mtu.c @@ -20,7 +20,7 @@ * @file * @brief Implementation of lw_put_cisco_path_mtu */ - +#include "mbag.h" #include "lwapp_cisco.h" #include "lw.h" #include "vendors.h" diff --git a/src/cw/lw_put_image_data.c b/src/cw/lw_put_image_data.c index effcb743..a14bcfbb 100644 --- a/src/cw/lw_put_image_data.c +++ b/src/cw/lw_put_image_data.c @@ -1,3 +1,4 @@ +#include "mbag.h" #include "lwapp.h" #include "lw.h" diff --git a/src/cw/lw_put_sockaddr.c b/src/cw/lw_put_sockaddr.c index 61ea270a..830a4f87 100644 --- a/src/cw/lw_put_sockaddr.c +++ b/src/cw/lw_put_sockaddr.c @@ -20,6 +20,8 @@ #include #include + +#include "mbag.h" #include "lw.h" int lw_put_sockaddr(uint8_t * dst, struct sockaddr_storage *addr) diff --git a/src/cw/lw_readelem_wtp_name.c b/src/cw/lw_readelem_wtp_name.c index a8a80bfe..610fa6a1 100644 --- a/src/cw/lw_readelem_wtp_name.c +++ b/src/cw/lw_readelem_wtp_name.c @@ -21,7 +21,7 @@ * @brief Implent lw_readelem_wtp_name */ - +#include "mbag.h" #include "lwapp.h" #include "cw_util.h" diff --git a/src/cw/mavl.h b/src/cw/mavl.h index 554ec6f1..4faaedc4 100644 --- a/src/cw/mavl.h +++ b/src/cw/mavl.h @@ -53,14 +53,22 @@ * @} */ - +union mavldata { + void *ptr; + uint32_t dword; + uint16_t word; + uint8_t byte; + const char *str; +}; +typedef union mavldata mavldata_t; /** * Defines the structure of an AVL Node. */ struct mavlnode { /** Pointer to data, thant belongs to the node */ - void *data; + /* void *data; */ + union mavldata data; /** Pointer to left son*/ struct mavlnode *left; /** Pointer to right son*/ @@ -76,9 +84,9 @@ struct mavl { /** Pointer to root node */ struct mavlnode *root; /** Compare function */ - int (*cmp) (const void *, const void *); + int (*cmp) (const union mavldata *, const union mavldata *); /** Delete element function */ - void (*del) (void *); + void (*del) (union mavldata *); /** Number of elements currently stored in the tree */ int count; }; @@ -93,16 +101,17 @@ typedef struct mavl * mavl_t; * @defgroup MAVL_FUNCTIONS Functions * @{ */ -struct mavl *mavl_create(int (*cmp) (const void *, const void *), - void (*del) (void *)); +struct mavl *mavl_create(int (*cmp) (const union mavldata *, const union mavldata *), + void (*del) (union mavldata *)); void mavlnode_destroy(struct mavl *t, struct mavlnode *n); void mavl_del_all(struct mavl *t); -void *mavl_del(struct mavl *t, void *data); -void *mavl_add(struct mavl *t, void *data); -void * mavl_get(struct mavl *t ,void *data); -struct mavlnode *mavl_get_node(struct mavl *t, void *data); +union mavldata *mavl_del(struct mavl *t, union mavldata *data); +union mavldata *mavl_add(struct mavl *t, union mavldata *data); +union mavldata * mavl_get(struct mavl *t ,union mavldata *data); +struct mavlnode *mavl_get_node(struct mavl *t, union mavldata *data); +void * mavl_get_ptr(mavl_t tree, void * search); void mavl_merge(mavl_t m, mavl_t t); @@ -121,7 +130,7 @@ int mavl_foreach_from_lr(struct mavl *t, struct mavlnode *n, void *data, void *mavl_replace_data(struct mavl *t, void *data, int len); -void *mavl_replace(struct mavl *t,void *data); +union mavldata *mavl_replace(struct mavl *t,union mavldata *data); void mavl_destroy(struct mavl *t); @@ -129,6 +138,7 @@ void mavl_destroy(struct mavl *t); #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) @@ -144,22 +154,22 @@ struct mavliter{ struct mavlnode *cur; int stack_ptr; struct mavlnode * root; - int (*cmp) (const void *, const void *); + int (*cmp) (const union mavldata *, const union mavldata *); }; typedef struct mavliter mavliter_t; -void * mavliter_next(mavliter_t *i); +union mavldata * mavliter_next(mavliter_t *i); -void * mavliter_seek_set(struct mavliter *i); +union mavldata * mavliter_seek_set(struct mavliter *i); void mavliter_init(mavliter_t *i, mavl_t t); -void * mavliter_get(mavliter_t *i); +union mavldata * mavliter_get(mavliter_t *i); -extern void * mavliter_seek(mavliter_t *i,void *d); +extern union mavldata * mavliter_seek(mavliter_t *i,void *d); /** * Define a AVL Iterator varialble and accociate it with @@ -182,16 +192,16 @@ extern void * mavliter_seek(mavliter_t *i,void *d); } \endcode */ -#define MAVLITER_DEFINE(i,t)\ - mavliter_t i; mavliter_init(&i,t) +#define MAVLITER_DEFINE(iterator,mavl_obj)\ + mavliter_t iterator; mavliter_init(&iterator,mavl_obj) /** * Iterate through all elements of an MAVL Object using a MAVL Iterator. * @param i pointer to MAVL Interator object */ -#define mavliter_foreach(i)\ - for (mavliter_seek_set(i); NULL != mavliter_get(i); mavliter_next(i)) +#define mavliter_foreach(iterator)\ + for (mavliter_seek_set(iterator); NULL != mavliter_get(iterator); mavliter_next(iterator)) #define mavliter_foreach_from(i,from)\ for (mavliter_seek(i,from); NULL != mavliter_get(i); mavliter_next(i)) @@ -210,7 +220,8 @@ extern void * mavliter_seek(mavliter_t *i,void *d); typedef mavl_t mavl_conststr_t; extern mavl_conststr_t mavl_create_conststr(); - +int mavl_cmp_dword(const union mavldata *e1, const union mavldata *e2); +void mavl_free_bin(union mavldata *data); /* diff --git a/src/cw/mavl_add.c b/src/cw/mavl_add.c index 92798fdb..e5e2bb21 100644 --- a/src/cw/mavl_add.c +++ b/src/cw/mavl_add.c @@ -1,6 +1,7 @@ #include "mavl.h" -static struct mavlnode *mavlnode_create(void *data) + +static struct mavlnode *mavlnode_create(union mavldata *data) { struct mavlnode *n = malloc(sizeof(struct mavlnode)); if (!n) @@ -8,20 +9,19 @@ static struct mavlnode *mavlnode_create(void *data) n->left = n->right = 0; n->bal = 0; - n->data = data; + n->data = *data; return n; } -static int mavl_add0(struct mavl *t, struct mavlnode **parent, void **data) +static int mavl_add0(struct mavl *t, struct mavlnode **parent, union mavldata * data) { -// struct mavlnode * rn; struct mavlnode *tmp; struct mavlnode *n = *parent; - int rc = t->cmp(*data, n->data); + int rc = t->cmp(data, &n->data); int bal; if (rc == 0) { @@ -71,8 +71,6 @@ static int mavl_add0(struct mavl *t, struct mavlnode **parent, void **data) return 0; } - //printf("!!!!left bal = %i\n",n->left->bal); - //exit(0); } return bal; @@ -80,7 +78,7 @@ static int mavl_add0(struct mavl *t, struct mavlnode **parent, void **data) } /* n->left is 0 */ - n->left = mavlnode_create(*data); + n->left = mavlnode_create(data); if (!n->left) return 3; @@ -139,9 +137,6 @@ static int mavl_add0(struct mavl *t, struct mavlnode **parent, void **data) n->right = tmp; return 0; } - //printf("!!!!iright bal = %i\n",n->left->bal); - //exit(0); - } return bal; @@ -150,7 +145,7 @@ static int mavl_add0(struct mavl *t, struct mavlnode **parent, void **data) /* n->right is 0 */ - n->right = mavlnode_create(*data); + n->right = mavlnode_create(data); if (!n->right) return 3; @@ -171,16 +166,21 @@ static int mavl_add0(struct mavl *t, struct mavlnode **parent, void **data) * @data pointer to element * @return added alement or NULL if error. */ -void *mavl_add(struct mavl *t, void *data) +union mavldata *mavl_add(struct mavl *t, union mavldata *data) { + union mavldata * d; + int rc; + if (t->root == 0) { t->root = mavlnode_create(data); if (t->root) t->count++; - return t->root->data; + return &t->root->data; } - void *d = data; - int rc = mavl_add0(t, &t->root, &d); + + d = data; + + rc = mavl_add0(t, &t->root, d); if (rc > 3) return NULL; diff --git a/src/cw/mavl_cmp_dword.c b/src/cw/mavl_cmp_dword.c new file mode 100644 index 00000000..1b37caf7 --- /dev/null +++ b/src/cw/mavl_cmp_dword.c @@ -0,0 +1,5 @@ +#include "mavl.h" + +int mavl_cmp_dword(const union mavldata *e1, const union mavldata *e2){ + return e1->dword - e2->dword; +} diff --git a/src/cw/mavl_create.c b/src/cw/mavl_create.c index 3720a9ff..64660727 100644 --- a/src/cw/mavl_create.c +++ b/src/cw/mavl_create.c @@ -30,8 +30,8 @@ * @param del pointer to delete function which is called when an element will be deletet * @return pointer to an #mavl struct */ -struct mavl *mavl_create(int (*cmp) (const void *, const void *), - void (*del) (void *)) + struct mavl *mavl_create(int (*cmp) (const union mavldata *, const union mavldata *), + void (*del) (union mavldata *)) { struct mavl *t = malloc(sizeof(struct mavl)); if (!t) diff --git a/src/cw/mavl_del.c b/src/cw/mavl_del.c index 9a35b752..3576dacf 100644 --- a/src/cw/mavl_del.c +++ b/src/cw/mavl_del.c @@ -3,7 +3,7 @@ void mavlnode_destroy(struct mavl *t, struct mavlnode *n) { if (t->del) { - t->del(n->data); + t->del(&n->data); } free(n); t->count--; @@ -11,7 +11,6 @@ void mavlnode_destroy(struct mavl *t, struct mavlnode *n) - static void rot_rl(struct mavlnode *n, struct mavlnode **parent) { struct mavlnode *tmp; @@ -70,16 +69,12 @@ static int adj_bal_l(struct mavlnode *n, struct mavlnode **parent) rot_l(n, parent); return 0; } else if (n->right->bal == -1) { -// int rb; n->bal = 0; n->right->bal = 0; -// rb = n->right->left->bal; n->right->left->bal = 0; rot_rl(n, parent); return 1; } -// printf("adj bal l not handled \n"); -// exit(0); return -11; /* that should never happen */ } @@ -98,16 +93,12 @@ static int adj_bal_r(struct mavlnode *n, struct mavlnode **parent) rot_r(n, parent); return 0; } else if (n->left->bal == 1) { -// int rb; n->bal = 0; n->left->bal = 0; -// rb = n->left->right->bal; n->left->right->bal = 0; rot_lr(n, parent); return 1; } -// printf("adj bal li left not handled \n"); -// exit(0); return -11; /* that should never happen */ } @@ -116,7 +107,7 @@ static int adj_bal_r(struct mavlnode *n, struct mavlnode **parent) -static int mavl_del_lo(struct mavlnode **parent, void **data) +static int mavl_del_lo(struct mavlnode **parent, union mavldata *data) { struct mavlnode *n = *parent; @@ -152,12 +143,12 @@ static int mavl_del_lo(struct mavlnode **parent, void **data) -int mavl_del0(struct mavl *t, struct mavlnode **parent, void **data) +int mavl_del0(struct mavl *t, struct mavlnode **parent, union mavldata *data) { struct mavlnode *n = *parent; int rc; int bal; - rc = t->cmp(*data, n->data); + rc = t->cmp(data, &n->data); if (rc == 0) { if (n->right == 0 && n->left == 0) { @@ -183,7 +174,7 @@ int mavl_del0(struct mavl *t, struct mavlnode **parent, void **data) /* node has two childs */ if (t->del) { - t->del(n->data); + t->del(&n->data); } t->count--; bal = mavl_del_lo(&n->right, &n->data); @@ -237,13 +228,16 @@ int mavl_del0(struct mavl *t, struct mavlnode **parent, void **data) } -void *mavl_del(struct mavl *t, void *data) +union mavldata *mavl_del(struct mavl *t, union mavldata *data) { + union mavldata *d; + int rc; + if (!t->root) return NULL; - void *d = data; - int rc = mavl_del0(t, &t->root, &d); + d = data; + rc = mavl_del0(t, &t->root, d); if (rc == 2) return NULL; return data; diff --git a/src/cw/mavl_foreach.c b/src/cw/mavl_foreach.c index 49930ad7..39a53bb5 100644 --- a/src/cw/mavl_foreach.c +++ b/src/cw/mavl_foreach.c @@ -24,7 +24,7 @@ int mavl_foreach_rl(struct mavlnode *n, int (*callback)(void *,void *),void *cbp return 1; if (!mavl_foreach_rl(n->right,callback,cbpriv)) return 0; - if (!callback(cbpriv,n->data)) + if (!callback(cbpriv,&n->data)) return 0; return mavl_foreach_rl(n->left,callback,cbpriv); } diff --git a/src/cw/mavl_foreach_lr.c b/src/cw/mavl_foreach_lr.c index cb1fbf5d..cb01eb6a 100644 --- a/src/cw/mavl_foreach_lr.c +++ b/src/cw/mavl_foreach_lr.c @@ -8,7 +8,7 @@ int mavl_foreach_lr(struct mavlnode *n, int (*callback)(void *,void *),void *cbp return 1; if (!mavl_foreach_lr(n->left,callback,cbpriv)) return 0; - if (!callback(cbpriv,n->data)) + if (!callback(cbpriv,&n->data)) return 0; return mavl_foreach_lr(n->right,callback,cbpriv); diff --git a/src/cw/mavl_get.c b/src/cw/mavl_get.c index fe88d672..58f528b0 100644 --- a/src/cw/mavl_get.c +++ b/src/cw/mavl_get.c @@ -29,13 +29,13 @@ * @param data Element to get * @return pointer to element or NULL if not found. */ -void * mavl_get(struct mavl *t ,void *data) +union mavldata * mavl_get(struct mavl *t ,union mavldata *data) { struct mavlnode *n = t->root; while(n){ - int rc=t->cmp(data,n->data); + int rc=t->cmp(data,&n->data); if (rc==0) - return n->data; + return &n->data; if (rc<0) n=n->left; else diff --git a/src/cw/mavl_get_node.c b/src/cw/mavl_get_node.c index e9aa543f..220dab3e 100644 --- a/src/cw/mavl_get_node.c +++ b/src/cw/mavl_get_node.c @@ -22,11 +22,11 @@ #include "mavl.h" -struct mavlnode * mavl_get_node(struct mavl *t ,void *data) +struct mavlnode * mavl_get_node(struct mavl *t ,union mavldata *data) { struct mavlnode *n = t->root; while(n){ - int rc=t->cmp(data,n->data); + int rc=t->cmp(data,&n->data); if (rc==0) return n; if (rc<0) diff --git a/src/cw/mavl_get_ptr.c b/src/cw/mavl_get_ptr.c new file mode 100644 index 00000000..3ea7b3b0 --- /dev/null +++ b/src/cw/mavl_get_ptr.c @@ -0,0 +1,11 @@ +#include "mavl.h" + +void * mavl_get_ptr(mavl_t tree, void * search) +{ + mavldata_t search_data, *result; + search_data.ptr=search; + result = mavl_find(tree,&search_data); + if (result) + return result->ptr; + return NULL; +} diff --git a/src/cw/mavl_merge.c b/src/cw/mavl_merge.c index 2d2b9124..bca003ac 100644 --- a/src/cw/mavl_merge.c +++ b/src/cw/mavl_merge.c @@ -25,18 +25,17 @@ * @{ */ - static void mavlnode_move(mavl_t m,mavl_t t, struct mavlnode *n) { - struct mavlnode * mn = mavl_get_node(m,n->data); + struct mavlnode * mn = mavl_get_node(m,&n->data); if (mn) { if (m->del) { - m->del(mn->data); + m->del(&mn->data); } mn->data=n->data; } else{ - mavl_add(m,n->data); + mavl_add(m,&n->data); } free(n); diff --git a/src/cw/mavl_replace.c b/src/cw/mavl_replace.c index c6ea7037..d26bd51f 100644 --- a/src/cw/mavl_replace.c +++ b/src/cw/mavl_replace.c @@ -1,10 +1,11 @@ #include "mavl.h" -void *mavl_replace(struct mavl *t,void *data){ +union mavldata *mavl_replace(struct mavl *t,union mavldata *data){ struct mavlnode * node = mavl_get_node(t,data); if (node){ - t->del(node->data); - return node->data=data; + t->del(&node->data); + node->data=*data; + return &node->data; } return mavl_add(t,data); } diff --git a/src/cw/mavliter_get.c b/src/cw/mavliter_get.c index 66818d97..df233a06 100644 --- a/src/cw/mavliter_get.c +++ b/src/cw/mavliter_get.c @@ -5,10 +5,10 @@ * @param i AVL Iterator * @return element or NULL if not found. */ -void * mavliter_get(mavliter_t *i){ +union mavldata * mavliter_get(mavliter_t *i){ if(!i->cur) return NULL; - return i->cur->data; + return &i->cur->data; } diff --git a/src/cw/mavliter_next.c b/src/cw/mavliter_next.c index 30960ca9..151d1567 100644 --- a/src/cw/mavliter_next.c +++ b/src/cw/mavliter_next.c @@ -28,7 +28,8 @@ * @param i pointer to AVL Iterator * @return the element or NULL if there is no next elemeent. */ -void * mavliter_next(mavliter_t *i) + +union mavldata * mavliter_next(mavliter_t *i) { while ( i->stack_ptr) { @@ -39,7 +40,7 @@ void * mavliter_next(mavliter_t *i) continue; if ((i->stack_ptr)&1) { - return i->cur->data; + return &i->cur->data; } break; @@ -63,7 +64,7 @@ void * mavliter_next(mavliter_t *i) i->stack[i->stack_ptr++]=i->cur->right; - return i->cur->data; + return &i->cur->data; } diff --git a/src/cw/mavliter_seek.c b/src/cw/mavliter_seek.c index 61a64a0e..c3b14248 100644 --- a/src/cw/mavliter_seek.c +++ b/src/cw/mavliter_seek.c @@ -24,24 +24,26 @@ #include "mavl.h" + /** * Set an AVL Iterator to a specific position. * @param i AVL Iterator * @param d element to search for * @return element found or NULL if not found */ -void * mavliter_seek(mavliter_t *i,void *d) +union mavldata * mavliter_seek(mavliter_t *i,void *d) { + int rc; if (!i->root) return NULL; i->cur=i->root; i->stack_ptr=0; - int rc; + while(i->cur) { - rc = i->cmp(d,i->cur->data); + rc = i->cmp(d,&i->cur->data); if (rc==0){ i->stack[i->stack_ptr++]=i->cur->right; i->stack[i->stack_ptr++]=i->cur; diff --git a/src/cw/mavliter_seek_set.c b/src/cw/mavliter_seek_set.c index ca634c72..e5fbb6b1 100644 --- a/src/cw/mavliter_seek_set.c +++ b/src/cw/mavliter_seek_set.c @@ -1,6 +1,6 @@ #include "mavl.h" -void * mavliter_seek_set(struct mavliter *i) +union mavldata * mavliter_seek_set(struct mavliter *i) { i->stack_ptr=0; i->cur=i->root; diff --git a/src/cw/mbag.c b/src/cw/mbag.c index 1cad9b86..dec019c2 100644 --- a/src/cw/mbag.c +++ b/src/cw/mbag.c @@ -107,7 +107,7 @@ static void mbag_type_mbag_del(void *i) static void mbag_del_data(struct mbag_item *i) { if (i->type->del) { - i->type->del(i->data); + i->type->del(i->u2.data); } } @@ -116,7 +116,7 @@ static void mbag_del_fun(void *e) { mbag_item_t * i = (mbag_item_t*)e; if (i->dynid){ - free((void*)i->id); + free((void*)i->u1.id); } mbag_del_data(e); @@ -134,14 +134,14 @@ static void mbag_i_del_fun(void *e) static int mbag_cmp_fun(const void *x1, const void *x2) { - return strcmp(( (struct mbag_item *) x1)->id , ((struct mbag_item *) x2)->id ); + return strcmp(( (struct mbag_item *) x1)->u1.id , ((struct mbag_item *) x2)->u1.id ); } static int mbag_i_cmp_fun(const void *x1, const void *x2) { - return ((struct mbag_item *) x1)->iid - ((struct mbag_item *) x2)->iid; + return ((struct mbag_item *) x1)->u1.iid - ((struct mbag_item *) x2)->u1.iid; } mbag_t mbag_i_create() @@ -172,7 +172,7 @@ mbag_item_t *mbag_item_new(mbagtype_t type) struct mbag_item *mbag_item_create(mbag_t s, const char *id) { struct mbag_item is; - is.id = id; + is.u1.id = id; struct mbag_item *i = mavl_get(s, &is); @@ -184,7 +184,7 @@ struct mbag_item *mbag_item_create(mbag_t s, const char *id) i = malloc(sizeof(struct mbag_item)); if (!i) return NULL; - i->id = id; + i->u1.id = id; i->dynid=0; return mavl_add(s, i); } @@ -193,7 +193,7 @@ struct mbag_item *mbag_item_create(mbag_t s, const char *id) struct mbag_item *mbag_i_item_create(mbag_t s, uint32_t id) { struct mbag_item is; - is.iid = id; + is.u1.iid = id; struct mbag_item *i = mavl_get(s, &is); @@ -205,7 +205,7 @@ struct mbag_item *mbag_i_item_create(mbag_t s, uint32_t id) i = malloc(sizeof(struct mbag_item)); if (!i) return NULL; - i->iid = id; + i->u1.iid = id; i->dynid=0; return mavl_add(s, i); } @@ -271,7 +271,7 @@ int mbag_set_byte(mbag_t s, const char *id, uint8_t byte) struct mbag_item *i = mbag_item_create(s, id); if (!i) return 0; - i->byte = byte; + i->u2.byte = byte; i->type = &mbag_type_byte; return 1; } @@ -281,7 +281,7 @@ struct mbag_item * mbag_set_word(mbag_t s, const char *id, uint16_t word) struct mbag_item *i = mbag_item_create(s, id); if (!i) return 0; - i->word = word; + i->u2.word = word; i->type = &mbag_type_word; return i; } @@ -294,7 +294,7 @@ struct mbag_item * mbag_set_dword(mbag_t s, const char *id, uint32_t dword) struct mbag_item *i = mbag_item_create(s, id); if (!i) return NULL; - i->dword = dword; + i->u2.dword = dword; i->type = &mtype_dword; return i; } @@ -305,7 +305,7 @@ int mbag_i_set_mbag(mbag_t s, uint32_t id, mbag_t mbag) struct mbag_item *i = mbag_i_item_create(s, id); if (!i) return 0; - i->data = mbag; + i->u2.data = mbag; i->type = &mbag_type_mbag; return 1; } @@ -315,7 +315,7 @@ int mbag_set_mbag(mbag_t s, const char *id, mbag_t mbag) struct mbag_item *i = mbag_item_create(s, id); if (!i) return 0; - i->data = mbag; + i->u2.data = mbag; i->type = &mbag_type_mbag; return 1; } @@ -325,7 +325,7 @@ int mbag_set_data(mbag_t s, const char *id, const struct mbag_typedef *type, voi struct mbag_item *i = mbag_item_create(s, id); if (!i) return 0; - i->data = data; + i->u2.data = data; i->type = type; return 1; @@ -341,8 +341,8 @@ bstrv_t mbag_set_bstrv(mbag_t s, const char *id, uint32_t vendor_id, return NULL; i->type = MBAG_VENDORSTR; - i->data = bstrv_create(vendor_id,version,len); - return i->data; + i->u2.data = bstrv_create(vendor_id,version,len); + return i->u2.data; } @@ -360,7 +360,7 @@ bstrv_t mbag_set_bstrv(mbag_t s, const char *id, uint32_t vendor_id, mbag_item_t *mbag_get(mbag_t s, const char *id) { mbag_item_t i; - i.id = id; + i.u1.id = id; i.type=0; return mavl_get(s, &i); } @@ -369,7 +369,7 @@ mbag_item_t *mbag_get(mbag_t s, const char *id) mbag_item_t *mbag_i_get(mbag_t s, uint32_t id) { mbag_item_t i; - i.iid = id; + i.u1.iid = id; i.type=0; return mavl_get(s, &i); } @@ -379,7 +379,7 @@ mbag_item_t *mbag_i_get(mbag_t s, uint32_t id) void mbag_del(mbag_t s,const char *id) { mbag_item_t i; - i.id = id; + i.u1.id = id; i.type=0; mavl_del(s, &i); } @@ -391,7 +391,7 @@ void * mbag_get_data(mbag_t s, const char *id, const struct mbag_typedef * type, return def; if (i->type != type) return def; - return i->data; + return i->u2.data; } @@ -423,7 +423,7 @@ void * mbag_get_raw(mbag_t s, const char *id, void * def) struct mbag_item *i = mbag_get(s, id); if (!i) return def; - return i->data; + return i->u2.data; } @@ -435,7 +435,7 @@ uint8_t mbag_get_byte(mbag_t s, const char *id, uint8_t def) return def; if (i->type != MBAG_BYTE) return def; - return i->byte; + return i->u2.byte; } uint16_t mbag_get_word(mbag_t s, const char *id, uint16_t def) @@ -445,7 +445,7 @@ uint16_t mbag_get_word(mbag_t s, const char *id, uint16_t def) return def; if (i->type != MBAG_WORD) return def; - return i->word; + return i->u2.word; } @@ -457,7 +457,7 @@ uint32_t mbag_get_dword(mbag_t s, const char *id, uint32_t def) return def; if (i->type != MTYPE_DWORD) return def; - return i->dword; + return i->u2.dword; } @@ -468,7 +468,7 @@ mbag_t mbag_i_get_mbag(mbag_t s, uint32_t id, mbag_t def) return def; if (i->type != MBAG_MBAG) return def; - return i->data; + return i->u2.data; } @@ -479,7 +479,7 @@ mbag_t mbag_get_mbag(mbag_t s, const char *id, mbag_t def) return def; if (i->type != MBAG_MBAG) return def; - return i->data; + return i->u2.data; } mbag_item_t * mbag_set_bstrn(mbag_t s, const char *id, uint8_t * data, int len) @@ -488,7 +488,7 @@ mbag_item_t * mbag_set_bstrn(mbag_t s, const char *id, uint8_t * data, int len) if (!i) return NULL; i->type = MBAG_BSTR; - i->data = bstr_create(data, len); + i->u2.data = bstr_create(data, len); return i; } @@ -502,7 +502,7 @@ struct mavl *mbag_get_mavl(mbag_t s, const char *id) return NULL; if (i->type != MBAG_AVLTREE) return NULL; - return i->data; + return i->u2.data; } int mbag_i_set_mavl(mbag_t s, uint32_t id, mavl_t t) @@ -511,7 +511,7 @@ int mbag_i_set_mavl(mbag_t s, uint32_t id, mavl_t t) if (!i) return 0; i->type = MBAG_AVLTREE; - i->data = t; + i->u2.data = t; return 1; } @@ -521,7 +521,7 @@ int mbag_set_mavl(mbag_t s, const char *id, mavl_t t) if (!i) return 0; i->type = MBAG_AVLTREE; - i->data = t; + i->u2.data = t; return 1; } @@ -547,7 +547,7 @@ mavl_t mbag_get_mavl_c(mbag_t s, const char *id, { struct mbag_item *i = mbag_get(s, id); if (i) - return i->data; + return i->u2.data; if (!creator) return NULL; @@ -564,7 +564,7 @@ mavl_t mbag_get_mbag_c(mbag_t s, const char *id, { struct mbag_item *i = mbag_get(s, id); if (i) - return i->data; + return i->u2.data; if (!creator) return NULL; @@ -591,7 +591,7 @@ mavl_t mbag_i_get_mbag_c(mbag_t s, uint32_t iid, { struct mbag_item *i = mbag_i_get(s, iid); if (i) - return i->data; + return i->u2.data; if (!creator) return NULL; @@ -610,7 +610,7 @@ mavl_t mbag_i_get_mavl(mbag_t s, uint32_t id, { struct mbag_item *i = mbag_i_get(s, id); if (i) - return i->data; + return i->u2.data; if (!creator) return NULL; @@ -646,7 +646,7 @@ char *mbag_get_str(mbag_t s, const char *id, char *def) struct mbag_item *i = mbag_get(s, id); if (!i) return def; - return i->data; + return i->u2.data; }; @@ -656,7 +656,7 @@ int mbag_set_str(mbag_t s, const char *id, const char *str) if (!i) return 0; i->type = MBAG_STR; - i->data = strdup(str); + i->u2.data = strdup(str); return 1; } @@ -673,7 +673,7 @@ int mbag_set_sockaddr(mbag_t s, const char *id, const struct sockaddr * sa) } sock_copyaddr(sad,sa); i->type = MBAG_SOCKADDR; - i->data = sad; + i->u2.data = sad; return 1; } @@ -712,12 +712,12 @@ void *mbag_item_get_data_ptr(struct mbag_item *item) if (item->type == MBAG_FUN ) { struct mbag_item_fundef *fundef = - (struct mbag_item_fundef *) item->data; + (struct mbag_item_fundef *) item->u2.data; if (!fundef) return NULL; return fundef->get(fundef->arg); } - return item->data; + return item->u2.data; } @@ -726,7 +726,7 @@ void mbag_item_release_data_ptr(struct mbag_item *item, void *data) if (item->type == MBAG_FUN) { struct mbag_item_fundef *fundef = - (struct mbag_item_fundef *) item->data; + (struct mbag_item_fundef *) item->u2.data; if (!fundef) return; if (!fundef->free) @@ -743,7 +743,7 @@ int mbag_set_strn(mbag_t s, const char *id, const char *str, int n) if (!i) return 0; i->type = MBAG_STR; - i->data = strndup(str, n); + i->u2.data = strndup(str, n); return 1; } @@ -753,7 +753,7 @@ int mbag_set_bstr16n(mbag_t s, const char *id, uint8_t * data, int len) if (!i) return 0; i->type = MBAG_BSTR16; - i->data = bstr16_create(data, len); + i->u2.data = bstr16_create(data, len); return 1; } @@ -765,7 +765,7 @@ mbag_item_t * mbag_set_const_ptr(mbag_t s, const char *id, void *ptr) if (!i) return 0; i->type = MBAG_CONST_DATA; - i->data = ptr; + i->u2.data = ptr; return i; } @@ -776,7 +776,7 @@ int mbag_set_ptr(mbag_t s, const char *id, void *ptr) if (!i) return 0; i->type = MBAG_PTR; - i->data = ptr; + i->u2.data = ptr; return 1; } @@ -791,7 +791,7 @@ int mbag_set_fun(mbag_t s, const char *id, return 0; struct mbag_item_fundef *fundef = malloc(sizeof(struct mbag_item_fundef)); - i->data = fundef; + i->u2.data = fundef; if (!fundef) return 0; diff --git a/src/cw/mbag.h b/src/cw/mbag.h index 6213fd83..c5969e21 100644 --- a/src/cw/mbag.h +++ b/src/cw/mbag.h @@ -87,7 +87,7 @@ struct mbag_item{ * create mbags. */ const char *id; - }; + }u1; /** * Indicates if the key is dynamic oder static. * If dynamic, the id will be freed using free, @@ -102,7 +102,7 @@ struct mbag_item{ uint8_t byte; uint16_t word; uint32_t dword; - }; + }u2; }; diff --git a/src/cw/mbag_set_from_buf.c b/src/cw/mbag_set_from_buf.c index 32cd034c..6029ac36 100644 --- a/src/cw/mbag_set_from_buf.c +++ b/src/cw/mbag_set_from_buf.c @@ -40,7 +40,7 @@ int mbag_set_from_buf(mbag_t dst, mbagtype_t type, const char *item_id, uint8_t struct mbag_item * item = type->get(data,len); if (!item) return 0; - item->id=item_id; + item->u1.id=item_id; mbag_set(dst,item); return 1; diff --git a/src/cw/mbag_type_bstr16.c b/src/cw/mbag_type_bstr16.c index 4c2bc54b..bfee2b18 100644 --- a/src/cw/mbag_type_bstr16.c +++ b/src/cw/mbag_type_bstr16.c @@ -9,14 +9,14 @@ static int to_str(void *item,char *dst) mbag_item_t *i= item; char *d = dst; - int utf8 = format_is_utf8(bstr16_data(i->data), bstr16_len(i->data)); + int utf8 = format_is_utf8(bstr16_data(i->u2.data), bstr16_len(i->u2.data)); if (utf8) { - d += sprintf(d, "%.*s", bstr16_len(i->data), bstr16_data(i->data)); + d += sprintf(d, "%.*s", bstr16_len(i->u2.data), bstr16_data(i->u2.data)); } else { d += sprintf(d, ".x"); - d += format_hex(d, bstr16_data(i->data), bstr16_len(i->data)); + d += format_hex(d, bstr16_data(i->u2.data), bstr16_len(i->u2.data)); } return d-dst; } @@ -27,15 +27,15 @@ static struct mbag_item * from_str(const char *src) mbag_item_t * i = mbag_item_new(MBAG_BSTR16); if (!i) return NULL; - i->data=bstr16_create_from_str(src); + i->u2.data=bstr16_create_from_str(src); return i; } int put(struct mbag_item *i, uint8_t *dst) { - int l = bstr16_len(i->data); - memcpy(dst,bstr16_data(i->data),l); + int l = bstr16_len(i->u2.data); + memcpy(dst,bstr16_data(i->u2.data),l); return l; } @@ -44,7 +44,7 @@ static struct mbag_item * get(const uint8_t *src, int len) mbag_item_t * i = mbag_item_new(MBAG_BSTR16); if (!i) return NULL; - i->data=bstr16_create(src,len); + i->u2.data=bstr16_create(src,len); return i; } diff --git a/src/cw/mbag_type_byte.c b/src/cw/mbag_type_byte.c index 8cc2f4a9..2e94f77f 100644 --- a/src/cw/mbag_type_byte.c +++ b/src/cw/mbag_type_byte.c @@ -25,14 +25,14 @@ static struct mbag_item * from_str(const char *src) mbag_item_t * i = mbag_item_new(MBAG_BYTE); if (!i) return NULL; - i->byte=atoi(src); + i->u2.byte=atoi(src); return i; } static int to_str(void *item,char *dst) { mbag_item_t *i= item; - return sprintf(dst, "%d", i->byte); + return sprintf(dst, "%d", i->u2.byte); } static struct mbag_item * get(const uint8_t *src,int len) @@ -40,14 +40,14 @@ static struct mbag_item * get(const uint8_t *src,int len) mbag_item_t * item = mbag_item_new(MBAG_BYTE); if (!item) return NULL; - item->byte=*src; + item->u2.byte=*src; return item; } static int put(struct mbag_item * i, uint8_t *dst) { - return cw_put_byte(dst,i->byte); + return cw_put_byte(dst,i->u2.byte); } /** Defines a word, two bytes. */ diff --git a/src/cw/mbag_type_data.c b/src/cw/mbag_type_data.c index 21890962..2248356b 100644 --- a/src/cw/mbag_type_data.c +++ b/src/cw/mbag_type_data.c @@ -9,7 +9,7 @@ static int to_str(void *item,char *dst) { mbag_item_t *i= item; - return format_hex(dst, ((uint8_t*)i->data)+1, *((uint8_t*)i->data)); + return format_hex(dst, ((uint8_t*)i->u2.data)+1, *((uint8_t*)i->u2.data)); } @@ -31,7 +31,7 @@ static struct mbag_item * from_str(const char *src) *(mem)=msize; format_scan_hex_bytes(mem+1,src,l); - i->data=mem; + i->u2.data=mem; return i; } @@ -50,14 +50,14 @@ static struct mbag_item * get(const uint8_t *src,int len) } *data=len; memcpy(data+1,src,len); - item->data=data; + item->u2.data=data; return item; } static int put(struct mbag_item *i,uint8_t *dst) { - int l = *((uint8_t*)i->data); - memcpy(dst,i->data+1,l); + int l = *((uint8_t*)i->u2.data); + memcpy(dst,i->u2.data+1,l); return l; } diff --git a/src/cw/mbag_type_dword.c b/src/cw/mbag_type_dword.c index f9a9885c..221ddd0f 100644 --- a/src/cw/mbag_type_dword.c +++ b/src/cw/mbag_type_dword.c @@ -25,14 +25,14 @@ static struct mbag_item * from_str(const char *src) mbag_item_t * i = mbag_item_new(MTYPE_DWORD); if (!i) return NULL; - i->dword=atoi(src); + i->u2.dword=atoi(src); return i; } static int to_str(void *item,char *dst) { mbag_item_t *i= item; - return sprintf(dst, "%d", i->dword); + return sprintf(dst, "%d", i->u2.dword); } static struct mbag_item * get(const uint8_t *src,int len) @@ -40,14 +40,14 @@ static struct mbag_item * get(const uint8_t *src,int len) mbag_item_t * item = mbag_item_new(MTYPE_DWORD); if (!item) return NULL; - item->dword=cw_get_dword(src); + item->u2.dword=cw_get_dword(src); return item; } static int put(struct mbag_item * i, uint8_t *dst) { - return cw_put_dword(dst,i->dword); + return cw_put_dword(dst,i->u2.dword); } diff --git a/src/cw/mbag_type_str.c b/src/cw/mbag_type_str.c index 440a291b..9ab54440 100644 --- a/src/cw/mbag_type_str.c +++ b/src/cw/mbag_type_str.c @@ -3,7 +3,7 @@ static int to_str(void *item,char *dst) { mbag_item_t *i= item; - return sprintf(dst, "%s", (char*)i->data); + return sprintf(dst, "%s", (char*)i->u2.data); } static struct mbag_item * from_str(const char *src) @@ -14,7 +14,7 @@ static struct mbag_item * from_str(const char *src) i->type = MBAG_STR; i->dynid=0; - i->data = strndup(src,2000); + i->u2.data = strndup(src,2000); return i; } diff --git a/src/cw/mbag_type_vendorstr.c b/src/cw/mbag_type_vendorstr.c index fd842df8..c7234271 100644 --- a/src/cw/mbag_type_vendorstr.c +++ b/src/cw/mbag_type_vendorstr.c @@ -33,14 +33,14 @@ static int to_str(void *item,char *dst) mbag_item_t *i= item; char *d=dst; - d+=sprintf(d,"%d,",bstrv_get_vendor_id(i->data)); + d+=sprintf(d,"%d,",bstrv_get_vendor_id(i->u2.data)); - if (format_is_utf8(bstrv_data(i->data), bstrv_len(i->data))) { - d += sprintf(d, "%.*s", bstrv_len(i->data), - bstrv_data(i->data)); + if (format_is_utf8(bstrv_data(i->u2.data), bstrv_len(i->u2.data))) { + d += sprintf(d, "%.*s", bstrv_len(i->u2.data), + bstrv_data(i->u2.data)); } else { d += sprintf(d, ".x"); - d += format_hex(d, bstrv_data(i->data), bstrv_len(i->data)); + d += format_hex(d, bstrv_data(i->u2.data), bstrv_len(i->u2.data)); } return d-dst; @@ -58,10 +58,10 @@ static struct mbag_item * from_str(const char *src) if (s){ - i->data=bstrv_create_from_str(vendor_id,s+1); + i->u2.data=bstrv_create_from_str(vendor_id,s+1); } else{ - i->data=bstrv_create_from_str(vendor_id,""); + i->u2.data=bstrv_create_from_str(vendor_id,""); } return i; diff --git a/src/cw/mbag_type_word.c b/src/cw/mbag_type_word.c index acd820e4..de72c407 100644 --- a/src/cw/mbag_type_word.c +++ b/src/cw/mbag_type_word.c @@ -25,14 +25,14 @@ static struct mbag_item * from_str(const char *src) mbag_item_t * i = mbag_item_new(MBAG_WORD); if (!i) return NULL; - i->word=atoi(src); + i->u2.word=atoi(src); return i; } static int to_str(void *item,char *dst) { mbag_item_t *i= item; - return sprintf(dst, "%d", i->word); + return sprintf(dst, "%d", i->u2.word); } static struct mbag_item * get(const uint8_t *src,int len) @@ -40,14 +40,14 @@ static struct mbag_item * get(const uint8_t *src,int len) mbag_item_t * item = mbag_item_new(MBAG_WORD); if (!item) return NULL; - item->word=cw_get_word(src); + item->u2.word=cw_get_word(src); return item; } static int put(struct mbag_item * i, uint8_t *dst) { - return cw_put_word(dst,i->word); + return cw_put_word(dst,i->u2.word); } diff --git a/src/cw/message_set.c b/src/cw/message_set.c index 547f0df9..f0e79309 100644 --- a/src/cw/message_set.c +++ b/src/cw/message_set.c @@ -1,14 +1,15 @@ -#include "cw.h" +#include +#include "mbag.h" #include "mavl.h" -#include "cw/dbg.h" +#include "cw/debug.h" #include "cw/log.h" #include "message_set.h" -static int cmp_cw_elemhandler_by_id(const void *elem1, const void *elem2){ - struct cw_ElemHandler * e1 = ((struct cw_ElemHandler*)elem1); - struct cw_ElemHandler * e2 = ((struct cw_ElemHandler*)elem2); +static int cmp_cw_elemhandler_by_id(const mavldata_t * elem1, const mavldata_t *elem2){ + struct cw_ElemHandler * e1 = elem1->ptr; + struct cw_ElemHandler * e2 = elem2->ptr; int r; r = e1->id - e2->id; if (r!=0) @@ -22,25 +23,43 @@ static int cmp_cw_elemhandler_by_id(const void *elem1, const void *elem2){ return 0; } -static int cmp_cw_elemhandler_by_key(const void *elem1, const void *elem2){ - struct cw_ElemHandler * e1 = ((struct cw_ElemHandler*)elem1); - struct cw_ElemHandler * e2 = ((struct cw_ElemHandler*)elem2); +static int cmp_cw_elemhandler_by_key(const mavldata_t *elem1, const mavldata_t *elem2){ + struct cw_ElemHandler * e1 = elem1->ptr; + struct cw_ElemHandler * e2 = elem2->ptr; return strcmp(e1->key,e2->key); } - -static int cmp_msgdata(const void *elem1, const void *elem2) +static int cmp_msgdata(const mavldata_t * elem1, const mavldata_t *elem2) { - struct cw_MsgData * e1 = (struct cw_MsgData*)elem1; - struct cw_MsgData * e2 = (struct cw_MsgData*)elem2; + struct cw_MsgData * e1 = elem1->ptr; + struct cw_MsgData * e2 = elem2->ptr; return e1->type - e2->type; } +static int cmp_elemdata(const mavldata_t * elem1, const mavldata_t *elem2) +{ + struct cw_ElemData * e1 = elem1->ptr; + struct cw_ElemData * e2 = elem2->ptr; + int r; + r = e1->id - e2->id; + if (r!=0) + return r; + r = e1->vendor - e2->vendor; + if (r!=0) + return r; + r = e1->proto - e2->proto; + if (r != 0) + return r; + return 0; + +} + static void msgdata_destroy(struct cw_MsgData *data){ if (!data) return; - if (data->elements_list) +/* if (data->elements_list) mlist_destroy(data->elements_list); +*/ if (data->elements_tree) mavl_destroy( data->elements_tree ); free(data); @@ -48,19 +67,26 @@ static void msgdata_destroy(struct cw_MsgData *data){ static struct cw_MsgData * msgdata_create(){ struct cw_MsgData * msg; + msg = malloc( sizeof(struct cw_MsgData)); if (!msg) return NULL; -/* msg->elements_tree = mavl_create(); + msg->elements_tree = mavl_create(cmp_elemdata,mavl_free_bin); if (!msg->elements_tree){ msgdata_destroy(msg); return NULL; } -*/ + + + return msg; } +static void del_mavl_msdgdata( mavldata_t * d ){ + msgdata_destroy(d->ptr); +} + /** * @brief Destroy a message set @@ -69,13 +95,14 @@ static struct cw_MsgData * msgdata_create(){ void cw_msgset_destroy(struct cw_MsgSet * set){ if (set->messages) mavl_destroy(set->messages); - if (set->all_elems_by_id) - mavl_destroy(set->all_elems_by_id); - if (set->all_elems_by_key) - mavl_destroy(set->all_elems_by_key); + if (set->handlers_by_id) + mavl_destroy(set->handlers_by_id); + if (set->handlers_by_key) + mavl_destroy(set->handlers_by_key); free(set); } + /** * @brief Create a message set * @return Message set create, NULL if an error has occured @@ -90,21 +117,21 @@ struct cw_MsgSet * cw_msgset_create(){ memset(set,0,sizeof(struct cw_MsgSet)); /* create mavl for all_elems by id */ - set->all_elems_by_id = mavl_create(cmp_cw_elemhandler_by_id,free); - if (set->all_elems_by_id==NULL){ + set->handlers_by_id = mavl_create(cmp_cw_elemhandler_by_id,mavl_free_bin); + if (set->handlers_by_id==NULL){ cw_msgset_destroy(set); return NULL; } /* create mavl for all_elems by id */ - set->all_elems_by_key = mavl_create(cmp_cw_elemhandler_by_key,NULL); - if (set->all_elems_by_key==NULL){ + set->handlers_by_key = mavl_create(cmp_cw_elemhandler_by_key,NULL); + if (set->handlers_by_key==NULL){ cw_msgset_destroy(set); return NULL; } /* create mavl for messages */ - set->messages = mavl_create(cmp_msgdata,msgdata_destroy); + set->messages = mavl_create(cmp_msgdata,del_mavl_msdgdata); if (set->messages==NULL){ cw_msgset_destroy(set); return NULL; @@ -113,58 +140,130 @@ struct cw_MsgSet * cw_msgset_create(){ return set; } +struct cw_ElemHandler * cw_msgset_get_elemhandler(struct cw_MsgSet * set, + int proto, int vendor, int id) +{ + struct cw_ElemHandler search; + search.proto=proto; + search.vendor=vendor; + search.id=id; + return mavl_find_ptr(set->handlers_by_id,&search); +} +static int update_msgdata(struct cw_MsgSet * set, struct cw_MsgData * msgdata, + struct cw_MsgDef * msgdef) +{ + struct cw_ElemDef * elemdef; + + /* iterate through all defined elements */ + for(elemdef = msgdef->elements; elemdef->id; elemdef++){ + struct cw_ElemHandler * handler; + + handler = cw_msgset_get_elemhandler(set, + elemdef->proto, + elemdef->vendor, + elemdef->id); + + if (!handler){ + cw_log(LOG_ERR, "No handler for message element: %d %d %d", + elemdef->proto, + elemdef->vendor, + elemdef->id); + continue; + } + + DBG_START(NULL,DBG_INFO) + "Have an element %d %d %d, %s", + elemdef->proto, + elemdef->id, + elemdef->vendor, + handler->name + + DBG_END + } + + return 0; +} int cw_msgset_add(struct cw_MsgSet * set, struct cw_MsgDef messages[], - struct cw_ElemHandler elements[] + struct cw_ElemHandler handlers[] ){ struct cw_ElemHandler * handler; - struct cw_MsgDef * message; - + struct cw_MsgDef * msgdef; + /* Create mavl for all handlers */ - for(handler = elements; handler->id; handler++){ - struct cw_ElemHandler * copy; - copy = malloc(sizeof(struct cw_ElemHandler)); - if (!copy){ + for(handler = handlers; handler->id; handler++){ + mavldata_t copy; + copy.ptr = malloc(sizeof(struct cw_ElemHandler)); + if (!copy.ptr){ cw_log(LOG_ERR,"Can't alloc mem:", strerror(errno)); continue; } - memcpy(copy,handler,sizeof(struct cw_ElemHandler)); + DBG_START(NULL,DBG_MOD) + " Adding handler for element %d - %s - with key: %s", + handler->id, + handler->name, + handler->key + DBG_END - mavl_replace(set->all_elems_by_id,copy); - mavl_replace(set->all_elems_by_key,copy); + memcpy(copy.ptr,handler,sizeof(struct cw_ElemHandler)); + + mavl_replace(set->handlers_by_id,©); + mavl_replace(set->handlers_by_key,©); } - for (message=messages; message->type !=0; message++){ + for (msgdef=messages; msgdef->type !=0; msgdef++){ + struct cw_MsgData search, *msg; - struct cw_MsgData * msg; - - cw_dbg(DBG_INFO,"Add message: Type:%d - %s",message->type,message->name); - - msg = malloc( sizeof(struct cw_MsgData)); - if (!msg) { - cw_log(LOG_ERROR,"Can't alloc cw_MsgData: %s",strerror(errno)); - continue; + /* Look if message already exists */ + search.type=msgdef->type; + msg = mavl_find_ptr(set->messages,&search); + + if (!msg){ + msg = msgdata_create(); + if (!msg){ + cw_log(LOG_ERR,"Can't create messae"); + return 0; + } } + /* Overwrite the found message */ + if (msgdef->name) + msg->name=msgdef->name; + if (msgdef->states) + msg->states=msgdef->states; + msg->receiver=msgdef->receiver; + DBG_START(NULL,DBG_INFO) + "Add message Type:%d - %s ",msgdef->type,msgdef->name + DBG_END + + update_msgdata(set,msg,msgdef); } + + DBG_START(NULL,DBG_INFO) "Hello world" DBG_END + exit(0); + + return 0; } +/* struct cw_ElemHandler * cw_message_set_find_element( struct cw_MsgSet * set, struct cw_ElemHandler * element){ return mavl_find(set->all_elems_by_id,element); } +*/ +/* mlist_t cw_msgset_get_msg(struct cw_MsgSet * set, int type){ struct cw_MsgData search; search.type = type; @@ -176,3 +275,4 @@ mlist_t cw_msgset_get_msg(struct cw_MsgSet * set, int type){ } return result->elements_list; } +*/ diff --git a/src/cw/message_set.h b/src/cw/message_set.h index b4536994..fe4dd99c 100644 --- a/src/cw/message_set.h +++ b/src/cw/message_set.h @@ -1,22 +1,27 @@ #ifndef __MESSAGE_SET_H #define __MESSAGE_SET_H +#include "mlist.h" struct cw_MsgSet { mavl_t messages; - mavl_t all_elems_by_id; - mavl_t all_elems_by_key; + mavl_t handlers_by_id; + mavl_t handlers_by_key; }; struct cw_ElemDef{ + int proto; + int vendor; int id; int mand; int op; }; struct cw_ElemData{ - struct cw_ElemHandler *handler; + int proto; + int vendor; + int id; int mand; }; @@ -61,7 +66,7 @@ extern struct cw_MsgSet * cw_msgset_create(); extern void cw_msgset_destroy(struct cw_MsgSet * set); extern int cw_msgset_add(struct cw_MsgSet * set, - struct cw_MsgDef messages[], struct cw_ElemHandler elements[]); + struct cw_MsgDef messages[], struct cw_ElemHandler handlers[]); mlist_t cw_msgset_get_msg(struct cw_MsgSet * set, int type); diff --git a/src/cw/mod.c b/src/cw/mod.c index b2fc4829..36a80242 100644 --- a/src/cw/mod.c +++ b/src/cw/mod.c @@ -27,6 +27,7 @@ //#include "action.h" +#include "mbag.h" #include "mavl.h" #include "dbg.h" #include "log.h" diff --git a/src/cw/mod.h b/src/cw/mod.h index fbfdc247..b1c5adc8 100644 --- a/src/cw/mod.h +++ b/src/cw/mod.h @@ -39,6 +39,8 @@ enum { MOD_MODE_BINDINGS }; + + struct cw_Mod { /** Name of the module */ const char *name; @@ -46,7 +48,7 @@ struct cw_Mod { int (*init) (); /** init_config */ - int (*init_config) (mbag_t config); + int (*init_config) (void * /*mbag_t config*/); /** Detect capwap * This function is called after receiving and disassembling a complete diff --git a/src/cw/netconn.c b/src/cw/netconn.c index b503d7fd..fd856560 100644 --- a/src/cw/netconn.c +++ b/src/cw/netconn.c @@ -20,6 +20,7 @@ #include #include +#include "mbag.h" #include "sock.h" #include "netconn.h" #include "log.h" diff --git a/src/cw/radio.c b/src/cw/radio.c index 2b51a32e..dd0f3d0e 100644 --- a/src/cw/radio.c +++ b/src/cw/radio.c @@ -44,7 +44,7 @@ int cw_radio_set_all_admin_states(mbag_t radios,int state, int cause) MAVLITER_DEFINE(it,radios); mavliter_foreach(&it){ mbag_item_t *i = mavliter_get(&it); - cw_radio_set_admin_state(radios,i->iid,state,cause); + cw_radio_set_admin_state(radios,i->u1.iid,state,cause); } return 1; diff --git a/src/cw/send.c b/src/cw/send.c index 0c9d22cf..1e4e4e48 100644 --- a/src/cw/send.c +++ b/src/cw/send.c @@ -1,5 +1,6 @@ #include +#include "mbag.h" #include "conn.h" #include "cw.h" #include "log.h" diff --git a/src/mod/capwap/capwap_actions_ac.c b/src/mod/capwap/capwap_actions_ac.c index c7ad82f0..8db57944 100644 --- a/src/mod/capwap/capwap_actions_ac.c +++ b/src/mod/capwap/capwap_actions_ac.c @@ -25,7 +25,7 @@ #include "mod_capwap.h" -static struct cw_ElemHandler elements[] = { +static struct cw_ElemHandler handlers[] = { { "Discovery Type", /* name */ @@ -52,7 +52,11 @@ static struct cw_ElemHandler elements[] = { static int discovery_request_states[] = {CAPWAP_STATE_DISCOVERY,0}; static struct cw_ElemDef discovery_request_elements[] ={ - {CAPWAP_ELEM_DISCOVERY_TYPE, 1, 0} + {0,0,CAPWAP_ELEM_DISCOVERY_TYPE, 1, 0}, + {0,0,CAPWAP_ELEM_WTP_MAC_TYPE, 1, 0}, + {0,0,CAPWAP_ELEM_WTP_BOARD_DATA, 1, 0}, + {0,0,0,00} + }; static struct cw_MsgDef messages[] = { @@ -108,11 +112,10 @@ static struct cw_MsgDef messages[] = { }; - struct cw_MsgSet * capwap_register_msg_set(struct cw_MsgSet * set, int mode){ if (mode != CW_MOD_MODE_CAPWAP) return NULL; - cw_msgset_add(set,messages, elements); + cw_msgset_add(set,messages, handlers); return set; } @@ -124,7 +127,7 @@ void test_sets(){ return; } - cw_msgset_add(set,messages, elements); + cw_msgset_add(set,messages, handlers); } /* cw_msgset_add(set,messages); diff --git a/src/mod/capwap/capwap_in_session_id.c b/src/mod/capwap/capwap_in_session_id.c index fca5f85a..b9d6c87b 100644 --- a/src/mod/capwap/capwap_in_session_id.c +++ b/src/mod/capwap/capwap_in_session_id.c @@ -1,5 +1,6 @@ +#include "cw/mbag.h" #include "cw/action.h" diff --git a/src/mod/capwap/capwap_out_ac_descriptor.c b/src/mod/capwap/capwap_out_ac_descriptor.c index 917b5340..440ec121 100644 --- a/src/mod/capwap/capwap_out_ac_descriptor.c +++ b/src/mod/capwap/capwap_out_ac_descriptor.c @@ -1,3 +1,4 @@ +#include "cw/mbag.h" #include "cw/log.h" #include "cw/conn.h" @@ -22,13 +23,13 @@ int capwap_out_ac_descriptor(struct conn *conn,struct cw_action_out * a,uint8_t return 0; } - d+=cw_put_ac_status(d ,(struct cw_ac_status*)(i->data),conn); + d+=cw_put_ac_status(d ,(struct cw_ac_status*)(i->u2.data),conn); i = mbag_get(conn->local,CW_ITEM_AC_HARDWARE_VERSION); if ( i ) { - d += cw_put_version(d,CW_SUBELEM_AC_HARDWARE_VERSION,i->data); + d += cw_put_version(d,CW_SUBELEM_AC_HARDWARE_VERSION,i->u2.data); } else { cw_log(LOG_ERR, "Can't send hard version in AC descriptor, not set."); @@ -38,7 +39,7 @@ int capwap_out_ac_descriptor(struct conn *conn,struct cw_action_out * a,uint8_t i = mbag_get(conn->local,CW_ITEM_AC_SOFTWARE_VERSION); if ( i ) { - d += cw_put_version(d,CW_SUBELEM_AC_SOFTWARE_VERSION,i->data); + d += cw_put_version(d,CW_SUBELEM_AC_SOFTWARE_VERSION,i->u2.data); } else { cw_log(LOG_ERR, "Can't send software version in AC descriptor, not set."); diff --git a/src/mod/capwap/capwap_out_ac_ip_list.c b/src/mod/capwap/capwap_out_ac_ip_list.c index 5446a8e8..46a8a8f4 100644 --- a/src/mod/capwap/capwap_out_ac_ip_list.c +++ b/src/mod/capwap/capwap_out_ac_ip_list.c @@ -2,6 +2,7 @@ +#include "cw/mbag.h" #include "cw/action.h" #include "cw/cw.h" #include "cw/mavl.h" diff --git a/src/mod/capwap/capwap_out_get_idle_timeout.c b/src/mod/capwap/capwap_out_get_idle_timeout.c index 1981f264..4cc94cc4 100644 --- a/src/mod/capwap/capwap_out_get_idle_timeout.c +++ b/src/mod/capwap/capwap_out_get_idle_timeout.c @@ -1,4 +1,5 @@ +#include "cw/mbag.h" #include "cw/action.h" #include "cw/capwap_items.h" #include "cw/capwap.h" diff --git a/src/mod/capwap/capwap_out_get_session_id.c b/src/mod/capwap/capwap_out_get_session_id.c index 7a198b50..2f23c3e5 100644 --- a/src/mod/capwap/capwap_out_get_session_id.c +++ b/src/mod/capwap/capwap_out_get_session_id.c @@ -1,4 +1,4 @@ - +#include "cw/mbag.h" #include "cw/conn.h" #include "cw/rand.h" #include "cw/log.h" diff --git a/src/mod/capwap/capwap_out_wtp_descriptor.c b/src/mod/capwap/capwap_out_wtp_descriptor.c index 0de07cad..5bd06a1f 100644 --- a/src/mod/capwap/capwap_out_wtp_descriptor.c +++ b/src/mod/capwap/capwap_out_wtp_descriptor.c @@ -1,3 +1,4 @@ +#include "cw/mbag.h" #include "cw/log.h" #include "cw/conn.h" #include "cw/capwap_items.h" @@ -41,12 +42,12 @@ int capwap_out_wtp_descriptor(struct conn *conn, struct cw_action_out *a, uint8_ mbag_item_t * i; i = mbag_get(mbag,CW_ITEM_WTP_HARDWARE_VERSION); if ( i ) { - d += cw_put_version(d,CW_SUBELEM_WTP_HARDWARE_VERSION,i->data); - if (bstrv_get_vendor_id(i->data)){ + d += cw_put_version(d,CW_SUBELEM_WTP_HARDWARE_VERSION,i->u2.data); + if (bstrv_get_vendor_id(i->u2.data)){ d += cw_put_dword(d, 0); d += cw_put_word(d, CW_SUBELEM_WTP_HARDWARE_VERSION); - d += cw_put_word(d, bstrv_len(i->data)); - d += cw_put_data(d, bstrv_data(i->data), bstrv_len(i->data)); + d += cw_put_word(d, bstrv_len(i->u2.data)); + d += cw_put_data(d, bstrv_data(i->u2.data), bstrv_len(i->u2.data)); } } @@ -58,7 +59,7 @@ int capwap_out_wtp_descriptor(struct conn *conn, struct cw_action_out *a, uint8_ i = mbag_get(mbag,CW_ITEM_WTP_SOFTWARE_VERSION); if ( i ) { - d += cw_put_version(d,CW_SUBELEM_WTP_SOFTWARE_VERSION,i->data); + d += cw_put_version(d,CW_SUBELEM_WTP_SOFTWARE_VERSION,i->u2.data); } else { cw_log(LOG_ERR, "Can't send Software Version in WTP descriptor, not set."); @@ -66,7 +67,7 @@ int capwap_out_wtp_descriptor(struct conn *conn, struct cw_action_out *a, uint8_ i = mbag_get(mbag,CW_ITEM_WTP_BOOTLOADER_VERSION); if ( i ) { - d += cw_put_version(d,CW_SUBELEM_WTP_BOOTLOADER_VERSION,i->data); + d += cw_put_version(d,CW_SUBELEM_WTP_BOOTLOADER_VERSION,i->u2.data); } else { cw_log(LOG_ERR, "Can't send Bootloader Version in WTP descriptor, not set."); diff --git a/src/mod/capwap/mod_capwap_ac.c b/src/mod/capwap/mod_capwap_ac.c index 23cf2ecf..5d2ed2be 100644 --- a/src/mod/capwap/mod_capwap_ac.c +++ b/src/mod/capwap/mod_capwap_ac.c @@ -1,4 +1,4 @@ - +#include "cw/mbag.h" #include "cw/mod.h" #include "cw/log.h" #include "cw/dbg.h" diff --git a/src/mod/capwap/mod_capwap_wtp.c b/src/mod/capwap/mod_capwap_wtp.c index 830d6a31..6640ae83 100644 --- a/src/mod/capwap/mod_capwap_wtp.c +++ b/src/mod/capwap/mod_capwap_wtp.c @@ -1,4 +1,4 @@ - +#include "cw/mbag.h" #include "cw/mod.h" #include "cw/log.h" #include "cw/dbg.h" diff --git a/src/mod/cisco/cisco_actions_ac.c b/src/mod/cisco/cisco_actions_ac.c index d059ae22..08dfd829 100644 --- a/src/mod/cisco/cisco_actions_ac.c +++ b/src/mod/cisco/cisco_actions_ac.c @@ -41,7 +41,7 @@ #include "include/cipwap_items.h" - +/* static cw_elem_handler_t _DISCOVERY_TYPE = { .id = CAPWAP_ELEM_DISCOVERY_TYPE, .name = "WTP Frame Tunnel Mode", @@ -50,6 +50,7 @@ static cw_elem_handler_t _DISCOVERY_TYPE = { .min_len = 1, .max_len = 1 }; +*/ static cw_msgdef_t messages[] = { @@ -96,7 +97,6 @@ static cw_msgdef_t messages[] = { - static cw_action_in_t actions_in[] = {