Allow more namespaces for SRU
[yaz-moved-to-github.git] / src / prt-ext.c
index 3845209..0c130af 100644 (file)
@@ -1,12 +1,14 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2009 Index Data
+ * Copyright (C) 1995-2012 Index Data
  * See the file LICENSE for details.
  */
-
 /**
  * \file prt-ext.c
  * \brief Implements handling of various Z39.50 Externals
  */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <yaz/proto.h>
 
@@ -20,7 +22,7 @@
 /*
  * The table below should be moved to the ODR structure itself and
  * be an image of the association context: To help
- * map indirect references when they show up. 
+ * map indirect references when they show up.
  */
 static Z_ext_typeent type_table[] =
 {
@@ -44,6 +46,7 @@ static Z_ext_typeent type_table[] =
     {{1, 2, 840, 10003, 7, 1000, 81, 1,-1}, Z_External_universeReport,(Odr_fun)z_UniverseReport},
     {{1, 2, 840, 10003, 9, 1000, 81, 1,-1}, Z_External_ESAdmin, (Odr_fun)z_Admin},
     {{1, 2, 840, 10003, 10, 3,-1}, Z_External_userInfo1, (Odr_fun) z_OtherInformation},
+    {{1, 2, 840, 10003, 10, 1000, 81, 5,-1}, Z_External_userFacets, (Odr_fun) z_FacetList},
     {{1, 2, 840, 10003, 15, 3,-1}, Z_External_charSetandLanguageNegotiation, (Odr_fun)
                   z_CharSetandLanguageNegotiation},
     {{1, 2, 840, 10003, 8, 1,-1}, Z_External_acfPrompt1, (Odr_fun) z_PromptObject1},
@@ -82,7 +85,7 @@ Z_ext_typeent *z_ext_getentbyref(const Odr_oid *oid)
     encoding              CHOICE {
       single-ASN1-type   [0] ABSTRACT_SYNTAX.&Type,
       octet-aligned      [1] IMPLICIT OCTET STRING,
-      arbitrary          [2] IMPLICIT BIT STRING 
+      arbitrary          [2] IMPLICIT BIT STRING
       }
     }
   </pre>
@@ -142,6 +145,8 @@ int z_External(ODR o, Z_External **p, int opt, const char *name)
          (Odr_fun)z_IU0Update, 0},
         {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_userInfo1,
          (Odr_fun)z_OtherInformation, 0},
+        {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_userFacets,
+         (Odr_fun)z_FacetList, "FacetList" },
         {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_charSetandLanguageNegotiation,
          (Odr_fun)z_CharSetandLanguageNegotiation, 0},
         {ODR_EXPLICIT, ODR_CONTEXT, 0, Z_External_acfPrompt1,
@@ -218,11 +223,11 @@ int z_External(ODR o, Z_External **p, int opt, const char *name)
             Odr_oct *oct;
             int r;
             if (!odr_implicit_tag(o, odr_octetstring, &oct,
-                                 ODR_CONTEXT, 1, 0, "octetaligned"))
+                                  ODR_CONTEXT, 1, 0, "octetaligned"))
                 return 0;
 
             /* Save our decoding ODR members */
-            o_bp = o->bp; 
+            o_bp = o->bp;
             o_buf = o->buf;
             o_size = o->size;
 
@@ -234,16 +239,16 @@ int z_External(ODR o, Z_External **p, int opt, const char *name)
             r = (*type->fun)(o, &voidp, 0, 0);
             (*p)->which = type->what;
             (*p)->u.single_ASN1_type = (Odr_any*) voidp;
-                
+
             /* Restore our decoding ODR member */
-            o->bp = o_bp; 
+            o->bp = o_bp;
             o->buf = o_buf;
             o->size = o_size;
 
             return r && odr_sequence_end(o);
         }
         if (zclass == ODR_CONTEXT && tag == 0 && cons == 1)
-        { 
+        {
             /* It's single ASN.1 type, bias the CHOICE. */
             odr_choice_bias(o, type->what);
         }
@@ -256,18 +261,12 @@ int z_External(ODR o, Z_External **p, int opt, const char *name)
 Z_External *z_ext_record_oid(ODR o, const Odr_oid *oid, const char *buf, int len)
 {
     Z_External *thisext;
-    char oid_str_buf[OID_STR_MAX];
-    const char *oid_str;
-    oid_class oclass;
 
     if (!oid)
         return 0;
     thisext = (Z_External *) odr_malloc(o, sizeof(*thisext));
     thisext->descriptor = 0;
     thisext->indirect_reference = 0;
-
-    oid_str = yaz_oid_to_string_buf(oid, &oclass, oid_str_buf);
-
     thisext->direct_reference = odr_oiddup(o, oid);
 
     if (len < 0) /* Structured data */
@@ -309,10 +308,10 @@ Z_External *z_ext_record_oid(ODR o, const Odr_oid *oid, const char *buf, int len
             return 0;
         }
     }
-    else if (!oid_oidcmp(oid, yaz_oid_recsyn_sutrs)) /* SUTRS is a single-ASN.1-type */
-    {
+    else if (!oid_oidcmp(oid, yaz_oid_recsyn_sutrs))
+    {    /* SUTRS is a single-ASN.1-type */
         Odr_oct *sutrs = (Odr_oct *)odr_malloc(o, sizeof(*sutrs));
-        
+
         thisext->which = Z_External_sutrs;
         thisext->u.sutrs = sutrs;
         sutrs->buf = (unsigned char *)odr_malloc(o, len);
@@ -338,18 +337,12 @@ Z_External *z_ext_record_oid_any(ODR o, const Odr_oid *oid,
                                  const char *buf, int len)
 {
     Z_External *thisext;
-    char oid_str_buf[OID_STR_MAX];
-    const char *oid_str;
-    oid_class oclass;
 
     if (!oid)
         return 0;
     thisext = (Z_External *) odr_malloc(o, sizeof(*thisext));
     thisext->descriptor = 0;
     thisext->indirect_reference = 0;
-
-    oid_str = yaz_oid_to_string_buf(oid, &oclass, oid_str_buf);
-
     thisext->direct_reference = odr_oiddup(o, oid);
 
     thisext->which = Z_External_single;