Reformat
[yaz-moved-to-github.git] / src / srwutil.c
index 242ba16..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);
@@ -36,28 +39,27 @@ char *yaz_encode_sru_dbpath_odr(ODR out, const char *db)
     return dst;
 }
 
-Z_AttributeList *yaz_use_attribute_create(ODR o, const char *name) {
-    Z_AttributeList *attributes= (Z_AttributeList *) odr_malloc(o, sizeof(*attributes));
+Z_AttributeList *yaz_use_attribute_create(ODR o, const char *name)
+{
+    Z_AttributeList *attributes= (Z_AttributeList *)
+        odr_malloc(o, sizeof(*attributes));
     Z_AttributeElement ** elements;
     attributes->num_attributes = 1;
-    /* TODO check on name instead
-    if (!attributes->num_attributes) {
-        attributes->attributes = (Z_AttributeElement**)odr_nullval();
-        return attributes;
-    }
-    */
-    elements = (Z_AttributeElement**) odr_malloc (o, attributes->num_attributes * sizeof(*elements));
-    elements[0] = (Z_AttributeElement*)odr_malloc(o,sizeof(**elements));
-    elements[0]->attributeType = odr_malloc(o, sizeof(*elements[0]->attributeType));
-   *elements[0]->attributeType = 1;
+    elements = (Z_AttributeElement**)
+        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();
     elements[0]->which = Z_AttributeValue_complex;
-    elements[0]->value.complex = (Z_ComplexAttribute *) odr_malloc(o, sizeof(Z_ComplexAttribute));
+    elements[0]->value.complex = (Z_ComplexAttribute *)
+        odr_malloc(o, sizeof(Z_ComplexAttribute));
     elements[0]->value.complex->num_list = 1;
-    elements[0]->value.complex->list = (Z_StringOrNumeric **) odr_malloc(o, 1 * sizeof(Z_StringOrNumeric *));
-    elements[0]->value.complex->list[0] = (Z_StringOrNumeric *) odr_malloc(o, sizeof(Z_StringOrNumeric));
+    elements[0]->value.complex->list = (Z_StringOrNumeric **)
+        odr_malloc(o, 1 * sizeof(Z_StringOrNumeric *));
+    elements[0]->value.complex->list[0] = (Z_StringOrNumeric *)
+        odr_malloc(o, sizeof(Z_StringOrNumeric));
     elements[0]->value.complex->list[0]->which = Z_StringOrNumeric_string;
-    elements[0]->value.complex->list[0]->u.string = (Z_InternationalString *) odr_strdup(o, name);
+    elements[0]->value.complex->list[0]->u.string = odr_strdup(o, name);
     elements[0]->value.complex->semanticAction = 0;
     elements[0]->value.complex->num_semanticAction = 0;
     attributes->attributes = elements;
@@ -65,15 +67,18 @@ Z_AttributeList *yaz_use_attribute_create(ODR o, const char *name) {
 }
 
 #if YAZ_HAVE_XML2
-const char *yaz_element_attribute_value_get(xmlNodePtr ptr, const char *node_name, const char *attribute_name) {
-
+const char *yaz_element_attribute_value_get(xmlNodePtr ptr,
+                                            const char *node_name,
+                                            const char *attribute_name)
+{
     struct _xmlAttr *attr;
     // check if the node name matches
     if (strcmp((const char*) ptr->name, node_name))
         return 0;
     // check if the attribute name and return the value
     for (attr = ptr->properties; attr; attr = attr->next)
-        if (attr->children && attr->children->type == XML_TEXT_NODE) {
+        if (attr->children && attr->children->type == XML_TEXT_NODE)
+        {
             if (!strcmp((const char *) attr->name, attribute_name))
                 return (const char *) attr->children->content;
         }
@@ -81,52 +86,6 @@ const char *yaz_element_attribute_value_get(xmlNodePtr ptr, const char *node_nam
 }
 #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,
@@ -155,8 +114,9 @@ static void yaz_srw_decodeauth(Z_SRW_PDU *sr, Z_HTTP_Request *hreq,
     if (password)
         sr->password = password;
 
-    if (basic) {
-        int len, olen;
+    if (basic)
+    {
+        int len;
         char out[256];
         char ubuf[256] = "", pbuf[256] = "", *p;
         if (strncmp(basic, "Basic ", 6))
@@ -165,10 +125,11 @@ 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, ':'))) {
+        if ((p = strchr(ubuf, ':')))
+        {
             *(p++) = '\0';
             if (*p)
                 strcpy(pbuf, p);
@@ -216,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);
@@ -431,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;
@@ -494,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;
@@ -1219,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);
 
@@ -1246,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);
@@ -1305,12 +1265,13 @@ int yaz_sru_soap_encode(Z_HTTP_Request *hreq, Z_SRW_PDU *srw_pdu,
                             charset);
 }
 
-Z_SRW_recordVersion *yaz_srw_get_record_versions(ODR odr, int num )
+Z_SRW_recordVersion *yaz_srw_get_record_versions(ODR odr, int num)
 {
     Z_SRW_recordVersion *ver 
-        = (Z_SRW_recordVersion *) odr_malloc( odr, num * sizeof(*ver) );
+        = (Z_SRW_recordVersion *) odr_malloc(odr,num * sizeof(*ver));
     int i;
-    for ( i=0; i < num; ++i ){
+    for (i = 0; i < num; ++i)
+    {
         ver[i].versionType = 0;
         ver[i].versionValue = 0;
     }