From 798c4fabdc18ee7ff680b8ca73065fb96a1b10ac Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Thu, 17 Mar 2016 00:26:12 +0000 Subject: [PATCH] Change State improvemenst. FossilOrigin-Name: be00dd3a2e9d0c0daecb49eed1bfcc76f0820443e488a65647faf17af129672c --- src/ac/wtpman.c | 21 +++++++++++++++++++++ src/cw/cw_in_check_chng_state_evnt_req.c | 12 +++++++----- src/cw/cw_in_check_disc_req.c | 3 ++- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/ac/wtpman.c b/src/ac/wtpman.c index c7826f12..ff83f8ff 100644 --- a/src/ac/wtpman.c +++ b/src/ac/wtpman.c @@ -151,6 +151,18 @@ static void wtpman_run_discovery(void *arg) } +int xprocess_message(struct conn *conn, uint8_t * rawmsg, int rawlen, + struct sockaddr *from) +{ + uint8_t *msgptr = rawmsg + cw_get_hdr_msg_offset(rawmsg); + uint32_t type = cw_get_msg_type(msgptr); + cw_log(LOG_ERR,"Hey: %d",type); + if (type == CW_MSG_DISCOVERY_REQUEST) + conn->capwap_state=CW_STATE_DISCOVERY; + + + return process_message(conn,rawmsg,rawlen,from); +} @@ -646,6 +658,7 @@ void wtpman_lw_addpacket(struct wtpman *wtpman, uint8_t * packet, int len) } +int nodtls=0; void wtpman_start(struct wtpman *wtpman, int dtlsmode) { @@ -657,6 +670,14 @@ void wtpman_start(struct wtpman *wtpman, int dtlsmode) } else { cw_dbg(DBG_INFO, "Starting wtpman in non-dtls mode"); + if (nodtls){ + wtpman->conn->process_message=xprocess_message; + pthread_create(&wtpman->thread, NULL, (void *) wtpman_run, + (void *) wtpman); + return; + + } + pthread_create(&wtpman->thread, NULL, (void *) wtpman_run_discovery, (void *) wtpman); } 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 d762e460..d72b5ff9 100644 --- a/src/cw/cw_in_check_chng_state_evnt_req.c +++ b/src/cw/cw_in_check_chng_state_evnt_req.c @@ -1,13 +1,15 @@ #include "capwap.h" -#include "intavltree.h" -#include "dbg.h" -#include "log.h" #include "capwap_items.h" +#include "cw.h" int cw_in_check_chng_state_evnt_req(struct conn *conn, struct cw_action_in *a, uint8_t * data, int len,struct sockaddr *from) { - conn->capwap_state = CW_STATE_RUN; - return 0; + conn->capwap_state = CW_STATE_NONE; + int rc = cw_in_check_generic_req(conn,a,data,len,from); + if (rc==0) + conn->capwap_state = CW_STATE_RUN; + return rc; + } diff --git a/src/cw/cw_in_check_disc_req.c b/src/cw/cw_in_check_disc_req.c index 6875d4f3..d1637256 100644 --- a/src/cw/cw_in_check_disc_req.c +++ b/src/cw/cw_in_check_disc_req.c @@ -14,9 +14,9 @@ int cw_in_check_disc_req(struct conn *conn, struct cw_action_in *a, uint8_t * da cw_action_in_t *mlist[120]; int n = cw_check_missing_mand(mlist, conn, a); - conn->capwap_state = CW_STATE_NONE; + if (n && conn->strict_capwap) { cw_dbg_missing_mand(DBG_MSG_ERR, conn, mlist, n, a); /* if mandatory elements are missing, in strict @@ -35,6 +35,7 @@ int cw_in_check_disc_req(struct conn *conn, struct cw_action_in *a, uint8_t * da /* ok, send response */ + conn->capwap_state = CW_STATE_JOIN; return 0; }