X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=client%2Fclient.c;h=b5a11ebadd1abf916745521e2b3b2657077802b0;hb=48fdd95e1a026cfcc20ddd2329f0bda940f936e2;hp=f5ccc78c5326a9ba9148ee347f888e39feebf5fe;hpb=7dbe4028e0cb3a7ed57fb2bbb0b05e62e112f56a;p=yaz-moved-to-github.git diff --git a/client/client.c b/client/client.c index f5ccc78..b5a11eb 100644 --- a/client/client.c +++ b/client/client.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2005, Index Data ApS * See the file LICENSE for details. * - * $Id: client.c,v 1.280 2005-05-09 08:51:48 adam Exp $ + * $Id: client.c,v 1.283 2005-06-06 07:25:47 adam Exp $ */ #include @@ -126,6 +126,7 @@ 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; static int z3950_version = 3; static int scan_stepSize = 0; @@ -2282,6 +2283,8 @@ static int cmd_options(const char *arg) int r; int pos; r = yaz_init_opt_encode(&z3950_options, arg, &pos); + if (r == -1) + printf("Unknown option(s) near %s\n", arg+pos); } else { @@ -3363,6 +3366,28 @@ int cmd_set_auto_reconnect(const char* arg) return 0; } + +int cmd_set_auto_wait(const char* arg) +{ + if(strlen(arg)==0) { + auto_wait = ! auto_wait; + } else if(strcmp(arg,"on")==0) { + auto_wait = 1; + } else if(strcmp(arg,"off")==0) { + auto_wait = 0; + } else { + printf("Error use on or off\n"); + return 1; + } + + if (auto_wait) + printf("Set auto wait enabled.\n"); + else + printf("Set auto wait disabled.\n"); + + return 0; +} + int cmd_set_marcdump(const char* arg) { if(marc_file && marc_file != stderr) { /* don't close stdout*/ @@ -3539,7 +3564,7 @@ static void initialize(void) #if HAVE_GETTIMEOFDAY -struct timeval tv_start, tv_end; +struct timeval tv_start; #endif #if HAVE_XML2 @@ -3719,6 +3744,10 @@ void wait_and_handle_response() int res; char *netbuffer= 0; int netbufferlen = 0; +#if HAVE_GETTIMEOFDAY + int got_tv_end = 0; + struct timeval tv_end; +#endif Z_GDU *gdu; while(conn) @@ -3751,6 +3780,11 @@ void wait_and_handle_response() close_session(); break; } +#if HAVE_GETTIMEOFDAY + if (got_tv_end == 0) + gettimeofday (&tv_end, 0); /* count first one only */ + got_tv_end++; +#endif odr_reset(out); odr_reset(in); /* release APDU from last round */ record_last = 0; @@ -3841,10 +3875,9 @@ void wait_and_handle_response() if (conn && !cs_more(conn)) break; } - if (conn) - { #if HAVE_GETTIMEOFDAY - gettimeofday (&tv_end, 0); + if (got_tv_end) + { #if 0 printf ("S/U S/U=%ld/%ld %ld/%ld", (long) tv_start.tv_sec, @@ -3855,8 +3888,8 @@ void wait_and_handle_response() printf ("Elapsed: %.6f\n", (double) tv_end.tv_usec / 1e6 + tv_end.tv_sec - ((double) tv_start.tv_usec / 1e6 + tv_start.tv_sec)); -#endif } +#endif xfree (netbuffer); } @@ -3995,6 +4028,7 @@ int cmd_list_all(const char* args) { 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"); if (!auth) { printf("Authentication : none\n"); @@ -4076,6 +4110,20 @@ int cmd_clear_otherinfo(const char* args) return 0; } +int cmd_wait_response(const char *arg) +{ + int wait_for = atoi(arg); + int i=0; + if( wait_for < 1 ) { + wait_for = 1; + }; + + for( i=0 ; i < wait_for ; ++i ) { + wait_and_handle_response( ); + }; + return 0; +} + static int cmd_help (const char *line); typedef char *(*completerFunctionType)(const char *text, int state); @@ -4133,6 +4181,7 @@ static struct { {"set_cclfile", cmd_set_cclfile," ",NULL,1,NULL}, {"set_cqlfile", cmd_set_cqlfile," ",NULL,1,NULL}, {"set_auto_reconnect", cmd_set_auto_reconnect," on|off",complete_auto_reconnect,1,NULL}, + {"set_auto_wait", cmd_set_auto_wait," on|off",complete_auto_reconnect,1,NULL}, {"set_otherinfo", cmd_set_otherinfo," ",NULL,0,NULL}, {"sleep", cmd_sleep,"",NULL,0,NULL}, {"register_oid", cmd_register_oid," ",NULL,0,NULL}, @@ -4142,6 +4191,7 @@ static struct { {"list_otherinfo",cmd_list_otherinfo,"[otherinfoinddex]",NULL,0,NULL}, {"list_all",cmd_list_all,"",NULL,0,NULL}, {"clear_otherinfo",cmd_clear_otherinfo,"",NULL,0,NULL}, + {"wait_response",cmd_wait_response,"",NULL,0,NULL}, /* Server Admin Functions */ {"adm-reindex", cmd_adm_reindex, "",NULL,0,NULL}, {"adm-truncate", cmd_adm_truncate, "('database'|'index')",NULL,0,NULL}, @@ -4310,7 +4360,7 @@ void process_cmd_line(char* line) if(apdu_file) fflush(apdu_file); - if (res >= 2) + if (res >= 2 && auto_wait) wait_and_handle_response(); if(apdu_file)