Reformat
[yaz-moved-to-github.git] / src / srwutil.c
index 6f54b29..40c8039 100644 (file)
 #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);
@@ -43,7 +46,7 @@ Z_AttributeList *yaz_use_attribute_create(ODR o, const char *name)
     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();
@@ -83,52 +86,6 @@ const char *yaz_element_attribute_value_get(xmlNodePtr ptr,
 }
 #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,
@@ -159,7 +116,7 @@ static void yaz_srw_decodeauth(Z_SRW_PDU *sr, Z_HTTP_Request *hreq,
 
     if (basic)
     {
-        int len, olen;
+        int len;
         char out[256];
         char ubuf[256] = "", pbuf[256] = "", *p;
         if (strncmp(basic, "Basic ", 6))
@@ -168,7 +125,7 @@ static void yaz_srw_decodeauth(Z_SRW_PDU *sr, Z_HTTP_Request *hreq,
         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, ':')))
@@ -220,9 +177,9 @@ void yaz_add_srw_diagnostic_uri(ODR o, Z_SRW_diagnostic **d,
                                 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);
@@ -435,7 +392,6 @@ int yaz_sru_decode(Z_HTTP_Request *hreq, Z_SRW_PDU **srw_pdu,
         char *startRecord = 0;
         char *maximumTerms = 0;
         char *responsePosition = 0;
-        char *extraRequestData = 0;
         Z_SRW_extra_arg *extra_args = 0;
 #endif
         char **uri_name;
@@ -498,7 +454,7 @@ int yaz_sru_decode(Z_HTTP_Request *hreq, Z_SRW_PDU **srw_pdu,
                 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;
@@ -1223,13 +1179,13 @@ static int yaz_get_sru_parms(const Z_SRW_PDU *srw_pdu, ODR encode,
 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);
 
@@ -1250,12 +1206,12 @@ int yaz_sru_get_encode(Z_HTTP_Request *hreq, Z_SRW_PDU *srw_pdu,
 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);