Added support for multi-homed YAZ frontend server. A backend config
[yaz-moved-to-github.git] / ztest / ztest.c
index e750212..8307833 100644 (file)
@@ -1,8 +1,8 @@
 /*
- * Copyright (c) 1995-2004, Index Data.
+ * Copyright (C) 1995-2005, Index Data ApS
  * See the file LICENSE for details.
  *
- * $Id: ztest.c,v 1.69 2005-01-11 10:44:07 adam Exp $
+ * $Id: ztest.c,v 1.72 2005-02-01 14:46:48 adam Exp $
  */
 
 /*
@@ -24,13 +24,13 @@ Z_GenericRecord *dummy_grs_record (int num, ODR o);
 char *dummy_marc_record (int num, ODR odr);
 char *dummy_xml_record (int num, ODR odr);
 
-int ztest_search (void *handle, bend_search_rr *rr);
-int ztest_sort (void *handle, bend_sort_rr *rr);
-int ztest_present (void *handle, bend_present_rr *rr);
-int ztest_esrequest (void *handle, bend_esrequest_rr *rr);
-int ztest_delete (void *handle, bend_delete_rr *rr);
+int ztest_search(void *handle, bend_search_rr *rr);
+int ztest_sort(void *handle, bend_sort_rr *rr);
+int ztest_present(void *handle, bend_present_rr *rr);
+int ztest_esrequest(void *handle, bend_esrequest_rr *rr);
+int ztest_delete(void *handle, bend_delete_rr *rr);
 
-int ztest_search (void *handle, bend_search_rr *rr)
+int ztest_search(void *handle, bend_search_rr *rr)
 {
     if (rr->num_bases != 1)
     {
@@ -552,28 +552,38 @@ int ztest_scan(void *handle, bend_scan_rr *q)
        perror("dummy-words");
        exit(1);
     }
-    if (q->term->term->which != Z_Term_general)
-    {
-       q->errcode = 229; /* unsupported term type */
-       return 0;
-    }
-    if (*q->step_size != 0)
+    if (q->num_entries > 200)
     {
-       q->errcode = 205; /*Only zero step size supported for Scan */
+       q->errcode = 31;
        return 0;
     }
-    if (q->term->term->u.general->len >= 80)
+    if (q->term)
     {
-       q->errcode = 11; /* term too long */
-       return 0;
+       int len;
+       if (q->term->term->which != Z_Term_general)
+       {
+           q->errcode = 229; /* unsupported term type */
+           return 0;
+       }
+       if (*q->step_size != 0)
+       {
+           q->errcode = 205; /*Only zero step size supported for Scan */
+           return 0;
+       }
+       len = q->term->term->u.general->len;
+       if (len >= sizeof(term))
+           len = sizeof(term)-1;
+       memcpy(term, q->term->term->u.general->buf, len);
+       term[len] = '\0';
     }
-    if (q->num_entries > 200)
+    else if (q->scanClause)
     {
-       q->errcode = 31;
-       return 0;
+       strncpy(term, q->scanClause, sizeof(term)-1);
+       term[sizeof(term)-1] = '\0';
     }
-    memcpy(term, q->term->term->u.general->buf, q->term->term->u.general->len);
-    term[q->term->term->u.general->len] = '\0';
+    else
+       strcpy(term, "0");
+
     for (p = term; *p; p++)
        if (islower(*(unsigned char *) p))
            *p = toupper(*p);
@@ -665,12 +675,19 @@ bend_initresult *bend_init(bend_initrequest *q)
     q->bend_fetch = ztest_fetch;
     q->bend_scan = ztest_scan;
     q->bend_explain = ztest_explain;
+    q->bend_srw_scan = ztest_scan;
+
+    yaz_log(YLOG_LOG, "ztest_init handle=%p control=%p",
+           counter, statserv_getcontrol());
 
     return r;
 }
 
 void bend_close(void *handle)
 {
+    yaz_log(YLOG_LOG, "ztest_close handle=%p control=%p",
+           handle, statserv_getcontrol());
+
     xfree (handle);              /* release our user-defined handle */
     return;
 }