/* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2013 Index Data
+ * Copyright (C) Index Data
* See the file LICENSE for details.
*/
/**
}
}
-void yaz_uri_val_int(const char *path, const char *name, ODR o, Odr_int **intp)
-{
- const char *v = yaz_uri_val(path, name, o);
- if (v)
- *intp = odr_intdup(o, atoi(v));
-}
-
void yaz_mk_srw_diagnostic(ODR o, Z_SRW_diagnostic *d,
const char *uri, const char *message,
const char *details)
const char *charset_p = 0;
if (content_type && (charset_p = strstr(content_type, "; charset=")))
{
- int i = 0;
- charset_p += 10;
- while (i < 20 && charset_p[i] &&
- !strchr("; \n\r", charset_p[i]))
- i++;
- *charset = (char*) odr_malloc(o, i+1);
- memcpy(*charset, charset_p, i);
- (*charset)[i] = '\0';
+ int j = 0, i = 0;
+ int sep = 0;
+ charset_p += 10; /* skip ; charset= */
+ if (charset_p[i] == '"' || charset_p[i] == '\'')
+ sep = charset_p[i++];
+ *charset = odr_strdup(o, charset_p);
+ while (charset_p[i] && charset_p[i] != sep)
+ {
+ if (!sep && strchr("; \n\r", charset_p[i]))
+ break;
+ if (charset_p[i] == '\\' && charset_p[i+1])
+ i++;
+ (*charset)[j++] = charset_p[i++];
+ }
+ (*charset)[j] = '\0';
}
}
}
p1 = p0 + strlen(p0);
if (p1 != p0)
db = yaz_decode_sru_dbpath_odr(decode, p0, p1 - p0);
- grab_charset(decode, content_type, charset);
ret = z_soap_codec(decode, soap_package,
&hreq->content_buf, &hreq->content_len,
!yaz_strcmp_del("application/x-www-form-urlencoded",
content_type, "; ")))
{
- char *db = "Default";
const char *p0 = hreq->path, *p1;
#if YAZ_HAVE_XML2
+ char *db = "Default";
const char *operation = 0;
char *version = 0;
char *query = 0;
char *startRecord = 0;
char *maximumTerms = 0;
char *responsePosition = 0;
+ const char *facetLimit = 0;
+ const char *facetStart = 0;
+ const char *facetSort = 0;
Z_SRW_extra_arg *extra_args = 0;
#endif
char **uri_name;
maximumTerms = v;
else if (!strcmp(n, "responsePosition"))
responsePosition = v;
+ else if (!strcmp(n, "facetLimit"))
+ facetLimit = v;
+ else if (!strcmp(n, "facetStart"))
+ facetStart = v;
+ else if (!strcmp(n, "facetSort"))
+ facetSort = v;
else if (!strcmp(n, "extraRequestData"))
; /* ignoring extraRequestData */
else if (n[0] == 'x' && n[1] == '-')
sr->u.request->recordPacking = recordXMLEscaping;
sr->u.request->packing = recordPacking;
sr->u.request->stylesheet = stylesheet;
+ yaz_sru_facet_request(decode , &sr->u.request->facetList,
+ &facetLimit, &facetStart, &facetSort);
yaz_sru_decode_integer(decode, "maximumRecords", maximumRecords,
&sr->u.request->maximumRecords,
srw_pdu->u.request->stylesheet);
yaz_add_name_value_int(encode, name, value, &i, "resultSetTTL",
srw_pdu->u.request->resultSetTTL);
+ {
+ const char *facetLimit = 0;
+ const char *facetStart = 0;
+ const char *facetSort = 0;
+ yaz_sru_facet_request(encode, &srw_pdu->u.request->facetList,
+ &facetLimit, &facetStart, &facetSort);
+ yaz_add_name_value_str(encode, name, value, &i, "facetLimit",
+ (char *) facetLimit);
+ yaz_add_name_value_str(encode, name, value, &i, "facetStart",
+ (char *) facetStart);
+ yaz_add_name_value_str(encode, name, value, &i, "facetSort",
+ (char *) facetSort);
+ }
break;
case Z_SRW_explain_request:
value[i++] = "explain";
char *name[MAX_SRU_PARAMETERS], *value[MAX_SRU_PARAMETERS]; /* definite upper limit for SRU params */
char *uri_args;
char *path;
+ char *cp;
z_HTTP_header_add_basic_auth(encode, &hreq->headers,
srw_pdu->username, srw_pdu->password);
hreq->method = "GET";
+ cp = strchr(hreq->path, '#');
+ if (cp)
+ *cp = '\0';
+
path = (char *)
odr_malloc(encode, strlen(hreq->path) + strlen(uri_args) + 4);
- sprintf(path, "%s?%s", hreq->path, uri_args);
- yaz_log(YLOG_DEBUG, "SRU HTTP Get Request %s", path);
+ sprintf(path, "%s%c%s", hreq->path, strchr(hreq->path, '?') ? '&' : '?',
+ uri_args);
hreq->path = path;
z_HTTP_header_add_content_type(encode, &hreq->headers,
srw_pdu->username, srw_pdu->password);
z_HTTP_header_add_content_type(odr,
&hreq->headers,
- "text/xml", charset);
+ "text/xml", 0 /* no charset in MIME */);
z_HTTP_header_add(odr, &hreq->headers,
"SOAPAction", "\"\"");
Z_SRW_extra_arg **ea = &sr->extra_args;
yaz_uri_to_array(extra_args, odr, &name, &val);
+ /** append rather than override */
+ while (*ea)
+ ea = &(*ea)->next;
while (*name)
{
*ea = (Z_SRW_extra_arg *) odr_malloc(odr, sizeof(**ea));