Added odr_intdup. Ztest server returns TaskPackage for ItemUpdate.
[yaz-moved-to-github.git] / client / client.c
index 9b37bdd..25a299c 100644 (file)
@@ -1,10 +1,27 @@
 /*
- * Copyright (c) 1995-2000, Index Data
+ * Copyright (c) 1995-2001, Index Data
  * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: client.c,v $
- * Revision 1.111  2001-01-30 15:52:48  ja7
+ * Revision 1.117  2001-03-25 21:55:12  adam
+ * Added odr_intdup. Ztest server returns TaskPackage for ItemUpdate.
+ *
+ * Revision 1.116  2001/03/21 12:43:36  adam
+ * Implemented cs_create_host. Better error reporting for SSL comstack.
+ *
+ * Revision 1.115  2001/03/13 18:10:58  adam
+ * Added option -c to set CCL config file.
+ *
+ * Revision 1.114  2001/02/21 13:46:53  adam
+ * C++ fixes.
+ *
+ * Revision 1.113  2001/02/21 09:41:15  adam
+ * Fixed problem with old codecs.
+ *
+ * Revision 1.112  2001/02/20 11:25:32  adam
+ * Added ill_get_APDU and ill_get_Cancel.
+ *
+ * Revision 1.111  2001/01/30 15:52:48  ja7
  * added command for setting packageName in ES packages!
  * command is named packagename default is NULL for server suplyed package name
  *
@@ -421,6 +438,7 @@ static NMEM session_mem = NULL;      /* memory handle for init-response */
 static Z_InitResponse *session = 0;     /* session parameters */
 static char last_scan_line[512] = "0";
 static char last_scan_query[512] = "0";
+static char ccl_fields[512] = "default.bib";
 char* esPackageName = 0;
 
 static char last_cmd[100] = "?";
@@ -616,7 +634,6 @@ int cmd_open(char *arg)
 {
     void *add;
     char type_and_host[101], base[101];
-    char *host = 0;
     CS_TYPE t;
 
     if (conn)
@@ -635,44 +652,28 @@ int cmd_open(char *arg)
     base[0] = '\0';
     if (sscanf (arg, "%100[^/]/%100s", type_and_host, base) < 1)
         return 0;
-    if (strncmp (type_and_host, "tcp:", 4) == 0)
-        host = type_and_host + 4;
-    else if (strncmp (type_and_host, "ssl:", 4) == 0)
-    {
-#if HAVE_OPENSSL_SSL_H
-       t = ssl_type;
-#else
-       printf ("SSL not supported\n");
-#endif
-        host = type_and_host + 4;
-    }
-    else
-        host = type_and_host;
-    if (*base)
-        cmd_base (base);
-    protocol = PROTO_Z3950;
 
-    if (!(conn = cs_create(t, 1, protocol)))
+    conn = cs_create_host(type_and_host, 1, &add);
+    if (!conn)
     {
-        perror("cs_create");
-        return 0;
-    }
-    if (!(add = cs_straddr(conn, host)))
-    {
-        perror(arg);
-        return 0;
+       printf ("Couldn't create comstack\n");
+       return 0;
     }
     printf("Connecting...");
     fflush(stdout);
     if (cs_connect(conn, add) < 0)
     {
-        perror("connect");
+       printf ("error = %s\n", cs_strerror(conn));
+       if (conn->cerrno == CSYSERR)
+           perror("system");
         cs_close(conn);
         conn = 0;
         return 0;
     }
     printf("Ok.\n");
     send_initRequest();
+    if (*base)
+        cmd_base (base);
     return 2;
 }
 
@@ -1364,7 +1365,8 @@ static Z_External *create_external_itemRequest()
         
         r->u.single_ASN1_type = (Odr_oct *)
             odr_malloc (out, sizeof(*r->u.single_ASN1_type));
-        r->u.single_ASN1_type->buf = odr_malloc (out, item_request_size);
+        r->u.single_ASN1_type->buf = (unsigned char *)
+           odr_malloc (out, item_request_size);
         r->u.single_ASN1_type->len = item_request_size;
         r->u.single_ASN1_type->size = item_request_size;
         memcpy (r->u.single_ASN1_type->buf, item_request_buf,
@@ -1381,10 +1383,10 @@ static Z_External *create_external_itemRequest()
 #endif
 
 #ifdef ASN_COMPILED
-static Z_External *create_external_ILLRequest()
+static Z_External *create_external_ILL_APDU(int which)
 {
     struct ill_get_ctl ctl;
-    ILL_Request *req;
+    ILL_APDU *ill_apdu;
     Z_External *r = 0;
     int ill_request_size = 0;
     char *ill_request_buf = 0;
@@ -1393,14 +1395,14 @@ static Z_External *create_external_ILLRequest()
     ctl.clientData = 0;
     ctl.f = get_ill_element;
 
-    req = ill_get_ILLRequest(&ctl, "ill", 0);
+    ill_apdu = ill_get_APDU(&ctl, "ill", 0);
 
-    if (!ill_Request (out, &req, 0, 0))
+    if (!ill_APDU (out, &ill_apdu, 0, 0))
     {
         if (apdu_file)
         {
             printf ("-------------------\n");
-            ill_Request(print, &req, 0, 0);
+            ill_APDU(print, &ill_apdu, 0, 0);
             odr_reset(print);
             printf ("-------------------\n");
         }
@@ -1427,7 +1429,8 @@ static Z_External *create_external_ILLRequest()
         
         r->u.single_ASN1_type = (Odr_oct *)
             odr_malloc (out, sizeof(*r->u.single_ASN1_type));
-        r->u.single_ASN1_type->buf = odr_malloc (out, ill_request_size);
+        r->u.single_ASN1_type->buf = (unsigned char *)
+           odr_malloc (out, ill_request_size);
         r->u.single_ASN1_type->len = ill_request_size;
         r->u.single_ASN1_type->size = ill_request_size;
         memcpy (r->u.single_ASN1_type->buf, ill_request_buf, ill_request_size);
@@ -1490,6 +1493,7 @@ static Z_External *create_ItemOrderExternal(const char *type, int itemno)
         (int *) odr_malloc(out, sizeof(int));
     *r->u.itemOrder->u.esRequest->notToKeep->resultSetItem->item = itemno;
 
+#ifdef ASN_COMPILED
     if (!strcmp (type, "item") || !strcmp(type, "2"))
     {
         printf ("using item-request\n");
@@ -1500,16 +1504,20 @@ static Z_External *create_ItemOrderExternal(const char *type, int itemno)
     {
         printf ("using ILL-request\n");
         r->u.itemOrder->u.esRequest->notToKeep->itemRequest = 
-            create_external_ILLRequest();
+            create_external_ILL_APDU(ILL_APDU_ILL_Request);
     }
     else
         r->u.itemOrder->u.esRequest->notToKeep->itemRequest = 0;
+
+#else
+    r->u.itemOrder->u.esRequest->notToKeep->itemRequest = 0;
+#endif
     return r;
 }
 
 static int send_itemorder(const char *type, int itemno)
 {
-    Z_APDU *apdu = zget_APDU(out, Z_APDU_extendedServicesRequest );
+    Z_APDU *apdu = zget_APDU(out, Z_APDU_extendedServicesRequest);
     Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest;
     oident ItemOrderRequest;
 
@@ -1901,7 +1909,7 @@ int send_scanrequest(const char *query, int pp, int num, const char *term)
             req->termListAndStartPoint->term->u.general)
         {
             req->termListAndStartPoint->term->u.general->buf =
-                odr_strdup(out, term);
+                (unsigned char *) odr_strdup(out, term);
             req->termListAndStartPoint->term->u.general->len =
                 req->termListAndStartPoint->term->u.general->size =
                 strlen(term);
@@ -2359,7 +2367,7 @@ static void initialize(void)
 
 #if CCL2RPN
     bibset = ccl_qual_mk (); 
-    inf = fopen ("default.bib", "r");
+    inf = fopen (ccl_fields, "r");
     if (inf)
     {
         ccl_qual_file (bibset, inf);
@@ -2609,7 +2617,7 @@ int main(int argc, char **argv)
     int ret;
     int opened = 0;
 
-    while ((ret = options("a:m:v:", argv, argc, &arg)) != -2)
+    while ((ret = options("c:a:m:v:", argv, argc, &arg)) != -2)
     {
         switch (ret)
         {
@@ -2628,6 +2636,10 @@ int main(int argc, char **argv)
                 exit (1);
             }
             break;
+       case 'c':
+           strncpy (ccl_fields, arg, sizeof(ccl_fields)-1);
+           ccl_fields[sizeof(ccl_fields)-1] = '\0';
+           break;
         case 'a':
             if (!strcmp(arg, "-"))
                 apdu_file=stderr;
@@ -2639,7 +2651,7 @@ int main(int argc, char **argv)
             break;
         default:
             fprintf (stderr, "Usage: %s [-m <marclog>] [ -a <apdulog>] "
-                             "[<server-addr>]\n",
+                             "[-c cclfields] [<server-addr>]\n",
                      prog);
             exit (1);
         }