For Libxml2 and friends, YAZ defines YAZ_HAVE_{XML2,XSLT,EXSLT) in
[yaz-moved-to-github.git] / src / zoom-c.c
index f7cbd0a..0ff631d 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (C) 1995-2005, Index Data ApS
  * See the file LICENSE for details.
  *
- * $Id: zoom-c.c,v 1.79 2006-06-16 10:20:17 adam Exp $
+ * $Id: zoom-c.c,v 1.81 2006-07-06 10:17:54 adam Exp $
  */
 /**
  * \file zoom-c.c
@@ -72,6 +72,7 @@ static ZOOM_Event ZOOM_Event_create (int kind)
     event->kind = kind;
     event->next = 0;
     event->prev = 0;
+    yaz_log(log_details, "ZOOM_event_create(%d)", kind);
     return event;
 }
 
@@ -151,7 +152,7 @@ static void set_dset_error (ZOOM_connection c, int error,
                 addinfo2 ? addinfo2 : "");
 }
 
-#if HAVE_XML2
+#if YAZ_HAVE_XML2
 static void set_HTTP_error (ZOOM_connection c, int error,
                             const char *addinfo, const char *addinfo2)
 {
@@ -1007,7 +1008,7 @@ static zoom_ret do_connect (ZOOM_connection c)
 
     if (c->cs && c->cs->protocol == PROTO_HTTP)
     {
-#if HAVE_XML2
+#if YAZ_HAVE_XML2
         const char *path = 0;
 
         c->proto = PROTO_HTTP;
@@ -1195,7 +1196,7 @@ static zoom_ret ZOOM_connection_send_init (ZOOM_connection c)
         ZOOM_options_get(c->options, "implementationName"),
         odr_prepend(c->odr_out, "ZOOM-C", ireq->implementationName));
 
-    version = odr_strdup(c->odr_out, "$Revision: 1.79 $");
+    version = odr_strdup(c->odr_out, "$Revision: 1.81 $");
     if (strlen(version) > 10)   /* check for unexpanded CVS strings */
         version[strlen(version)-2] = '\0';
     ireq->implementationVersion = odr_prepend(c->odr_out,
@@ -1273,7 +1274,7 @@ static zoom_ret ZOOM_connection_send_init (ZOOM_connection c)
     return send_APDU (c, apdu);
 }
 
-#if HAVE_XML2
+#if YAZ_HAVE_XML2
 static zoom_ret send_srw (ZOOM_connection c, Z_SRW_PDU *sr)
 {
     Z_GDU *gdu;
@@ -1304,7 +1305,7 @@ static zoom_ret send_srw (ZOOM_connection c, Z_SRW_PDU *sr)
 }
 #endif
 
-#if HAVE_XML2
+#if YAZ_HAVE_XML2
 static zoom_ret ZOOM_connection_srw_send_search(ZOOM_connection c)
 {
     int i;
@@ -1345,7 +1346,10 @@ static zoom_ret ZOOM_connection_srw_send_search(ZOOM_connection c)
                 ZOOM_connection_put_event(c, event);
             }
         }
-        if (i == resultset->count)
+        resultset->start += i;
+        resultset->count -= i;
+
+        if (resultset->count == 0)
             return zoom_complete;
     }
     assert(resultset->query);
@@ -2111,6 +2115,8 @@ static void handle_records (ZOOM_connection c, Z_Records *sr,
                 record_cache_add (resultset, p->records[i],
                                   i+ resultset->start);
             }
+            resultset->count -= i;
+            resultset->start += i;
             /* transfer our response to search_nmem .. we need it later */
             nmem_transfer (resultset->odr->mem, nmem);
             nmem_destroy (nmem);
@@ -2331,6 +2337,7 @@ static zoom_ret send_present(ZOOM_connection c)
         yaz_log(log_details, "%p send_present no tasks", c);
         return zoom_complete;
     }
+    
     switch (c->tasks->which)
     {
     case ZOOM_TASK_SEARCH:
@@ -2375,7 +2382,10 @@ static zoom_ret send_present(ZOOM_connection c)
             ZOOM_connection_put_event(c, event);
         }
     }
-    if (i == resultset->count)
+    resultset->start += i;
+    resultset->count -= i;
+
+    if (resultset->count == 0)
     {
         yaz_log(log_details, "%p send_present skip=%d no more to fetch", c, i);
         return zoom_complete;
@@ -2384,9 +2394,6 @@ static zoom_ret send_present(ZOOM_connection c)
     apdu = zget_APDU(c->odr_out, Z_APDU_presentRequest);
     req = apdu->u.presentRequest;
 
-    resultset->start += i;
-    resultset->count -= i;
-
     if (i)
         yaz_log(log_details, "%p send_present skip=%d", c, i);
 
@@ -3399,7 +3406,7 @@ static void recv_apdu (ZOOM_connection c, Z_APDU *apdu)
     }
 }
 
-#if HAVE_XML2
+#if YAZ_HAVE_XML2
 static void handle_srw_response(ZOOM_connection c,
                                 Z_SRW_searchRetrieveResponse *res)
 {
@@ -3478,7 +3485,7 @@ static void handle_srw_response(ZOOM_connection c,
 }
 #endif
 
-#if HAVE_XML2
+#if YAZ_HAVE_XML2
 static void handle_http(ZOOM_connection c, Z_HTTP_Response *hres)
 {
     int ret = -1;
@@ -3598,7 +3605,7 @@ static int do_read (ZOOM_connection c)
             recv_apdu (c, gdu->u.z3950);
         else if (gdu->which == Z_GDU_HTTP_Response)
         {
-#if HAVE_XML2
+#if YAZ_HAVE_XML2
             handle_http (c, gdu->u.HTTP_Response);
 #else
             set_ZOOM_error(c, ZOOM_ERROR_DECODE, 0);
@@ -3894,6 +3901,7 @@ ZOOM_event (int no, ZOOM_connection *cs)
     int i, r, nfds;
     int max_fd = 0;
 
+    yaz_log(log_details, "ZOOM_event no=%d", no);
     for (i = 0; i<no; i++)
     {
         ZOOM_connection c = cs[i];
@@ -3907,9 +3915,10 @@ ZOOM_event (int no, ZOOM_connection *cs)
     for (i = 0; i<no; i++)
     {
         ZOOM_connection c = cs[i];
-        ZOOM_Event event;
-        if (c && ZOOM_connection_exec_task (c))
+        if (c)
         {
+            ZOOM_Event event;
+            ZOOM_connection_exec_task (c);
             if ((event = ZOOM_connection_get_event(c)))
             {
                 ZOOM_Event_destroy (event);