From d2240646f9709768d84f3ff12c33c013f71dc5d6 Mon Sep 17 00:00:00 2001 From: 7u83 <7u83@mail.ru> Date: Tue, 9 Aug 2022 09:52:30 +0200 Subject: [PATCH] Removed cw_ElemHandlerParams.elem --- Makefile | 1 + src/ac/ac.h | 2 - src/ac/ac_main.c | 5 +- src/ac/wtpman.c | 342 ++++++++++++++++++--------------- src/ac/wtpman.h | 24 +-- src/cw/Doxyfile | 2 +- src/cw/cfg.c | 8 +- src/cw/cfg.h | 1 + src/cw/conn_process_packet.c | 242 ++++++++++------------- src/cw/cw_decode_msg.c | 4 +- src/cw/cw_in_generic.c | 2 +- src/cw/cw_in_idx_generic.c | 2 +- src/cw/cw_process_element.c | 2 +- src/cw/cw_put_msg.c | 5 +- src/cw/cw_read_radio_generic.c | 2 +- src/cw/cw_setup_dtls.c | 73 +++---- src/cw/msgset.h | 5 +- src/mod/cisco/mod_cisco_ac.c | 3 +- 18 files changed, 364 insertions(+), 361 deletions(-) diff --git a/Makefile b/Makefile index f43d228f..4b9d0e80 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,4 @@ +.OBJDIR: ./ all: $(MAKE) -C src/cw diff --git a/src/ac/ac.h b/src/ac/ac.h index 63b69f7d..a0cbe9db 100644 --- a/src/ac/ac.h +++ b/src/ac/ac.h @@ -4,8 +4,6 @@ #include "mavl.h" #include "cw/mavltypes.h" -extern mavl_t actube_global_cfg; - extern struct ac_status ac_global_status; diff --git a/src/ac/ac_main.c b/src/ac/ac_main.c index 791cb9e1..2c61eac9 100644 --- a/src/ac/ac_main.c +++ b/src/ac/ac_main.c @@ -105,7 +105,6 @@ static int parse_args (int argc, char *argv[], struct bootcfg * bootcfg) struct cw_DiscoveryCache * discovery_cache; -mavl_t actube_global_cfg; int ac_global_init() { @@ -169,6 +168,7 @@ extern void test_sets(); return 0; */ +static cw_Cfg_t * global_cfg = NULL; int main (int argc, char *argv[]) @@ -180,7 +180,6 @@ int main (int argc, char *argv[]) const cw_Type_t **ti; - cw_Cfg_t * global_cfg = NULL; /* parse arguments */ parse_args (argc, argv, &bootcfg); @@ -481,7 +480,7 @@ void process_cw_ctrl_packet (int index, struct sockaddr *addr, uint8_t * buffer, if (!wtpman) { - wtpman = wtpman_create (index, addr, preamble & 0xf); + wtpman = wtpman_create (index, addr, preamble & 0xf, global_cfg); if (!wtpman) { diff --git a/src/ac/wtpman.c b/src/ac/wtpman.c index 46bfee12..c2905494 100644 --- a/src/ac/wtpman.c +++ b/src/ac/wtpman.c @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include "cw/capwap.h" @@ -63,8 +63,8 @@ static void reset_echointerval_timer(struct wtpman *wtpman) } -static int msg_start_handler(struct conn *conn, struct cw_action_in *a, uint8_t * data, - int len, struct sockaddr *from) +static int msg_start_handler(struct conn *conn, struct cw_action_in *a, + uint8_t * data, int len, struct sockaddr *from) { struct wtpman *wtpman = conn->data; reset_echointerval_timer(wtpman); @@ -97,17 +97,20 @@ static void wtpman_run_discovery(void *arg) && wtpman->conn->capwap_state == CAPWAP_STATE_DISCOVERY) { int rc; rc = cw_read_messages(wtpman->conn); - if (cw_result_is_ok(rc)){ - wtpman->conn->capwap_state=CAPWAP_STATE_JOIN; - - cw_dbg(DBG_INFO,"Discovery has detected mods: %s %s", - wtpman->conn->cmod->name,wtpman->conn->bmod->name); + if (cw_result_is_ok(rc)) { + wtpman->conn->capwap_state = CAPWAP_STATE_JOIN; + + cw_dbg(DBG_INFO, "Discovery has detected mods: %s %s", + wtpman->conn->cmod->name, + wtpman->conn->bmod->name); wtplist_lock(); - discovery_cache_add(discovery_cache,(struct sockaddr*)&wtpman->conn->addr, - wtpman->conn->cmod,wtpman->conn->bmod); + discovery_cache_add(discovery_cache, + (struct sockaddr *) &wtpman->conn-> + addr, wtpman->conn->cmod, + wtpman->conn->bmod); wtplist_unlock(); - + } } @@ -124,12 +127,13 @@ static int wtpman_dtls_setup(void *arg) /* try to accept the connection */ if (!dtls_accept(wtpman->conn)) { cw_dbg(DBG_DTLS, "Error establishing DTLS session with %s", - sock_addr2str_p(&wtpman->conn->addr,sock_buf)); + sock_addr2str_p(&wtpman->conn->addr, sock_buf)); return 0; } cw_dbg(DBG_DTLS, "DTLS session established with %s, %s", - sock_addr2str_p(&wtpman->conn->addr,sock_buf), dtls_get_cipher(wtpman->conn,cipherstr)); + sock_addr2str_p(&wtpman->conn->addr, sock_buf), + dtls_get_cipher(wtpman->conn, cipherstr)); return 1; @@ -143,24 +147,27 @@ static int wtpman_join(void *arg) struct conn *conn = wtpman->conn; time_t timer, wait_join; - cw_dbg(DBG_INFO, "Join State - %s", sock_addr2str(&conn->addr,sock_buf)); - - wait_join = cw_ktv_get_word(conn->global_cfg,"wait-join",CAPWAP_WAIT_JOIN); + cw_dbg(DBG_INFO, "Join State - %s", + sock_addr2str(&conn->addr, sock_buf)); + + wait_join = + cw_ktv_get_word(conn->global_cfg, "wait-join", CAPWAP_WAIT_JOIN); timer = cw_timer_start(wait_join); - while (!cw_timer_timeout(timer) && wtpman->conn->capwap_state == CAPWAP_STATE_JOIN) { + while (!cw_timer_timeout(timer) + && wtpman->conn->capwap_state == CAPWAP_STATE_JOIN) { rc = cw_read_messages(wtpman->conn); if (rc < 0) { if (errno == EAGAIN) continue; - + break; } - cw_dbg_ktv_dump(conn->remote_cfg,DBG_INFO, - "-------------dump------------", - "DMP","---------end dump --------"); + cw_dbg_ktv_dump(conn->remote_cfg, DBG_INFO, + "-------------dump------------", + "DMP", "---------end dump --------"); } if (rc != 0) { @@ -170,8 +177,9 @@ static int wtpman_join(void *arg) if (wtpman->conn->capwap_state != CAPWAP_STATE_JOIN_COMPLETE) { - cw_dbg(DBG_MSG_ERR, "No join request from %s after %d seconds, WTP died.", - sock_addr2str(&wtpman->conn->addr,sock_buf), wait_join); + cw_dbg(DBG_MSG_ERR, + "No join request from %s after %d seconds, WTP died.", + sock_addr2str(&wtpman->conn->addr, sock_buf), wait_join); return 0; } @@ -241,7 +249,7 @@ static void wtpman_image_data(struct wtpman *wtpman) -void * wtpman_run_data(void *wtpman_arg) +void *wtpman_run_data(void *wtpman_arg) { return NULL; @@ -263,44 +271,47 @@ void * wtpman_run_data(void *wtpman_arg) } -int cw_run_state_machine(struct conn * conn, time_t *timer) +int cw_run_state_machine(struct conn *conn, time_t * timer) { int timerval; cw_StateMachineState_t search, *result; - - while(1){ + + while (1) { search.state = conn->capwap_state; search.prevstate = conn->capwap_prevstate; - result = mavl_get(conn->msgset->state_machine,&search); - - cw_dbg(DBG_STATE,"State transition: [%s -> %s]", - cw_strstate(conn->capwap_prevstate), - cw_strstate(conn->capwap_state) - ); - if (result == NULL){ - cw_log(LOG_ERR,"State not found"); + result = mavl_get(conn->msgset->state_machine, &search); + + cw_dbg(DBG_STATE, "State transition: [%s -> %s]", + cw_strstate(conn->capwap_prevstate), + cw_strstate(conn->capwap_state) + ); + if (result == NULL) { + cw_log(LOG_ERR, "State not found"); return 0; } - if (result->jump_state){ + if (result->jump_state) { conn->capwap_state = result->jump_state; conn->capwap_prevstate = result->jump_prevstate; - - cw_dbg(DBG_STATE,"Jump to state: [%s->%s]", - cw_strstate(conn->capwap_prevstate), - cw_strstate(conn->capwap_state)); + + cw_dbg(DBG_STATE, "Jump to state: [%s->%s]", + cw_strstate(conn->capwap_prevstate), + cw_strstate(conn->capwap_state)); continue; } - - if (result->dbgmsg){ - cw_dbg(DBG_STATE,"%s",result->dbgmsg); + + if (result->dbgmsg) { + cw_dbg(DBG_STATE, "%s", result->dbgmsg); } - - if (result->timer_key){ - timerval = cw_ktv_get_word(conn->local_cfg,result->timer_key,result->timer_default); + + if (result->timer_key) { + timerval = + cw_ktv_get_word(conn->local_cfg, result->timer_key, + result->timer_default); *timer = cw_timer_start(timerval); - cw_dbg(DBG_STATE,"Starting timer: [%s] - %d seconds.",result->timer_key,timerval); + cw_dbg(DBG_STATE, "Starting timer: [%s] - %d seconds.", + result->timer_key, timerval); } return result->retval; } @@ -309,10 +320,10 @@ int cw_run_state_machine(struct conn * conn, time_t *timer) /*#define CW_TRANSITION(prestate,state) (prestate<<16|state)*/ -static void * wtpman_main(void *arg) +static void *wtpman_main(void *arg) { mavl_t r; - int rc ; + int rc; time_t timer; char sock_buf[SOCK_ADDR_BUFSIZE]; struct conn *conn; @@ -323,12 +334,12 @@ static void * wtpman_main(void *arg) wtpman->conn->seqnum = 0; conn = wtpman->conn; - wtpman->conn->remote_cfg = cw_ktv_create(); - + wtpman->conn->remote_cfg = cw_ktv_create(); + /* We were invoked with an unencrypted packet, * so assume, it is a discovery request */ - if (!wtpman->dtlsmode){ + if (!wtpman->dtlsmode) { wtpman_run_discovery(arg); wtpman_remove(wtpman); return NULL; @@ -337,65 +348,67 @@ static void * wtpman_main(void *arg) /* reject connections to our multi- or broadcast sockets */ if (socklist[wtpman->socklistindex].type != SOCKLIST_UNICAST_SOCKET) { - cw_dbg(DBG_DTLS,"Reject multi"); + cw_dbg(DBG_DTLS, "Reject multi"); wtpman_remove(wtpman); return NULL; } - + conn->capwap_state = CAPWAP_STATE_DTLS_SETUP; /* establish dtls session */ if (!wtpman_dtls_setup(wtpman)) { wtpman_remove(wtpman); return NULL; } - + /*last_state = conn->capwap_state; - conn->capwap_state = CAPWAP_STATE_JOIN; -*/ + conn->capwap_state = CAPWAP_STATE_JOIN; + */ conn->capwap_prevstate = CAPWAP_STATE_DTLS_SETUP; conn->capwap_state = CAPWAP_STATE_JOIN; rc = 0; - - while (1){ - + + while (1) { + int wait_join; int wait_change_state; - - - - if (!cw_run_state_machine(conn, &timer)){ - cw_dbg(DBG_INFO,"WTP died"); - wtpman_remove(wtpman); - return NULL; + + + + if (!cw_run_state_machine(conn, &timer)) { + cw_dbg(DBG_INFO, "WTP died"); + wtpman_remove(wtpman); + return NULL; }; - - + + while (!cw_timer_timeout(timer)) { - if (conn->update_cfg != NULL){ + if (conn->update_cfg != NULL) { mavl_t tmp; - + tmp = conn->local_cfg; mavl_merge(conn->default_cfg, conn->local_cfg); /* mavl_merge(conn->default_cfg, conn->remote_cfg);*/ - conn->local_cfg=conn->update_cfg; - + conn->local_cfg = conn->update_cfg; - - cw_dbg(DBG_INFO, "Updating WTP %s",sock_addr2str(&conn->addr,sock_buf)); - rc = cw_send_request(conn, CAPWAP_MSG_CONFIGURATION_UPDATE_REQUEST); - mavl_merge(conn->remote_cfg,conn->update_cfg); - conn->update_cfg=NULL; - conn->local_cfg=tmp; + cw_dbg(DBG_INFO, "Updating WTP %s", + sock_addr2str(&conn->addr, sock_buf)); + + rc = cw_send_request(conn, + CAPWAP_MSG_CONFIGURATION_UPDATE_REQUEST); + mavl_merge(conn->remote_cfg, conn->update_cfg); + + conn->update_cfg = NULL; + conn->local_cfg = tmp; } - + rc = cw_read_messages(wtpman->conn); if (rc < 0) { if (errno == EAGAIN) @@ -403,31 +416,31 @@ static void * wtpman_main(void *arg) } break; } - - if(rc<0){ + + if (rc < 0) { conn->capwap_prevstate = conn->capwap_state; conn->capwap_state = CAPWAP_STATE_TIMEOUT; } } - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + @@ -443,11 +456,11 @@ static void * wtpman_main(void *arg) cw_dbg(DBG_INFO, "WTP from %s has joined with session id: %s", - sock_addr2str_p(&conn->addr,sock_buf), - format_bin2hex(conn->session_id,16)); + sock_addr2str_p(&conn->addr, sock_buf), + format_bin2hex(conn->session_id, 16)); -exit(0); + exit(0); /* // cw_dbg(DBG_INFO, "Creating data thread"); @@ -469,7 +482,9 @@ exit(0); } } -cw_dbg_ktv_dump(conn->remote_cfg,DBG_INFO,"-------------dump------------","DMP","---------end dump --------"); + cw_dbg_ktv_dump(conn->remote_cfg, DBG_INFO, + "-------------dump------------", "DMP", + "---------end dump --------"); if (!cw_result_is_ok(rc)) { cw_dbg(DBG_INFO, "WTP Problem: %s", cw_strrc(rc)); @@ -494,7 +509,7 @@ cw_dbg_ktv_dump(conn->remote_cfg,DBG_INFO,"-------------dump------------","DMP", // radios_to_sql(conn); */ - /*conn->msg_end=msg_end_handler;*/ + /*conn->msg_end=msg_end_handler; */ /* The main run loop */ reset_echointerval_timer(wtpman); @@ -508,12 +523,12 @@ cw_dbg_ktv_dump(conn->remote_cfg,DBG_INFO,"-------------dump------------","DMP", /*// cw_dbg(DBG_X, "Time left: %d", // */ - /*cw_timer_timeleft(wtpman->echointerval_timer);*/ - + /*cw_timer_timeleft(wtpman->echointerval_timer); */ + if (cw_timer_timeout(wtpman->echointerval_timer)) { cw_dbg(DBG_INFO, "Lost connection to WTP:%s", - sock_addr2str_p(&conn->addr,sock_buf)); + sock_addr2str_p(&conn->addr, sock_buf)); break; } /* @@ -525,17 +540,20 @@ cw_dbg_ktv_dump(conn->remote_cfg,DBG_INFO,"-------------dump------------","DMP", */ - - r = db_get_update_tasks(conn, sock_addr2str(&conn->addr,sock_buf)); + + r = db_get_update_tasks(conn, + sock_addr2str(&conn->addr, sock_buf)); if (r) { - /* -// if (!conn->outgoing->count) -// continue; -*/ - cw_dbg(DBG_INFO, "Updating WTP %s",sock_addr2str(&conn->addr,sock_buf)); + /* + // if (!conn->outgoing->count) + // continue; + */ + cw_dbg(DBG_INFO, "Updating WTP %s", + sock_addr2str(&conn->addr, sock_buf)); - rc = cw_send_request(conn, CAPWAP_MSG_CONFIGURATION_UPDATE_REQUEST); + rc = cw_send_request(conn, + CAPWAP_MSG_CONFIGURATION_UPDATE_REQUEST); /* // mavl_merge(conn->config, conn->outgoing); @@ -547,15 +565,18 @@ cw_dbg_ktv_dump(conn->remote_cfg,DBG_INFO,"-------------dump------------","DMP", */ } - r = db_get_radio_tasks(conn, sock_addr2str(&conn->addr,sock_buf)); + r = db_get_radio_tasks(conn, + sock_addr2str(&conn->addr, sock_buf)); if (r) { /* // if (!conn->radios_upd->count) // continue; */ - cw_dbg(DBG_INFO, "Updating Radios for %s",sock_addr2str(&conn->addr,sock_buf)); - rc = cw_send_request(conn, CAPWAP_MSG_CONFIGURATION_UPDATE_REQUEST); + cw_dbg(DBG_INFO, "Updating Radios for %s", + sock_addr2str(&conn->addr, sock_buf)); + rc = cw_send_request(conn, + CAPWAP_MSG_CONFIGURATION_UPDATE_REQUEST); /* // conn_clear_upd(conn,1); @@ -567,21 +588,21 @@ cw_dbg_ktv_dump(conn->remote_cfg,DBG_INFO,"-------------dump------------","DMP", // radios_to_sql(conn); */ /* - rc = cw_send_request(conn, CW_MSG_CONFIGURATION_UPDATE_REQUEST); - mavl_merge(conn->config, conn->outgoing); - mavl_destroy(conn->outgoing); - conn->outgoing = mbag_create(); - config_to_sql(conn); - radios_to_sql(conn); - mavl_destroy(r); - */ + rc = cw_send_request(conn, CW_MSG_CONFIGURATION_UPDATE_REQUEST); + mavl_merge(conn->config, conn->outgoing); + mavl_destroy(conn->outgoing); + conn->outgoing = mbag_create(); + config_to_sql(conn); + radios_to_sql(conn); + mavl_destroy(r); + */ } } - db_ping_wtp(sock_addr2str_p(&conn->addr,sock_buf), ""); + db_ping_wtp(sock_addr2str_p(&conn->addr, sock_buf), ""); wtpman_remove(wtpman); return NULL; } @@ -596,8 +617,9 @@ static void wtpman_run_dtls(void *arg) /* reject connections to our multi- or broadcast sockets */ if (socklist[wtpman->socklistindex].type != SOCKLIST_UNICAST_SOCKET) { - cw_dbg(DBG_DTLS, "Dropping connection from %s to non-unicast socket.", - sock_addr2str_p(&wtpman->conn->addr,sock_buf)); + cw_dbg(DBG_DTLS, + "Dropping connection from %s to non-unicast socket.", + sock_addr2str_p(&wtpman->conn->addr, sock_buf)); wtpman_remove(wtpman); return; } @@ -623,13 +645,14 @@ void wtpman_destroy(struct wtpman *wtpman) -struct wtpman *wtpman_create(int socklistindex, struct sockaddr *srcaddr, int dtlsmode) +struct wtpman *wtpman_create(int socklistindex, struct sockaddr *srcaddr, + int dtlsmode, cw_Cfg_t * global_cfg) { struct sockaddr dbgaddr; socklen_t dbgaddrl; int sockfd, replyfd; char sock_buf[SOCK_ADDR_BUFSIZE]; - + struct wtpman *wtpman; wtpman = malloc(sizeof(struct wtpman)); if (!wtpman) @@ -642,8 +665,9 @@ struct wtpman *wtpman_create(int socklistindex, struct sockaddr *srcaddr, int dt replyfd = socklist_find_reply_socket(srcaddr, port); if (replyfd == -1) { - cw_log(LOG_ERR, "Can't find reply socket for request from %s", - sock_addr2str(srcaddr,sock_buf)); + cw_log(LOG_ERR, + "Can't find reply socket for request from %s", + sock_addr2str(srcaddr, sock_buf)); free(wtpman); return NULL; } @@ -651,19 +675,19 @@ struct wtpman *wtpman_create(int socklistindex, struct sockaddr *srcaddr, int dt replyfd = socklist[socklistindex].sockfd; } - sockfd = replyfd; /*//socklist[socklistindex].reply_sockfd;*/ - - - - - + sockfd = replyfd; /*//socklist[socklistindex].reply_sockfd; */ + + + + + dbgaddrl = sizeof(dbgaddr); getsockname(sockfd, &dbgaddr, &dbgaddrl); cw_dbg(DBG_INFO, "Creating wtpman on socket %d, %s:%d", sockfd, - sock_addr2str(&dbgaddr,sock_buf), sock_getport(&dbgaddr)); + sock_addr2str(&dbgaddr, sock_buf), sock_getport(&dbgaddr)); @@ -671,7 +695,8 @@ struct wtpman *wtpman_create(int socklistindex, struct sockaddr *srcaddr, int dt wtpman->conn->role = CW_ROLE_AC; wtpman->conn->data_sock = socklist[socklistindex].data_sockfd; - sock_copyaddr(&wtpman->conn->data_addr, (struct sockaddr *) &wtpman->conn->addr); + sock_copyaddr(&wtpman->conn->data_addr, + (struct sockaddr *) &wtpman->conn->addr); if (!wtpman->conn) { wtpman_destroy(wtpman); @@ -699,21 +724,24 @@ struct wtpman *wtpman_create(int socklistindex, struct sockaddr *srcaddr, int dt wtpman->conn->local_cfg = cw_ktv_create(); - wtpman->conn->global_cfg = actube_global_cfg; - wtpman->conn->local_cfg = actube_global_cfg; + wtpman->conn->global_cfg = global_cfg; + wtpman->conn->local_cfg = global_cfg; /* when created caused by a packet in DTLS mode, we try * to find out the modules to load, for detected connection * from discovery request */ - if (dtlsmode){ + if (dtlsmode) { int rc; struct cw_Mod *cmod, *bmod; - - rc = discovery_cache_get(discovery_cache,srcaddr,&cmod,&bmod); - if (rc){ - cw_dbg(DBG_INFO, "Initializing with mod %s %s",cmod->name,bmod->name); - wtpman->conn->msgset = cw_mod_get_msg_set(wtpman->conn,cmod,bmod); - wtpman->conn->detected=1; + + rc = discovery_cache_get(discovery_cache, srcaddr, &cmod, + &bmod); + if (rc) { + cw_dbg(DBG_INFO, "Initializing with mod %s %s", + cmod->name, bmod->name); + wtpman->conn->msgset = + cw_mod_get_msg_set(wtpman->conn, cmod, bmod); + wtpman->conn->detected = 1; cmod->setup_cfg(wtpman->conn); } } @@ -729,14 +757,8 @@ void wtpman_addpacket(struct wtpman *wtpman, uint8_t * packet, int len) void wtpman_start(struct wtpman *wtpman, int dtlsmode) { - cw_dbg(DBG_INFO, "Starting wtpman, DTLS mode = %d",dtlsmode); - wtpman->dtlsmode=dtlsmode; - pthread_create(&wtpman->thread, NULL, wtpman_main, - (void *) wtpman); + cw_dbg(DBG_INFO, "Starting wtpman, DTLS mode = %d", dtlsmode); + wtpman->dtlsmode = dtlsmode; + pthread_create(&wtpman->thread, NULL, wtpman_main, (void *) wtpman); return; } - - - - - diff --git a/src/ac/wtpman.h b/src/ac/wtpman.h index c699b87d..418d007f 100644 --- a/src/ac/wtpman.h +++ b/src/ac/wtpman.h @@ -8,19 +8,20 @@ #include "cw/capwap.h" #include "cw/fragman.h" #include "cw/timer.h" +#include "cw/cfg.h" #define WTPMAN_QSIZE 1024 -struct wtpman{ +struct wtpman { pthread_t thread; - struct conn * conn; + struct conn *conn; /* wtp data */ - uint8_t * wtp_name; - uint8_t * wtp_location; - uint8_t * session_id; + uint8_t *wtp_name; + uint8_t *wtp_location; + uint8_t *session_id; uint8_t wtp_mactype; int socklistindex; @@ -28,7 +29,7 @@ struct wtpman{ int dtlsmode; - cw_timer_t echointerval_timer; + cw_timer_t echointerval_timer; }; @@ -43,13 +44,14 @@ struct wtp{ //extern void wtpman_run(void *arg); */ -struct wtpman * wtpman_create(); +struct wtpman *wtpman_create(); -struct wtpman * wtpman_create(int socklistindex,struct sockaddr * srcaddr, int dtlsmode); +struct wtpman *wtpman_create(int socklistindex, struct sockaddr *srcaddr, + int dtlsmode, cw_Cfg_t * global_cfg); -extern void wtpman_addpacket(struct wtpman * wtpman,uint8_t *packet,int len); -extern void wtpman_destroy(struct wtpman * wtpman); -extern void wtpman_start(struct wtpman * wtpman,int dtlsmode); +extern void wtpman_addpacket(struct wtpman *wtpman, uint8_t * packet, int len); +extern void wtpman_destroy(struct wtpman *wtpman); +extern void wtpman_start(struct wtpman *wtpman, int dtlsmode); diff --git a/src/cw/Doxyfile b/src/cw/Doxyfile index e6abfc83..b067ed28 100644 --- a/src/cw/Doxyfile +++ b/src/cw/Doxyfile @@ -1770,7 +1770,7 @@ MAN_EXTENSION = .3 # The default value is: NO. # This tag requires that the tag GENERATE_MAN is set to YES. -MAN_LINKS = NO +MAN_LINKS = YES #--------------------------------------------------------------------------- # Configuration options related to the XML output diff --git a/src/cw/cfg.c b/src/cw/cfg.c index dde783b4..18540ef5 100644 --- a/src/cw/cfg.c +++ b/src/cw/cfg.c @@ -606,4 +606,10 @@ uint16_t cw_cfg_get_word(cw_Cfg_t * cfg, char *key, const char * def) return v.val.word; } - +void cw_cfg_set_int(cw_Cfg_t * cfg, const char * key, int val) +{ + char a[128]; + sprintf(a,"%d",val); + printf("VVVVVV: %s\n",a); + cw_cfg_set(cfg,key,a); +} diff --git a/src/cw/cfg.h b/src/cw/cfg.h index 6109c0aa..a7d7dbc6 100644 --- a/src/cw/cfg.h +++ b/src/cw/cfg.h @@ -31,6 +31,7 @@ void cw_cfg_iter_init(cw_Cfg_t * cfg, struct cw_Cfg_iter *cfi, const char *base) int cw_cfg_get_bool(cw_Cfg_t * cfg, const char * key, const char *def); uint16_t cw_cfg_get_word(cw_Cfg_t * cfg, char *key, const char * def); +void cw_cfg_set_int(cw_Cfg_t * cfg, const char * key, int val); #endif diff --git a/src/cw/conn_process_packet.c b/src/cw/conn_process_packet.c index 42f7bb4b..7853e9a7 100644 --- a/src/cw/conn_process_packet.c +++ b/src/cw/conn_process_packet.c @@ -47,10 +47,10 @@ void cw_init_response(struct conn *conn, uint8_t * req) uint8_t *buffer; int shbytes, dhbytes; uint8_t *msgptr, *dmsgptr; - + buffer = conn->resp_buffer; shbytes = cw_get_hdr_msg_offset(req); - + memcpy(buffer, req, shbytes); cw_set_hdr_rmac(buffer, conn->base_rmac); @@ -73,7 +73,7 @@ void cw_init_request(struct conn *conn, int msg_id) { uint8_t *buffer = conn->req_buffer; uint8_t *msgptr; - + /* zero the first 8 bytes */ cw_set_dword(buffer + 0, 0); cw_set_dword(buffer + 4, 0); @@ -135,11 +135,12 @@ int cw_send_response(struct conn *conn, uint8_t * rawmsg, int len) * @param result_code result code to send * @return 1 */ -int cw_send_error_response(struct conn *conn, uint8_t * rawmsg, uint32_t result_code) +int cw_send_error_response(struct conn *conn, uint8_t * rawmsg, + uint32_t result_code) { - uint8_t *out,*dst; + uint8_t *out, *dst; int l; - + cw_init_response(conn, rawmsg); out = conn->resp_buffer; @@ -155,31 +156,34 @@ int cw_send_error_response(struct conn *conn, uint8_t * rawmsg, uint32_t result_ } -static struct cw_MsgSet *load_msg_set(struct conn *conn, uint8_t * rawmsg, int len, - int elems_len, struct sockaddr *from) +static struct cw_MsgSet *load_msg_set(struct conn *conn, uint8_t * rawmsg, + int len, int elems_len, + struct sockaddr *from) { char sock_buf[SOCK_ADDR_BUFSIZE]; struct cw_Mod *cmod, *bmod; - + cmod = - cw_mod_detect(conn, rawmsg, len, elems_len, from, CW_MOD_MODE_CAPWAP); + cw_mod_detect(conn, rawmsg, len, elems_len, from, + CW_MOD_MODE_CAPWAP); if (cmod == MOD_NULL) { cw_dbg(DBG_MSG_ERR, "Can't find mod to handle connection from %s, discarding message", - sock_addr2str_p(from,sock_buf)); + sock_addr2str_p(from, sock_buf)); return NULL; } - bmod = - cw_mod_detect(conn, rawmsg, len, elems_len, from, CW_MOD_MODE_BINDINGS); + bmod = + cw_mod_detect(conn, rawmsg, len, elems_len, from, + CW_MOD_MODE_BINDINGS); + - cw_dbg(DBG_INFO, "Mods deteced: %s,%s", cmod->name, bmod->name); conn->cmod = cmod; conn->bmod = bmod; - return cw_mod_get_msg_set(conn,cmod,bmod); + return cw_mod_get_msg_set(conn, cmod, bmod); } @@ -217,16 +221,17 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len, mavl_t mand_found; mlist_t unrecognized; struct cw_MsgData search; - struct cw_MsgData * message; + struct cw_MsgData *message; int result_code; cw_State_t *ui; uint8_t *elems_ptr; uint8_t *elem; - + struct cw_ElemHandlerParams params; + char sock_buf[SOCK_ADDR_BUFSIZE]; /**< to hold str from sockaddr2str */ - - /*struct cw_action_in as, *af, *afm;*/ + + /*struct cw_action_in as, *af, *afm; */ int offset = cw_get_hdr_msg_offset(rawmsg); @@ -243,7 +248,8 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len, if (conn->strict_hdr) { cw_dbg(DBG_MSG_ERR, "Discarding message from %s, msgelems len=%d, payload len=%d, (Strict CAPWAP) ", - sock_addr2str(&conn->addr,sock_buf), elems_len, payloadlen - 8); + sock_addr2str(&conn->addr, sock_buf), elems_len, + payloadlen - 8); errno = EAGAIN; return -1; } @@ -252,7 +258,8 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len, if (elems_len < payloadlen - 8) { cw_dbg(DBG_RFC, "Packet from from %s has %d bytes of extra data, ignoring.", - sock_addr2str(&conn->addr,sock_buf), payloadlen - 8 - elems_len); + sock_addr2str(&conn->addr, sock_buf), + payloadlen - 8 - elems_len); elems_len = len - 8; } @@ -260,7 +267,8 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len, cw_dbg(DBG_RFC, "Packet from from %s has msgelems len of %d bytes, but has only %d bytes of data, truncating.", - sock_addr2str(&conn->addr, sock_buf), elems_len, payloadlen - 8); + sock_addr2str(&conn->addr, sock_buf), elems_len, + payloadlen - 8); elems_len = payloadlen - 8; } } @@ -269,16 +277,17 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len, /* Detect the connecting AC type */ if (!conn->detected) { - struct cw_MsgSet *set = load_msg_set(conn, rawmsg, len, elems_len, from); + struct cw_MsgSet *set = + load_msg_set(conn, rawmsg, len, elems_len, from); if (!set) { /* //cw_log(LOG_ERR, "Error"); -*/ +*/ errno = EAGAIN; return -1; } conn->cmod->setup_cfg(conn); - conn->msgset= set; + conn->msgset = set; conn->detected = 1; } @@ -287,30 +296,30 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len, /* prepare struct for search operation */ search.type = cw_get_msg_id(msg_ptr); - + /* Search message */ - - message = mavl_get(conn->msgset->msgdata,&search); - + + message = mavl_get(conn->msgset->msgdata, &search); + result_code = 0; - - if (!message){ + + if (!message) { /* Message is unknown */ - if (search.type & 1){ - cw_dbg(DBG_MSG_ERR, - "Message type %d [%s] unrecognized, sending response.", - search.type, cw_strmsg(search.type), - cw_strstate(conn->capwap_state)); - + if (search.type & 1) { + cw_dbg(DBG_MSG_ERR, + "Message type %d [%s] unrecognized, sending response.", + search.type, cw_strmsg(search.type), + cw_strstate(conn->capwap_state)); + result_code = CAPWAP_RESULT_MSG_UNRECOGNIZED; cw_send_error_response(conn, rawmsg, result_code); errno = EAGAIN; return -1; } - cw_dbg(DBG_MSG_ERR, - "Message type %d [%s] unrecognized, discarding.", - search.type, cw_strmsg(search.type), - cw_strstate(conn->capwap_state)); + cw_dbg(DBG_MSG_ERR, + "Message type %d [%s] unrecognized, discarding.", + search.type, cw_strmsg(search.type), + cw_strstate(conn->capwap_state)); errno = EAGAIN; return -1; @@ -332,18 +341,18 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len, /* Check if current state is in state of message */ ui = message->states; - for (ui=message->states; ui->state; ui++){ + for (ui = message->states; ui->state; ui++) { /* printf("Comparing %d and %d\n", conn->capwap_state, ui->state);*/ - if(ui->state==conn->capwap_state){ + if (ui->state == conn->capwap_state) { break; } } - - if (!ui->state){ + + if (!ui->state) { /* Message found, but it was in wrong state */ cw_dbg(DBG_MSG_ERR, - "Message type %d (%s) not allowed in %s State, sending response.", - search.type,cw_strmsg(search.type), + "Message type %d (%s) not allowed in %s State, sending response.", + search.type, cw_strmsg(search.type), cw_strstate(conn->capwap_state)); result_code = CAPWAP_RESULT_MSG_INVALID_IN_CURRENT_STATE; cw_send_error_response(conn, rawmsg, result_code); @@ -352,97 +361,53 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len, } - -/* if (conn->msg_start){ - conn->msg_start(conn, afm, rawmsg, len, from); - } -*/ - /* Execute start processor for message */ -/* -// if (afm->start) { -// afm->start(conn, afm, rawmsg, len, from); -// } -*/ elems_ptr = cw_get_msg_elems_ptr(msg_ptr); + params.local_cfg = conn->local_cfg; + params.remote_cfg = conn->remote_cfg; + params.default_cfg = conn->default_cfg; + params.global_cfg = conn->global_cfg; + params.msgset = conn->msgset; + + params.from = from; + params.msgdata = message; + params.mand_found = mand_found; + - /* Create an avltree to catch the found mandatory elements */ -/* //conn->mand = stravltree_create();*/ mand_found = mavl_create_conststr(); - unrecognized = mlist_create(NULL,NULL,sizeof(uint8_t*)); - - cw_dbg(DBG_MSG_PARSING ,"*** Parsing message of type %d - (%s) ***", - message->type,message->name); - /* iterate through message elements */ - cw_foreach_elem(elem, elems_ptr, elems_len) { - int rc; - - struct cw_ElemHandlerParams params; - int elem_len, elem_id, max_len; - uint8_t * elem_data; - - - elem_len = cw_get_elem_len(elem); - elem_data=cw_get_elem_data(elem); - elem_id = cw_get_elem_id(elem); - - max_len=elems_len-(elem_data-elems_ptr); - if (elem_len > max_len){ - cw_dbg(DBG_RFC, - "Messag element claims size of %d bytes, but only %d bytes are left in the payload, truncating.", - elem_len,max_len-4); - } + unrecognized = mlist_create(NULL, NULL, sizeof(uint8_t *)); - -/* params.conn=conn;*/ - params.local_cfg=conn->local_cfg; - params.remote_cfg=conn->remote_cfg; - params.default_cfg=conn->default_cfg; - params.global_cfg=conn->global_cfg; - params.msgset=conn->msgset; - params.from=from; - params.msgdata=message; - params.mand_found=mand_found; - - rc = cw_process_element(¶ms,0,0,elem_id,elem_data,elem_len); - + cw_dbg(DBG_MSG_PARSING, "*** Parsing message of type %d - (%s) ***", + message->type, message->name); - if (cw_result_is_ok(rc)) - continue; - - if (rc == CAPWAP_RESULT_UNRECOGNIZED_MESSAGE_ELEMENT){ - mlist_append(unrecognized,&elem); - continue; - } - - if (rc < 0 ){ - continue; - } - } + + cw_decode_elements(¶ms,elems_ptr, elems_len); + + exit(0); /* all message elements are processed, do now after processing by calling the "end" function for the message */ - - cw_check_missing_mand(message,mand_found); - - cw_dbg(DBG_MSG_PARSING," *** Done parsing message of type %d (%s) ***", - message->type,message->name); - + + cw_check_missing_mand(message, mand_found); + + cw_dbg(DBG_MSG_PARSING, " *** Done parsing message of type %d (%s) ***", + message->type, message->name); + mavl_destroy(mand_found); - + /* cw_dbg_ktv_dump(conn->remote_cfg,DBG_CFG_DMP, " *** Remote CFG dump ***", "CFG:", " *** End of remote CFG dump"); */ - if (message->postprocess){ + if (message->postprocess) { message->postprocess(conn); } @@ -455,12 +420,13 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len, cw_send_error_response(conn, rawmsg, result_code); } else if (result_code == 0) { - cw_ktv_set_dword(conn->local_cfg,"result-code",result_code); - if (ui->next){ + cw_ktv_set_dword(conn->local_cfg, "result-code", + result_code); + if (ui->next) { conn->capwap_prevstate = conn->capwap_state; conn->capwap_state = ui->next; } - + /* All is ok, send regular response message */ cw_send_response(conn, rawmsg, len); } else { @@ -475,7 +441,7 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len, */ } - /*stravltree_destroy(conn->mand);*/ + /*stravltree_destroy(conn->mand); */ return result_code; @@ -491,7 +457,7 @@ int process_message(struct conn *conn, uint8_t * rawmsg, int rawlen, { char sock_buf[SOCK_ADDR_BUFSIZE]; uint8_t seqnum; - int s1,s2,sd; + int s1, s2, sd; uint8_t *msgptr = rawmsg + cw_get_hdr_msg_offset(rawmsg); @@ -522,7 +488,7 @@ int process_message(struct conn *conn, uint8_t * rawmsg, int rawlen, if (sd != 0) { cw_dbg(DBG_MSG_ERR, "Discarding message from %s, old seqnum, seqnum = %d, last seqnum=%d", - sock_addr2str(&conn->addr,sock_buf), s2, s1); + sock_addr2str(&conn->addr, sock_buf), s2, s1); errno = EAGAIN; return -1; } @@ -533,7 +499,7 @@ int process_message(struct conn *conn, uint8_t * rawmsg, int rawlen, cw_dbg(DBG_MSG_ERR, "Retransmitted request message from %s detected, seqnum=%d, type=%d", - sock_addr2str(&conn->addr,sock_buf), s2, type); + sock_addr2str(&conn->addr, sock_buf), s2, type); if (cw_get_hdr_msg_type(conn->resp_buffer) - 1 != type) { @@ -547,7 +513,7 @@ int process_message(struct conn *conn, uint8_t * rawmsg, int rawlen, cw_dbg(DBG_MSG_ERR, "Retransmitting response message to %s, seqnum=%d", sock_addr2str(&conn->addr, sock_buf), s2); - /*// XXX untested*/ + /*// XXX untested */ conn_send_msg(conn, conn->resp_buffer); errno = EAGAIN; return -1; @@ -561,13 +527,13 @@ int process_message(struct conn *conn, uint8_t * rawmsg, int rawlen, * @param len lenght of packet data */ int conn_process_packet2(struct conn *conn, uint8_t * packet, int len, - struct sockaddr *from) + struct sockaddr *from) { char sock_buf[SOCK_ADDR_BUFSIZE]; int preamble; int offs; int payloadlen; - + if (len < 8) { /* packet too short */ cw_dbg(DBG_PKT_ERR, @@ -583,8 +549,8 @@ int conn_process_packet2(struct conn *conn, uint8_t * packet, int len, /* wrong version */ cw_dbg(DBG_PKT_ERR, "Discarding packet from %s, wrong version, version=%d, version %d expected.", - sock_addr2str(&conn->addr,sock_buf), (preamble & 0xf0) >> 4, - CAPWAP_VERSION); + sock_addr2str(&conn->addr, sock_buf), + (preamble & 0xf0) >> 4, CAPWAP_VERSION); errno = EAGAIN; return -1; } @@ -593,7 +559,7 @@ int conn_process_packet2(struct conn *conn, uint8_t * packet, int len, /* Encrypted data, this shuold never happen here */ cw_dbg(DBG_PKT_ERR, "Discarding packet from %s, encrypted data after decryption ...", - sock_addr2str(&conn->addr,sock_buf)); + sock_addr2str(&conn->addr, sock_buf)); errno = EAGAIN; return -1; } @@ -607,7 +573,7 @@ int conn_process_packet2(struct conn *conn, uint8_t * packet, int len, /* Eleminate messages with wrong header size */ cw_dbg(DBG_PKT_ERR, "Discarding packet from %s, header length (%d) greater than packet len (%d).", - sock_addr2str(&conn->addr,sock_buf), offs, len); + sock_addr2str(&conn->addr, sock_buf), offs, len); errno = EAGAIN; return -1; } @@ -619,7 +585,8 @@ int conn_process_packet2(struct conn *conn, uint8_t * packet, int len, /* wrong rmac size */ cw_dbg(DBG_PKT_ERR, "Discarding packet from %s, wrong R-MAC size, size=%d", - sock_addr2str(&conn->addr,sock_buf), *(packet + 8)); + sock_addr2str(&conn->addr, sock_buf), + *(packet + 8)); errno = EAGAIN; return -1; } @@ -631,7 +598,7 @@ int conn_process_packet2(struct conn *conn, uint8_t * packet, int len, /* fragmented, add the packet to fragman */ uint8_t *f; int rc; - + f = fragman_add(conn->fragman, packet, offs, payloadlen); if (f == NULL) { errno = EAGAIN; @@ -656,22 +623,24 @@ int conn_process_packet2(struct conn *conn, uint8_t * packet, int len, } int conn_process_packet(struct conn *conn, uint8_t * packet, int len, - struct sockaddr *from){ + struct sockaddr *from) +{ /* show this packet in debug output */ cw_dbg_pkt(DBG_PKT_IN, conn, packet, len, from); - return conn_process_packet2(conn,packet,len,from); + return conn_process_packet2(conn, packet, len, from); } int conn_process_data_packet(struct conn *conn, uint8_t * packet, int len, - struct sockaddr *from){ + struct sockaddr *from) +{ /* show this packet in debug output */ cw_dbg_pkt(DBG_PKT_IN, conn, packet, len, from); - return conn_process_packet2(conn,packet,len,from); + return conn_process_packet2(conn, packet, len, from); } @@ -705,4 +674,3 @@ int cw_read_messages(struct conn *conn) errno = EAGAIN; return -1; } - diff --git a/src/cw/cw_decode_msg.c b/src/cw/cw_decode_msg.c index d6976665..8ad71a35 100644 --- a/src/cw/cw_decode_msg.c +++ b/src/cw/cw_decode_msg.c @@ -11,7 +11,7 @@ int cw_decode_element(struct cw_ElemHandlerParams *params, int proto, struct cw_ElemData *elem_data, elem_data_search; int rc; - params->elem = NULL; + //params->elem = NULL; /* try to retrieve a handler for this message element */ handler = @@ -66,7 +66,7 @@ int cw_decode_element(struct cw_ElemHandlerParams *params, int proto, return CAPWAP_RESULT_UNRECOGNIZED_MESSAGE_ELEMENT; } - printf ("USING HANDLERi TO DECODE: %d %s\n",handler->id,handler->name); + printf ("USING HANDLER TO DECODE: %d %s\n",handler->id,handler->name); rc = handler->get(handler, params, data, len); diff --git a/src/cw/cw_in_generic.c b/src/cw/cw_in_generic.c index 29b3e13d..c7b0d5fd 100644 --- a/src/cw/cw_in_generic.c +++ b/src/cw/cw_in_generic.c @@ -16,6 +16,6 @@ int cw_in_generic(struct cw_ElemHandler * handler, struct cw_ElemHandlerParams * result = cw_ktv_add(params->remote_cfg, handler->key, handler->type,NULL, elem_data,elem_len); - params->elem=result; +// params->elem=result; return CAPWAP_RESULT_SUCCESS; } diff --git a/src/cw/cw_in_idx_generic.c b/src/cw/cw_in_idx_generic.c index 3a27cfb0..216075f4 100644 --- a/src/cw/cw_in_idx_generic.c +++ b/src/cw/cw_in_idx_generic.c @@ -19,7 +19,7 @@ int cw_in_idx_generic(struct cw_ElemHandler * handler, struct cw_ElemHandlerPara result = cw_ktv_add(params->remote_cfg, key, handler->type, NULL, elem_data+1,elem_len-1); - params->elem=result; +// params->elem=result; return CAPWAP_RESULT_SUCCESS; } diff --git a/src/cw/cw_process_element.c b/src/cw/cw_process_element.c index 074fb3aa..399e7816 100644 --- a/src/cw/cw_process_element.c +++ b/src/cw/cw_process_element.c @@ -20,7 +20,7 @@ int cw_process_element(struct cw_ElemHandlerParams *params, int proto, int vendo struct cw_ElemData * elem_data, elem_data_search; int rc; - params->elem=NULL; +// params->elem=NULL; /* try to retrieve a handler for this message element */ handler = cw_msgset_get_elemhandler(params->msgset,proto, vendor, elem_id); diff --git a/src/cw/cw_put_msg.c b/src/cw/cw_put_msg.c index 31257e67..5bfdc177 100644 --- a/src/cw/cw_put_msg.c +++ b/src/cw/cw_put_msg.c @@ -44,7 +44,8 @@ int cw_put_msg(struct conn *conn, uint8_t * rawout) struct cw_MsgData * msg; struct mlistelem * elem; int len,l; - + +printf("Hello msg\n"); cw_dbg(DBG_INFO, "Number of elements in ktv: %d",conn->local_cfg->count); /* cw_dbg_ktv_dump(conn->local_cfg,DBG_CFG_DMP,"Local CFG","LOCAL:","End Local CFG");*/ @@ -104,7 +105,7 @@ printf("Elem: %d %d %d %s\n", data->proto, data->vendor, data->id, handler->name params.elemdata = data; - params.elem=NULL; +// params.elem=NULL; params.msgdata=msg; params.debug_details=details; *details=0; diff --git a/src/cw/cw_read_radio_generic.c b/src/cw/cw_read_radio_generic.c index 514bebad..f779767d 100644 --- a/src/cw/cw_read_radio_generic.c +++ b/src/cw/cw_read_radio_generic.c @@ -24,7 +24,7 @@ int cw_in_radio_generic(struct cw_ElemHandler * handler, struct cw_ElemHandlerPa result = cw_ktv_add(params->remote_cfg, key, handler->type, NULL, elem_data+1,elem_len-1); - params->elem=result; +// params->elem=result; return CAPWAP_RESULT_SUCCESS; } diff --git a/src/cw/cw_setup_dtls.c b/src/cw/cw_setup_dtls.c index a0cff078..ff423080 100644 --- a/src/cw/cw_setup_dtls.c +++ b/src/cw/cw_setup_dtls.c @@ -1,22 +1,24 @@ #include "cw.h" +#include "cfg.h" -static int get_psk(struct conn * conn,const char * username, uint8_t **psk, unsigned int *len) +static int get_psk(struct conn *conn, const char *username, uint8_t ** psk, + unsigned int *len) { char key[CW_KTV_MAX_KEY_LEN]; - cw_Val_t * result; - sprintf(key,"%s/%s","psk",username); - result = cw_ktv_get(conn->local_cfg,key,CW_TYPE_BSTR16); - if (result == NULL){ - if (conn->dtls_psk != NULL){ + cw_Val_t *result; + sprintf(key, "%s/%s", "psk", username); + result = cw_ktv_get(conn->local_cfg, key, CW_TYPE_BSTR16); + if (result == NULL) { + if (conn->dtls_psk != NULL) { *psk = bstr16_data(conn->dtls_psk); *len = bstr16_len(conn->dtls_psk); return 1; } return 0; } - + if (result == NULL) return 0; *psk = result->type->data(result); @@ -33,46 +35,47 @@ static int get_psk(struct conn * conn,const char * username, uint8_t **psk, unsi * @param default_cipher * @return */ -int cw_setup_dtls(struct conn * conn, mavl_t cfg, const char *prefix, char * default_cipher) +int cw_setup_dtls(struct conn *conn, mavl_t cfg, const char *prefix, + char *default_cipher) { char key[CW_KTV_MAX_KEY_LEN]; - char *ssl_cert,*ssl_key; + char *ssl_cert, *ssl_key; uint8_t security; - + security = 0; - - sprintf(key,"%s/%s",prefix,"ssl-cipher"); - conn->dtls_cipher = cw_ktv_get_str(cfg,key, default_cipher); - - - sprintf(key,"%s/%s",prefix,"ssl-psk"); - conn->dtls_psk = cw_ktv_get_bstr16(cfg,key,NULL); - - sprintf(key,"%s/%s",prefix,"ssl-psk-enable"); - conn->dtls_psk_enable = cw_ktv_get_bool(cfg,key,0); - - if (conn->dtls_psk_enable ){ + + sprintf(key, "%s/%s", prefix, "ssl-cipher"); + conn->dtls_cipher = cw_cfg_get(cfg, key, default_cipher); + + + sprintf(key, "%s/%s", prefix, "ssl-psk"); + conn->dtls_psk = cw_cfg_get(cfg, key, NULL); + + sprintf(key, "%s/%s", prefix, "ssl-psk-enable"); + conn->dtls_psk_enable = cw_cfg_get_bool(cfg, key, "flase"); + + if (conn->dtls_psk_enable) { security |= CAPWAP_FLAG_AC_SECURITY_S; } - - - sprintf(key,"%s/%s",prefix,"ssl-certfile"); - ssl_cert = cw_ktv_get_str(conn->local_cfg,key,NULL); - sprintf(key,"%s/%s",prefix,"ssl-keyfile"); - ssl_key = cw_ktv_get_str(conn->local_cfg,key,NULL); - - if (ssl_cert != NULL && ssl_key != NULL){ + + + sprintf(key, "%s/%s", prefix, "ssl-certfile"); + ssl_cert = cw_cfg_get(conn->local_cfg, key, NULL); + sprintf(key, "%s/%s", prefix, "ssl-keyfile"); + ssl_key = cw_cfg_get(conn->local_cfg, key, NULL); + + if (ssl_cert != NULL && ssl_key != NULL) { conn->dtls_cert_file = ssl_cert; conn->dtls_key_file = ssl_key; - sprintf(key,"%s/%s",prefix,"ssl-keypass"); - conn->dtls_key_pass = cw_ktv_get_str(cfg,key,NULL); + sprintf(key, "%s/%s", prefix, "ssl-keypass"); + conn->dtls_key_pass = cw_cfg_get(cfg, key, NULL); security |= CAPWAP_FLAG_AC_SECURITY_X; } - sprintf(key,"%s/%s",prefix,"ssl-dhbits"); - conn->dtls_dhbits = cw_ktv_get_word(cfg,key,1024); - + sprintf(key, "%s/%s", prefix, "ssl-dhbits"); + conn->dtls_dhbits = cw_cfg_get_word(cfg, key, "1024"); + conn->dtls_get_psk = get_psk; return security; diff --git a/src/cw/msgset.h b/src/cw/msgset.h index 709be709..9af90a29 100644 --- a/src/cw/msgset.h +++ b/src/cw/msgset.h @@ -6,7 +6,7 @@ #include "mavl.h" #include "val.h" - +#include "cfg.h" struct cw_ElemDef{ int proto; @@ -29,8 +29,9 @@ struct cw_ElemHandlerParams { struct cw_ElemData * elemdata; struct sockaddr *from; mavl_t mand_found; - cw_Val_t * elem; +// cw_Val_t * elem; char * debug_details; + cw_Cfg_t * cfg; mavl_t remote_cfg; mavl_t local_cfg; mavl_t default_cfg; diff --git a/src/mod/cisco/mod_cisco_ac.c b/src/mod/cisco/mod_cisco_ac.c index 1c688ea9..c164b493 100644 --- a/src/mod/cisco/mod_cisco_ac.c +++ b/src/mod/cisco/mod_cisco_ac.c @@ -4,6 +4,7 @@ #include "cw/log.h" #include "cw/dbg.h" #include "cw/dtls.h" +#include "cw/cfg.h" /*#include "mod_cisco.h"*/ @@ -228,7 +229,7 @@ int static setup_cfg(struct conn * conn) conn->header_len=header_len; security = cw_setup_dtls(conn,conn->local_cfg,"cisco",CAPWAP_CIPHER); - cw_ktv_set_byte(conn->local_cfg,"ac-descriptor/security",security); + cw_cfg_set_int(conn->local_cfg,"ac-descriptor/security",security); if (conn->default_cfg==NULL){ conn->default_cfg=cw_ktv_create();