diff --git a/src/ac/wtpman.c b/src/ac/wtpman.c index dbd65cf8..b621436e 100644 --- a/src/ac/wtpman.c +++ b/src/ac/wtpman.c @@ -525,6 +525,8 @@ struct wtpman *wtpman_create(int socklistindex, struct sockaddr *srcaddr) return NULL; } + wtpman->conn->mods = conf_mods; + wtpman->conn->strict_capwap = conf_strict_capwap; wtpman->conn->strict_hdr = conf_strict_headers; wtpman->conn->radios = mbag_i_create(); diff --git a/src/capwap/conn.h b/src/capwap/conn.h index 688d6115..e90a7efa 100644 --- a/src/capwap/conn.h +++ b/src/capwap/conn.h @@ -184,7 +184,7 @@ struct conn { struct sockaddr *from); - + int detected; void * mods; }; diff --git a/src/capwap/conn_process_packet.c b/src/capwap/conn_process_packet.c index c04f5afd..0e9f57b2 100644 --- a/src/capwap/conn_process_packet.c +++ b/src/capwap/conn_process_packet.c @@ -167,6 +167,19 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len, } + if (!conn->detected) { + if (conn->mods){ + struct mod_ac ** mods = (struct mod_ac **)conn->mods; + int i; + for (i=0; mods[i]; i++){ + if (mods[i]->detect){ + mods[i]->detect(conn,rawmsg,len,from); + } + } + } + } + + /* prepare struct for search operation */ as.capwap_state = conn->capwap_state; diff --git a/src/capwap/mod.h b/src/capwap/mod.h index 3589a320..9d92491f 100644 --- a/src/capwap/mod.h +++ b/src/capwap/mod.h @@ -2,6 +2,7 @@ #define __MOD_H #include +#include #include "sock.h" #include "conn.h" @@ -16,7 +17,7 @@ struct mod_ac This function ifter receiving and disassembling a complete CAPWAP message. Either on Discovery Request or Join Request **/ - int (*detect)(struct conn *conn,const char *rawmsg, int rawlen,struct sockaddr *from); + int (*detect)(struct conn *conn,const uint8_t *rawmsg, int rawlen,struct sockaddr *from); }; diff --git a/src/capwap/mod/cipwap/mod_cipwap_ac.c b/src/capwap/mod/cipwap/mod_cipwap_ac.c index cc6e36b2..4c943f4e 100644 --- a/src/capwap/mod/cipwap/mod_cipwap_ac.c +++ b/src/capwap/mod/cipwap/mod_cipwap_ac.c @@ -1,5 +1,7 @@ #include "capwap/mod.h" +#include "capwap/log.h" + #include "mod_cipwap.h" @@ -10,11 +12,23 @@ int cipwap_init() } +static int detect(struct conn *conn,const uint8_t *rawmsg, int rawlen,struct sockaddr *from) +{ + cw_log(LOG_INFO,"Detecting ..."); + return 0; +} + + + static struct mod_ac cipwap_ac = { + .name ="cipwap", .init = cipwap_init, - .name ="cipwap" + .detect = detect + }; + + struct mod_ac * mod_cipwap_ac(){ return &cipwap_ac; };