X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=zutil%2Fsoap.c;h=2fbbc1740ba03c0fb66f8ea99c7fe10c913e8888;hb=b0555501e434d0f71f97ea17f282db2e795ff950;hp=d848cf97660212797b9df66da28e5e5269dc609f;hpb=81afb524fb5c2d761d37853f4182fca4567cd2fd;p=yaz-moved-to-github.git diff --git a/zutil/soap.c b/zutil/soap.c index d848cf9..2fbbc17 100644 --- a/zutil/soap.c +++ b/zutil/soap.c @@ -2,7 +2,7 @@ * Copyright (c) 2002-2003, Index Data. * See the file LICENSE for details. * - * $Id: soap.c,v 1.6 2003-03-11 11:09:17 adam Exp $ + * $Id: soap.c,v 1.9 2003-04-23 20:36:05 adam Exp $ */ #include @@ -30,13 +30,6 @@ int z_soap_error(ODR o, Z_SOAP *p, return -1; } -int z_soap_codec(ODR o, Z_SOAP **pp, - char **content_buf, int *content_len, - Z_SOAP_Handler *handlers) -{ - return z_soap_codec_enc(o, pp, content_buf, content_len, handlers, 0); -} - int z_soap_codec_enc(ODR o, Z_SOAP **pp, char **content_buf, int *content_len, Z_SOAP_Handler *handlers, @@ -184,8 +177,6 @@ int z_soap_codec_enc(ODR o, Z_SOAP **pp, Z_SOAP *p = *pp; xmlNsPtr ns_env; xmlNodePtr envelope_ptr, body_ptr; - xmlChar *buf_out; - int len_out; xmlDocPtr doc = xmlNewDoc("1.0"); @@ -215,25 +206,34 @@ int z_soap_codec_enc(ODR o, Z_SOAP **pp, if (ret) return ret; } - if (encoding) - xmlDocDumpMemoryEnc(doc, &buf_out, &len_out, encoding); - else - xmlDocDumpMemory(doc, &buf_out, &len_out); - *content_buf = (char *) odr_malloc(o, len_out); - *content_len = len_out; - memcpy(*content_buf, buf_out, len_out); - xmlFree(buf_out); + if (p->which == Z_SOAP_generic && !strcmp(p->ns, "SRU")) + { + xmlDocSetRootElement(doc, body_ptr->children); + } + if (1) + { + xmlChar *buf_out; + int len_out; + if (encoding) + xmlDocDumpMemoryEnc(doc, &buf_out, &len_out, encoding); + else + xmlDocDumpMemory(doc, &buf_out, &len_out); + *content_buf = (char *) odr_malloc(o, len_out); + *content_len = len_out; + memcpy(*content_buf, buf_out, len_out); + xmlFree(buf_out); + } xmlFreeDoc(doc); return 0; } return 0; } #else -int z_soap_codec(ODR o, Z_SOAP **pp, - char **content_buf, int *content_len, - Z_SOAP_Handler *handlers) +int z_soap_codec_enc(ODR o, Z_SOAP **pp, + char **content_buf, int *content_len, + Z_SOAP_Handler *handlers, const char *encoding) { - const char *err_xml = + static char *err_xml = "\n" "\n" @@ -253,3 +253,10 @@ int z_soap_codec(ODR o, Z_SOAP **pp, return -1; } #endif +int z_soap_codec(ODR o, Z_SOAP **pp, + char **content_buf, int *content_len, + Z_SOAP_Handler *handlers) +{ + return z_soap_codec_enc(o, pp, content_buf, content_len, handlers, 0); +} +