X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=zutil%2Fsoap.c;h=2fbbc1740ba03c0fb66f8ea99c7fe10c913e8888;hb=94c77ca831e55b3dee31184347f25dd0583085d2;hp=157533cbf2b1b91d596aeb5e3477337e27fc0c54;hpb=d9d97a04b6f9597225b8440dad61790dfa39a751;p=yaz-moved-to-github.git diff --git a/zutil/soap.c b/zutil/soap.c index 157533c..2fbbc17 100644 --- a/zutil/soap.c +++ b/zutil/soap.c @@ -2,12 +2,12 @@ * Copyright (c) 2002-2003, Index Data. * See the file LICENSE for details. * - * $Id: soap.c,v 1.3 2003-02-17 14:35:42 adam Exp $ + * $Id: soap.c,v 1.9 2003-04-23 20:36:05 adam Exp $ */ #include -#if HAVE_XSLT +#if HAVE_XML2 #include #include @@ -30,9 +30,10 @@ int z_soap_error(ODR o, Z_SOAP *p, return -1; } -int z_soap_codec(ODR o, Z_SOAP **pp, +int z_soap_codec_enc(ODR o, Z_SOAP **pp, char **content_buf, int *content_len, - Z_SOAP_Handler *handlers) + Z_SOAP_Handler *handlers, + const char *encoding) { if (o->direction == ODR_DECODE) { @@ -165,7 +166,7 @@ int z_soap_codec(ODR o, Z_SOAP **pp, else { ret = z_soap_error(o, p, "SOAP-ENV:Client", - "No handler for NS", 0); + "No handler for NS", ptr->ns->href); } } xmlFreeDoc(doc); @@ -176,8 +177,6 @@ int z_soap_codec(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"); @@ -207,14 +206,57 @@ int z_soap_codec(ODR o, Z_SOAP **pp, if (ret) return ret; } - 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_enc(ODR o, Z_SOAP **pp, + char **content_buf, int *content_len, + Z_SOAP_Handler *handlers, const char *encoding) +{ + static char *err_xml = + "\n" + "\n" + "\t\n" + "\t\t\n" + "\t\t\tSOAP-ENV:Server\n" + "\t\t\tHTTP error\n" + "\t\t\tSOAP not supported in this YAZ configuration\n" + "\t\t\n" + "\t\n" + "\n"; + if (o->direction == ODR_ENCODE) + { + *content_buf = err_xml; + *content_len = strlen(err_xml); + } + 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); +} +