Happy new year
[yazpp-moved-to-github.git] / src / yaz-ir-assoc.cpp
index 5f5d00c..0978e06 100644 (file)
@@ -1,14 +1,16 @@
-/*
- * Copyright (c) 1998-2003, Index Data.
+/* This file is part of the yazpp toolkit.
+ * Copyright (C) Index Data and Mike Taylor
  * See the file LICENSE for details.
- * 
- * $Id: yaz-ir-assoc.cpp,v 1.27 2006-03-29 13:14:15 adam Exp $
  */
 
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
 #include <assert.h>
 
 #include <yaz/log.h>
 #include <yazpp/ir-assoc.h>
+#include <yaz/oid_db.h>
 
 using namespace yazpp_1;
 
@@ -17,7 +19,7 @@ IR_Assoc::IR_Assoc(IPDU_Observable *the_PDU_Observable)
 {
     m_num_databaseNames = 0;
     m_databaseNames = 0;
-    m_preferredRecordSyntax = VAL_NONE;
+    m_preferredRecordSyntax = 0;
     m_elementSetNames = 0;
     m_lastReceived = 0;
     m_host = 0;
@@ -30,6 +32,7 @@ IR_Assoc::IR_Assoc(IPDU_Observable *the_PDU_Observable)
 
 IR_Assoc::~IR_Assoc()
 {
+    xfree(m_preferredRecordSyntax);
     if (m_elementSetNames)
         delete [] m_elementSetNames->u.generic;
     delete [] m_elementSetNames;
@@ -89,35 +92,20 @@ void IR_Assoc::set_databaseNames(const char *dblist, const char *sep)
     delete [] list;
 }
 
-void IR_Assoc::set_preferredRecordSyntax (int value)
-{
-    m_preferredRecordSyntax = value;
-}
-
 void IR_Assoc::set_preferredRecordSyntax (const char *syntax)
 {
-    m_preferredRecordSyntax = VAL_NONE;
+    xfree(m_preferredRecordSyntax);
+    m_preferredRecordSyntax = 0;
     if (syntax && *syntax)
-        m_preferredRecordSyntax = oid_getvalbyname (syntax);
-}
-
-void IR_Assoc::get_preferredRecordSyntax (int *value)
-{
-    *value = m_preferredRecordSyntax;
+        m_preferredRecordSyntax = xstrdup(syntax);
 }
 
 void IR_Assoc::get_preferredRecordSyntax (const char **dst)
 {
-    struct oident ent;
-    ent.proto = PROTO_Z3950;
-    ent.oclass = CLASS_RECSYN;
-    ent.value = (enum oid_value) m_preferredRecordSyntax;
-
-    int oid[OID_SIZE];
-    oid_ent_to_oid (&ent, oid);
-    struct oident *entp = oid_getentbyoid (oid);
-    
-    *dst = entp ? entp->desc : "";
+    if (m_preferredRecordSyntax)
+        *dst = m_preferredRecordSyntax;
+    else
+        *dst = "";
 }
 
 void IR_Assoc::set_elementSetName (const char *elementSetName)
@@ -177,7 +165,7 @@ void IR_Assoc::recv_Z_PDU(Z_APDU *apdu, int len)
         recv_searchRequest(apdu->u.searchRequest);
         break;
     case Z_APDU_searchResponse:
-        yaz_log (m_log, "recv searchResponse"); 
+        yaz_log (m_log, "recv searchResponse");
         recv_searchResponse(apdu->u.searchResponse);
         break;
     case Z_APDU_presentRequest:
@@ -201,28 +189,25 @@ int IR_Assoc::send_searchRequest(Yaz_Z_Query *query,
 {
     Z_APDU *apdu = create_Z_PDU(Z_APDU_searchRequest);
     Z_SearchRequest *req = apdu->u.searchRequest;
-    int recordSyntax;
 
     req->query = query->get_Z_Query();
     if (!req->query)
         return -1;
     get_databaseNames (&req->num_databaseNames, &req->databaseNames);
-    int oid_syntax[OID_SIZE];
-    oident prefsyn;
+    const char *recordSyntax;
     get_preferredRecordSyntax(&recordSyntax);
-    if (recordSyntax != VAL_NONE)
+    if (recordSyntax && *recordSyntax)
     {
-        prefsyn.proto = PROTO_Z3950;
-        prefsyn.oclass = CLASS_RECSYN;
-        prefsyn.value = (enum oid_value) recordSyntax;
-        oid_ent_to_oid(&prefsyn, oid_syntax);
-        req->preferredRecordSyntax = oid_syntax;
+        req->preferredRecordSyntax
+            = yaz_string_to_oid_odr(yaz_oid_std(), CLASS_RECSYN, recordSyntax,
+                                    odr_encode());
     }
     yaz_log (m_log, "send_searchRequest");
     assert (req->otherInfo == 0);
     if (m_cookie)
     {
-        set_otherInformationString(&req->otherInfo, VAL_COOKIE, 1, m_cookie);
+        set_otherInformationString(&req->otherInfo, yaz_oid_userinfo_cookie,
+                                   1, m_cookie);
         assert (req->otherInfo);
     }
 
@@ -239,10 +224,10 @@ int IR_Assoc::send_searchRequest(Yaz_Z_Query *query,
     return send_Z_PDU(apdu, 0);
 }
 
-int IR_Assoc::send_presentRequest(int start, 
-                                      int number, 
-                                      char* pResultSetId,
-                                      char* pRefId)
+int IR_Assoc::send_presentRequest(Odr_int start,
+                                  Odr_int number,
+                                  char* pResultSetId,
+                                  char* pRefId)
 {
     Z_APDU *apdu = create_Z_PDU(Z_APDU_presentRequest);
     Z_PresentRequest *req = apdu->u.presentRequest;
@@ -250,17 +235,13 @@ int IR_Assoc::send_presentRequest(int start,
     req->resultSetStartPoint = &start;
     req->numberOfRecordsRequested = &number;
 
-    int oid_syntax[OID_SIZE];
-    oident prefsyn;
-    int recordSyntax;
+    const char *recordSyntax;
     get_preferredRecordSyntax (&recordSyntax);
-    if (recordSyntax != VAL_NONE)
+    if (recordSyntax && *recordSyntax)
     {
-        prefsyn.proto = PROTO_Z3950;
-        prefsyn.oclass = CLASS_RECSYN;
-        prefsyn.value = (enum oid_value) recordSyntax;
-        oid_ent_to_oid(&prefsyn, oid_syntax);
-        req->preferredRecordSyntax = oid_syntax;
+        req->preferredRecordSyntax =
+            yaz_string_to_oid_odr(yaz_oid_std(), CLASS_RECSYN, recordSyntax,
+                                  odr_encode());
     }
     Z_RecordComposition compo;
     Z_ElementSetNames *elementSetNames;
@@ -273,7 +254,8 @@ int IR_Assoc::send_presentRequest(int start,
     }
 
     if (m_cookie)
-        set_otherInformationString(&req->otherInfo, VAL_COOKIE, 1, m_cookie);
+        set_otherInformationString(&req->otherInfo, yaz_oid_userinfo_cookie,
+                                   1, m_cookie);
 
     if ( pRefId )
     {
@@ -384,7 +366,7 @@ int IR_Assoc::send_initRequest(char* pRefId)
 {
     Z_APDU *apdu = create_Z_PDU(Z_APDU_initRequest);
     Z_InitRequest *req = apdu->u.initRequest;
-    
+
     ODR_MASK_SET(req->options, Z_Options_search);
     ODR_MASK_SET(req->options, Z_Options_present);
     ODR_MASK_SET(req->options, Z_Options_namedResultSets);
@@ -404,9 +386,11 @@ int IR_Assoc::send_initRequest(char* pRefId)
     }
 
     if (m_proxy && m_host)
-        set_otherInformationString(&req->otherInfo, VAL_PROXY, 1, m_host);
+        set_otherInformationString(&req->otherInfo, yaz_oid_userinfo_proxy,
+                                   1, m_host);
     if (m_cookie)
-        set_otherInformationString(&req->otherInfo, VAL_COOKIE, 1, m_cookie);
+        set_otherInformationString(&req->otherInfo, yaz_oid_userinfo_cookie,
+                                   1, m_cookie);
     return send_Z_PDU(apdu, 0);
 }
 
@@ -428,16 +412,18 @@ int IR_Assoc::send_deleteResultSetRequest(char* pResultSetId, char* pRefId)
     {
         *req->deleteFunction = Z_DeleteResultSetRequest_all;
     }
-    
+
     if ( pRefId )
     {
         req->referenceId = getRefID(pRefId);
     }
 
     if (m_proxy && m_host)
-        set_otherInformationString(&req->otherInfo, VAL_PROXY, 1, m_host);
+        set_otherInformationString(&req->otherInfo, yaz_oid_userinfo_proxy,
+                                   1, m_host);
     if (m_cookie)
-        set_otherInformationString(&req->otherInfo, VAL_COOKIE, 1, m_cookie);
+        set_otherInformationString(&req->otherInfo, yaz_oid_userinfo_cookie,
+                                   1, m_cookie);
 
     return send_Z_PDU(apdu, 0);
 }
@@ -446,6 +432,7 @@ int IR_Assoc::send_deleteResultSetRequest(char* pResultSetId, char* pRefId)
 /*
  * Local variables:
  * c-basic-offset: 4
+ * c-file-style: "Stroustrup"
  * indent-tabs-mode: nil
  * End:
  * vim: shiftwidth=4 tabstop=8 expandtab