X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=client%2Fclient.c;h=a55f095bd7aa775bb17b5539de7f8c62eb2a668b;hp=23b59e4fb8e0edef3bb50fcf4828397f88b3a3c4;hb=191c5db0e914f9774413da50bb1963ecf22b2f5c;hpb=82f61d1dd58f64119e33ed88d4ab7572b0ad1083 diff --git a/client/client.c b/client/client.c index 23b59e4..a55f095 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-2013 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; @@ -147,6 +147,7 @@ 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, @@ -1478,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) @@ -1527,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 */ @@ -1696,11 +1698,7 @@ static void display_facet(Z_FacetField *facet) { Z_AttributeList *al = facet->attributes; struct yaz_facet_attr attr_values; - attr_values.errcode = 0; - attr_values.limit = -1; - attr_values.useattr = "NONE"; - attr_values.relation = "default"; - + yaz_facet_attr_init(&attr_values); yaz_facet_attr_get_z_attributes(al, &attr_values); if (!attr_values.errcode) { @@ -2128,6 +2126,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; @@ -3017,7 +3016,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) { @@ -3173,6 +3172,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; @@ -3281,10 +3281,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 && @@ -3297,7 +3297,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")) @@ -3607,7 +3607,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; @@ -4081,7 +4081,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 @@ -4274,7 +4274,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); @@ -4367,8 +4367,17 @@ static void handle_srw_response(Z_SRW_searchRetrieveResponse *res) display_facets(res->facetList); if (res->suggestions) printf("Suggestions:\n%s\n", res->suggestions); - for (i = 0; inum_records; i++) + 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) @@ -4435,9 +4444,11 @@ static void http_response(Z_HTTP_Response *hres) if (ret == 0 && sr->which == Z_SRW_searchRetrieve_response) handle_srw_response(sr->u.response); + else if (ret == 0 && sr->which == Z_SRW_scan_response) + handle_srw_scan_response(sr->u.scan_response); else { - printf("Decoding of SOLR package failed\n"); + printf("Decoding of Solr package failed\n"); ret = -1; } odr_destroy(o); @@ -4446,9 +4457,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, @@ -4938,7 +4950,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 )