#include <assert.h>
#include <yaz/srw.h>
#include <yaz/matchstr.h>
+#include <yaz/base64.h>
#include <yaz/yaz-iconv.h>
#include "sru-p.h"
+#define MAX_SRU_PARAMETERS 30
+
static char *yaz_decode_sru_dbpath_odr(ODR n, const char *uri, size_t len)
{
return odr_strdupn(n, uri, len);
Z_AttributeElement ** elements;
attributes->num_attributes = 1;
elements = (Z_AttributeElement**)
- odr_malloc (o, attributes->num_attributes * sizeof(*elements));
+ odr_malloc(o, attributes->num_attributes * sizeof(*elements));
elements[0] = (Z_AttributeElement*) odr_malloc(o,sizeof(**elements));
elements[0]->attributeType = odr_intdup(o, 1);
elements[0]->attributeSet = odr_nullval();
}
#endif
-static int yaz_base64decode(const char *in, char *out)
-{
- const char *map = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz0123456789+/";
- int olen = 0;
- int len = strlen(in);
-
- while (len >= 4)
- {
- char i0, i1, i2, i3;
- char *p;
-
- if (!(p = strchr(map, in[0])))
- return 0;
- i0 = p - map;
- len--;
- if (!(p = strchr(map, in[1])))
- return 0;
- i1 = p - map;
- len--;
- *(out++) = i0 << 2 | i1 >> 4;
- olen++;
- if (in[2] == '=')
- break;
- if (!(p = strchr(map, in[2])))
- return 0;
- i2 = p - map;
- len--;
- *(out++) = i1 << 4 | i2 >> 2;
- olen++;
- if (in[3] == '=')
- break;
- if (!(p = strchr(map, in[3])))
- return 0;
- i3 = p - map;
- len--;
- *(out++) = i2 << 6 | i3;
- olen++;
-
- in += 4;
- }
-
- *out = '\0';
- return olen;
-}
-
int yaz_srw_check_content_type(Z_HTTP_Response *hres)
{
const char *content_type = z_HTTP_header_lookup(hres->headers,
if (basic)
{
- int len, olen;
+ int len;
char out[256];
char ubuf[256] = "", pbuf[256] = "", *p;
if (strncmp(basic, "Basic ", 6))
len = strlen(basic);
if (!len || len > 256)
return;
- olen = yaz_base64decode(basic, out);
+ yaz_base64decode(basic, out);
/* Format of out should be username:password at this point */
strcpy(ubuf, out);
if ((p = strchr(ubuf, ':')))
const char *message, const char *details)
{
Z_SRW_diagnostic *d_new;
- d_new = (Z_SRW_diagnostic *) odr_malloc (o, (*num + 1)* sizeof(**d));
+ d_new = (Z_SRW_diagnostic *) odr_malloc(o, (*num + 1)* sizeof(**d));
if (*num)
- memcpy (d_new, *d, *num *sizeof(**d));
+ memcpy(d_new, *d, *num *sizeof(**d));
*d = d_new;
yaz_mk_srw_diagnostic(o, *d + *num, uri, message, details);
char *startRecord = 0;
char *maximumTerms = 0;
char *responsePosition = 0;
- char *extraRequestData = 0;
Z_SRW_extra_arg *extra_args = 0;
#endif
char **uri_name;
else if (!strcmp(n, "responsePosition"))
responsePosition = v;
else if (!strcmp(n, "extraRequestData"))
- extraRequestData = v;
+ ; /* ignoring extraRequestData */
else if (n[0] == 'x' && n[1] == '-')
{
Z_SRW_extra_arg **l = &extra_args;
sr->u.response->nextRecordPosition = 0;
sr->u.response->extra_records = 0;
sr->u.response->facetList = 0;
+ sr->u.response->suggestions = 0;
break;
case Z_SRW_explain_request:
sr->u.explain_request = (Z_SRW_explainRequest *)
int yaz_sru_get_encode(Z_HTTP_Request *hreq, Z_SRW_PDU *srw_pdu,
ODR encode, const char *charset)
{
- char *name[30], *value[30]; /* definite upper limit for SRU params */
+ char *name[MAX_SRU_PARAMETERS], *value[MAX_SRU_PARAMETERS]; /* definite upper limit for SRU params */
char *uri_args;
char *path;
z_HTTP_header_add_basic_auth(encode, &hreq->headers,
srw_pdu->username, srw_pdu->password);
- if (yaz_get_sru_parms(srw_pdu, encode, name, value, 30))
+ if (yaz_get_sru_parms(srw_pdu, encode, name, value, MAX_SRU_PARAMETERS))
return -1;
yaz_array_to_uri(&uri_args, encode, name, value);
int yaz_sru_post_encode(Z_HTTP_Request *hreq, Z_SRW_PDU *srw_pdu,
ODR encode, const char *charset)
{
- char *name[30], *value[30]; /* definite upper limit for SRU params */
+ char *name[MAX_SRU_PARAMETERS], *value[MAX_SRU_PARAMETERS]; /* definite upper limit for SRU params */
char *uri_args;
z_HTTP_header_add_basic_auth(encode, &hreq->headers,
srw_pdu->username, srw_pdu->password);
- if (yaz_get_sru_parms(srw_pdu, encode, name, value, 30))
+ if (yaz_get_sru_parms(srw_pdu, encode, name, value, MAX_SRU_PARAMETERS))
return -1;
yaz_array_to_uri(&uri_args, encode, name, value);