yaz-client: honor base command for SRU
[yaz-moved-to-github.git] / client / client.c
index d6ec0c3..824fe24 100644 (file)
@@ -104,7 +104,7 @@ static int smallSetUpperBound = 0;
 static int largeSetLowerBound = 1;
 static int mediumSetPresentNumber = 0;
 static Z_ElementSetNames *elementSetNames = 0;
-static odr_int_t setno = 1;                   /* current set offset */
+static Odr_int setno = 1;                   /* current set offset */
 static enum oid_proto protocol = PROTO_Z3950;      /* current app protocol */
 #define RECORDSYNTAX_MAX 20
 static char *recordsyntax_list[RECORDSYNTAX_MAX];
@@ -435,8 +435,8 @@ static int process_initResponse(Z_InitResponse *res)
                 else
                 {
                     /* Peek at any private Init-diagnostic APDUs */
-                    printf("### NAUGHTY: External is '%.*s'\n",
-                           sat->len, sat->buf);
+                    printf("yaz-client ignoring unrecognised userInformationField: %d-octet External '%.*s'\n",
+                           (int) sat->len, sat->len, sat->buf);
                 }
             }
             odr_reset(print);
@@ -706,10 +706,6 @@ int session_connect(const char *arg)
     }
 #endif
     protocol = conn->protocol;
-    if (conn->protocol == PROTO_HTTP)
-        set_base("");
-    else
-        set_base("Default");
     printf("Connecting...");
     fflush(stdout);
     if (cs_connect(conn, add) < 0)
@@ -722,7 +718,10 @@ int session_connect(const char *arg)
     printf("OK.\n");
     cs_print_session_info(conn);
     if (basep && *basep)
-        set_base (basep);
+        set_base(basep);
+    else if (protocol == PROTO_Z3950)
+        set_base("Default");
+
     if (protocol == PROTO_Z3950)
     {
         send_initRequest(type_and_host);
@@ -739,9 +738,13 @@ int cmd_open(const char *arg)
         strncpy(cur_host, arg, sizeof(cur_host)-1);
         cur_host[sizeof(cur_host)-1] = 0;
     }
+
+    set_base("");
     r = session_connect(cur_host);
     if (conn && conn->protocol == PROTO_HTTP)
         queryType = QueryType_CQL;
+
+
     return r;
 }
 
@@ -760,7 +763,7 @@ int cmd_authentication(const char *arg)
     }
     else if (r == 1)
     {
-        auth = nmem_malloc(nmem_auth, sizeof(*auth));
+        auth = (Z_IdAuthentication *) nmem_malloc(nmem_auth, sizeof(*auth));
         if (!strcmp(args[0], "-"))
         {
             auth->which = Z_IdAuthentication_anonymous;
@@ -776,9 +779,10 @@ int cmd_authentication(const char *arg)
     }
     else if (r == 2)
     {
-        auth = nmem_malloc(nmem_auth, sizeof(*auth));
+        auth = (Z_IdAuthentication *) nmem_malloc(nmem_auth, sizeof(*auth));
         auth->which = Z_IdAuthentication_idPass;
-        auth->u.idPass = nmem_malloc(nmem_auth, sizeof(*auth->u.idPass));
+        auth->u.idPass = (Z_IdPass *)
+            nmem_malloc(nmem_auth, sizeof(*auth->u.idPass));
         auth->u.idPass->groupId = NULL;
         auth->u.idPass->userId = !strcmp(args[0], "-") ? 0 : args[0];
         auth->u.idPass->password = !strcmp(args[1], "-") ? 0 : args[1];
@@ -787,9 +791,10 @@ int cmd_authentication(const char *arg)
     }
     else if (r == 3)
     {
-        auth = nmem_malloc(nmem_auth, sizeof(*auth));
+        auth = (Z_IdAuthentication*) nmem_malloc(nmem_auth, sizeof(*auth));
         auth->which = Z_IdAuthentication_idPass;
-        auth->u.idPass = nmem_malloc(nmem_auth, sizeof(*auth->u.idPass));
+        auth->u.idPass = (Z_IdPass *)
+            nmem_malloc(nmem_auth, sizeof(*auth->u.idPass));
         auth->u.idPass->groupId = args[1];
         auth->u.idPass->userId = args[0];
         auth->u.idPass->password = args[2];
@@ -1216,6 +1221,7 @@ static int send_srw(Z_SRW_PDU *sr)
     *path = '/';
     strcpy(path+1, databaseNames[0]);
 
+    printf("path=%s\n", path);
     gdu = z_get_HTTP_Request_host_path(out, host_port, path);
 
     if (!yaz_matchstr(sru_method, "get"))
@@ -1640,7 +1646,7 @@ static void print_level(int iLevel)
         printf(" ");
 }
 
-static void print_int(int iLevel, const char *pTag, odr_int_t *pInt)
+static void print_int(int iLevel, const char *pTag, Odr_int *pInt)
 {
     if (pInt != NULL)
     {
@@ -1649,6 +1655,15 @@ static void print_int(int iLevel, const char *pTag, odr_int_t *pInt)
     }
 }
 
+static void print_bool(int iLevel, const char *pTag, Odr_bool *pInt)
+{
+    if (pInt != NULL)
+    {
+        print_level(iLevel);
+        printf("%s: %d\n", pTag, *pInt);
+    }
+}
+
 static void print_string(int iLevel, const char *pTag, const char *pString)
 {
     if (pString != NULL)
@@ -1793,10 +1808,10 @@ static int process_resourceControlRequest(Z_ResourceControlRequest *req)
 {
     printf("Received ResourceControlRequest.\n");
     print_referenceId(1, req->referenceId);
-    print_int(1, "Suspended Flag", req->suspendedFlag);
+    print_bool(1, "Suspended Flag", req->suspendedFlag);
     print_int(1, "Partial Results Available", req->partialResultsAvailable);
-    print_int(1, "Response Required", req->responseRequired);
-    print_int(1, "Triggered Request Flag", req->triggeredRequestFlag);
+    print_bool(1, "Response Required", req->responseRequired);
+    print_bool(1, "Triggered Request Flag", req->triggeredRequestFlag);
     print_external(1, req->resourceReport);
     return 0;
 }
@@ -2650,7 +2665,7 @@ static int cmd_setnames(const char *arg)
 /* PRESENT SERVICE ----------------------------- */
 
 static void parse_show_args(const char *arg_c, char *setstring,
-                            odr_int_t *start, odr_int_t *number)
+                            Odr_int *start, Odr_int *number)
 {
     char arg[40];
     char *p;
@@ -2686,7 +2701,7 @@ static int send_presentRequest(const char *arg)
     Z_APDU *apdu = zget_APDU(out, Z_APDU_presentRequest);
     Z_PresentRequest *req = apdu->u.presentRequest;
     Z_RecordComposition compo;
-    odr_int_t nos = 1;
+    Odr_int nos = 1;
     char setstring[100];
 
     req->referenceId = set_refid(out);
@@ -2777,7 +2792,7 @@ static int send_presentRequest(const char *arg)
 static int send_SRW_presentRequest(const char *arg)
 {
     char setstring[100];
-    odr_int_t nos = 1;
+    Odr_int nos = 1;
     Z_SRW_PDU *sr = srw_sr;
 
     if (!sr)
@@ -2923,7 +2938,7 @@ int cmd_cancel_find(const char *arg) {
 }
 
 int send_scanrequest(const char *set,  const char *query,
-                     odr_int_t pp, odr_int_t num, const char *term)
+                     Odr_int pp, Odr_int num, const char *term)
 {
     Z_APDU *apdu = zget_APDU(out, Z_APDU_scanRequest);
     Z_ScanRequest *req = apdu->u.scanRequest;
@@ -3888,9 +3903,10 @@ static void initialize(const char *rc_file)
 
     cmd_format("usmarc");
 
+    file_history = file_history_new();
+
     source_rc_file(rc_file);
 
-    file_history = file_history_new();
     file_history_load(file_history);
     file_history_trav(file_history, 0, add_to_readline_history);
 }
@@ -3997,6 +4013,12 @@ static void http_response(Z_HTTP_Response *hres)
     int ret = -1;
     const char *connection_head = z_HTTP_header_lookup(hres->headers,
                                                        "Connection");
+
+    if (hres->code != 200)
+    {
+        printf("HTTP Error Status=%d\n", hres->code);
+    }
+
     if (!yaz_srw_check_content_type(hres))
         printf("Content type does not appear to be XML\n");
     else
@@ -4024,12 +4046,14 @@ static void http_response(Z_HTTP_Response *hres)
                 printf("Got update response. Status: %s\n",
                        sr->u.update_response->operationStatus);
             else
+            {
+                printf("Decoding of SRW package failed\n");
                 ret = -1;
+            }
         }
         else if (soap_package && (soap_package->which == Z_SOAP_fault
                                   || soap_package->which == Z_SOAP_error))
         {
-            printf("HTTP Error Status=%d\n", hres->code);
             printf("SOAP Fault code %s\n",
                     soap_package->u.fault->fault_code);
             printf("SOAP Fault string %s\n",
@@ -4046,17 +4070,7 @@ static void http_response(Z_HTTP_Response *hres)
         odr_destroy(o);
     }
     if (ret)
-    {
-        if (hres->code != 200)
-        {
-            printf("HTTP Error Status=%d\n", hres->code);
-        }
-        else
-        {
-            printf("Decoding of SRW package failed\n");
-        }
-        close_session();
-    }
+        close_session(); /* close session on error */
     else
     {
         if (!strcmp(hres->version, "1.0"))