diff --git a/src/ac/ac_backend.c b/src/ac/ac_backend.c
index 4512e1f..d8e5509 100644
--- a/src/ac/ac_backend.c
+++ b/src/ac/ac_backend.c
@@ -45,7 +45,7 @@ static int ac_backend_soap_join(int forcereset) {
if (!g_ac_backend.endthread) {
request = ac_soapclient_create_request("joinBackend", SOAP_NAMESPACE_URI);
if (request) {
- ac_soapclient_add_param(request, "xs:string", "acid", g_ac.backendacid);
+ ac_soapclient_add_param(request, "xs:string", "idac", g_ac.backendacid);
ac_soapclient_add_param(request, "xs:string", "version", g_ac.backendversion);
ac_soapclient_add_param(request, "xs:boolean", "forcereset", (forcereset ? "true" : "false"));
g_ac_backend.soaprequest = ac_soapclient_prepare_request(request, server);
@@ -114,7 +114,7 @@ static int ac_backend_soap_waitevent(void) {
if (!g_ac_backend.endthread) {
request = ac_soapclient_create_request("waitBackendEvent", SOAP_NAMESPACE_URI);
if (request) {
- ac_soapclient_add_param(request, "xs:string", "sessionid", g_ac.backendsessionid);
+ ac_soapclient_add_param(request, "xs:string", "idsession", g_ac.backendsessionid);
g_ac_backend.soaprequest = ac_soapclient_prepare_request(request, server);
/* Change result timeout */
@@ -181,7 +181,7 @@ static void ac_backend_soap_leave(void) {
/* Build Soap Request */
request = ac_soapclient_create_request("leaveBackend", SOAP_NAMESPACE_URI);
if (request) {
- ac_soapclient_add_param(request, "xs:string", "sessionid", g_ac.backendsessionid);
+ ac_soapclient_add_param(request, "xs:string", "idsession", g_ac.backendsessionid);
g_ac_backend.soaprequest = ac_soapclient_prepare_request(request, server);
}
diff --git a/src/ac/ac_dfa_join.c b/src/ac/ac_dfa_join.c
index 4834e7e..686b1a1 100644
--- a/src/ac/ac_dfa_join.c
+++ b/src/ac/ac_dfa_join.c
@@ -8,11 +8,19 @@
/* */
static int ac_dfa_state_join_check_authorizejoin(struct ac_session_t* session, struct ac_soap_response* response) {
- if (response->responsecode != HTTP_RESULT_OK) {
+ xmlChar* xmlResult;
+
+ if ((response->responsecode != HTTP_RESULT_OK) || !response->xmlResponseReturn) {
/* TODO: check return failed code */
return CAPWAP_RESULTCODE_JOIN_FAILURE_UNKNOWN_SOURCE;
}
+ // Check return value
+ xmlResult = xmlNodeGetContent(response->xmlResponseReturn);
+ if (xmlStrcmp(xmlResult, (const xmlChar *)"true")) {
+ return CAPWAP_RESULTCODE_JOIN_FAILURE_UNKNOWN_SOURCE;
+ }
+
return CAPWAP_RESULTCODE_SUCCESS;
}
diff --git a/src/ac/ac_dfa_teardown.c b/src/ac/ac_dfa_teardown.c
index dda1d0e..22bc943 100644
--- a/src/ac/ac_dfa_teardown.c
+++ b/src/ac/ac_dfa_teardown.c
@@ -8,6 +8,14 @@ int ac_dfa_state_teardown(struct ac_session_t* session, struct capwap_parsed_pac
ASSERT(session != NULL);
ASSERT(packet == NULL);
+ // Notify teardown session
+ if (session->wtpid) {
+ struct ac_soap_response* response = ac_soap_teardownevent(session, session->wtpid);
+ if (response) {
+ ac_soapclient_free_response(response);
+ }
+ }
+
/* Defered free resource */
ac_dfa_change_state(session, CAPWAP_DEAD_STATE);
return AC_DFA_DROP_PACKET;
diff --git a/src/ac/ac_session.c b/src/ac/ac_session.c
index 02d75c6..890e5ae 100644
--- a/src/ac/ac_session.c
+++ b/src/ac/ac_session.c
@@ -806,7 +806,7 @@ struct ac_soap_response* ac_session_send_soap_request(struct ac_session_t* sessi
/* Build Soap Request */
request = ac_soapclient_create_request(method, SOAP_NAMESPACE_URI);
if (request) {
- ac_soapclient_add_param(request, "xs:string", "sessionid", g_ac.backendsessionid);
+ ac_soapclient_add_param(request, "xs:string", "idsession", g_ac.backendsessionid);
session->soaprequest = ac_soapclient_prepare_request(request, server);
}
diff --git a/src/ac/ac_session.h b/src/ac/ac_session.h
index dc37de6..2601b87 100644
--- a/src/ac/ac_session.h
+++ b/src/ac/ac_session.h
@@ -137,10 +137,11 @@ 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_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)
+#define ac_soap_authorizejoin(s, wtpid) ac_session_send_soap_request((s), "authorizeJoin", 1, "xs:string", "idwtp", wtpid)
+#define ac_soap_joinevent(s, wtpid, joinparam) ac_session_send_soap_request((s), "joinEvent", 2, "xs:string", "idwtp", wtpid, "xs:base64Binary", "join", joinparam)
+#define ac_soap_configurestatusevent(s, wtpid, confstatusparam) ac_session_send_soap_request((s), "configureStatusEvent", 2, "xs:string", "idwtp", wtpid, "xs:base64Binary", "confstatus", confstatusparam)
+#define ac_soap_changestateevent(s, wtpid, changestateparam) ac_session_send_soap_request((s), "changeStateEvent", 2, "xs:string", "idwtp", wtpid, "xs:base64Binary", "changestate", changestateparam)
+#define ac_soap_runningevent(s, wtpid) ac_session_send_soap_request((s), "runningEvent", 1, "xs:string", "idwtp", wtpid)
+#define ac_soap_teardownevent(s, wtpid) ac_session_send_soap_request((s), "teardownEvent", 1, "xs:string", "idwtp", wtpid)
#endif /* __AC_SESSION_HEADER__ */
diff --git a/webservice/smartcapwap.wsdl b/webservice/smartcapwap.wsdl
index 5281af8..4f64cbb 100644
--- a/webservice/smartcapwap.wsdl
+++ b/webservice/smartcapwap.wsdl
@@ -5,7 +5,7 @@
-
+
@@ -13,51 +13,58 @@
-
+
-
+
-
-
+
+
+
+
+
-
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
+
+
+
+
+
@@ -95,6 +102,10 @@
+
+
+
+
@@ -176,6 +187,15 @@
+
+
+
+
+
+
+
+
+