X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=client%2Fclient.c;h=a58a7b3461be31930ee2eb716f763891d42c2641;hb=0d42bb835c37442eeffa77f24ad2fdf876f8f4da;hp=38ac3d78cd43a5fdb32b775f77437f3fae2ec7c5;hpb=7ef1b50f481cda83d012cc3d69d83f9313836f1f;p=yaz-moved-to-github.git diff --git a/client/client.c b/client/client.c index 38ac3d7..a58a7b3 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; @@ -197,14 +201,15 @@ const char* query_type_as_string(QueryType q) } } -static void do_hex_dump(const char* buf, int len) +static void do_hex_dump(const char* buf, size_t len) { if (hex_dump) { - int i,x; + size_t i; + 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 = (Z_IdAuthentication *) nmem_malloc(nmem_auth, sizeof(*auth)); + auth->which = Z_IdAuthentication_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]; + printf("Authentication set to User (%s), Pass (%s)\n", + args[0], args[1]); + } + else if (r == 3) + { + auth = (Z_IdAuthentication*) nmem_malloc(nmem_auth, sizeof(*auth)); + auth->which = Z_IdAuthentication_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]; + 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; } @@ -889,7 +874,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) { @@ -980,7 +966,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)) { @@ -2573,17 +2559,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; + } + else if (conn) + { + if (!send_searchRequest(arg)) + return 0; } - if (!send_searchRequest(arg)) + else + { + printf("Not connected yet\n"); return 0; + } } return 2; } @@ -2865,6 +2873,7 @@ void exit_client(int code) { file_history_save(file_history); file_history_destroy(&file_history); + nmem_destroy(nmem_auth); exit(code); } @@ -3206,15 +3215,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)) { @@ -3545,16 +3552,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'; @@ -3913,11 +3916,6 @@ static void handle_srw_record(Z_SRW_record *rec) printf("\n"); if (rec->recordData_buf && rec->recordData_len) { - if (fwrite(rec->recordData_buf, 1, rec->recordData_len, stdout) != - rec->recordData_len) - { - printf("write to stdout failed\n"); - } printf("%.*s", rec->recordData_len, rec->recordData_buf); marc_file_write(rec->recordData_buf, rec->recordData_len); } @@ -4080,7 +4078,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; @@ -4376,16 +4374,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"); @@ -4885,12 +4880,12 @@ static void client(void) static void show_version(void) { - char vstr[20]; + char vstr[20], sha1_str[41]; - yaz_version(vstr, 0); - printf("YAZ version: %s\n", YAZ_VERSION); - if (strcmp(vstr, YAZ_VERSION)) - printf("YAZ DLL/SO: %s\n", vstr); + yaz_version(vstr, sha1_str); + printf("YAZ version: %s %s\n", YAZ_VERSION, YAZ_VERSION_SHA1); + if (strcmp(sha1_str, YAZ_VERSION_SHA1)) + printf("YAZ DLL/SO: %s %s\n", vstr, sha1_str); exit(0); } @@ -4924,6 +4919,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) @@ -5052,6 +5049,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