2013-05-01 14:52:55 +02:00
|
|
|
#ifndef __AC_SESSION_HEADER__
|
|
|
|
#define __AC_SESSION_HEADER__
|
|
|
|
|
|
|
|
#include "capwap_dtls.h"
|
2013-11-02 19:11:01 +01:00
|
|
|
#include "capwap_event.h"
|
|
|
|
#include "capwap_lock.h"
|
2013-07-25 23:12:43 +02:00
|
|
|
#include "ac_soap.h"
|
2013-05-01 14:52:55 +02:00
|
|
|
|
|
|
|
/* AC packet */
|
|
|
|
struct ac_packet {
|
|
|
|
int plainbuffer;
|
|
|
|
char buffer[0];
|
|
|
|
};
|
|
|
|
|
|
|
|
/* */
|
|
|
|
struct ac_session_control {
|
|
|
|
struct sockaddr_storage localaddress;
|
|
|
|
unsigned short count;
|
|
|
|
};
|
|
|
|
|
2013-11-04 18:02:10 +01:00
|
|
|
/* */
|
|
|
|
#define AC_SESSION_ACTION_RESET_WTP 1
|
|
|
|
|
2013-07-07 15:36:53 +02:00
|
|
|
/* */
|
|
|
|
struct ac_session_action {
|
|
|
|
long action;
|
|
|
|
long param;
|
|
|
|
long length;
|
|
|
|
char data[0];
|
|
|
|
};
|
|
|
|
|
2013-05-01 14:52:55 +02:00
|
|
|
/* AC sessions */
|
|
|
|
struct ac_session_t {
|
2013-11-02 19:11:01 +01:00
|
|
|
struct capwap_list_item* itemlist; /* My itemlist into g_ac.sessions */
|
2013-05-01 14:52:55 +02:00
|
|
|
struct ac_state dfa;
|
2013-06-18 22:38:56 +02:00
|
|
|
|
2013-07-25 23:12:43 +02:00
|
|
|
/* Soap */
|
|
|
|
struct ac_http_soap_request* soaprequest;
|
|
|
|
|
|
|
|
/* */
|
2013-07-27 22:45:28 +02:00
|
|
|
char* wtpid;
|
2013-11-03 21:52:14 +01:00
|
|
|
int running;
|
|
|
|
int waitresponse;
|
2013-06-18 22:38:56 +02:00
|
|
|
|
2013-05-01 14:52:55 +02:00
|
|
|
unsigned long count;
|
|
|
|
struct sockaddr_storage acctrladdress;
|
|
|
|
struct sockaddr_storage acdataaddress;
|
|
|
|
struct sockaddr_storage wtpctrladdress;
|
|
|
|
struct sockaddr_storage wtpdataaddress;
|
|
|
|
struct capwap_socket ctrlsocket;
|
|
|
|
struct capwap_socket datasocket;
|
|
|
|
struct timeout_control timeout;
|
|
|
|
|
|
|
|
struct capwap_sessionid_element sessionid;
|
|
|
|
unsigned short binding;
|
|
|
|
|
2013-09-16 22:10:37 +02:00
|
|
|
int teardown;
|
2013-05-01 14:52:55 +02:00
|
|
|
struct capwap_dtls ctrldtls;
|
|
|
|
struct capwap_dtls datadtls;
|
|
|
|
|
|
|
|
pthread_t threadid;
|
2013-07-07 15:36:53 +02:00
|
|
|
|
2013-05-01 14:52:55 +02:00
|
|
|
capwap_event_t waitpacket;
|
2013-07-25 23:12:43 +02:00
|
|
|
capwap_lock_t sessionlock;
|
2013-07-07 15:36:53 +02:00
|
|
|
struct capwap_list* actionsession;
|
2013-05-01 14:52:55 +02:00
|
|
|
struct capwap_list* controlpackets;
|
|
|
|
struct capwap_list* datapackets;
|
|
|
|
|
|
|
|
unsigned char localseqnumber;
|
|
|
|
unsigned char remoteseqnumber;
|
|
|
|
unsigned short mtu;
|
|
|
|
unsigned short fragmentid;
|
2013-05-27 21:33:23 +02:00
|
|
|
struct capwap_packet_rxmng* rxmngctrlpacket;
|
|
|
|
struct capwap_packet_rxmng* rxmngdatapacket;
|
|
|
|
struct capwap_list* requestfragmentpacket;
|
|
|
|
struct capwap_list* responsefragmentpacket;
|
2013-05-01 14:52:55 +02:00
|
|
|
unsigned char lastrecvpackethash[16];
|
|
|
|
|
|
|
|
unsigned long state;
|
|
|
|
};
|
|
|
|
|
2013-07-25 23:12:43 +02:00
|
|
|
/* */
|
2013-05-01 14:52:55 +02:00
|
|
|
void* ac_session_thread(void* param);
|
2013-11-03 21:52:14 +01:00
|
|
|
void ac_session_send_action(struct ac_session_t* session, long action, long param, void* data, long length);
|
|
|
|
|
|
|
|
/* */
|
|
|
|
int ac_has_sessionid(struct capwap_sessionid_element* sessionid);
|
2013-11-02 20:02:00 +01:00
|
|
|
struct ac_session_t* ac_search_session_from_sessionid(struct capwap_sessionid_element* sessionid);
|
2013-11-03 21:52:14 +01:00
|
|
|
int ac_has_wtpid(const char* wtpid);
|
|
|
|
struct ac_session_t* ac_search_session_from_wtpid(const char* wtpid);
|
|
|
|
|
|
|
|
/* */
|
|
|
|
char* ac_get_printable_wtpid(struct capwap_wtpboarddata_element* wtpboarddata);
|
|
|
|
|
|
|
|
/* */
|
2013-11-10 22:11:56 +01:00
|
|
|
void ac_session_reset(struct ac_session_t* session, struct capwap_imageidentifier_element* startupimage);
|
2013-11-05 17:54:29 +01:00
|
|
|
void ac_session_teardown(struct ac_session_t* session);
|
2013-11-03 21:52:14 +01:00
|
|
|
void ac_session_close(struct ac_session_t* session);
|
2013-11-02 19:11:01 +01:00
|
|
|
void ac_session_release_reference(struct ac_session_t* session);
|
2013-07-07 15:36:53 +02:00
|
|
|
|
2013-07-25 23:12:43 +02:00
|
|
|
/* */
|
2013-05-01 14:52:55 +02:00
|
|
|
void ac_dfa_change_state(struct ac_session_t* session, int state);
|
|
|
|
|
2013-07-25 23:12:43 +02:00
|
|
|
/* */
|
2013-05-01 14:52:55 +02:00
|
|
|
void ac_get_control_information(struct capwap_list* controllist);
|
|
|
|
|
2013-07-25 23:12:43 +02:00
|
|
|
/* */
|
2013-05-01 14:52:55 +02:00
|
|
|
void ac_free_reference_last_request(struct ac_session_t* session);
|
|
|
|
void ac_free_reference_last_response(struct ac_session_t* session);
|
|
|
|
|
2013-11-02 19:11:01 +01:00
|
|
|
/* */
|
|
|
|
int ac_session_msgqueue_init(void);
|
|
|
|
void ac_session_msgqueue_free(void);
|
|
|
|
void ac_session_msgqueue_notify_closethread(pthread_t threadid);
|
|
|
|
|
2013-05-01 14:52:55 +02:00
|
|
|
/* */
|
|
|
|
int ac_bio_send(struct capwap_dtls* dtls, char* buffer, int length, void* param);
|
2013-11-05 17:54:29 +01:00
|
|
|
int ac_dtls_setup(struct ac_session_t* session);
|
|
|
|
|
|
|
|
/* */
|
|
|
|
void ac_dfa_state_join(struct ac_session_t* session, struct capwap_parsed_packet* packet);
|
|
|
|
void ac_dfa_state_postjoin(struct ac_session_t* session, struct capwap_parsed_packet* packet);
|
|
|
|
void ac_dfa_state_configure(struct ac_session_t* session, struct capwap_parsed_packet* packet);
|
|
|
|
void ac_dfa_state_datacheck(struct ac_session_t* session, struct capwap_parsed_packet* packet);
|
|
|
|
void ac_dfa_state_datacheck_to_run(struct ac_session_t* session, struct capwap_parsed_packet* packet);
|
|
|
|
void ac_dfa_state_imagedata(struct ac_session_t* session, struct capwap_parsed_packet* packet);
|
|
|
|
void ac_dfa_state_run(struct ac_session_t* session, struct capwap_parsed_packet* packet);
|
|
|
|
void ac_dfa_state_reset(struct ac_session_t* session, struct capwap_parsed_packet* packet);
|
|
|
|
void ac_dfa_state_teardown(struct ac_session_t* session);
|
2013-05-01 14:52:55 +02:00
|
|
|
|
2013-07-27 22:45:28 +02:00
|
|
|
/* Soap function */
|
|
|
|
struct ac_soap_response* ac_session_send_soap_request(struct ac_session_t* session, char* method, int numparam, ...);
|
2013-09-16 22:11:32 +02:00
|
|
|
#define ac_soap_authorizewtpsession(s, wtpid) ac_session_send_soap_request((s), "authorizeWTPSession", 1, "xs:string", "idwtp", wtpid)
|
|
|
|
#define ac_soap_joinwtpsession(s, wtpid, joinparam) ac_session_send_soap_request((s), "joinWTPSession", 2, "xs:string", "idwtp", wtpid, "xs:base64Binary", "join", joinparam)
|
|
|
|
#define ac_soap_configurestatuswtpsession(s, wtpid, confstatusparam) ac_session_send_soap_request((s), "configureStatusWTPSession", 2, "xs:string", "idwtp", wtpid, "xs:base64Binary", "confstatus", confstatusparam)
|
|
|
|
#define ac_soap_changestatewtpsession(s, wtpid, changestateparam) ac_session_send_soap_request((s), "changeStateWTPSession", 2, "xs:string", "idwtp", wtpid, "xs:base64Binary", "changestate", changestateparam)
|
|
|
|
#define ac_soap_runningwtpsession(s, wtpid) ac_session_send_soap_request((s), "runningWTPSession", 1, "xs:string", "idwtp", wtpid)
|
|
|
|
#define ac_soap_teardownwtpsession(s, wtpid) ac_session_send_soap_request((s), "teardownWTPSession", 1, "xs:string", "idwtp", wtpid)
|
|
|
|
#define ac_soap_checkwtpsession(s, wtpid) ac_session_send_soap_request((s), "checkWTPSession", 1, "xs:string", "idwtp", wtpid)
|
2013-07-27 22:45:28 +02:00
|
|
|
|
2013-05-01 14:52:55 +02:00
|
|
|
#endif /* __AC_SESSION_HEADER__ */
|