This commit is contained in:
vemax78 2013-07-23 22:10:35 +02:00
parent 4953ff684d
commit 75c24a7a9c
2 changed files with 17 additions and 20 deletions

View File

@ -62,7 +62,7 @@ xmlNodePtr ac_xml_search_child(xmlNodePtr parent, char* prefix, char* name) {
} }
/* */ /* */
static int ac_soapclient_parsing_url(struct ac_http_soap_server* server, char* url) { static int ac_soapclient_parsing_url(struct ac_http_soap_server* server, const char* url) {
int length; int length;
int protocol; int protocol;
int host; int host;
@ -346,7 +346,7 @@ static int ac_soapclient_xml_io_read(void* ctx, char* buffer, int len) {
static int ac_soapclient_xml_io_close(void *ctx) { static int ac_soapclient_xml_io_close(void *ctx) {
struct ac_http_soap_request* httprequest = (struct ac_http_soap_request*)ctx; struct ac_http_soap_request* httprequest = (struct ac_http_soap_request*)ctx;
if ((httprequest->httpstate == HTTP_RESPONSE_BODY) && httprequest->contentlength) { if ((httprequest->httpstate != HTTP_RESPONSE_BODY) || httprequest->contentlength) {
return -1; return -1;
} }
@ -361,6 +361,7 @@ static void ac_soapclient_parse_error(void* ctxt, const char* msg, ...) {
void ac_soapclient_init(void) { void ac_soapclient_init(void) {
xmlInitParser(); xmlInitParser();
xmlSetGenericErrorFunc(NULL, ac_soapclient_parse_error); xmlSetGenericErrorFunc(NULL, ac_soapclient_parse_error);
xmlThrDefSetGenericErrorFunc(NULL, ac_soapclient_parse_error);
} }
/* */ /* */
@ -369,7 +370,7 @@ void ac_soapclient_free(void) {
} }
/* */ /* */
struct ac_http_soap_server* ac_soapclient_create_server(char* url) { struct ac_http_soap_server* ac_soapclient_create_server(const char* url) {
struct ac_http_soap_server* server; struct ac_http_soap_server* server;
ASSERT(url != NULL); ASSERT(url != NULL);
@ -408,9 +409,11 @@ void ac_soapclient_free_server(struct ac_http_soap_server* server) {
/* */ /* */
struct ac_soap_request* ac_soapclient_create_request(char* method, char* urinamespace) { struct ac_soap_request* ac_soapclient_create_request(char* method, char* urinamespace) {
char* tagMethod;
struct ac_soap_request* request; struct ac_soap_request* request;
ASSERT(method != NULL); ASSERT(method != NULL);
ASSERT(urinamespace != NULL);
/* */ /* */
request = (struct ac_soap_request*)capwap_alloc(sizeof(struct ac_soap_request)); request = (struct ac_soap_request*)capwap_alloc(sizeof(struct ac_soap_request));
@ -428,6 +431,7 @@ struct ac_soap_request* ac_soapclient_create_request(char* method, char* uriname
xmlNewProp(request->xmlRoot, BAD_CAST "xmlns:SOAP-ENC", BAD_CAST "http://schemas.xmlsoap.org/soap/encoding/"); xmlNewProp(request->xmlRoot, BAD_CAST "xmlns:SOAP-ENC", BAD_CAST "http://schemas.xmlsoap.org/soap/encoding/");
xmlNewProp(request->xmlRoot, BAD_CAST "SOAP-ENV:encodingStyle", BAD_CAST "http://schemas.xmlsoap.org/soap/encoding/"); xmlNewProp(request->xmlRoot, BAD_CAST "SOAP-ENV:encodingStyle", BAD_CAST "http://schemas.xmlsoap.org/soap/encoding/");
xmlNewProp(request->xmlRoot, BAD_CAST "xmlns:SOAP-ENV", BAD_CAST "http://schemas.xmlsoap.org/soap/envelope/"); xmlNewProp(request->xmlRoot, BAD_CAST "xmlns:SOAP-ENV", BAD_CAST "http://schemas.xmlsoap.org/soap/envelope/");
xmlNewProp(request->xmlRequest, BAD_CAST "xmlns:tns", BAD_CAST urinamespace);
xmlDocSetRootElement(request->xmlDocument, request->xmlRoot); xmlDocSetRootElement(request->xmlDocument, request->xmlRoot);
xmlNewChild(request->xmlRoot, NULL, BAD_CAST "SOAP-ENV:Header", NULL); xmlNewChild(request->xmlRoot, NULL, BAD_CAST "SOAP-ENV:Header", NULL);
@ -435,24 +439,17 @@ struct ac_soap_request* ac_soapclient_create_request(char* method, char* uriname
/* */ /* */
request->method = capwap_duplicate_string(method); request->method = capwap_duplicate_string(method);
if (urinamespace && *urinamespace) {
char* tagMethod;
/* Create request with prefix namespace */ /* Create request */
tagMethod = capwap_alloc(strlen(method) + 5); tagMethod = capwap_alloc(strlen(method) + 5);
if (!tagMethod) { if (!tagMethod) {
capwap_outofmemory(); capwap_outofmemory();
} }
sprintf(tagMethod, "ns1:%s", method); /* Append Request */
sprintf(tagMethod, "tns:%s", method);
request->xmlRequest = xmlNewChild(request->xmlBody, NULL, BAD_CAST tagMethod, NULL); request->xmlRequest = xmlNewChild(request->xmlBody, NULL, BAD_CAST tagMethod, NULL);
xmlNewProp(request->xmlRequest, BAD_CAST "xmlns:ns1", BAD_CAST urinamespace);
capwap_free(tagMethod); capwap_free(tagMethod);
} else {
request->xmlRequest = xmlNewChild(request->xmlBody, NULL, BAD_CAST method, NULL);
}
return request; return request;
} }

View File

@ -57,7 +57,7 @@ void ac_soapclient_init(void);
void ac_soapclient_free(void); void ac_soapclient_free(void);
/* */ /* */
struct ac_http_soap_server* ac_soapclient_create_server(char* url); struct ac_http_soap_server* ac_soapclient_create_server(const char* url);
void ac_soapclient_free_server(struct ac_http_soap_server* server); void ac_soapclient_free_server(struct ac_http_soap_server* server);
/* Request */ /* Request */