X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=client%2Fclient.c;h=e6fcada71ee60c052b3c13eb400cb4714fd494a4;hp=7a782d0a2fe3095aeba7cfb8592e82354b2479ca;hb=1a219938c1325105582cdbc2c9a34b6fc3cdf191;hpb=1349cb3d913df6ec4fad5d5f185de8fec01b835e diff --git a/client/client.c b/client/client.c index 7a782d0..e6fcada 100644 --- a/client/client.c +++ b/client/client.c @@ -127,6 +127,7 @@ static char ccl_fields[512] = "default.bib"; static char cql_fields[512] = "/usr/local/share/yaz/etc/pqf.properties"; static char *esPackageName = 0; static char *yazProxy = 0; +static int proxy_mode = 0; static int kilobytes = 64 * 1024; static char *negotiationCharset = 0; static int negotiationCharsetRecords = 1; @@ -349,7 +350,7 @@ static void send_Z3950_initRequest(const char* type_and_host) req->referenceId = set_refid(out); - if (yazProxy && type_and_host) + if (proxy_mode && type_and_host) { yaz_oi_set_string_oid(&req->otherInfo, out, yaz_oid_userinfo_proxy, 1, type_and_host); @@ -703,7 +704,7 @@ static int session_connect_base(const char *arg, const char **basep) strncpy(type_and_host, arg, sizeof(type_and_host)-1); type_and_host[sizeof(type_and_host)-1] = '\0'; - conn = cs_create_host_proxy(arg, 1, &add, yazProxy); + conn = cs_create_host2(arg, 1, &add, yazProxy, &proxy_mode); if (!conn) { printf("Could not resolve address %s\n", arg); @@ -1320,7 +1321,7 @@ static int send_srw_host_path(Z_SRW_PDU *sr, const char *host_port, const char *charset = negotiationCharset; Z_GDU *gdu; - gdu = z_get_HTTP_Request_uri(out, host_port, path, yazProxy ? 1 : 0); + gdu = z_get_HTTP_Request_uri(out, host_port, path, proxy_mode); if (auth) { @@ -1363,8 +1364,7 @@ static int send_srw_host_path(Z_SRW_PDU *sr, const char *host_port, static int send_srw(Z_SRW_PDU *sr) { - char *path = yaz_encode_sru_dbpath_odr(out, databaseNames[0]); - return send_srw_host_path(sr, wrbuf_cstr(cur_host), path); + return send_srw_host_path(sr, wrbuf_cstr(cur_host), databaseNames[0]); } static int send_SRW_redirect(const char *uri) @@ -3720,18 +3720,19 @@ static int cmd_format(const char *arg) static int cmd_elements(const char *arg) { - static Z_ElementSetNames esn; - static char what[100]; - - if (!arg || !*arg) + if (elementSetNames) { - elementSetNames = 0; - return 1; + xfree(elementSetNames->u.generic); + xfree(elementSetNames); + } + elementSetNames = 0; + if (arg && *arg) + { + elementSetNames = (Z_ElementSetNames *) + xmalloc(sizeof(*elementSetNames)); + elementSetNames->which = Z_ElementSetNames_generic; + elementSetNames->u.generic = xstrdup(arg); } - strcpy(what, arg); - esn.which = Z_ElementSetNames_generic; - esn.u.generic = what; - elementSetNames = &esn; return 1; } @@ -4537,39 +4538,37 @@ static void wait_and_handle_response(int one_response_only) while(conn) { res = cs_get(conn, &netbuffer, &netbufferlen); - if (reconnect_ok && res <= 0 && protocol == PROTO_HTTP) + if (res <= 0) { - cs_close(conn); - conn = 0; - session_connect(); - reconnect_ok = 0; - if (conn) + if (reconnect_ok && protocol == PROTO_HTTP) { - char *buf_out; - int len_out; - - buf_out = odr_getbuf(out, &len_out, 0); - - do_hex_dump(buf_out, len_out); - - cs_put(conn, buf_out, len_out); - - odr_reset(out); - continue; + cs_close(conn); + conn = 0; + session_connect(); + reconnect_ok = 0; + if (conn) + { + char *buf_out; + int len_out; + buf_out = odr_getbuf(out, &len_out, 0); + do_hex_dump(buf_out, len_out); + cs_put(conn, buf_out, len_out); + odr_reset(out); + continue; + } + } + else + { + printf("Target closed connection\n"); + close_session(); + break; } - } - else if (res <= 0) - { - printf("Target closed connection\n"); - 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; do_hex_dump(netbuffer, res); @@ -4577,21 +4576,43 @@ static void wait_and_handle_response(int one_response_only) if (!z_GDU(in, &gdu, 0, 0)) { - FILE *f = ber_file ? ber_file : stdout; - odr_perror(in, "Decoding incoming APDU"); - fprintf(f, "[Near %ld]\n", (long) odr_offset(in)); - fprintf(f, "Packet dump:\n---------\n"); - odr_dumpBER(f, netbuffer, res); - fprintf(f, "---------\n"); - if (apdu_file) + if (reconnect_ok && protocol == PROTO_HTTP) { - z_GDU(print, &gdu, 0, 0); - odr_reset(print); + fprintf(stderr, "Decoding error. Reconnecting\n"); + cs_close(conn); + conn = 0; + session_connect(); + reconnect_ok = 0; + if (conn) + { + char *buf_out; + int len_out; + buf_out = odr_getbuf(out, &len_out, 0); + do_hex_dump(buf_out, len_out); + cs_put(conn, buf_out, len_out); + odr_reset(out); + continue; + } + } + else + { + FILE *f = ber_file ? ber_file : stdout; + odr_perror(in, "Decoding incoming APDU"); + fprintf(f, "[Near %ld]\n", (long) odr_offset(in)); + fprintf(f, "Packet dump:\n---------\n"); + odr_dumpBER(f, netbuffer, res); + fprintf(f, "---------\n"); + if (apdu_file) + { + z_GDU(print, &gdu, 0, 0); + odr_reset(print); + } + if (conn && cs_more(conn)) + continue; + break; } - if (conn && cs_more(conn)) - continue; - break; } + odr_reset(out); if (ber_file) odr_dumpBER(ber_file, netbuffer, res); if (apdu_file && !z_GDU(print, &gdu, 0, 0))