In case of problems with the backend, at receipt of the WTP Requests Message is
correctly sent the result error failer.
This commit is contained in:
parent
f81afd5e8c
commit
177e997d47
@ -137,7 +137,7 @@ static struct ac_soap_response* ac_dfa_state_configure_parsing_request(struct ac
|
|||||||
ac_base64_string_encode(jsonmessage, base64confstatus);
|
ac_base64_string_encode(jsonmessage, base64confstatus);
|
||||||
|
|
||||||
/* Send message */
|
/* Send message */
|
||||||
response = ac_soap_configurestatus(session, session->wtpid, base64confstatus);
|
response = ac_soap_configurestatusevent(session, session->wtpid, base64confstatus);
|
||||||
|
|
||||||
/* Free JSON */
|
/* Free JSON */
|
||||||
json_object_put(jsonparam);
|
json_object_put(jsonparam);
|
||||||
@ -514,7 +514,6 @@ static uint32_t ac_dfa_state_configure_create_response(struct ac_session_t* sess
|
|||||||
|
|
||||||
/* */
|
/* */
|
||||||
int ac_dfa_state_configure(struct ac_session_t* session, struct capwap_parsed_packet* packet) {
|
int ac_dfa_state_configure(struct ac_session_t* session, struct capwap_parsed_packet* packet) {
|
||||||
uint32_t result;
|
|
||||||
struct capwap_header_data capwapheader;
|
struct capwap_header_data capwapheader;
|
||||||
struct capwap_packet_txmng* txmngpacket;
|
struct capwap_packet_txmng* txmngpacket;
|
||||||
int status = AC_DFA_ACCEPT_PACKET;
|
int status = AC_DFA_ACCEPT_PACKET;
|
||||||
@ -522,24 +521,30 @@ int ac_dfa_state_configure(struct ac_session_t* session, struct capwap_parsed_pa
|
|||||||
ASSERT(session != NULL);
|
ASSERT(session != NULL);
|
||||||
|
|
||||||
if (packet) {
|
if (packet) {
|
||||||
/* Parsing request */
|
struct ac_soap_response* response;
|
||||||
struct ac_soap_response* response = ac_dfa_state_configure_parsing_request(session, packet);
|
uint32_t result = CAPWAP_RESULTCODE_FAILURE;
|
||||||
if (response) {
|
|
||||||
/* Create response */
|
/* Create response */
|
||||||
capwap_header_init(&capwapheader, CAPWAP_RADIOID_NONE, GET_WBID_HEADER(packet->rxmngpacket->header));
|
capwap_header_init(&capwapheader, CAPWAP_RADIOID_NONE, GET_WBID_HEADER(packet->rxmngpacket->header));
|
||||||
txmngpacket = capwap_packet_txmng_create_ctrl_message(&capwapheader, CAPWAP_CONFIGURATION_STATUS_RESPONSE, packet->rxmngpacket->ctrlmsg.seq, session->mtu);
|
txmngpacket = capwap_packet_txmng_create_ctrl_message(&capwapheader, CAPWAP_CONFIGURATION_STATUS_RESPONSE, packet->rxmngpacket->ctrlmsg.seq, session->mtu);
|
||||||
|
|
||||||
/* Add message element */
|
/* Parsing request and add message element for respone message */
|
||||||
|
response = ac_dfa_state_configure_parsing_request(session, packet);
|
||||||
|
if (response) {
|
||||||
result = ac_dfa_state_configure_create_response(session, packet, response, txmngpacket);
|
result = ac_dfa_state_configure_create_response(session, packet, response, txmngpacket);
|
||||||
if (!CAPWAP_RESULTCODE_OK(result)) {
|
ac_soapclient_free_response(response);
|
||||||
struct capwap_resultcode_element resultcode = { .code = result };
|
|
||||||
|
|
||||||
/* Add error result code */
|
|
||||||
capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_RESULTCODE, &resultcode);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* With error add result code message element */
|
||||||
|
if (!CAPWAP_RESULTCODE_OK(result)) {
|
||||||
|
struct capwap_resultcode_element resultcode = { .code = result };
|
||||||
|
capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_RESULTCODE, &resultcode);
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
ac_soapclient_free_response(response);
|
if (result == CAPWAP_RESULTCODE_FAILURE) {
|
||||||
|
/* TODO: Add AC List Message Elements */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Configure response complete, get fragment packets */
|
/* Configure response complete, get fragment packets */
|
||||||
ac_free_reference_last_response(session);
|
ac_free_reference_last_response(session);
|
||||||
@ -569,10 +574,6 @@ int ac_dfa_state_configure(struct ac_session_t* session, struct capwap_parsed_pa
|
|||||||
ac_dfa_change_state(session, CAPWAP_CONFIGURE_TO_DTLS_TEARDOWN_STATE);
|
ac_dfa_change_state(session, CAPWAP_CONFIGURE_TO_DTLS_TEARDOWN_STATE);
|
||||||
status = AC_DFA_NO_PACKET;
|
status = AC_DFA_NO_PACKET;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
ac_dfa_change_state(session, CAPWAP_CONFIGURE_TO_DTLS_TEARDOWN_STATE);
|
|
||||||
status = AC_DFA_NO_PACKET;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
/* Configure timeout */
|
/* Configure timeout */
|
||||||
ac_dfa_change_state(session, CAPWAP_CONFIGURE_TO_DTLS_TEARDOWN_STATE);
|
ac_dfa_change_state(session, CAPWAP_CONFIGURE_TO_DTLS_TEARDOWN_STATE);
|
||||||
|
@ -84,7 +84,6 @@ static struct ac_soap_response* ac_dfa_state_datacheck_parsing_request(struct ac
|
|||||||
capwap_free(base64confstatus);
|
capwap_free(base64confstatus);
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
@ -136,7 +135,6 @@ static uint32_t ac_dfa_state_datacheck_create_response(struct ac_session_t* sess
|
|||||||
|
|
||||||
/* */
|
/* */
|
||||||
int ac_dfa_state_datacheck(struct ac_session_t* session, struct capwap_parsed_packet* packet) {
|
int ac_dfa_state_datacheck(struct ac_session_t* session, struct capwap_parsed_packet* packet) {
|
||||||
uint32_t result;
|
|
||||||
struct capwap_header_data capwapheader;
|
struct capwap_header_data capwapheader;
|
||||||
struct capwap_packet_txmng* txmngpacket;
|
struct capwap_packet_txmng* txmngpacket;
|
||||||
int status = AC_DFA_ACCEPT_PACKET;
|
int status = AC_DFA_ACCEPT_PACKET;
|
||||||
@ -144,24 +142,30 @@ int ac_dfa_state_datacheck(struct ac_session_t* session, struct capwap_parsed_pa
|
|||||||
ASSERT(session != NULL);
|
ASSERT(session != NULL);
|
||||||
|
|
||||||
if (packet) {
|
if (packet) {
|
||||||
/* Parsing request */
|
struct ac_soap_response* response;
|
||||||
struct ac_soap_response* response = ac_dfa_state_datacheck_parsing_request(session, packet);
|
uint32_t result = CAPWAP_RESULTCODE_FAILURE;
|
||||||
if (response) {
|
|
||||||
/* Create response */
|
/* Create response */
|
||||||
capwap_header_init(&capwapheader, CAPWAP_RADIOID_NONE, GET_WBID_HEADER(packet->rxmngpacket->header));
|
capwap_header_init(&capwapheader, CAPWAP_RADIOID_NONE, GET_WBID_HEADER(packet->rxmngpacket->header));
|
||||||
txmngpacket = capwap_packet_txmng_create_ctrl_message(&capwapheader, CAPWAP_CHANGE_STATE_EVENT_RESPONSE, packet->rxmngpacket->ctrlmsg.seq, session->mtu);
|
txmngpacket = capwap_packet_txmng_create_ctrl_message(&capwapheader, CAPWAP_CHANGE_STATE_EVENT_RESPONSE, packet->rxmngpacket->ctrlmsg.seq, session->mtu);
|
||||||
|
|
||||||
/* Add message element */
|
/* Parsing request and add message element for respone message */
|
||||||
|
response = ac_dfa_state_datacheck_parsing_request(session, packet);
|
||||||
|
if (response) {
|
||||||
result = ac_dfa_state_datacheck_create_response(session, packet, response, txmngpacket);
|
result = ac_dfa_state_datacheck_create_response(session, packet, response, txmngpacket);
|
||||||
if (!CAPWAP_RESULTCODE_OK(result)) {
|
ac_soapclient_free_response(response);
|
||||||
struct capwap_resultcode_element resultcode = { .code = result };
|
|
||||||
|
|
||||||
/* Add error result code */
|
|
||||||
capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_RESULTCODE, &resultcode);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* With error add result code message element */
|
||||||
|
if (!CAPWAP_RESULTCODE_OK(result)) {
|
||||||
|
struct capwap_resultcode_element resultcode = { .code = result };
|
||||||
|
capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_RESULTCODE, &resultcode);
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
ac_soapclient_free_response(response);
|
if (result == CAPWAP_RESULTCODE_FAILURE) {
|
||||||
|
/* TODO: Add AC List Message Elements */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Change event response complete, get fragment packets */
|
/* Change event response complete, get fragment packets */
|
||||||
ac_free_reference_last_response(session);
|
ac_free_reference_last_response(session);
|
||||||
@ -191,10 +195,6 @@ int ac_dfa_state_datacheck(struct ac_session_t* session, struct capwap_parsed_pa
|
|||||||
ac_dfa_change_state(session, CAPWAP_DATA_CHECK_TO_DTLS_TEARDOWN_STATE);
|
ac_dfa_change_state(session, CAPWAP_DATA_CHECK_TO_DTLS_TEARDOWN_STATE);
|
||||||
status = AC_DFA_NO_PACKET;
|
status = AC_DFA_NO_PACKET;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
ac_dfa_change_state(session, CAPWAP_DATA_CHECK_TO_DTLS_TEARDOWN_STATE);
|
|
||||||
status = AC_DFA_NO_PACKET;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
/* Configure timeout */
|
/* Configure timeout */
|
||||||
ac_dfa_change_state(session, CAPWAP_DATA_CHECK_TO_DTLS_TEARDOWN_STATE);
|
ac_dfa_change_state(session, CAPWAP_DATA_CHECK_TO_DTLS_TEARDOWN_STATE);
|
||||||
@ -246,8 +246,8 @@ int ac_dfa_state_datacheck_to_run(struct ac_session_t* session, struct capwap_pa
|
|||||||
capwap_list_free(txfragpacket);
|
capwap_list_free(txfragpacket);
|
||||||
capwap_packet_txmng_free(txmngpacket);
|
capwap_packet_txmng_free(txmngpacket);
|
||||||
|
|
||||||
if (result) {
|
|
||||||
/* Capwap handshake complete, notify event to backend */
|
/* Capwap handshake complete, notify event to backend */
|
||||||
|
if (result) {
|
||||||
result = 0;
|
result = 0;
|
||||||
response = ac_soap_runningevent(session, session->wtpid);
|
response = ac_soap_runningevent(session, session->wtpid);
|
||||||
if (response) {
|
if (response) {
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#include "capwap_array.h"
|
#include "capwap_array.h"
|
||||||
#include "ac_session.h"
|
#include "ac_session.h"
|
||||||
#include "ac_backend.h"
|
#include "ac_backend.h"
|
||||||
|
#include <json/json.h>
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
static int ac_dfa_state_join_check_authorizejoin(struct ac_session_t* session, struct ac_soap_response* response) {
|
static int ac_dfa_state_join_check_authorizejoin(struct ac_session_t* session, struct ac_soap_response* response) {
|
||||||
@ -15,81 +16,85 @@ static int ac_dfa_state_join_check_authorizejoin(struct ac_session_t* session, s
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
int ac_dfa_state_join(struct ac_session_t* session, struct capwap_parsed_packet* packet) {
|
static struct ac_soap_response* ac_dfa_state_join_parsing_request(struct ac_session_t* session, struct capwap_parsed_packet* packet) {
|
||||||
int i;
|
const char* jsonmessage;
|
||||||
struct capwap_header_data capwapheader;
|
char* base64confstatus;
|
||||||
struct capwap_packet_txmng* txmngpacket;
|
struct json_object* jsonparam;
|
||||||
struct capwap_sessionid_element* sessionid;
|
|
||||||
struct capwap_wtpboarddata_element* wtpboarddata;
|
|
||||||
int status = AC_DFA_ACCEPT_PACKET;
|
|
||||||
struct capwap_resultcode_element resultcode = { .code = CAPWAP_RESULTCODE_FAILURE };
|
|
||||||
|
|
||||||
ASSERT(session != NULL);
|
|
||||||
|
|
||||||
if (packet) {
|
|
||||||
unsigned short binding;
|
|
||||||
|
|
||||||
/* Check binding */
|
|
||||||
binding = GET_WBID_HEADER(packet->rxmngpacket->header);
|
|
||||||
if (ac_valid_binding(binding)) {
|
|
||||||
if (packet->rxmngpacket->ctrlmsg.type == CAPWAP_JOIN_REQUEST) {
|
|
||||||
/* Get sessionid and verify unique id */
|
|
||||||
sessionid = (struct capwap_sessionid_element*)capwap_get_message_element_data(packet, CAPWAP_ELEMENT_SESSIONID);
|
|
||||||
if (!ac_has_sessionid(sessionid)) {
|
|
||||||
char* wtpid;
|
|
||||||
|
|
||||||
/* Checking macaddress for detect if WTP already connected */
|
|
||||||
wtpboarddata = (struct capwap_wtpboarddata_element*)capwap_get_message_element_data(packet, CAPWAP_ELEMENT_WTPBOARDDATA);
|
|
||||||
|
|
||||||
/* Get printable WTPID */
|
|
||||||
wtpid = ac_get_printable_wtpid(wtpboarddata);
|
|
||||||
if (wtpid && !ac_has_wtpid(wtpid)) {
|
|
||||||
struct ac_soap_response* response;
|
struct ac_soap_response* response;
|
||||||
|
|
||||||
/* Request authorization of Backend for complete join */
|
/* Create SOAP request with JSON param
|
||||||
response = ac_soap_authorizejoin(session, wtpid);
|
{
|
||||||
if (response) {
|
|
||||||
resultcode.code = ac_dfa_state_join_check_authorizejoin(session, response);
|
|
||||||
ac_soapclient_free_response(response);
|
|
||||||
} else {
|
|
||||||
resultcode.code = CAPWAP_RESULTCODE_JOIN_FAILURE_UNKNOWN_SOURCE;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
resultcode.code = CAPWAP_RESULTCODE_JOIN_FAILURE_UNKNOWN_SOURCE;
|
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
/* */
|
/* */
|
||||||
if (CAPWAP_RESULTCODE_OK(resultcode.code)) {
|
jsonparam = json_object_new_object();
|
||||||
session->wtpid = wtpid;
|
|
||||||
memcpy(&session->sessionid, sessionid, sizeof(struct capwap_sessionid_element));
|
/* Get JSON param and convert base64 */
|
||||||
session->binding = binding;
|
jsonmessage = json_object_to_json_string(jsonparam);
|
||||||
} else {
|
base64confstatus = capwap_alloc(AC_BASE64_ENCODE_LENGTH(strlen(jsonmessage)));
|
||||||
capwap_free(wtpid);
|
if (!base64confstatus) {
|
||||||
}
|
capwap_outofmemory();
|
||||||
} else {
|
|
||||||
resultcode.code = CAPWAP_RESULTCODE_JOIN_FAILURE_ID_ALREADY_IN_USE;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
resultcode.code = CAPWAP_RESULTCODE_MSG_UNEXPECTED_INVALID_CURRENT_STATE;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
resultcode.code = CAPWAP_RESULTCODE_JOIN_FAILURE_BINDING_NOT_SUPPORTED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create response */
|
ac_base64_string_encode(jsonmessage, base64confstatus);
|
||||||
capwap_header_init(&capwapheader, CAPWAP_RADIOID_NONE, binding);
|
|
||||||
txmngpacket = capwap_packet_txmng_create_ctrl_message(&capwapheader, CAPWAP_JOIN_RESPONSE, packet->rxmngpacket->ctrlmsg.seq, session->mtu);
|
|
||||||
|
|
||||||
/* Add message element */
|
/* Send message */
|
||||||
capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_RESULTCODE, &resultcode);
|
response = ac_soap_joinevent(session, session->wtpid, base64confstatus);
|
||||||
|
|
||||||
/* Check is valid packet after parsing request */
|
/* Free JSON */
|
||||||
if (CAPWAP_RESULTCODE_OK(resultcode.code)) {
|
json_object_put(jsonparam);
|
||||||
|
capwap_free(base64confstatus);
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* */
|
||||||
|
static uint32_t ac_dfa_state_join_create_response(struct ac_session_t* session, struct capwap_parsed_packet* packet, struct ac_soap_response* response, struct capwap_packet_txmng* txmngpacket) {
|
||||||
|
int i;
|
||||||
|
int length;
|
||||||
|
char* json;
|
||||||
|
xmlChar* xmlResult;
|
||||||
|
struct json_object* jsonroot;
|
||||||
struct capwap_list* controllist;
|
struct capwap_list* controllist;
|
||||||
struct capwap_list_item* item;
|
struct capwap_list_item* item;
|
||||||
|
unsigned short binding = GET_WBID_HEADER(packet->rxmngpacket->header);
|
||||||
|
|
||||||
|
if ((response->responsecode != HTTP_RESULT_OK) || !response->xmlResponseReturn) {
|
||||||
|
return CAPWAP_RESULTCODE_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Receive SOAP response with JSON result
|
||||||
|
{
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Decode base64 result */
|
||||||
|
xmlResult = xmlNodeGetContent(response->xmlResponseReturn);
|
||||||
|
if (!xmlResult) {
|
||||||
|
return CAPWAP_RESULTCODE_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
length = xmlStrlen(xmlResult);
|
||||||
|
if (!length) {
|
||||||
|
return CAPWAP_RESULTCODE_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
json = (char*)capwap_alloc(AC_BASE64_DECODE_LENGTH(length));
|
||||||
|
ac_base64_string_decode((const char*)xmlResult, json);
|
||||||
|
|
||||||
|
xmlFree(xmlResult);
|
||||||
|
|
||||||
|
/* Parsing JSON result */
|
||||||
|
jsonroot = json_tokener_parse(json);
|
||||||
|
capwap_free(json);
|
||||||
|
|
||||||
|
/* Add message elements response, every local value can be overwrite from backend server */
|
||||||
|
|
||||||
/* Update statistics */
|
/* Update statistics */
|
||||||
ac_update_statistics();
|
ac_update_statistics();
|
||||||
|
|
||||||
|
/* */
|
||||||
capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_ACDESCRIPTION, &g_ac.descriptor);
|
capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_ACDESCRIPTION, &g_ac.descriptor);
|
||||||
capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_ACNAME, &g_ac.acname);
|
capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_ACNAME, &g_ac.acname);
|
||||||
|
|
||||||
@ -148,8 +153,90 @@ int ac_dfa_state_join(struct ac_session_t* session, struct capwap_parsed_packet*
|
|||||||
/* CAPWAP_CREATE_IMAGEIDENTIFIER_ELEMENT */ /* TODO */
|
/* CAPWAP_CREATE_IMAGEIDENTIFIER_ELEMENT */ /* TODO */
|
||||||
/* CAPWAP_CREATE_MAXIMUMMESSAGELENGTH_ELEMENT */ /* TODO */
|
/* CAPWAP_CREATE_MAXIMUMMESSAGELENGTH_ELEMENT */ /* TODO */
|
||||||
/* CAPWAP_CREATE_VENDORSPECIFICPAYLOAD_ELEMENT */ /* TODO */
|
/* CAPWAP_CREATE_VENDORSPECIFICPAYLOAD_ELEMENT */ /* TODO */
|
||||||
|
|
||||||
|
if (jsonroot) {
|
||||||
|
json_object_put(jsonroot);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return CAPWAP_RESULTCODE_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* */
|
||||||
|
int ac_dfa_state_join(struct ac_session_t* session, struct capwap_parsed_packet* packet) {
|
||||||
|
struct ac_soap_response* response;
|
||||||
|
struct capwap_header_data capwapheader;
|
||||||
|
struct capwap_packet_txmng* txmngpacket;
|
||||||
|
struct capwap_sessionid_element* sessionid;
|
||||||
|
struct capwap_wtpboarddata_element* wtpboarddata;
|
||||||
|
int status = AC_DFA_ACCEPT_PACKET;
|
||||||
|
struct capwap_resultcode_element resultcode = { .code = CAPWAP_RESULTCODE_FAILURE };
|
||||||
|
|
||||||
|
ASSERT(session != NULL);
|
||||||
|
|
||||||
|
if (packet) {
|
||||||
|
unsigned short binding;
|
||||||
|
|
||||||
|
/* Check binding */
|
||||||
|
binding = GET_WBID_HEADER(packet->rxmngpacket->header);
|
||||||
|
if (ac_valid_binding(binding)) {
|
||||||
|
if (packet->rxmngpacket->ctrlmsg.type == CAPWAP_JOIN_REQUEST) {
|
||||||
|
/* Get sessionid and verify unique id */
|
||||||
|
sessionid = (struct capwap_sessionid_element*)capwap_get_message_element_data(packet, CAPWAP_ELEMENT_SESSIONID);
|
||||||
|
if (!ac_has_sessionid(sessionid)) {
|
||||||
|
char* wtpid;
|
||||||
|
|
||||||
|
/* Checking macaddress for detect if WTP already connected */
|
||||||
|
wtpboarddata = (struct capwap_wtpboarddata_element*)capwap_get_message_element_data(packet, CAPWAP_ELEMENT_WTPBOARDDATA);
|
||||||
|
|
||||||
|
/* Get printable WTPID */
|
||||||
|
wtpid = ac_get_printable_wtpid(wtpboarddata);
|
||||||
|
if (wtpid && !ac_has_wtpid(wtpid)) {
|
||||||
|
/* Request authorization of Backend for complete join */
|
||||||
|
response = ac_soap_authorizejoin(session, wtpid);
|
||||||
|
if (response) {
|
||||||
|
resultcode.code = ac_dfa_state_join_check_authorizejoin(session, response);
|
||||||
|
ac_soapclient_free_response(response);
|
||||||
|
} else {
|
||||||
|
resultcode.code = CAPWAP_RESULTCODE_JOIN_FAILURE_UNKNOWN_SOURCE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
resultcode.code = CAPWAP_RESULTCODE_JOIN_FAILURE_UNKNOWN_SOURCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* */
|
||||||
|
if (CAPWAP_RESULTCODE_OK(resultcode.code)) {
|
||||||
|
session->wtpid = wtpid;
|
||||||
|
memcpy(&session->sessionid, sessionid, sizeof(struct capwap_sessionid_element));
|
||||||
|
session->binding = binding;
|
||||||
|
} else {
|
||||||
|
capwap_free(wtpid);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
resultcode.code = CAPWAP_RESULTCODE_JOIN_FAILURE_ID_ALREADY_IN_USE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
resultcode.code = CAPWAP_RESULTCODE_MSG_UNEXPECTED_INVALID_CURRENT_STATE;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
resultcode.code = CAPWAP_RESULTCODE_JOIN_FAILURE_BINDING_NOT_SUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create response */
|
||||||
|
capwap_header_init(&capwapheader, CAPWAP_RADIOID_NONE, binding);
|
||||||
|
txmngpacket = capwap_packet_txmng_create_ctrl_message(&capwapheader, CAPWAP_JOIN_RESPONSE, packet->rxmngpacket->ctrlmsg.seq, session->mtu);
|
||||||
|
|
||||||
|
/* */
|
||||||
|
if (CAPWAP_RESULTCODE_OK(resultcode.code)) {
|
||||||
|
response = ac_dfa_state_join_parsing_request(session, packet);
|
||||||
|
if (response) {
|
||||||
|
resultcode.code = ac_dfa_state_join_create_response(session, packet, response, txmngpacket);
|
||||||
|
ac_soapclient_free_response(response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add always result code message element */
|
||||||
|
capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_RESULTCODE, &resultcode);
|
||||||
|
|
||||||
/* Join response complete, get fragment packets */
|
/* Join response complete, get fragment packets */
|
||||||
ac_free_reference_last_response(session);
|
ac_free_reference_last_response(session);
|
||||||
capwap_packet_txmng_get_fragment_packets(txmngpacket, session->responsefragmentpacket, session->fragmentid);
|
capwap_packet_txmng_get_fragment_packets(txmngpacket, session->responsefragmentpacket, session->fragmentid);
|
||||||
|
@ -138,8 +138,9 @@ int ac_dfa_state_dead(struct ac_session_t* session, struct capwap_parsed_packet*
|
|||||||
/* Soap function */
|
/* Soap function */
|
||||||
struct ac_soap_response* ac_session_send_soap_request(struct ac_session_t* session, char* method, int numparam, ...);
|
struct ac_soap_response* ac_session_send_soap_request(struct ac_session_t* session, char* method, int numparam, ...);
|
||||||
#define ac_soap_authorizejoin(s, wtpid) ac_session_send_soap_request((s), "authorizeJoin", 1, "xs:string", "wtpid", wtpid)
|
#define ac_soap_authorizejoin(s, wtpid) ac_session_send_soap_request((s), "authorizeJoin", 1, "xs:string", "wtpid", wtpid)
|
||||||
#define ac_soap_configurestatus(s, wtpid, confstatus) ac_session_send_soap_request((s), "configureStatus", 2, "xs:string", "wtpid", wtpid, "xs:base64Binary", "confstatus", confstatus)
|
#define ac_soap_joinevent(s, wtpid, joinparam) ac_session_send_soap_request((s), "joinEvent", 2, "xs:string", "wtpid", wtpid, "xs:base64Binary", "join", joinparam)
|
||||||
#define ac_soap_changestateevent(s, wtpid, changestate) ac_session_send_soap_request((s), "changeStateEvent", 2, "xs:string", "wtpid", wtpid, "xs:base64Binary", "changestate", changestate)
|
#define ac_soap_configurestatusevent(s, wtpid, confstatusparam) ac_session_send_soap_request((s), "configureStatusEvent", 2, "xs:string", "wtpid", wtpid, "xs:base64Binary", "confstatus", confstatusparam)
|
||||||
|
#define ac_soap_changestateevent(s, wtpid, changestateparam) ac_session_send_soap_request((s), "changeStateEvent", 2, "xs:string", "wtpid", wtpid, "xs:base64Binary", "changestate", changestateparam)
|
||||||
#define ac_soap_runningevent(s, wtpid) ac_session_send_soap_request((s), "runningEvent", 1, "xs:string", "wtpid", wtpid)
|
#define ac_soap_runningevent(s, wtpid) ac_session_send_soap_request((s), "runningEvent", 1, "xs:string", "wtpid", wtpid)
|
||||||
|
|
||||||
#endif /* __AC_SESSION_HEADER__ */
|
#endif /* __AC_SESSION_HEADER__ */
|
||||||
|
@ -26,12 +26,17 @@
|
|||||||
<wsdl:message name="authorizeJoinResponse"/>
|
<wsdl:message name="authorizeJoinResponse"/>
|
||||||
<wsdl:message name="waitBackendEventFault"/>
|
<wsdl:message name="waitBackendEventFault"/>
|
||||||
<wsdl:message name="authorizeJoinFault"/>
|
<wsdl:message name="authorizeJoinFault"/>
|
||||||
<wsdl:message name="configureStatus">
|
<wsdl:message name="configureStatusEvent">
|
||||||
<wsdl:part name="sessionid" type="xs:string"/>
|
<wsdl:part name="sessionid" type="xs:string"/>
|
||||||
<wsdl:part name="wtpid" type="xs:string"/>
|
<wsdl:part name="wtpid" type="xs:string"/>
|
||||||
<wsdl:part name="confstatus" type="xs:base64Binary"/>
|
<wsdl:part name="confstatus" type="xs:base64Binary"/>
|
||||||
</wsdl:message>
|
</wsdl:message>
|
||||||
<wsdl:message name="configureStatusResponse">
|
<wsdl:message name="joinEvent">
|
||||||
|
<wsdl:part name="sessionid" type="xs:string"/>
|
||||||
|
<wsdl:part name="wtpid" type="xs:string"/>
|
||||||
|
<wsdl:part name="join" type="xs:base64Binary"/>
|
||||||
|
</wsdl:message>
|
||||||
|
<wsdl:message name="configureStatusEventResponse">
|
||||||
<wsdl:part name="return" type="xs:base64Binary"/>
|
<wsdl:part name="return" type="xs:base64Binary"/>
|
||||||
</wsdl:message>
|
</wsdl:message>
|
||||||
<wsdl:message name="changeStateEvent">
|
<wsdl:message name="changeStateEvent">
|
||||||
@ -47,6 +52,9 @@
|
|||||||
<wsdl:part name="wtpid" type="xs:string"/>
|
<wsdl:part name="wtpid" type="xs:string"/>
|
||||||
</wsdl:message>
|
</wsdl:message>
|
||||||
<wsdl:message name="runningEventResponse"/>
|
<wsdl:message name="runningEventResponse"/>
|
||||||
|
<wsdl:message name="joinEventResponse">
|
||||||
|
<wsdl:part name="return" type="xs:base64Binary"/>
|
||||||
|
</wsdl:message>
|
||||||
<wsdl:portType name="Presence">
|
<wsdl:portType name="Presence">
|
||||||
<wsdl:operation name="joinBackend">
|
<wsdl:operation name="joinBackend">
|
||||||
<wsdl:input message="tns:joinBackend"/>
|
<wsdl:input message="tns:joinBackend"/>
|
||||||
@ -68,9 +76,13 @@
|
|||||||
<wsdl:input message="tns:authorizeJoin"/>
|
<wsdl:input message="tns:authorizeJoin"/>
|
||||||
<wsdl:output message="tns:authorizeJoinResponse"/>
|
<wsdl:output message="tns:authorizeJoinResponse"/>
|
||||||
</wsdl:operation>
|
</wsdl:operation>
|
||||||
<wsdl:operation name="configureStatus">
|
<wsdl:operation name="joinEvent">
|
||||||
<wsdl:input message="tns:configureStatus"/>
|
<wsdl:input message="tns:joinEvent"/>
|
||||||
<wsdl:output message="tns:configureStatusResponse"/>
|
<wsdl:output message="tns:joinEventResponse"/>
|
||||||
|
</wsdl:operation>
|
||||||
|
<wsdl:operation name="configureStatusEvent">
|
||||||
|
<wsdl:input message="tns:configureStatusEvent"/>
|
||||||
|
<wsdl:output message="tns:configureStatusEventResponse"/>
|
||||||
</wsdl:operation>
|
</wsdl:operation>
|
||||||
<wsdl:operation name="changeStateEvent">
|
<wsdl:operation name="changeStateEvent">
|
||||||
<wsdl:input message="tns:changeStateEvent"/>
|
<wsdl:input message="tns:changeStateEvent"/>
|
||||||
@ -125,7 +137,16 @@
|
|||||||
<soap:body use="literal"/>
|
<soap:body use="literal"/>
|
||||||
</wsdl:output>
|
</wsdl:output>
|
||||||
</wsdl:operation>
|
</wsdl:operation>
|
||||||
<wsdl:operation name="configureStatus">
|
<wsdl:operation name="joinEvent">
|
||||||
|
<soap:operation soapAction=""/>
|
||||||
|
<wsdl:input>
|
||||||
|
<soap:body use="literal"/>
|
||||||
|
</wsdl:input>
|
||||||
|
<wsdl:output>
|
||||||
|
<soap:body use="literal"/>
|
||||||
|
</wsdl:output>
|
||||||
|
</wsdl:operation>
|
||||||
|
<wsdl:operation name="configureStatusEvent">
|
||||||
<soap:operation soapAction=""/>
|
<soap:operation soapAction=""/>
|
||||||
<wsdl:input>
|
<wsdl:input>
|
||||||
<soap:body use="literal"/>
|
<soap:body use="literal"/>
|
||||||
|
Loading…
Reference in New Issue
Block a user