More work on data packets
FossilOrigin-Name: bbc6d184bd9c0a39fbcd90c30acea864ee63114bed3392fc827138e04ad2fd4c
This commit is contained in:
parent
1a32efd570
commit
127bad2fb5
@ -105,14 +105,15 @@ int dataman_process_keep_alive(struct netconn *nc, uint8_t *rawmsg, int len)
|
|||||||
cw_foreach_elem(elem, elems_ptr, elems_len) {
|
cw_foreach_elem(elem, elems_ptr, elems_len) {
|
||||||
|
|
||||||
if (cw_get_elem_id(elem) == CAPWAP_ELEM_SESSION_ID){
|
if (cw_get_elem_id(elem) == CAPWAP_ELEM_SESSION_ID){
|
||||||
uint8_t sessid[16];
|
uint8_t sessid[64];
|
||||||
memset(sessid,0,16);
|
memset(sessid,0,16);
|
||||||
|
|
||||||
int sessid_len = cw_get_elem_len(elem);
|
int sessid_len = cw_get_elem_len(elem);
|
||||||
|
|
||||||
printf("Sess id len = %d\n",sessid_len);
|
printf("Sess id len = %d\n",sessid_len);
|
||||||
|
|
||||||
memcpy(sessid,cw_get_elem_data(elem),sessid_len);
|
((uint16_t*)sessid)[0]=sessid_len;
|
||||||
|
memcpy(bstr16_data(sessid),cw_get_elem_data(elem),sessid_len);
|
||||||
|
|
||||||
struct wtpman * wtpman = wtplist_get_by_session_id(sessid);
|
struct wtpman * wtpman = wtplist_get_by_session_id(sessid);
|
||||||
if (wtpman){
|
if (wtpman){
|
||||||
@ -123,7 +124,7 @@ int dataman_process_keep_alive(struct netconn *nc, uint8_t *rawmsg, int len)
|
|||||||
uint8_t * dl = cw_init_data_keep_alive_msg(buffer,NULL);
|
uint8_t * dl = cw_init_data_keep_alive_msg(buffer,NULL);
|
||||||
uint8_t * d=dl+2;
|
uint8_t * d=dl+2;
|
||||||
|
|
||||||
int l = cw_put_elem_session_id(d,sessid,sessid_len);
|
int l = cw_put_elem_session_id(d,bstr16_data(sessid),sessid_len);
|
||||||
cw_put_word(dl,l);
|
cw_put_word(dl,l);
|
||||||
|
|
||||||
int total_len = dl-buffer + l+2;
|
int total_len = dl-buffer + l+2;
|
||||||
|
@ -16,6 +16,10 @@
|
|||||||
|
|
||||||
#include "wtplist.h"
|
#include "wtplist.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void show_cfg (FILE *out, mavl_t ktv)
|
void show_cfg (FILE *out, mavl_t ktv)
|
||||||
{
|
{
|
||||||
char value[500];
|
char value[500];
|
||||||
|
@ -78,14 +78,17 @@ struct wtpman * wtplist_get(const struct sockaddr * addr)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct wtpman * wtplist_get_by_session_id(uint8_t *session_id)
|
struct wtpman * wtplist_get_by_session_id(bstr16_t *session_id)
|
||||||
{
|
{
|
||||||
struct conn search;
|
struct conn search;
|
||||||
struct conn * conn;
|
struct conn * conn;
|
||||||
|
|
||||||
memcpy (search.session_id, session_id,16);
|
search.session_id = session_id;
|
||||||
|
/*memcpy (search.session_id, session_id,16);*/
|
||||||
|
|
||||||
conn = connlist_get_by_session_id(connlist,&search);
|
conn = connlist_get_by_session_id(connlist,&search);
|
||||||
|
if (conn == NULL)
|
||||||
|
return NULL;
|
||||||
return conn->data;
|
return conn->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ extern struct wtpman * wtplist_add(struct wtpman * wtpman);
|
|||||||
extern void wtplist_remove(struct wtpman * wtpman);
|
extern void wtplist_remove(struct wtpman * wtpman);
|
||||||
extern void wtplist_lock();
|
extern void wtplist_lock();
|
||||||
extern void wtplist_unlock();
|
extern void wtplist_unlock();
|
||||||
extern struct wtpman * wtplist_get_by_session_id(uint8_t *session_id);
|
extern struct wtpman * wtplist_get_by_session_id(bstr16_t *session_id);
|
||||||
struct connlist * wtplist_get_connlist(void);
|
struct connlist * wtplist_get_connlist(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -92,7 +92,8 @@ struct conn {
|
|||||||
mbag_t config_upd;
|
mbag_t config_upd;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
uint8_t session_id[16];
|
/* uint8_t session_id[16];*/
|
||||||
|
bstr16_t session_id;
|
||||||
|
|
||||||
|
|
||||||
int role;
|
int role;
|
||||||
|
@ -57,7 +57,13 @@ static int cmp_by_session_id ( const void *d1, const void *d2 )
|
|||||||
{
|
{
|
||||||
struct conn * c1 = *( void ** ) d1;
|
struct conn * c1 = *( void ** ) d1;
|
||||||
struct conn * c2 = *( void ** ) d2;
|
struct conn * c2 = *( void ** ) d2;
|
||||||
return memcmp ( c1->session_id, c2->session_id, 16 );
|
int len1,len2;
|
||||||
|
len1 = bstr16_len(c1->session_id);
|
||||||
|
len2 = bstr16_len(c2->session_id);
|
||||||
|
|
||||||
|
if (len1 != len2 )
|
||||||
|
return len1-len2;
|
||||||
|
return memcmp ( bstr16_data(c1->session_id), bstr16_data(c2->session_id), len1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -727,6 +727,14 @@ static struct cw_MsgDef messages[] = {
|
|||||||
|
|
||||||
static int postprocess_join_request(struct conn *conn)
|
static int postprocess_join_request(struct conn *conn)
|
||||||
{
|
{
|
||||||
|
cw_KTV_t * result;
|
||||||
|
|
||||||
|
result = cw_ktv_get(conn->remote_cfg,"session-id",CW_TYPE_BSTR16);
|
||||||
|
if (result != NULL){
|
||||||
|
conn->session_id = result->val.ptr;
|
||||||
|
connlist_add_by_session_id(conn->connlist,conn);
|
||||||
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1745,10 +1745,19 @@ static cw_StateMachineState_t statemachine_states[]={
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static int (*postprocess_join_request_parent)(struct conn * conn);
|
||||||
struct cw_MsgSet * cisco_register_msg_set(struct cw_MsgSet * set, int mode){
|
struct cw_MsgSet * cisco_register_msg_set(struct cw_MsgSet * set, int mode){
|
||||||
|
|
||||||
|
struct cw_MsgData * md;
|
||||||
|
|
||||||
if (mode != CW_MOD_MODE_CAPWAP)
|
if (mode != CW_MOD_MODE_CAPWAP)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
md = cw_msgset_get_msgdata(set,CAPWAP_MSG_JOIN_REQUEST);
|
||||||
|
if (md != NULL){
|
||||||
|
postprocess_join_request_parent = md->postprocess;
|
||||||
|
}
|
||||||
|
|
||||||
cw_msgset_add(set,messages, handlers73);
|
cw_msgset_add(set,messages, handlers73);
|
||||||
cw_msgset_add_states(set,statemachine_states);
|
cw_msgset_add_states(set,statemachine_states);
|
||||||
return set;
|
return set;
|
||||||
@ -1791,6 +1800,9 @@ static int postprocess_discovery(struct conn *conn)
|
|||||||
|
|
||||||
static int postprocess_join_request(struct conn *conn)
|
static int postprocess_join_request(struct conn *conn)
|
||||||
{
|
{
|
||||||
|
if (postprocess_join_request_parent!=NULL){
|
||||||
|
postprocess_join_request_parent(conn);
|
||||||
|
}
|
||||||
postprocess_discovery(conn);
|
postprocess_discovery(conn);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user