diff --git a/src/ac/ac_dfa_configure.c b/src/ac/ac_dfa_configure.c index 6ac04ea..33e9178 100644 --- a/src/ac/ac_dfa_configure.c +++ b/src/ac/ac_dfa_configure.c @@ -137,7 +137,7 @@ static struct ac_soap_response* ac_dfa_state_configure_parsing_request(struct ac ac_base64_string_encode(jsonmessage, base64confstatus); /* Send message */ - response = ac_soap_configurestatus(session, session->wtpid, base64confstatus); + response = ac_soap_configurestatusevent(session, session->wtpid, base64confstatus); /* Free JSON */ 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) { - uint32_t result; struct capwap_header_data capwapheader; struct capwap_packet_txmng* txmngpacket; int status = AC_DFA_ACCEPT_PACKET; @@ -522,53 +521,55 @@ int ac_dfa_state_configure(struct ac_session_t* session, struct capwap_parsed_pa ASSERT(session != NULL); if (packet) { - /* Parsing request */ - struct ac_soap_response* response = ac_dfa_state_configure_parsing_request(session, packet); + struct ac_soap_response* response; + uint32_t result = CAPWAP_RESULTCODE_FAILURE; + + /* Create response */ + 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); + + /* Parsing request and add message element for respone message */ + response = ac_dfa_state_configure_parsing_request(session, packet); if (response) { - /* Create response */ - 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); - - /* Add message element */ result = ac_dfa_state_configure_create_response(session, packet, response, txmngpacket); - if (!CAPWAP_RESULTCODE_OK(result)) { - struct capwap_resultcode_element resultcode = { .code = result }; + ac_soapclient_free_response(response); + } - /* 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); - - /* Configure response complete, get fragment packets */ - ac_free_reference_last_response(session); - capwap_packet_txmng_get_fragment_packets(txmngpacket, session->responsefragmentpacket, session->fragmentid); - if (session->responsefragmentpacket->count > 1) { - session->fragmentid++; + if (result == CAPWAP_RESULTCODE_FAILURE) { + /* TODO: Add AC List Message Elements */ } + } - /* Free packets manager */ - capwap_packet_txmng_free(txmngpacket); + /* Configure response complete, get fragment packets */ + ac_free_reference_last_response(session); + capwap_packet_txmng_get_fragment_packets(txmngpacket, session->responsefragmentpacket, session->fragmentid); + if (session->responsefragmentpacket->count > 1) { + session->fragmentid++; + } - /* Save remote sequence number */ - session->remoteseqnumber = packet->rxmngpacket->ctrlmsg.seq; - capwap_get_packet_digest(packet->rxmngpacket, packet->connection, session->lastrecvpackethash); + /* Free packets manager */ + capwap_packet_txmng_free(txmngpacket); - /* Send Configure response to WTP */ - if (!capwap_crypt_sendto_fragmentpacket(&session->ctrldtls, session->ctrlsocket.socket[session->ctrlsocket.type], session->responsefragmentpacket, &session->acctrladdress, &session->wtpctrladdress)) { - /* Response is already created and saved. When receive a re-request, DFA autoresponse */ - capwap_logging_debug("Warning: error to send configuration status response packet"); - } + /* Save remote sequence number */ + session->remoteseqnumber = packet->rxmngpacket->ctrlmsg.seq; + capwap_get_packet_digest(packet->rxmngpacket, packet->connection, session->lastrecvpackethash); - /* Change state */ - if (CAPWAP_RESULTCODE_OK(result)) { - ac_dfa_change_state(session, CAPWAP_DATA_CHECK_STATE); - capwap_set_timeout(session->dfa.rfcChangeStatePendingTimer, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION); - } else { - ac_dfa_change_state(session, CAPWAP_CONFIGURE_TO_DTLS_TEARDOWN_STATE); - status = AC_DFA_NO_PACKET; - } + /* Send Configure response to WTP */ + if (!capwap_crypt_sendto_fragmentpacket(&session->ctrldtls, session->ctrlsocket.socket[session->ctrlsocket.type], session->responsefragmentpacket, &session->acctrladdress, &session->wtpctrladdress)) { + /* Response is already created and saved. When receive a re-request, DFA autoresponse */ + capwap_logging_debug("Warning: error to send configuration status response packet"); + } + + /* Change state */ + if (CAPWAP_RESULTCODE_OK(result)) { + ac_dfa_change_state(session, CAPWAP_DATA_CHECK_STATE); + capwap_set_timeout(session->dfa.rfcChangeStatePendingTimer, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION); } else { ac_dfa_change_state(session, CAPWAP_CONFIGURE_TO_DTLS_TEARDOWN_STATE); status = AC_DFA_NO_PACKET; diff --git a/src/ac/ac_dfa_datacheck.c b/src/ac/ac_dfa_datacheck.c index 9007015..fb263ac 100644 --- a/src/ac/ac_dfa_datacheck.c +++ b/src/ac/ac_dfa_datacheck.c @@ -84,7 +84,6 @@ static struct ac_soap_response* ac_dfa_state_datacheck_parsing_request(struct ac capwap_free(base64confstatus); 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) { - uint32_t result; struct capwap_header_data capwapheader; struct capwap_packet_txmng* txmngpacket; int status = AC_DFA_ACCEPT_PACKET; @@ -144,53 +142,55 @@ int ac_dfa_state_datacheck(struct ac_session_t* session, struct capwap_parsed_pa ASSERT(session != NULL); if (packet) { - /* Parsing request */ - struct ac_soap_response* response = ac_dfa_state_datacheck_parsing_request(session, packet); + struct ac_soap_response* response; + uint32_t result = CAPWAP_RESULTCODE_FAILURE; + + /* Create response */ + 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); + + /* Parsing request and add message element for respone message */ + response = ac_dfa_state_datacheck_parsing_request(session, packet); if (response) { - /* Create response */ - 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); - - /* Add message element */ result = ac_dfa_state_datacheck_create_response(session, packet, response, txmngpacket); - if (!CAPWAP_RESULTCODE_OK(result)) { - struct capwap_resultcode_element resultcode = { .code = result }; + ac_soapclient_free_response(response); + } - /* 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); - - /* Change event response complete, get fragment packets */ - ac_free_reference_last_response(session); - capwap_packet_txmng_get_fragment_packets(txmngpacket, session->responsefragmentpacket, session->fragmentid); - if (session->responsefragmentpacket->count > 1) { - session->fragmentid++; + if (result == CAPWAP_RESULTCODE_FAILURE) { + /* TODO: Add AC List Message Elements */ } + } - /* Free packets manager */ - capwap_packet_txmng_free(txmngpacket); + /* Change event response complete, get fragment packets */ + ac_free_reference_last_response(session); + capwap_packet_txmng_get_fragment_packets(txmngpacket, session->responsefragmentpacket, session->fragmentid); + if (session->responsefragmentpacket->count > 1) { + session->fragmentid++; + } - /* Save remote sequence number */ - session->remoteseqnumber = packet->rxmngpacket->ctrlmsg.seq; - capwap_get_packet_digest(packet->rxmngpacket, packet->connection, session->lastrecvpackethash); + /* Free packets manager */ + capwap_packet_txmng_free(txmngpacket); - /* Send Change event response to WTP */ - if (!capwap_crypt_sendto_fragmentpacket(&session->ctrldtls, session->ctrlsocket.socket[session->ctrlsocket.type], session->responsefragmentpacket, &session->acctrladdress, &session->wtpctrladdress)) { - /* Response is already created and saved. When receive a re-request, DFA autoresponse */ - capwap_logging_debug("Warning: error to send change event response packet"); - } + /* Save remote sequence number */ + session->remoteseqnumber = packet->rxmngpacket->ctrlmsg.seq; + capwap_get_packet_digest(packet->rxmngpacket, packet->connection, session->lastrecvpackethash); - /* Change state */ - if (CAPWAP_RESULTCODE_OK(result)) { - ac_dfa_change_state(session, CAPWAP_DATA_CHECK_TO_RUN_STATE); - capwap_set_timeout(session->dfa.rfcDataCheckTimer, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION); - } else { - ac_dfa_change_state(session, CAPWAP_DATA_CHECK_TO_DTLS_TEARDOWN_STATE); - status = AC_DFA_NO_PACKET; - } + /* Send Change event response to WTP */ + if (!capwap_crypt_sendto_fragmentpacket(&session->ctrldtls, session->ctrlsocket.socket[session->ctrlsocket.type], session->responsefragmentpacket, &session->acctrladdress, &session->wtpctrladdress)) { + /* Response is already created and saved. When receive a re-request, DFA autoresponse */ + capwap_logging_debug("Warning: error to send change event response packet"); + } + + /* Change state */ + if (CAPWAP_RESULTCODE_OK(result)) { + ac_dfa_change_state(session, CAPWAP_DATA_CHECK_TO_RUN_STATE); + capwap_set_timeout(session->dfa.rfcDataCheckTimer, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION); } else { ac_dfa_change_state(session, CAPWAP_DATA_CHECK_TO_DTLS_TEARDOWN_STATE); status = AC_DFA_NO_PACKET; @@ -246,8 +246,8 @@ int ac_dfa_state_datacheck_to_run(struct ac_session_t* session, struct capwap_pa capwap_list_free(txfragpacket); capwap_packet_txmng_free(txmngpacket); + /* Capwap handshake complete, notify event to backend */ if (result) { - /* Capwap handshake complete, notify event to backend */ result = 0; response = ac_soap_runningevent(session, session->wtpid); if (response) { diff --git a/src/ac/ac_dfa_join.c b/src/ac/ac_dfa_join.c index 24b6a08..44ac7dc 100644 --- a/src/ac/ac_dfa_join.c +++ b/src/ac/ac_dfa_join.c @@ -3,6 +3,7 @@ #include "capwap_array.h" #include "ac_session.h" #include "ac_backend.h" +#include /* */ static int ac_dfa_state_join_check_authorizejoin(struct ac_session_t* session, struct ac_soap_response* response) { @@ -15,8 +16,154 @@ 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) { + const char* jsonmessage; + char* base64confstatus; + struct json_object* jsonparam; + struct ac_soap_response* response; + + /* Create SOAP request with JSON param + { + } + */ + + /* */ + jsonparam = json_object_new_object(); + + /* Get JSON param and convert base64 */ + jsonmessage = json_object_to_json_string(jsonparam); + base64confstatus = capwap_alloc(AC_BASE64_ENCODE_LENGTH(strlen(jsonmessage))); + if (!base64confstatus) { + capwap_outofmemory(); + } + + ac_base64_string_encode(jsonmessage, base64confstatus); + + /* Send message */ + response = ac_soap_joinevent(session, session->wtpid, base64confstatus); + + /* Free JSON */ + 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_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 */ + 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_ACNAME, &g_ac.acname); + + if (binding == CAPWAP_WIRELESS_BINDING_IEEE80211) { + struct capwap_array* wtpradioinformation = (struct capwap_array*)capwap_get_message_element_data(packet, CAPWAP_ELEMENT_80211_WTPRADIOINFORMATION); + + for (i = 0; i < wtpradioinformation->count; i++) { + struct capwap_80211_wtpradioinformation_element* radio; + + radio = *(struct capwap_80211_wtpradioinformation_element**)capwap_array_get_item_pointer(wtpradioinformation, i); + capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_80211_WTPRADIOINFORMATION, radio); + } + } + + capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_ECNSUPPORT, &session->dfa.ecn); + + /* Get information from any local address */ + controllist = capwap_list_create(); + ac_get_control_information(controllist); + + for (item = controllist->first; item != NULL; item = item->next) { + struct ac_session_control* sessioncontrol = (struct ac_session_control*)item->item; + + if (sessioncontrol->localaddress.ss_family == AF_INET) { + struct capwap_controlipv4_element element; + + memcpy(&element.address, &((struct sockaddr_in*)&sessioncontrol->localaddress)->sin_addr, sizeof(struct in_addr)); + element.wtpcount = sessioncontrol->count; + capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_CONTROLIPV4, &element); + } else if (sessioncontrol->localaddress.ss_family == AF_INET6) { + struct capwap_controlipv6_element element; + + memcpy(&element.address, &((struct sockaddr_in6*)&sessioncontrol->localaddress)->sin6_addr, sizeof(struct in6_addr)); + element.wtpcount = sessioncontrol->count; + capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_CONTROLIPV6, &element); + } + } + + capwap_list_free(controllist); + + if (session->acctrladdress.ss_family == AF_INET) { + struct capwap_localipv4_element addr; + + memcpy(&addr.address, &((struct sockaddr_in*)&session->acctrladdress)->sin_addr, sizeof(struct in_addr)); + capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_LOCALIPV4, &addr); + } else if (session->acctrladdress.ss_family == AF_INET6) { + struct capwap_localipv6_element addr; + + memcpy(&addr.address, &((struct sockaddr_in6*)&session->acctrladdress)->sin6_addr, sizeof(struct in6_addr)); + capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_LOCALIPV6, &addr); + } + + /* CAPWAP_CREATE_ACIPV4LIST_ELEMENT */ /* TODO */ + /* CAPWAP_CREATE_ACIPV6LIST_ELEMENT */ /* TODO */ + capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_TRANSPORT, &session->dfa.transport); + /* CAPWAP_CREATE_IMAGEIDENTIFIER_ELEMENT */ /* TODO */ + /* CAPWAP_CREATE_MAXIMUMMESSAGELENGTH_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; @@ -44,8 +191,6 @@ int ac_dfa_state_join(struct ac_session_t* session, struct capwap_parsed_packet* /* Get printable WTPID */ wtpid = ac_get_printable_wtpid(wtpboarddata); if (wtpid && !ac_has_wtpid(wtpid)) { - struct ac_soap_response* response; - /* Request authorization of Backend for complete join */ response = ac_soap_authorizejoin(session, wtpid); if (response) { @@ -80,76 +225,18 @@ int ac_dfa_state_join(struct ac_session_t* session, struct capwap_parsed_packet* 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 */ - capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_RESULTCODE, &resultcode); - - /* Check is valid packet after parsing request */ + /* */ if (CAPWAP_RESULTCODE_OK(resultcode.code)) { - struct capwap_list* controllist; - struct capwap_list_item* item; - - /* 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_ACNAME, &g_ac.acname); - - if (binding == CAPWAP_WIRELESS_BINDING_IEEE80211) { - struct capwap_array* wtpradioinformation = (struct capwap_array*)capwap_get_message_element_data(packet, CAPWAP_ELEMENT_80211_WTPRADIOINFORMATION); - - for (i = 0; i < wtpradioinformation->count; i++) { - struct capwap_80211_wtpradioinformation_element* radio; - - radio = *(struct capwap_80211_wtpradioinformation_element**)capwap_array_get_item_pointer(wtpradioinformation, i); - capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_80211_WTPRADIOINFORMATION, radio); - } + 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); } - - capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_ECNSUPPORT, &session->dfa.ecn); - - /* Get information from any local address */ - controllist = capwap_list_create(); - ac_get_control_information(controllist); - - for (item = controllist->first; item != NULL; item = item->next) { - struct ac_session_control* sessioncontrol = (struct ac_session_control*)item->item; - - if (sessioncontrol->localaddress.ss_family == AF_INET) { - struct capwap_controlipv4_element element; - - memcpy(&element.address, &((struct sockaddr_in*)&sessioncontrol->localaddress)->sin_addr, sizeof(struct in_addr)); - element.wtpcount = sessioncontrol->count; - capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_CONTROLIPV4, &element); - } else if (sessioncontrol->localaddress.ss_family == AF_INET6) { - struct capwap_controlipv6_element element; - - memcpy(&element.address, &((struct sockaddr_in6*)&sessioncontrol->localaddress)->sin6_addr, sizeof(struct in6_addr)); - element.wtpcount = sessioncontrol->count; - capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_CONTROLIPV6, &element); - } - } - - capwap_list_free(controllist); - - if (session->acctrladdress.ss_family == AF_INET) { - struct capwap_localipv4_element addr; - - memcpy(&addr.address, &((struct sockaddr_in*)&session->acctrladdress)->sin_addr, sizeof(struct in_addr)); - capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_LOCALIPV4, &addr); - } else if (session->acctrladdress.ss_family == AF_INET6) { - struct capwap_localipv6_element addr; - - memcpy(&addr.address, &((struct sockaddr_in6*)&session->acctrladdress)->sin6_addr, sizeof(struct in6_addr)); - capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_LOCALIPV6, &addr); - } - - /* CAPWAP_CREATE_ACIPV4LIST_ELEMENT */ /* TODO */ - /* CAPWAP_CREATE_ACIPV6LIST_ELEMENT */ /* TODO */ - capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_TRANSPORT, &session->dfa.transport); - /* CAPWAP_CREATE_IMAGEIDENTIFIER_ELEMENT */ /* TODO */ - /* CAPWAP_CREATE_MAXIMUMMESSAGELENGTH_ELEMENT */ /* TODO */ - /* CAPWAP_CREATE_VENDORSPECIFICPAYLOAD_ELEMENT */ /* TODO */ } + /* Add always result code message element */ + capwap_packet_txmng_add_message_element(txmngpacket, CAPWAP_ELEMENT_RESULTCODE, &resultcode); + /* Join response complete, get fragment packets */ ac_free_reference_last_response(session); capwap_packet_txmng_get_fragment_packets(txmngpacket, session->responsefragmentpacket, session->fragmentid); diff --git a/src/ac/ac_session.h b/src/ac/ac_session.h index d19ce07..dc37de6 100644 --- a/src/ac/ac_session.h +++ b/src/ac/ac_session.h @@ -137,9 +137,10 @@ int ac_dfa_state_dead(struct ac_session_t* session, struct capwap_parsed_packet* /* Soap function */ 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_configurestatus(s, wtpid, confstatus) ac_session_send_soap_request((s), "configureStatus", 2, "xs:string", "wtpid", wtpid, "xs:base64Binary", "confstatus", confstatus) -#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_runningevent(s, wtpid) ac_session_send_soap_request((s), "runningEvent", 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_joinevent(s, wtpid, joinparam) ac_session_send_soap_request((s), "joinEvent", 2, "xs:string", "wtpid", wtpid, "xs:base64Binary", "join", joinparam) +#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) #endif /* __AC_SESSION_HEADER__ */ diff --git a/webservice/smartcapwap.wsdl b/webservice/smartcapwap.wsdl index 2f0b591..d26aa71 100644 --- a/webservice/smartcapwap.wsdl +++ b/webservice/smartcapwap.wsdl @@ -26,12 +26,17 @@ - + - + + + + + + @@ -47,6 +52,9 @@ + + + @@ -68,9 +76,13 @@ - - - + + + + + + + @@ -125,7 +137,16 @@ - + + + + + + + + + +