From 8817d54d147a2a1dcafd2d9dd2eee41e8ef6f823 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Mon, 5 Mar 2018 20:42:11 +0000 Subject: [PATCH] Read element from message (in progress) FossilOrigin-Name: 6ee8f267da48de9b865abf5b7565097387e6436118a1cc80a198c3a47294fc5c --- actube.workspace | 4 ++-- libcw.project | 2 ++ src/ac/ac_main.c | 14 ++++---------- src/cw/conn_process_packet.c | 16 ++++++++++++++++ src/cw/cw_read_elem.c | 2 ++ src/cw/cw_type_dword.c | 2 +- src/cw/cw_type_word.c | 2 +- src/cw/cw_types.h | 7 +++++-- src/cw/cw_types_mavl_delete.c | 7 +++++++ src/cw/message_set.h | 2 +- src/mod/capwap/capwap_actions_ac.c | 2 +- 11 files changed, 42 insertions(+), 18 deletions(-) create mode 100644 src/cw/cw_read_elem.c create mode 100644 src/cw/cw_types_mavl_delete.c diff --git a/actube.workspace b/actube.workspace index b21adfd1..b8870938 100644 --- a/actube.workspace +++ b/actube.workspace @@ -1,9 +1,9 @@ - + - + diff --git a/libcw.project b/libcw.project index da3335b5..e663763d 100644 --- a/libcw.project +++ b/libcw.project @@ -327,6 +327,8 @@ + + diff --git a/src/ac/ac_main.c b/src/ac/ac_main.c index 9b9115f0..7383d8f3 100644 --- a/src/ac/ac_main.c +++ b/src/ac/ac_main.c @@ -96,22 +96,16 @@ extern void test_sets(); #include "cw/file.h" #include "cw/cw_types.h" -void cw_type_delete(mavldata_t *data){ - struct cw_Type * type = data->kv.priv; - printf("Delete elem of type: %s\n", type->name); - if (type->del) - type->del(data); - -} int main(int argc, char *argv[]) { - mavl_t kv; +/* mavl_t kv; mavliter_t kviter; uint8_t bytes[] = { 99,4,5,7 }; - kv = mavl_create(mavl_cmp_kv,cw_type_delete); + kv = cw_types_mavl_create(); + //mavl_cmp_kv,cw_type_delete); mavldata_t data, *result; @@ -137,7 +131,7 @@ int main(int argc, char *argv[]) mavl_destroy(kv); exit(0); - +*/ /* cw_log_init(); diff --git a/src/cw/conn_process_packet.c b/src/cw/conn_process_packet.c index eff7ac62..9d4ef987 100644 --- a/src/cw/conn_process_packet.c +++ b/src/cw/conn_process_packet.c @@ -32,6 +32,8 @@ #include "mod.h" #include "message_set.h" +#include "cw_types.h" + int conn_send_msg(struct conn *conn, uint8_t * rawmsg); @@ -215,6 +217,17 @@ int cw_in_check_generic(struct conn *conn, struct cw_action_in *a, uint8_t * dat } +void cw_read_elem(struct cw_ElemHandler * handler, struct conn * conn, + uint8_t * elem_data, int elem_len, struct sockaddr * from){ + mavldata_t data, *result; + char str[30]; + + result = handler->type->get(&data,elem_data,elem_len); + + handler->type->to_str(result,str,30); + printf("Read %d-%s: %s %s\n", handler->id, handler->name, handler->key, str); + /*mavl_add(conn->remote_cfg*/ +} static int process_elements(struct conn *conn, uint8_t * rawmsg, int len, struct sockaddr *from) @@ -386,6 +399,9 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len, elem_len = cw_get_elem_len(elem); + + cw_read_elem(handler, conn, cw_get_elem_data(elem), elem_len, from); + printf ("Would start elem processing now %d - %s\n",handler->id, handler->name); continue; exit(0); diff --git a/src/cw/cw_read_elem.c b/src/cw/cw_read_elem.c new file mode 100644 index 00000000..139597f9 --- /dev/null +++ b/src/cw/cw_read_elem.c @@ -0,0 +1,2 @@ + + diff --git a/src/cw/cw_type_dword.c b/src/cw/cw_type_dword.c index 27df4313..ae050030 100644 --- a/src/cw/cw_type_dword.c +++ b/src/cw/cw_type_dword.c @@ -59,4 +59,4 @@ static int put(struct mdata_Elem * e, uint8_t *dst) #define _I_FROM_STR from_str const struct mdata_Type cw_type_dword = MDATA_TYPE_INIT(); -*/ \ No newline at end of file +*/ diff --git a/src/cw/cw_type_word.c b/src/cw/cw_type_word.c index 11857fa0..52dfb28a 100644 --- a/src/cw/cw_type_word.c +++ b/src/cw/cw_type_word.c @@ -60,4 +60,4 @@ static int put(struct mdata_Elem * e, uint8_t *dst) #define _I_FROM_STR from_str const struct mdata_Type cw_type_word = MDATA_TYPE_INIT(); -*/ \ No newline at end of file +*/ diff --git a/src/cw/cw_types.h b/src/cw/cw_types.h index dbddbac0..279ce0ef 100644 --- a/src/cw/cw_types.h +++ b/src/cw/cw_types.h @@ -36,9 +36,12 @@ struct cw_Type{ extern const struct cw_Type cw_type_byte; #define CW_TYPE_BYTE (&cw_type_byte) -extern const struct mdata_Type cw_type_word; -extern const struct mdata_Type cw_type_dword; +extern const struct cw_Type cw_type_word; +extern const struct cw_Type cw_type_dword; +void cw_types_mavl_delete(mavldata_t *data); +#define cw_types_mavl_create()\ + mavl_create(mavl_cmp_kv, cw_types_mavl_delete) #endif diff --git a/src/cw/cw_types_mavl_delete.c b/src/cw/cw_types_mavl_delete.c new file mode 100644 index 00000000..04f087a1 --- /dev/null +++ b/src/cw/cw_types_mavl_delete.c @@ -0,0 +1,7 @@ +#include "cw_types.h" + +void cw_types_mavl_delete(mavldata_t *data){ + const struct cw_Type * type = data->kv.priv; + if (type->del) + type->del(data); +} diff --git a/src/cw/message_set.h b/src/cw/message_set.h index 02222f4c..0f2f1fe5 100644 --- a/src/cw/message_set.h +++ b/src/cw/message_set.h @@ -32,7 +32,7 @@ struct cw_ElemHandler { int proto; int min_len; int max_len; - const struct mdata_Type * type; + const struct cw_Type * type; const char * key; /* int (*start_in)(struct conn *conn,struct cw_action_in *a,uint8_t*data,int len,struct sockaddr *from); diff --git a/src/mod/capwap/capwap_actions_ac.c b/src/mod/capwap/capwap_actions_ac.c index bf686305..8db57944 100644 --- a/src/mod/capwap/capwap_actions_ac.c +++ b/src/mod/capwap/capwap_actions_ac.c @@ -53,7 +53,7 @@ static struct cw_ElemHandler handlers[] = { static int discovery_request_states[] = {CAPWAP_STATE_DISCOVERY,0}; static struct cw_ElemDef discovery_request_elements[] ={ {0,0,CAPWAP_ELEM_DISCOVERY_TYPE, 1, 0}, -/* {0,0,CAPWAP_ELEM_WTP_MAC_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}