X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=client%2Fclient.c;h=b3bec5e0ed4121c1a9dcf1e19c8c630f4401d209;hb=16ae6b899b1eb60c570650b7acc8e673531f5510;hp=b5921ef835dea93c06dc0d3e35df6ae67c012a9d;hpb=3a36217ed64fc7c30c3c886d85d4f337fe2f9282;p=yaz-moved-to-github.git diff --git a/client/client.c b/client/client.c index b5921ef..b3bec5e 100644 --- a/client/client.c +++ b/client/client.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2008 Index Data + * Copyright (C) 1995-2009 Index Data * See the file LICENSE for details. */ /** \file client.c @@ -92,7 +92,10 @@ static Z_SRW_PDU *srw_sr = 0; static FILE *apdu_file = 0; static FILE *ber_file = 0; static COMSTACK conn = 0; /* our z-association */ + static Z_IdAuthentication *auth = 0; /* our current auth definition */ +static NMEM nmem_auth = NULL; + char *databaseNames[128]; int num_databaseNames = 0; static Z_External *record_last = 0; @@ -130,7 +133,6 @@ static char* yazLang = 0; static char last_cmd[32] = "?"; static FILE *marc_file = 0; static char *refid = NULL; -static char *last_open_command = NULL; static int auto_reconnect = 0; static int auto_wait = 1; static Odr_bitmask z3950_options; @@ -179,6 +181,8 @@ static void close_session(void); static void marc_file_write(const char *buf, size_t sz); +static void wait_and_handle_response(int one_response_only); + ODR getODROutputStream(void) { return out; @@ -205,7 +209,7 @@ static void do_hex_dump(const char* buf, size_t len) int x; for (i = 0; i < len ; i = i+16 ) { - printf(" %4.4d ",i); + printf(" %4.4ld ", (long) i); for(x=0 ; i+xwhich = Z_IdAuthentication_anonymous; + auth->u.anonymous = odr_nullval(); printf("Authentication set to Anonymous\n"); - } else { - au.which = Z_IdAuthentication_open; - au.u.open = user; - printf("Authentication set to Open (%s)\n", user); + } + else + { + auth->which = Z_IdAuthentication_open; + auth->u.open = args[0]; + printf("Authentication set to Open (%s)\n", args[0]); } } - if (r == 2) - { - auth = &au; - au.which = Z_IdAuthentication_idPass; - au.u.idPass = &idPass; - idPass.groupId = NULL; - idPass.userId = !strcmp(user, "-") ? 0 : user; - idPass.password = !strcmp(group, "-") ? 0 : group; - printf("Authentication set to User (%s), Pass (%s)\n", user, group); + else if (r == 2) + { + auth = 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->groupId = NULL; + auth->u.idPass->userId = !strcmp(args[0], "-") ? 0 : args[0]; + auth->u.idPass->password = !strcmp(args[1], "-") ? 0 : args[1]; + printf("Authentication set to User (%s), Pass (%s)\n", + args[0], args[1]); + } + else if (r == 3) + { + auth = 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->groupId = args[1]; + auth->u.idPass->userId = args[0]; + auth->u.idPass->password = args[2]; + printf("Authentication set to User (%s), Group (%s), Pass (%s)\n", + args[0], args[1], args[2]); } - if (r == 3) + else { - auth = &au; - au.which = Z_IdAuthentication_idPass; - au.u.idPass = &idPass; - idPass.groupId = group; - idPass.userId = user; - idPass.password = pass; - printf("Authentication set to User (%s), Group (%s), Pass (%s)\n", - user, group, pass); + printf("Bad number of args to auth\n"); + auth = 0; } + return 1; } @@ -890,7 +872,8 @@ static void display_record(Z_External *r) { print_record((const unsigned char *) r->u.octet_aligned->buf, r->u.octet_aligned->len); - marc_file_write(r->u.octet_aligned->buf, r->u.octet_aligned->len); + marc_file_write((const char *) r->u.octet_aligned->buf, + r->u.octet_aligned->len); } else if (oid && r->which == Z_External_octet) { @@ -981,7 +964,7 @@ static void display_record(Z_External *r) return; } print_record(r->u.sutrs->buf, r->u.sutrs->len); - marc_file_write(r->u.sutrs->buf, r->u.sutrs->len); + marc_file_write((const char *) r->u.sutrs->buf, r->u.sutrs->len); } else if (oid && !oid_oidcmp(oid, yaz_oid_recsyn_grs_1)) { @@ -2574,17 +2557,39 @@ static int cmd_find(const char *arg) } else { - if (!conn) + if (*cur_host && auto_reconnect) { - try_reconnect(); - - if (!conn) { - printf("Not connected yet\n"); - return 0; + int i = 0; + for (;;) + { + if (conn) + { + if (!send_searchRequest(arg)) + return 0; + wait_and_handle_response(0); + if (conn) + break; + } + if (++i == 2) + { + printf("Unable to reconnect\n"); + break; + } + session_connect(cur_host); + wait_and_handle_response(0); } + return 0; } - if (!send_searchRequest(arg)) + else if (conn) + { + if (!send_searchRequest(arg)) + return 0; + } + else + { + printf("Not connected yet\n"); return 0; + } } return 2; } @@ -2866,6 +2871,7 @@ void exit_client(int code) { file_history_save(file_history); file_history_destroy(&file_history); + nmem_destroy(nmem_auth); exit(code); } @@ -3207,15 +3213,13 @@ static int cmd_scan_common(const char *set, const char *arg) } else { - if (!conn) + if (*cur_host && !conn && auto_reconnect) { - try_reconnect(); - - if (!conn) { - printf("Session not initialized yet\n"); - return 0; - } + session_connect(cur_host); + wait_and_handle_response(0); } + if (!conn) + return 0; if (session_initResponse && !ODR_MASK_GET(session_initResponse->options, Z_Options_scan)) { @@ -3546,16 +3550,12 @@ int cmd_source(const char* arg, int echo ) return -1; } - while (!feof(includeFile)) { - memset(line, 0, sizeof(line)); - if (!fgets(line, sizeof(line), includeFile)) - { - perror("fgets"); - break; - } - - if (strlen(line) < 2) continue; - if (line[0] == '#') continue; + while (fgets(line, sizeof(line), includeFile)) + { + if (strlen(line) < 2) + continue; + if (line[0] == '#') + continue; if ((cp = strrchr(line, '\n'))) *cp = '\0'; @@ -4081,7 +4081,7 @@ static void http_response(Z_HTTP_Response *hres) } #endif -void wait_and_handle_response(int one_response_only) +static void wait_and_handle_response(int one_response_only) { int reconnect_ok = 1; int res; @@ -4377,16 +4377,13 @@ int cmd_list_all(const char* args) { int i; /* connection options */ - if(conn) { - printf("Connected to : %s\n",last_open_command); - } else { - if(last_open_command) - printf("Not connected to : %s\n",last_open_command); - else - printf("Not connected : \n"); - - } - if(yazProxy) printf("using proxy : %s\n",yazProxy); + if (conn) + printf("Connected to : %s\n", cur_host); + else if (*cur_host) + printf("Not connected to : %s\n", cur_host); + else + printf("Not connected : \n"); + if (yazProxy) printf("using proxy : %s\n",yazProxy); printf("auto_reconnect : %s\n",auto_reconnect?"on":"off"); printf("auto_wait : %s\n",auto_wait?"on":"off"); @@ -4925,6 +4922,8 @@ int main(int argc, char **argv) ODR_MASK_SET(&z3950_options, Z_Options_extendedServices); ODR_MASK_SET(&z3950_options, Z_Options_delSet); + nmem_auth = nmem_create(); + while ((ret = options("k:c:q:a:b:m:v:p:u:t:Vxd:f:", argv, argc, &arg)) != -2) { switch (ret) @@ -5053,6 +5052,7 @@ int main(int argc, char **argv) /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab