* Copyright (c) 1995-2004, Index Data
* See the file LICENSE for details.
*
- * $Id: seshigh.c,v 1.28 2004-09-30 11:13:42 adam Exp $
+ * $Id: seshigh.c,v 1.32 2004-10-09 08:21:38 adam Exp $
*/
/*
rr.comp->u.complex->generic->elementSpec = 0;
if (srw_req->recordSchema)
{
- rr.comp->u.complex->generic->schema.uri =
-
rr.comp->u.complex->generic->elementSpec =
- odr_malloc(assoc->encode, sizeof(Z_ElementSpec));
+ (Z_ElementSpec *) odr_malloc(assoc->encode, sizeof(Z_ElementSpec));
rr.comp->u.complex->generic->elementSpec->which =
Z_ElementSpec_elementSetName;
rr.comp->u.complex->generic->elementSpec->u.elementSetName =
(*assoc->init->bend_fetch)(assoc->backend, &rr);
- if (rr.len >= 0)
+ if (rr.errcode && rr.surrogate_flag)
+ {
+ int code = yaz_diag_bib1_to_srw(rr.errcode);
+ const char *message = yaz_diag_srw_str(code);
+ int len = 200;
+ if (message)
+ len += strlen(message);
+ if (rr.errstring)
+ len += strlen(rr.errstring);
+
+ record->recordData_buf = odr_malloc(o, len);
+
+ sprintf(record->recordData_buf, "<diagnostic "
+ "xmlns=\"http://www.loc.gov/zing/srw/diagnostic/\">\n"
+ " <uri>info:srw/diagnostic/1/%d</uri>\n", code);
+ if (rr.errstring)
+ sprintf(record->recordData_buf + strlen(record->recordData_buf),
+ " <details>%s</details>\n", rr.errstring);
+ if (message)
+ sprintf(record->recordData_buf + strlen(record->recordData_buf),
+ " <message>%s</message>\n", message);
+ sprintf(record->recordData_buf + strlen(record->recordData_buf),
+ "</diagnostic>\n");
+ record->recordData_len = strlen(record->recordData_buf);
+ record->recordPosition = odr_intdup(o, pos);
+ record->recordSchema = "info:srw/schema/1/diagnostics-v1.1";
+ return 0;
+ }
+ else if (rr.len >= 0)
{
record->recordData_buf = rr.record;
record->recordData_len = rr.len;
if (start > rr.hits)
{
- yaz_log(LOG_LOG, "Request out or range");
+ srw_res->num_diagnostics = 1;
+ srw_res->diagnostics = (Z_SRW_diagnostic *)
+ odr_malloc(assoc->encode,
+ sizeof(*srw_res->diagnostics));
+ yaz_mk_std_diagnostic(assoc->encode, srw_res->diagnostics,
+ 61, 0);
}
else
{
if (srw_req->recordPacking &&
!strcmp(srw_req->recordPacking, "xml"))
packing = Z_SRW_recordPacking_XML;
- srw_res->record.recordSchema = 0;
+ srw_res->record.recordSchema = rr.schema;
srw_res->record.recordPacking = packing;
srw_res->record.recordData_buf = rr.explain_buf;
srw_res->record.recordData_len = strlen(rr.explain_buf);
assoc->init->implementation_name,
odr_prepend(assoc->encode, "GFS", resp->implementationName));
- version = odr_strdup(assoc->encode, "$Revision: 1.28 $");
+ version = odr_strdup(assoc->encode, "$Revision: 1.32 $");
if (strlen(version) > 10) /* check for unexpanded CVS strings */
version[strlen(version)-2] = '\0';
resp->implementationVersion = odr_prepend(assoc->encode,