X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fseshigh.c;h=08f5c32f245aa0152ae34d831ced2084f5c7529c;hb=a38742c388bd6ad26a978d9b09525b6fd79d0418;hp=7a8a7aaeee424769e405cb53142312405cccd07a;hpb=c82bbc07fb53f78aab88bb4121629daeef42ed2a;p=yaz-moved-to-github.git diff --git a/src/seshigh.c b/src/seshigh.c index 7a8a7aa..08f5c32 100644 --- a/src/seshigh.c +++ b/src/seshigh.c @@ -1,8 +1,8 @@ /* - * Copyright (c) 1995-2003, Index Data + * Copyright (c) 1995-2004, Index Data * See the file LICENSE for details. * - * $Id: seshigh.c,v 1.13 2004-01-05 09:34:42 adam Exp $ + * $Id: seshigh.c,v 1.16 2004-01-09 18:10:31 adam Exp $ */ /* @@ -564,12 +564,8 @@ static void srw_bend_search(association *assoc, request *req, { srw_error = 3; /* assume Authentication error */ - srw_res->num_diagnostics = 1; - srw_res->diagnostics = (Z_SRW_diagnostic *) - odr_malloc(assoc->encode, sizeof(*srw_res->diagnostics)); - srw_res->diagnostics[0].code = - odr_intdup(assoc->encode, srw_error); - srw_res->diagnostics[0].details = 0; + yaz_add_srw_diagnostic(assoc->encode, &srw_res->diagnostics, + &srw_res->num_diagnostics, 1, 0); return; } } @@ -786,10 +782,14 @@ static void process_http_request(association *assoc, request *req) char *charset = 0; Z_HTTP_Response *hres; int keepalive = 1; + char *stylesheet = 0; + Z_SRW_diagnostic *diagnostic = 0; + int num_diagnostic = 0; r = yaz_srw_decode(hreq, &sr, &soap_package, assoc->decode, &charset); if (r == 2) /* not taken */ - r = yaz_sru_decode(hreq, &sr, &soap_package, assoc->decode, &charset); + r = yaz_sru_decode(hreq, &sr, &soap_package, assoc->decode, &charset, + &diagnostic, &num_diagnostic); if (r == 0) /* decode SRW/SRU OK .. */ { int http_code = 200; @@ -797,20 +797,51 @@ static void process_http_request(association *assoc, request *req) { Z_SRW_PDU *res = yaz_srw_get(assoc->encode, Z_SRW_searchRetrieve_response); - - srw_bend_search(assoc, req, sr->u.request, res->u.response, - &http_code); + + stylesheet = sr->u.request->stylesheet; + if (num_diagnostic) + { + res->u.response->diagnostics = diagnostic; + res->u.response->num_diagnostics = num_diagnostic; + } + else + { + srw_bend_search(assoc, req, sr->u.request, res->u.response, + &http_code); + } if (http_code == 200) soap_package->u.generic->p = res; } else if (sr->which == Z_SRW_explain_request) { Z_SRW_PDU *res = yaz_srw_get(o, Z_SRW_explain_response); - srw_bend_explain(assoc, req, sr->u.explain_request, + stylesheet = sr->u.explain_request->stylesheet; + if (num_diagnostic) + { + res->u.explain_response->diagnostics = diagnostic; + res->u.explain_response->num_diagnostics = num_diagnostic; + } + srw_bend_explain(assoc, req, sr->u.explain_request, res->u.explain_response, &http_code); if (http_code == 200) soap_package->u.generic->p = res; } + else if (sr->which == Z_SRW_scan_request) + { + Z_SRW_PDU *res = yaz_srw_get(o, Z_SRW_scan_response); + stylesheet = sr->u.scan_request->stylesheet; + if (num_diagnostic) + { + res->u.scan_response->diagnostics = diagnostic; + res->u.scan_response->num_diagnostics = num_diagnostic; + } + yaz_add_srw_diagnostic(o, + &res->u.scan_response->diagnostics, + &res->u.scan_response->num_diagnostics, + 4, "scan"); + if (http_code == 200) + soap_package->u.generic->p = res; + } else { http_code = 500; @@ -832,9 +863,9 @@ static void process_http_request(association *assoc, request *req) int ret; p = z_get_HTTP_Response(o, 200); hres = p->u.HTTP_Response; - ret = z_soap_codec_enc(assoc->encode, &soap_package, - &hres->content_buf, &hres->content_len, - soap_handlers, charset); + ret = z_soap_codec_enc_xsl(assoc->encode, &soap_package, + &hres->content_buf, &hres->content_len, + soap_handlers, charset, stylesheet); hres->code = http_code; strcpy(ctype, "text/xml"); @@ -1271,7 +1302,7 @@ static Z_APDU *process_initRequest(association *assoc, request *reqb) assoc->init->implementation_name, odr_prepend(assoc->encode, "GFS", resp->implementationName)); - version = odr_strdup(assoc->encode, "$Revision: 1.13 $"); + version = odr_strdup(assoc->encode, "$Revision: 1.16 $"); if (strlen(version) > 10) /* check for unexpanded CVS strings */ version[strlen(version)-2] = '\0'; resp->implementationVersion = odr_prepend(assoc->encode,