X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=client%2Fclient.c;h=bbce9956769f9876a2ee0292910d8fa1bf5a7c13;hp=663b056d01428a4520ac9a61edc5961c93bda24e;hb=00537b483d646bd04a204708ecbde708861f044e;hpb=8f09a31746ca9b1450cce6106b89f9cfbf53e88f diff --git a/client/client.c b/client/client.c index 663b056..bbce995 100644 --- a/client/client.c +++ b/client/client.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2011 Index Data + * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ /** \file client.c @@ -125,7 +125,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 kilobytes = 1024; +static int kilobytes = 64 * 1024; static char *negotiationCharset = 0; static int negotiationCharsetRecords = 1; static int negotiationCharsetVersion = 3; @@ -146,8 +146,8 @@ static char scan_position[64]; static int scan_size = 20; static char cur_host[200]; static Odr_int last_hit_count = 0; - static int pretty_xml = 0; +static Odr_int sru_maximumRecords = 0; typedef enum { QueryType_Prefix, @@ -1479,6 +1479,7 @@ static int send_SRW_searchRequest(const char *arg) printf("Only CQL and PQF supported in SRW\n"); return 0; } + sru_maximumRecords = 0; sr->u.request->maximumRecords = odr_intdup(out, 0); sr->u.request->facetList = facet_list; if (record_schema) @@ -1528,7 +1529,7 @@ static int send_Z3950_searchRequest(const char *arg) printf("CCL ERROR: %s\n", ccl_err_msg(error)); return 0; } - } + } else if (myQueryType == QueryType_CQL2RPN) { /* ### All this code should be wrapped in a utility function */ @@ -2129,6 +2130,7 @@ static Z_External *create_external_itemRequest(void) } else { + item_request_buf = odr_getbuf (out, &item_request_size, 0); r = (Z_External *) odr_malloc(out, sizeof(*r)); r->direct_reference = odr_oiddup(out, yaz_oid_general_isoill_1); r->indirect_reference = 0; @@ -3018,7 +3020,7 @@ static int parse_show_args(const char *arg_c, char *setstring, sprintf(setstring, "%d", setnumber); else *setstring = '\0'; - + token_len = check_token(arg_c, "format"); if (token_len) { @@ -3174,6 +3176,7 @@ static int send_SRW_presentRequest(const char *arg) if (!parse_show_args(arg, setstring, &setno, &nos)) return 0; sr->u.request->startRecord = odr_intdup(out, setno); + sru_maximumRecords = nos; sr->u.request->maximumRecords = odr_intdup(out, nos); if (record_schema) sr->u.request->recordSchema = record_schema; @@ -3282,10 +3285,10 @@ static int cmd_cancel(const char *arg) apdu->u.triggerResourceControlRequest; bool_t rfalse = 0; char command[16]; - + *command = '\0'; sscanf(arg, "%15s", command); - + if (only_z3950()) return 0; if (session_initResponse && @@ -3298,7 +3301,7 @@ static int cmd_cancel(const char *arg) *req->requestedAction = Z_TriggerResourceControlRequest_cancel; req->resultSetWanted = &rfalse; req->referenceId = set_refid(out); - + send_apdu(apdu); printf("Sent cancel request\n"); if (!strcmp(command, "wait")) @@ -3608,7 +3611,7 @@ static int cmd_scan_common(const char *set, const char *arg) scan_query = last_scan_query; scan_term = last_scan_line; } - else + else { strcpy(last_scan_query, arg); scan_query = arg; @@ -4082,7 +4085,7 @@ static int cmd_set_auto_reconnect(const char* arg) printf("Error use on or off\n"); return 1; } - + if (auto_reconnect) printf("Set auto reconnect enabled.\n"); else @@ -4275,7 +4278,7 @@ static void initialize(const char *rc_file) fprintf(stderr, "failed to allocate ODR streams\n"); exit(1); } - + strcpy(scan_position, "1"); setvbuf(stdout, 0, _IONBF, 0); @@ -4366,8 +4369,19 @@ static void handle_srw_response(Z_SRW_searchRetrieveResponse *res) printf("Number of hits: " ODR_INT_PRINTF "\n", *res->numberOfRecords); if (res->facetList) display_facets(res->facetList); - for (i = 0; inum_records; i++) + if (res->suggestions) + printf("Suggestions:\n%s\n", res->suggestions); + for (i = 0; i < res->num_records; i++) + { + if (i >= sru_maximumRecords) + { + printf("SRU server returns extra records. Skipping " + ODR_INT_PRINTF " records.\n", + res->num_records - sru_maximumRecords); + break; + } handle_srw_record(res->records + i); + } } static void handle_srw_scan_term(Z_SRW_scanTerm *term) @@ -4445,9 +4459,10 @@ static void http_response(Z_HTTP_Response *hres) { Z_SOAP *soap_package = 0; ODR o = odr_createmem(ODR_DECODE); - Z_SOAP_Handler soap_handlers[3] = { - {YAZ_XMLNS_SRU_v1_1, 0, (Z_SOAP_fun) yaz_srw_codec}, + Z_SOAP_Handler soap_handlers[] = { + {YAZ_XMLNS_SRU_v2_response, 0, (Z_SOAP_fun) yaz_srw_codec}, {YAZ_XMLNS_UPDATE_v0_9, 0, (Z_SOAP_fun) yaz_ucp_codec}, + {YAZ_XMLNS_SRU_v1_response, 0, (Z_SOAP_fun) yaz_srw_codec}, {0, 0, 0} }; ret = z_soap_codec(o, &soap_package, @@ -4937,7 +4952,7 @@ static int cmd_wait_response(const char *arg) { int i; int wait_for = atoi(arg); - if (wait_for < 1) + if (wait_for < 1) wait_for = 1; for (i = 0 ; i < wait_for; ++i )