From 4423c1d79ee2274dfa3c5e2539fdd39aa016188e Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Fri, 1 May 2015 11:55:02 +0000 Subject: [PATCH] Fixed a lot of bugs with action lists. FossilOrigin-Name: 8508ea2ae3a0a1d1ec2ac76ddf1c7813f802c656f4ffb1b463769347405ae85a --- src/capwap/action.c | 8 +++++--- src/capwap/capwap_80211_actions_wtp.c | 9 ++++++--- src/capwap/capwap_items.c | 1 + src/capwap/capwap_items.h | 2 +- src/capwap/cw_put_msg.c | 9 ++++++++- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/capwap/action.c b/src/capwap/action.c index b1a6b14f..1ed952b2 100644 --- a/src/capwap/action.c +++ b/src/capwap/action.c @@ -154,10 +154,10 @@ static int cw_action_out_cmp(const void *elem1, const void *elem2) } else{ if (!e1->item_id) { - r = strcmp("", e2->item_id); + r = strcmp(CW_ITEM_NONE, e2->item_id); } else if (!e2->item_id){ - r = strcmp(e1->item_id,""); + r = strcmp(e1->item_id,CW_ITEM_NONE); } else{ r = strcmp(e1->item_id, e2->item_id); @@ -185,7 +185,7 @@ static int cw_action_out_cmp(const void *elem1, const void *elem2) void *cw_actionlist_add(struct avltree *t, void *a, size_t s) { - void *r = mavl_replace_data(t, a, sizeof(struct cw_action_in)); + void *r = mavl_replace_data(t, a, s); //sizeof(struct cw_action_in)); if (r) { return r; } @@ -199,6 +199,7 @@ void *cw_actionlist_add(struct avltree *t, void *a, size_t s) } +#include "dbg.h" // Tube /** * Create an action list for outgoing message lements @@ -212,6 +213,7 @@ cw_actionlist_out_t cw_actionlist_out_create() cw_action_out_t *cw_actionlist_out_add(cw_actionlist_out_t t, struct cw_action_out * a) { +DBGX("Adding out action: %d %d %p ",a->msg_id,a->elem_id,a->item_id); return cw_actionlist_add(t, a, sizeof(struct cw_action_out)); } diff --git a/src/capwap/capwap_80211_actions_wtp.c b/src/capwap/capwap_80211_actions_wtp.c index f435cb27..ac1c5259 100644 --- a/src/capwap/capwap_80211_actions_wtp.c +++ b/src/capwap/capwap_80211_actions_wtp.c @@ -34,7 +34,7 @@ cw_action_out_t capwap_80211_actions_wtp_out[]={ */ /* 802.11 Radio Information */ - {CW_MSG_DISCOVERY_REQUEST, NULL /*CW_ELEM80211_WTP_RADIO_INFORMATION*/, 0, + {CW_MSG_DISCOVERY_REQUEST, CW_ITEM_RADIO_INFOS /*CW_ELEM80211_WTP_RADIO_INFORMATION*/, 0, CW_ELEM80211_WTP_RADIO_INFORMATION, NULL,cw_out_radio_infos, NULL,1} , @@ -43,8 +43,11 @@ cw_action_out_t capwap_80211_actions_wtp_out[]={ */ /* 802.11 Radio Information */ - {CW_MSG_JOIN_REQUEST, NULL /*CW_ELEM80211_WTP_RADIO_INFORMATION*/, 0, - CW_ELEM80211_WTP_RADIO_INFORMATION, NULL,cw_out_radio_infos, NULL,1} + {CW_MSG_JOIN_REQUEST, CW_ITEM_RADIO_INFOS, 0, + CW_ELEM80211_WTP_RADIO_INFORMATION, NULL,cw_out_radio_infos, NULL,1}, + + + {0,0,0} }; diff --git a/src/capwap/capwap_items.c b/src/capwap/capwap_items.c index f68b67f3..d21a032a 100644 --- a/src/capwap/capwap_items.c +++ b/src/capwap/capwap_items.c @@ -89,6 +89,7 @@ const char CW_ITEM_WTP_BOARD_MACADDRESS[]="wtp_board_macadddress"; const char CW_ITEM_WTP_BOARD_ID[]="wtp_board_id"; const char CW_ITEM_WTP_BOARD_REVISION[]="wtp_board_revision"; const char CW_ITEM_WTP_BOARD_SERIALNO[]="serial_no"; +const char CW_ITEM_RADIO_INFOS[]="radio_infos"; //const char CW_ITEM_XY[]="wtp_name"; diff --git a/src/capwap/capwap_items.h b/src/capwap/capwap_items.h index c99accfc..88f851eb 100644 --- a/src/capwap/capwap_items.h +++ b/src/capwap/capwap_items.h @@ -169,7 +169,7 @@ extern const char CW_ITEM_WTP_BOOTLOADER_VERSION[]; extern const char CW_ITEM_WTP_RADIOS_IN_USE[]; extern const char CW_ITEM_WTP_MAX_RADIOS[]; - +extern const char CW_ITEM_RADIO_INFOS[]; diff --git a/src/capwap/cw_put_msg.c b/src/capwap/cw_put_msg.c index c0e0073f..37ff70cb 100644 --- a/src/capwap/cw_put_msg.c +++ b/src/capwap/cw_put_msg.c @@ -63,11 +63,18 @@ int cw_put_msg(struct conn *conn, uint8_t * rawout) return -1; } +DBGX("Found am %p %p",am,am->item_id); +DBGX("Teh ELEM ID found '%s'",am->item_id); + cw_action_out_t *ae; int len = 0; while(NULL != (ae=avliter_next(&i))) { - //DBGX("Put %d %d\n",ae->msg_id,ae->elem_id); + DBGX("Put %d %i %p\n",ae->msg_id,ae->elem_id,ae->item_id); + DBGX("Elem ID %s",ae->item_id); + if ( ae->item_id ) { + DBGX("Item ID: %s %p",ae->item_id,CW_ITEM_NONE); + } if (ae->msg_id != as.msg_id) { /* Element is from next msg, close action */