Use libxml2 instead of libxslt(and libxml2)
[yaz-moved-to-github.git] / zutil / zoom-c.c
index 9a9e9da..a2b6008 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (c) 2000-2003, Index Data
  * See the file LICENSE for details.
  *
- * $Id: zoom-c.c,v 1.20 2003-02-17 14:35:42 adam Exp $
+ * $Id: zoom-c.c,v 1.22 2003-02-17 22:35:48 adam Exp $
  *
  * ZOOM layer for C, connections, result sets, queries.
  */
@@ -347,7 +347,6 @@ ZOOM_connection_connect(ZOOM_connection c,
        c->lang = 0;
 
     xfree (c->host_port);
-    xfree (c->path);
     if (portnum)
     {
        char hostn[128];
@@ -466,6 +465,7 @@ ZOOM_connection_destroy(ZOOM_connection c)
     ZOOM_options_destroy (c->options);
     ZOOM_connection_remove_tasks (c);
     xfree (c->host_port);
+    xfree (c->path);
     xfree (c->proxy);
     xfree (c->charset);
     xfree (c->lang);
@@ -641,6 +641,20 @@ static void ZOOM_resultset_retrieve (ZOOM_resultset r,
     c = r->connection;
     if (!c)
        return;
+
+    if (c->host_port && c->proto == PROTO_SRW)
+    {
+        if (!c->cs)
+        {
+            yaz_log(LOG_DEBUG, "NO COMSTACK");
+            ZOOM_connection_add_task(c, ZOOM_TASK_CONNECT);
+        }
+        else
+        {
+            yaz_log(LOG_DEBUG, "PREPARE FOR RECONNECT");
+            c->reconnect_ok = 1;
+        }
+    }
     task = ZOOM_connection_add_task (c, ZOOM_TASK_RETRIEVE);
     task->u.retrieve.resultset = r;
     task->u.retrieve.start = start;
@@ -698,7 +712,7 @@ static zoom_ret do_connect (ZOOM_connection c)
 
     if (memcmp(c->host_port, "http:", 5) == 0)
     {
-#if HAVE_XSLT
+#if HAVE_XML2
         const char *path;
         c->proto = PROTO_SRW;
         effective_host = c->host_port + 5;
@@ -840,7 +854,6 @@ static int encode_APDU(ZOOM_connection c, Z_APDU *a, ODR out)
 static zoom_ret send_APDU (ZOOM_connection c, Z_APDU *a)
 {
     ZOOM_Event event;
-    yaz_log(LOG_LOG, "sending Z39.50 APDU");
     assert (a);
     if (encode_APDU(c, a, c->odr_out))
        return zoom_complete;
@@ -962,7 +975,7 @@ static zoom_ret ZOOM_connection_send_init (ZOOM_connection c)
     return send_APDU (c, apdu);
 }
 
-#if HAVE_XSLT
+#if HAVE_XML2
 static zoom_ret send_srw (ZOOM_connection c, Z_SRW_searchRetrieve *sr)
 {
     Z_SOAP_Handler h[2] = {
@@ -1005,7 +1018,7 @@ static zoom_ret send_srw (ZOOM_connection c, Z_SRW_searchRetrieve *sr)
 }
 #endif
 
-#if HAVE_XSLT
+#if HAVE_XML2
 static zoom_ret ZOOM_connection_srw_send_search(ZOOM_connection c)
 {
     int i;
@@ -1016,7 +1029,11 @@ static zoom_ret ZOOM_connection_srw_send_search(ZOOM_connection c)
        return zoom_complete;
     assert (c->tasks);
     if (c->tasks->which == ZOOM_TASK_SEARCH)
+    {
         resultset = c->tasks->u.search.resultset;
+        resultset->setname = xstrdup ("default");
+        ZOOM_options_set (resultset->options, "setname", resultset->setname);
+    }
     else if(c->tasks->which == ZOOM_TASK_RETRIEVE)
     {
         resultset = c->tasks->u.retrieve.resultset;
@@ -1060,8 +1077,6 @@ static zoom_ret ZOOM_connection_srw_send_search(ZOOM_connection c)
     sr->u.request->maximumRecords = odr_intdup (c->odr_out, resultset->count);
     sr->u.request->recordSchema = resultset->schema;
 
-    resultset->setname = xstrdup ("default");
-    ZOOM_options_set (resultset->options, "setname", resultset->setname);
  
     return send_srw(c, sr);
 }
@@ -1757,15 +1772,15 @@ static zoom_ret send_present (ZOOM_connection c)
         compo->u.complex->generic = (Z_Specification *)
             odr_malloc(c->odr_out, sizeof(*compo->u.complex->generic));
 
-        compo->u.complex->generic->which = Z_Specification_oid;
-        compo->u.complex->generic->u.oid = (Odr_oid *)
+        compo->u.complex->generic->which = Z_Schema_oid;
+        compo->u.complex->generic->schema.oid = (Odr_oid *)
             yaz_str_to_z3950oid (c->odr_out, CLASS_SCHEMA, resultset->schema);
 
-        if (!compo->u.complex->generic->u.oid)
+        if (!compo->u.complex->generic->schema.oid)
         {
             /* OID wasn't a schema! Try record syntax instead. */
 
-            compo->u.complex->generic->u.oid = (Odr_oid *)
+            compo->u.complex->generic->schema.oid = (Odr_oid *)
                 yaz_str_to_z3950oid (c->odr_out, CLASS_RECSYN, resultset->schema);
         }
         if (elementSetName && *elementSetName)
@@ -2376,7 +2391,7 @@ static void handle_apdu (ZOOM_connection c, Z_APDU *apdu)
     }
 }
 
-#if HAVE_XSLT
+#if HAVE_XML2
 static void handle_srw_response(ZOOM_connection c,
                                 Z_SRW_searchRetrieveResponse *res)
 {
@@ -2443,7 +2458,7 @@ static void handle_srw_response(ZOOM_connection c,
 }
 #endif
 
-#if HAVE_XSLT
+#if HAVE_XML2
 static void handle_http(ZOOM_connection c, Z_HTTP_Response *hres)
 {
     int ret = -1;
@@ -2557,7 +2572,7 @@ static int do_read (ZOOM_connection c)
            handle_apdu (c, gdu->u.z3950);
         else if (gdu->which == Z_GDU_HTTP_Response)
         {
-#if HAVE_XSLT
+#if HAVE_XML2
             handle_http (c, gdu->u.HTTP_Response);
 #else
             set_ZOOM_error(c, ZOOM_ERROR_DECODE, 0);
@@ -2587,7 +2602,7 @@ static zoom_ret do_write_ex (ZOOM_connection c, char *buf_out, int len_out)
             yaz_log (LOG_DEBUG, "reconnect write");
             c->tasks->running = 0;
             ZOOM_connection_insert_task (c, ZOOM_TASK_CONNECT);
-            return zoom_complete;
+            return zoom_pending;
         }
        if (c->state == STATE_CONNECTING)
            set_ZOOM_error(c, ZOOM_ERROR_CONNECT, 0);