2015-03-31 12:46:58 +02:00
|
|
|
|
|
|
|
#include "capwap.h"
|
2015-04-11 19:00:51 +02:00
|
|
|
#include "dbg.h"
|
2015-04-10 17:52:01 +02:00
|
|
|
#include "log.h"
|
2015-04-08 20:08:12 +02:00
|
|
|
#include "sock.h" //Tube
|
2015-03-31 12:46:58 +02:00
|
|
|
/**
|
|
|
|
* @file
|
|
|
|
* @brief Implementation of Vendor Specific Payload
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Default handler for Vendor Specific Payload message elements.
|
|
|
|
*/
|
2015-04-12 23:28:55 +02:00
|
|
|
int cw_in_vendor_specific_payload(struct conn *conn,struct cw_action_in * a,uint8_t *data,int len,struct sockaddr *from)
|
2015-03-31 12:46:58 +02:00
|
|
|
{
|
2015-04-05 02:07:59 +02:00
|
|
|
cw_action_in_t as,*af;
|
2015-03-31 12:46:58 +02:00
|
|
|
as = *a;
|
|
|
|
|
|
|
|
as.vendor_id = cw_get_dword(data);
|
|
|
|
as.elem_id = cw_get_word(data+4);
|
|
|
|
|
2015-04-05 02:07:59 +02:00
|
|
|
af = cw_actionlist_in_get(conn->actions->in,&as);
|
2015-03-31 12:46:58 +02:00
|
|
|
|
2015-04-11 19:00:51 +02:00
|
|
|
//cw_dbg(DBG_ELEM,"From might be: %s\n",sock_addr2str(&conn->addr));
|
2015-04-08 20:08:12 +02:00
|
|
|
|
2015-03-31 12:46:58 +02:00
|
|
|
if (!af) {
|
2015-04-13 11:00:46 +02:00
|
|
|
cw_dbg(DBG_WARN,"Can't handle Vendor Specific Payload %s/%d, in msg %d (%s) in %s state.",
|
2015-03-31 20:39:50 +02:00
|
|
|
cw_strvendor(as.vendor_id),
|
|
|
|
as.elem_id,as.msg_id,cw_strmsg(as.msg_id),cw_strstate(as.capwap_state));
|
2015-03-31 12:46:58 +02:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (af->start) {
|
2015-04-12 23:28:55 +02:00
|
|
|
af->start(conn,af,data+6,len-6,from);
|
2015-03-31 12:46:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|