A lot of bug fixes and improvments
This commit is contained in:
@ -18,7 +18,6 @@ CWSRC=\
|
||||
cw_in_capwap_local_ipv4_address.c\
|
||||
cw_in_capwap_local_ipv6_address.c\
|
||||
cw_in_generic_with_index.c\
|
||||
cw_in_generic_struct.c\
|
||||
cw_in_radio_generic_struct.c\
|
||||
cw_in_idx_generic.c\
|
||||
cw_in_idx_generic_struct.c\
|
||||
@ -67,6 +66,7 @@ CWSRC=\
|
||||
cw_write_radio_element.c\
|
||||
cw_detect_nat.c\
|
||||
cw_read_from.c \
|
||||
cw_in_generic_struct.c\
|
||||
|
||||
# cw_in_check_disc_req.c\
|
||||
# cw_in_check_img_data_req_ac.c\
|
||||
@ -210,6 +210,7 @@ MISCSRC=\
|
||||
val.c \
|
||||
discovery.c\
|
||||
message.c\
|
||||
cw_out_radio_generic_struct.c\
|
||||
|
||||
|
||||
# intavltree.c\
|
||||
@ -228,7 +229,6 @@ DTLSSRC+=\
|
||||
|
||||
|
||||
RADIOSRC=\
|
||||
cw_out_radio_generic_struct.c\
|
||||
|
||||
# cw_in_radio_generic.c\
|
||||
# cw_out_radio_generic.c\
|
||||
|
13
src/cw/cfg.c
13
src/cw/cfg.c
@ -621,6 +621,19 @@ uint16_t cw_cfg_get_word(cw_Cfg_t * cfg, char *key, uint16_t def)
|
||||
return v.val.word;
|
||||
}
|
||||
|
||||
uint16_t cw_cfg_get_word_l(cw_Cfg_t ** cfg, char *key, uint16_t def)
|
||||
{
|
||||
struct cw_Val v;
|
||||
const char *s = cw_cfg_get_l(cfg,key,NULL);
|
||||
if (s==NULL)
|
||||
return def;
|
||||
CW_TYPE_WORD->from_str(&v,s);
|
||||
return v.val.word;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
int cw_cfg_get_word(cw_Cfg_t * cfg, char *key, const char * def)
|
||||
{
|
||||
|
@ -55,6 +55,7 @@ cw_Val_t * cw_cfg_get_val_l(cw_Cfg_t ** cfgs, const char *key, const struct cw_T
|
||||
int cw_cfg_base_exists_l(cw_Cfg_t ** cfgs, const char *key);
|
||||
int cw_cfg_save(const char *filename, cw_Cfg_t *cfg, const char *format, ...);
|
||||
|
||||
uint16_t cw_cfg_get_word_l(cw_Cfg_t ** cfg, char *key, uint16_t def);
|
||||
|
||||
|
||||
|
||||
|
@ -139,7 +139,7 @@ struct cw_Conn * cw_conn_create(int sock, struct sockaddr * addr, int qsize)
|
||||
/* conn->send_data_packet = conn_send_data_packet;*/
|
||||
|
||||
conn->last_seqnum_received=-1;
|
||||
conn->mtu=600;
|
||||
conn->mtu=1480;
|
||||
|
||||
|
||||
conn->cur_packet=0;
|
||||
@ -149,7 +149,7 @@ struct cw_Conn * cw_conn_create(int sock, struct sockaddr * addr, int qsize)
|
||||
conn->write = conn->send_packet;
|
||||
conn->read = conn->recv_packet;
|
||||
|
||||
conn->dtls_mtu = 600;
|
||||
conn->dtls_mtu = 1480;
|
||||
|
||||
|
||||
|
||||
@ -349,7 +349,8 @@ static int process_elements(struct cw_Conn *conn, uint8_t * rawmsg, int len,
|
||||
|
||||
/* pre-check message */
|
||||
if (payloadlen - 8 != elems_len) {
|
||||
|
||||
//printf ("The elems_len is %d\n",elems_len);
|
||||
//printf ("The len = %d\n",len);
|
||||
if (conn->strict_hdr) {
|
||||
cw_dbg(DBG_MSG_ERR,
|
||||
"Discarding message from %s, msgelems len=%d, payload len=%d, (Strict CAPWAP) ",
|
||||
@ -365,7 +366,7 @@ static int process_elements(struct cw_Conn *conn, uint8_t * rawmsg, int len,
|
||||
"Packet from from %s has %d bytes of extra data, ignoring.",
|
||||
sock_addr2str(&conn->addr, sock_buf),
|
||||
payloadlen - 8 - elems_len);
|
||||
elems_len = len - 8;
|
||||
//elems_len = len - 8;
|
||||
}
|
||||
|
||||
if (elems_len > payloadlen - 8) {
|
||||
|
@ -42,7 +42,6 @@ void conn_q_add_packet(struct cw_Conn * conn,uint8_t *packet,int len)
|
||||
conn->q[qwpos]=malloc(len+4);
|
||||
if (conn->q[qwpos]==NULL)
|
||||
return;
|
||||
|
||||
*((uint32_t*)(conn->q[qwpos]))=len;
|
||||
memcpy(conn->q[qwpos]+4,packet,len);
|
||||
conn->qwpos=qwpos+1;
|
||||
|
@ -29,6 +29,7 @@
|
||||
|
||||
int conn_recv_packet_(struct cw_Conn *conn, uint8_t * buf, int len, int flags)
|
||||
{
|
||||
printf("conn_recv\n");
|
||||
int n;
|
||||
while ((n = recv(conn->sock, (char *) buf, len, flags)) < 0) {
|
||||
if (errno != EINTR) {
|
||||
|
@ -353,7 +353,7 @@ int cw_check_missing_mand(struct cw_MsgData *msgdata, mavl_t keys, mavl_t handle
|
||||
|
||||
|
||||
|
||||
extern int cw_read_descriptor_subelems(mavl_t store, const char * key, uint8_t * data, int len,
|
||||
extern int cw_read_descriptor_subelems(cw_Cfg_t * store, const char * key, uint8_t * data, int len,
|
||||
struct cw_DescriptorSubelemDef *elems);
|
||||
|
||||
/*
|
||||
@ -362,7 +362,7 @@ int cw_read_wtp_descriptor(mavl_t mbag, struct cw_Conn *conn,
|
||||
struct cw_DescriptorSubelemDef *allowed);
|
||||
*/
|
||||
|
||||
int cw_read_wtp_descriptor(mavl_t mbag, struct cw_Conn *conn,
|
||||
int cw_read_wtp_descriptor(cw_Cfg_t * mbag, struct cw_Conn *conn,
|
||||
struct cw_ElemHandler *eh, uint8_t * data, int len,
|
||||
struct cw_DescriptorSubelemDef *allowed);
|
||||
|
||||
@ -373,12 +373,12 @@ int cw_write_radio_element(struct cw_ElemHandler * handler, struct cw_ElemHandle
|
||||
uint8_t * dst);
|
||||
|
||||
|
||||
extern int cw_read_wtp_descriptor_7(mavl_t mbag, struct cw_Conn *conn,
|
||||
extern int cw_read_wtp_descriptor_7(cw_Cfg_t * cfg, struct cw_Conn *conn,
|
||||
struct cw_ElemHandler *eh, uint8_t * data, int len,
|
||||
struct cw_DescriptorSubelemDef *allowed);
|
||||
|
||||
|
||||
int cw_read_ac_descriptor(mavl_t store,
|
||||
int cw_read_ac_descriptor(cw_Cfg_t * store,
|
||||
struct cw_ElemHandler *eh,
|
||||
struct cw_ElemHandlerParams * params,
|
||||
uint8_t *data, int len,
|
||||
|
@ -9,6 +9,9 @@ int cw_check_missing_mand(struct cw_MsgData *msgdata, mavl_t keys, mavl_t handle
|
||||
char *mandkey, *result;
|
||||
mlist_t missing;
|
||||
int count;
|
||||
|
||||
if (msgdata==NULL)
|
||||
return 0;
|
||||
|
||||
missing = mlist_create_conststr();
|
||||
if (missing==NULL){
|
||||
|
@ -10,7 +10,7 @@ int cw_in_generic_struct(struct cw_ElemHandler * handler, struct cw_ElemHandlerP
|
||||
{
|
||||
cw_dbg(DBG_X,"STRUCT KEY: %s",handler->key);
|
||||
stop();
|
||||
const char * key;
|
||||
/* const char * key;
|
||||
char tmpkey[CW_CFG_MAX_KEY_LEN];
|
||||
|
||||
|
||||
@ -22,11 +22,8 @@ int cw_in_generic_struct(struct cw_ElemHandler * handler, struct cw_ElemHandlerP
|
||||
key = handler->key;
|
||||
}
|
||||
|
||||
printf("CW_IN_GENERIC STRUCT: %s\n",key);
|
||||
//printf("CW_IN_GENERIC STRUCT: %s\n",key);
|
||||
|
||||
/* int (*mkkey)(struct cw_ElemHandler * handler, char *dst, struct cw_ElemHandlerParams * params,
|
||||
uint8_t*data, int len);
|
||||
*/
|
||||
|
||||
if (!handler->type){
|
||||
cw_log(LOG_ERR,"Can't handle element: %s, no type defined",handler->name);
|
||||
@ -34,6 +31,6 @@ printf("CW_IN_GENERIC STRUCT: %s\n",key);
|
||||
}
|
||||
|
||||
cw_ktv_read_struct(params->cfg,handler->type,key,elem_data,elem_len);
|
||||
|
||||
*/
|
||||
return CAPWAP_RESULT_SUCCESS;
|
||||
}
|
||||
|
@ -7,9 +7,6 @@ int cw_out_generic_with_index(struct cw_ElemHandler * eh,
|
||||
struct cw_ElemHandlerParams * params, uint8_t * dst)
|
||||
|
||||
{
|
||||
char key[CW_CFG_MAX_KEY_LEN];
|
||||
int idx;
|
||||
cw_Val_t * result, search;
|
||||
int len,start;
|
||||
uint8_t * ob;
|
||||
struct cw_Cfg_entry *e;
|
||||
@ -18,7 +15,6 @@ int cw_out_generic_with_index(struct cw_ElemHandler * eh,
|
||||
int i,l;
|
||||
|
||||
|
||||
idx = 0;
|
||||
ob = dst;
|
||||
|
||||
cw_cfg_iter_init(params->cfg_list[0], &cfi, eh->key);
|
||||
@ -42,31 +38,5 @@ int cw_out_generic_with_index(struct cw_ElemHandler * eh,
|
||||
|
||||
return ob-dst;
|
||||
|
||||
stop();
|
||||
return 0;
|
||||
|
||||
|
||||
|
||||
do {
|
||||
sprintf(key,"%s.%d",eh->key,idx);
|
||||
search.key=key;
|
||||
result = mavl_get_first(params->cfg,&search);
|
||||
if (result==NULL)
|
||||
break;
|
||||
if (strncmp(result->key,key,strlen(key))!=0)
|
||||
break;
|
||||
|
||||
start = params->msgset->header_len(eh);
|
||||
len = cw_put_byte(ob+start,idx);
|
||||
|
||||
len += result->type->put(result,ob+start+len);
|
||||
|
||||
ob += params->msgset->write_header(eh,ob,len);
|
||||
|
||||
idx++;
|
||||
|
||||
}while(1);
|
||||
|
||||
return ob-dst;
|
||||
}
|
||||
|
||||
|
@ -133,11 +133,11 @@ int cw_out_traverse(struct cw_ElemHandler * handler, struct cw_ElemHandlerParams
|
||||
|
||||
{
|
||||
|
||||
char current[CW_CFG_MAX_KEY_LEN];
|
||||
int stack[10];
|
||||
stack[0]=0;
|
||||
//char current[CW_CFG_MAX_KEY_LEN];
|
||||
//int stack[10];
|
||||
//stack[0]=0;
|
||||
|
||||
current[0]=0;
|
||||
//current[0]=0;
|
||||
|
||||
stop();
|
||||
return 0;
|
||||
|
@ -25,7 +25,7 @@ cw_ValStruct_t acstatus [] = {
|
||||
|
||||
|
||||
|
||||
int cw_read_ac_descriptor(mavl_t store,
|
||||
int cw_read_ac_descriptor(cw_Cfg_t * store,
|
||||
struct cw_ElemHandler *eh,
|
||||
struct cw_ElemHandlerParams * params,
|
||||
uint8_t *data, int len,
|
||||
|
@ -22,7 +22,7 @@
|
||||
#include "keys.h"
|
||||
|
||||
|
||||
int cw_read_descriptor_subelems(mavl_t cfg, const char *parent_key,
|
||||
int cw_read_descriptor_subelems(cw_Cfg_t *cfg, const char *parent_key,
|
||||
uint8_t * data, int len,
|
||||
struct cw_DescriptorSubelemDef *elems)
|
||||
{
|
||||
|
@ -16,7 +16,7 @@ static struct cw_DescriptorSubelemDef allowed_default[] = {
|
||||
};
|
||||
|
||||
|
||||
int cw_read_wtp_descriptor(mavl_t cfg, struct cw_Conn *conn,
|
||||
int cw_read_wtp_descriptor(cw_Cfg_t * cfg, struct cw_Conn *conn,
|
||||
struct cw_ElemHandler *eh, uint8_t * data, int len,
|
||||
struct cw_DescriptorSubelemDef *allowed)
|
||||
{
|
||||
|
@ -20,7 +20,7 @@ static struct cw_DescriptorSubelemDef allowed_default[] = {
|
||||
/**
|
||||
* Read WTP Descriptor in Cisco-Style (Draft 7)
|
||||
*/
|
||||
int cw_read_wtp_descriptor_7(mavl_t cfg, struct cw_Conn *conn,
|
||||
int cw_read_wtp_descriptor_7(cw_Cfg_t * cfg, struct cw_Conn *conn,
|
||||
struct cw_ElemHandler *eh, uint8_t * data, int len,
|
||||
struct cw_DescriptorSubelemDef *allowed)
|
||||
{
|
||||
|
@ -50,10 +50,10 @@ int cw_setup_dtls(struct cw_Conn *conn, cw_Cfg_t * cfg, const char *prefix,
|
||||
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);
|
||||
conn->dtls_psk = (bstr16_t)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");
|
||||
conn->dtls_psk_enable = cw_cfg_get_bool(cfg, key, 0);
|
||||
|
||||
if (conn->dtls_psk_enable) {
|
||||
security |= CAPWAP_FLAG_AC_SECURITY_S;
|
||||
|
@ -92,7 +92,7 @@ static struct cw_StrListElem theme0[] = {
|
||||
{DBG_WARN, ANSI_CYAN},
|
||||
{DBG_MOD, ANSI_WHITE},
|
||||
// {DBG_CFG_DMP, ANSI_BCYAN },
|
||||
{DBG_CFG_UPDATES,ANSI_BRED},
|
||||
{DBG_CFG_UPDATES,ANSI_GREEN},
|
||||
|
||||
{CW_STR_STOP, ""}
|
||||
};
|
||||
|
@ -120,10 +120,12 @@ enum cw_dbg_levels{
|
||||
DBG_MSG_COMPOSE = (1<<26),
|
||||
|
||||
DBG_CFG_UPDATES = (1<<27),
|
||||
|
||||
DBG_ELEM_VNDR = (1<<28),
|
||||
|
||||
|
||||
DBG_X = (1<<30),
|
||||
DBG_ALL = (0xffffffff),
|
||||
DBG_ALL = (0x7fffffff),
|
||||
|
||||
|
||||
DBG_ELEM_DMP_IN = 7,
|
||||
|
@ -47,42 +47,49 @@ struct cw_StrListElem cw_dbg_strings[] = {
|
||||
{ DBG_MSG_DMP_IN, "msg_dmp_in" },
|
||||
{ DBG_MSG_DMP_OUT, "msg_dmp_out" },
|
||||
|
||||
{ DBG_MSG_ERR, "msg_err"},
|
||||
{ DBG_MSG_ERR, "msg_err"},
|
||||
|
||||
{ DBG_RFC, "rfc", },
|
||||
{ DBG_RFC, "rfc", },
|
||||
|
||||
{ DBG_ELEM_IN, "elem_in"},
|
||||
{ DBG_ELEM_OUT, "elem_out"},
|
||||
{ DBG_ELEM_DMP, "elem_dmp"},
|
||||
|
||||
{ DBG_ELEM_ERR, "elem_err" },
|
||||
{ DBG_ELEM_DETAIL_IN, "elem_detail_in" },
|
||||
{ DBG_ELEM_DETAIL_OUT, "elem_detail_out" },
|
||||
{ DBG_ELEM_IN, "elem_in"},
|
||||
{ DBG_ELEM_OUT, "elem_out"},
|
||||
{ DBG_ELEM_DMP, "elem_dmp"},
|
||||
{ DBG_ELEM_ERR, "elem_err" },
|
||||
{ DBG_ELEM_DETAIL_IN, "elem_detail_in" },
|
||||
{ DBG_ELEM_DETAIL_OUT, "elem_detail_out" },
|
||||
{ DBG_ELEM_VNDR, "elem_vndr"},
|
||||
|
||||
{ DBG_DTLS, "dtls" },
|
||||
{ DBG_DTLS_BIO, "dtls_bio" },
|
||||
{ DBG_DTLS_BIO_DMP, "dtls_bio_dmp"},
|
||||
{ DBG_DTLS_DETAIL, "dtls_detail"},
|
||||
{ DBG_DTLS, "dtls" },
|
||||
{ DBG_DTLS_BIO, "dtls_bio" },
|
||||
{ DBG_DTLS_BIO_DMP, "dtls_bio_dmp"},
|
||||
{ DBG_DTLS_DETAIL, "dtls_detail"},
|
||||
|
||||
{ DBG_CFG_UPDATES, "cfg_updates" },
|
||||
{ DBG_CFG_UPDATES, "cfg_updates" },
|
||||
|
||||
|
||||
// {DBG_CFG_DMP, "cfg_dmp" },
|
||||
|
||||
{ DBG_WARN, "warn" },
|
||||
{ DBG_WARN, "warn" },
|
||||
|
||||
{ DBG_MOD,"mod"},
|
||||
{ DBG_STATE, "state" },
|
||||
{ DBG_MSG_COMPOSE, "msg_compose" },
|
||||
{ DBG_MOD, "mod"},
|
||||
{ DBG_STATE, "state" },
|
||||
{ DBG_MSG_COMPOSE, "msg_compose" },
|
||||
|
||||
{ (DBG_MSG_IN | DBG_MSG_OUT), "msg" },
|
||||
{ (DBG_PKT_IN | DBG_PKT_OUT), "pkt" },
|
||||
{ (DBG_ELEM_IN | DBG_ELEM_OUT), "elem" },
|
||||
{ (DBG_ELEM_DETAIL_IN | DBG_ELEM_DETAIL_OUT), "elem_detail" },
|
||||
{ (DBG_ELEM_IN | DBG_ELEM_OUT | DBG_ELEM_DMP | DBG_ELEM_DETAIL_IN | DBG_ELEM_DETAIL_OUT), "elem_all" },
|
||||
{ (DBG_MSG_IN | DBG_MSG_OUT | DBG_ELEM_IN | DBG_ELEM_OUT | DBG_STATE), "std" },
|
||||
|
||||
{ DBG_ALL, "all"},
|
||||
{ ( DBG_MSG_IN | DBG_MSG_OUT |
|
||||
DBG_ELEM_IN | DBG_ELEM_OUT |
|
||||
DBG_MSG_ERR | DBG_ELEM_ERR |
|
||||
DBG_PKT_ERR | DBG_RFC | DBG_WARN
|
||||
|
||||
|
||||
| DBG_STATE), "std" },
|
||||
|
||||
{ DBG_ALL, "all"},
|
||||
|
||||
|
||||
{ CW_STR_STOP, NULL }
|
||||
|
@ -224,7 +224,7 @@ int dtls_openssl_set_certs(struct cw_Conn * conn, struct dtls_openssl_data *d)
|
||||
{
|
||||
int rc;
|
||||
if (conn->dtls_key_file && conn->dtls_cert_file){
|
||||
SSL_CTX_set_default_passwd_cb_userdata(d->ctx, conn->dtls_key_pass);
|
||||
SSL_CTX_set_default_passwd_cb_userdata(d->ctx, (char*)conn->dtls_key_pass);
|
||||
SSL_CTX_set_default_passwd_cb(d->ctx, pem_passwd_cb);
|
||||
|
||||
|
||||
@ -291,18 +291,18 @@ return 1;
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
static unsigned int psk_server_cb(SSL *ssl,const char *identity, unsigned char * psk, unsigned int max_psk_len)
|
||||
{
|
||||
BIO * b = SSL_get_rbio(ssl);
|
||||
struct cw_Conn * conn = BIO_get_data(b); /*->ptr;*/
|
||||
|
||||
struct cw_Conn * conn = BIO_get_data(b); //->ptr;
|
||||
|
||||
int l = bstr16_len(conn->dtls_psk) < max_psk_len ? bstr16_len(conn->dtls_psk) : max_psk_len;
|
||||
memcpy(psk,conn->dtls_psk,l);
|
||||
return l;
|
||||
}
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
@ -323,10 +323,8 @@ struct dtls_openssl_data * dtls_openssl_data_create(struct cw_Conn * conn, const
|
||||
}
|
||||
|
||||
rc = SSL_CTX_get_security_level(d->ctx);
|
||||
printf("Security Level is %d\n");
|
||||
|
||||
SSL_CTX_set_security_level(d->ctx,0);
|
||||
printf("Security Level is %d\n");
|
||||
|
||||
|
||||
|
||||
|
@ -32,7 +32,7 @@ int dtls_openssl_accept(struct cw_Conn *conn)
|
||||
|
||||
if (!conn->dtls_data)
|
||||
conn->dtls_data =
|
||||
dtls_openssl_data_create(conn, DTLSv1_server_method(),
|
||||
dtls_openssl_data_create(conn, DTLS_server_method(),
|
||||
dtls_openssl_bio_method());
|
||||
|
||||
d = (struct dtls_openssl_data *) conn->dtls_data;
|
||||
|
@ -11,6 +11,8 @@ int cw_encode_elements(struct cw_ElemHandlerParams *params, mlist_t elements_lis
|
||||
struct mlistelem * elem;
|
||||
|
||||
len =0;
|
||||
params->len=len;
|
||||
|
||||
mlist_foreach(elem,elements_list){
|
||||
int l;
|
||||
struct cw_ElemData * data;
|
||||
@ -52,6 +54,7 @@ int cw_encode_elements(struct cw_ElemHandlerParams *params, mlist_t elements_lis
|
||||
data->proto, data->vendor, data->id, handler->name,l);
|
||||
|
||||
len += l;
|
||||
params->len=len;
|
||||
}
|
||||
|
||||
return len;
|
||||
@ -96,6 +99,7 @@ int cw_compose_message(struct cw_Conn *conn, uint8_t * rawout)
|
||||
len =0;
|
||||
//cw_dbg(DBG_X,"setting with update CFG");
|
||||
params.conn=conn;
|
||||
params.rawmsg = rawout;
|
||||
params.cfg_list[0]=conn->update_cfg;
|
||||
params.cfg_list[1]=conn->local_cfg;
|
||||
params.cfg_list[2]=conn->global_cfg;
|
||||
@ -220,7 +224,10 @@ int cw_decode_element(struct cw_ElemHandlerParams *params, int proto,
|
||||
elem_data_search.id = elem_id;
|
||||
elem_data_search.proto = proto;
|
||||
elem_data_search.vendor = vendor;
|
||||
elem_data = mavl_get(params->msgdata->elements_tree, &elem_data_search);
|
||||
if (params->msgdata)
|
||||
elem_data = mavl_get(params->msgdata->elements_tree, &elem_data_search);
|
||||
else
|
||||
elem_data = NULL;
|
||||
if (!elem_data) {
|
||||
cw_dbg(DBG_ELEM_ERR, "Element %d - %s, not allowed here",
|
||||
elem_id, handler->name);
|
||||
@ -249,7 +256,7 @@ int cw_decode_element(struct cw_ElemHandlerParams *params, int proto,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!handler->flags)
|
||||
if (!handler->flags || cw_dbg_is_level(DBG_ELEM_VNDR))
|
||||
cw_dbg_elem(params->dbg_level, NULL, params->msgdata->type, handler,
|
||||
data, len);
|
||||
|
||||
@ -273,7 +280,6 @@ int cw_decode_elements(struct cw_ElemHandlerParams * params, uint8_t * elems_ptr
|
||||
|
||||
//mand_found = mavl_create_conststr();
|
||||
//unrecognized = mlist_create(NULL,NULL,sizeof(uint8_t*));
|
||||
|
||||
cw_foreach_elem(elem, elems_ptr, elems_len) {
|
||||
int rc;
|
||||
|
||||
|
@ -119,7 +119,7 @@ void cw_mod_set_path(const char *path)
|
||||
* @param mod_name Name of the module
|
||||
* @return a pointer to the module interface
|
||||
*/
|
||||
struct cw_Mod *cw_mod_load(const char *mod_name, mavl_t global_cfg, int role)
|
||||
struct cw_Mod *cw_mod_load(const char *mod_name, cw_Cfg_t * global_cfg, int role)
|
||||
{
|
||||
struct cw_Mod search;
|
||||
struct cw_Mod *mod;
|
||||
|
@ -29,7 +29,7 @@
|
||||
|
||||
#include "sock.h"
|
||||
#include "conn.h"
|
||||
|
||||
#include "cfg.h"
|
||||
|
||||
enum {
|
||||
CW_MOD_MODE_CAPWAP,
|
||||
@ -44,7 +44,7 @@ struct cw_Mod {
|
||||
const char *name;
|
||||
|
||||
/** Initializion method */
|
||||
int (*init) (struct cw_Mod *mod, mavl_t global_cfg, int role);
|
||||
int (*init) (struct cw_Mod *mod, cw_Cfg_t * global_cfg, int role);
|
||||
|
||||
/** Detect capwap
|
||||
* This function is called after receiving and disassembling a complete
|
||||
@ -93,7 +93,7 @@ extern int mod_caching;
|
||||
#define mod_set_caching(var) (mod_caching=var)
|
||||
#define mod_get_caching() (mod_caching)
|
||||
|
||||
struct cw_Mod * cw_mod_load(const char * mod_name, mavl_t global_cfg, int role);
|
||||
struct cw_Mod * cw_mod_load(const char * mod_name, cw_Cfg_t * global_cfg, int role);
|
||||
struct cw_Mod * cw_mod_add_to_list(struct cw_Mod * mod );
|
||||
struct cw_Mod * cw_mod_detect(struct cw_Conn *conn,
|
||||
uint8_t * rawmsg, int len,
|
||||
|
@ -384,6 +384,9 @@ int cw_msgset_add_states(struct cw_MsgSet * set, cw_StateMachineState_t * states
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief Find message data to a specific message
|
||||
* @param set message set
|
||||
@ -392,9 +395,14 @@ int cw_msgset_add_states(struct cw_MsgSet * set, cw_StateMachineState_t * states
|
||||
*/
|
||||
struct cw_MsgData *cw_msgset_get_msgdata(struct cw_MsgSet *set, int type)
|
||||
{
|
||||
struct cw_MsgData search;
|
||||
|
||||
struct cw_MsgData search, *result;
|
||||
search.type = type;
|
||||
return mavl_get(set->msgdata, &search);
|
||||
result = mavl_get(set->msgdata, &search);
|
||||
if (result != NULL)
|
||||
return result;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
typedef int (*cw_MsgCallbackFun)(struct cw_ElemHandlerParams * params, uint8_t * elems_ptr, int elems_len);
|
||||
|
@ -24,18 +24,20 @@ struct cw_ElemData{
|
||||
};
|
||||
|
||||
struct cw_ElemHandlerParams {
|
||||
struct cw_Conn * conn; /**< a connection the message belongs to*/
|
||||
struct cw_MsgSet * msgset;
|
||||
struct cw_Conn * conn; /**< a connection the message belongs to*/
|
||||
uint8_t * rawmsg;
|
||||
struct cw_MsgSet * msgset; /**< msgset to use */
|
||||
struct cw_MsgData * msgdata;
|
||||
struct cw_ElemData * elemdata;
|
||||
struct sockaddr *from;
|
||||
mavl_t mand_found;
|
||||
mlist_t unrecognized;
|
||||
// cw_Val_t * elem;
|
||||
mavl_t mand_found; /**< used to ad the keys of mand. msg elements
|
||||
found while parsing */
|
||||
mlist_t unrecognized; /**< to catch ids of unreconized mss elements */
|
||||
char * debug_details;
|
||||
uint32_t dbg_level;
|
||||
cw_Cfg_t * cfg;
|
||||
cw_Cfg_t * cfg_list[10];
|
||||
int len;
|
||||
};
|
||||
|
||||
|
||||
|
23
src/cw/val.h
23
src/cw/val.h
@ -146,12 +146,6 @@ struct cw_ValIndexed{
|
||||
};
|
||||
typedef struct cw_ValIndexed cw_ValIndexed_t;
|
||||
|
||||
int cw_ktv_read_struct(mavl_t ktv,const cw_ValStruct_t * stru, const char *pkey,
|
||||
uint8_t * data, int len);
|
||||
int cw_ktv_write_struct(mavl_t ktv, mavl_t def, const cw_ValStruct_t * stru, const char *pkey,
|
||||
uint8_t * dst);
|
||||
|
||||
|
||||
|
||||
extern const struct cw_Type cw_type_byte;
|
||||
extern const struct cw_Type cw_type_word;
|
||||
@ -178,24 +172,7 @@ extern const struct cw_Type cw_type_struct;
|
||||
/*
|
||||
void cw_kvstore_mavl_delete(const void *data);
|
||||
*/
|
||||
cw_Val_t *cw_ktv_add(mavl_t kvstore, const char *key, const struct cw_Type *type,
|
||||
const void * valguard,
|
||||
const uint8_t * data, int len);
|
||||
|
||||
void cw_ktv_del_sub(mavl_t ktvstore, const char *basekey);
|
||||
|
||||
cw_Val_t * cw_ktv_replace(mavl_t kvtstore, const char *key, const struct cw_Type *type,
|
||||
const void * valguard,
|
||||
const uint8_t * data, int len);
|
||||
|
||||
const char * cw_ktv_add_from_str(mavl_t kvtstore, const char *key, const struct cw_Type *type,
|
||||
const void * valguard,
|
||||
const char * str);
|
||||
|
||||
int cw_ktv_mavlcmp(const void *v1, const void *v2);
|
||||
int cw_ktv_mavlcmp_type_by_name(const void *v1,const void *v2);
|
||||
|
||||
void cw_ktv_mavldel(void *data);
|
||||
|
||||
/**
|
||||
* Create a KTV store
|
||||
|
Reference in New Issue
Block a user