- Z_SRW_PDU *sr = yaz_srw_get(o, Z_SRW_explain_request);
- int http_code = 200;
-
- sr->u.explain_request->database = db;
- sr->u.explain_request->recordPacking =
- yaz_uri_val(p1, "recordPacking", o);
- if (!sr->u.explain_request->recordPacking)
- sr->u.explain_request->recordPacking = "xml";
-
- srw_bend_explain(assoc, req, sr->u.explain_request,
- res->u.explain_response, &http_code);
-
- if (res->u.explain_response->record.recordData_buf)
- {
- soap_package = odr_malloc(o, sizeof(*soap_package));
- soap_package->which = Z_SOAP_generic;
-
- soap_package->u.generic =
- odr_malloc(o, sizeof(*soap_package->u.generic));
-
- soap_package->u.generic->p = res;
- soap_package->u.generic->ns = soap_handlers[0].ns;
- soap_package->u.generic->no = 0;
-
- soap_package->ns = "SRU";
-
- 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);
- if (!charset)
- z_HTTP_header_add(o, &hres->headers, "Content-Type", "text/xml");
- else
- {
- char ctype[60];
- strcpy(ctype, "text/xml; charset=");
- strcat(ctype, charset);
- z_HTTP_header_add(o, &hres->headers, "Content-Type",
- ctype);
- }
- }
- }
-#endif
-#ifdef DOCDIR
- if (strlen(hreq->path) >= 5 && strlen(hreq->path) < 80 &&
- !memcmp(hreq->path, "/doc/", 5))
- {
- FILE *f;
- char fpath[120];
-
- strcpy(fpath, DOCDIR);
- strcat(fpath, hreq->path+4);
- f = fopen(fpath, "rb");
- if (f) {
- struct stat sbuf;
- if (fstat(fileno(f), &sbuf) || !S_ISREG(sbuf.st_mode))
- {
- fclose(f);
- f = 0;
- }
- }
- if (f)
- {
- long sz;
- fseek(f, 0L, SEEK_END);
- sz = ftell(f);
- if (sz >= 0 && sz < 500000)
- {
- const char *ctype = "application/octet-stream";
- const char *cp;
-
- p = z_get_HTTP_Response(o, 200);
- hres = p->u.HTTP_Response;
- hres->content_buf = (char *) odr_malloc(o, sz + 1);
- hres->content_len = sz;
- fseek(f, 0L, SEEK_SET);
- fread(hres->content_buf, 1, sz, f);
- if ((cp = strrchr(fpath, '.'))) {
- cp++;
- if (!strcmp(cp, "png"))
- ctype = "image/png";
- else if (!strcmp(cp, "gif"))
- ctype = "image/gif";
- else if (!strcmp(cp, "xml"))
- ctype = "text/xml";
- else if (!strcmp(cp, "html"))
- ctype = "text/html";
- }
- z_HTTP_header_add(o, &hres->headers, "Content-Type", ctype);
- }
- fclose(f);
+ 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;