X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=client%2Fclient.c;h=7b0f926c233dcdeee843102223c31817152f8ff2;hb=cabcc223cd47503763e7c42969e3be30c58276af;hp=5e7f270650a9b9bbfd5405d9786c4b2ab2c58708;hpb=2614d567118004072591ae55a387d2cbb1d18130;p=yaz-moved-to-github.git diff --git a/client/client.c b/client/client.c index 5e7f270..7b0f926 100644 --- a/client/client.c +++ b/client/client.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2012 Index Data + * Copyright (C) 1995-2013 Index Data * See the file LICENSE for details. */ /** \file client.c @@ -83,6 +83,7 @@ static file_history_t file_history = 0; static char sru_method[10] = "soap"; static char sru_version[10] = "1.2"; +static char sru_recordPacking[10] = ""; static char *codeset = 0; /* character set for output */ static int hex_dump = 0; static char *dump_file_prefix = 0; @@ -321,7 +322,10 @@ static Z_ReferenceId *set_refid(ODR out) if (!refid) return 0; id = (Z_ReferenceId *) odr_malloc(out, sizeof(*id)); - id->size = id->len = strlen(refid); + id->len = strlen(refid); +#if OCT_SIZE + id->size = id->len; +#endif id->buf = (unsigned char *) odr_malloc(out, id->len); memcpy(id->buf, refid, id->len); return id; @@ -702,10 +706,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'; - if (yazProxy) - conn = cs_create_host(yazProxy, 1, &add); - else - conn = cs_create_host(arg, 1, &add); + conn = cs_create_host_proxy(arg, 1, &add, yazProxy); if (!conn) { printf("Could not resolve address %s\n", arg); @@ -926,13 +927,13 @@ static void display_record(Z_External *r) const char *octet_buf = (const char*)r->u.octet_aligned->buf; size_t octet_len = r->u.octet_aligned->len; if (!oid_oidcmp(oid, yaz_oid_recsyn_xml) - || !oid_oidcmp(oid, yaz_oid_recsyn_xml) + || !oid_oidcmp(oid, yaz_oid_recsyn_application_xml) || !oid_oidcmp(oid, yaz_oid_recsyn_html)) { print_xml_record(octet_buf, octet_len); } - else if (yaz_oid_is_iso2709(oid)) + else { const char *result; size_t rlen; @@ -978,17 +979,14 @@ static void display_record(Z_External *r) } else { - printf("bad MARC. Dumping as it is:\n"); + if (yaz_oid_is_iso2709(oid)) + printf("bad MARC. Dumping as it is:\n"); print_record(octet_buf, octet_len); } yaz_marc_destroy(mt); if (cd) yaz_iconv_close(cd); } - else - { - print_record(octet_buf, octet_len); - } marc_file_write(octet_buf, r->u.octet_aligned->len); } else if (oid && !oid_oidcmp(oid, yaz_oid_recsyn_sutrs)) @@ -1423,12 +1421,12 @@ static int send_SRW_scanRequest(const char *arg, Odr_int *pos, int num) switch (queryType) { case QueryType_CQL: - sr->u.scan_request->query_type = Z_SRW_query_type_cql; - sr->u.scan_request->scanClause.cql = encode_SRW_term(out, arg); + sr->u.scan_request->queryType = "cql"; + sr->u.scan_request->scanClause = encode_SRW_term(out, arg); break; case QueryType_Prefix: - sr->u.scan_request->query_type = Z_SRW_query_type_pqf; - sr->u.scan_request->scanClause.pqf = encode_SRW_term(out, arg); + sr->u.scan_request->queryType = "pqf"; + sr->u.scan_request->scanClause = encode_SRW_term(out, arg); break; default: printf("Only CQL and PQF supported in SRW\n"); @@ -1462,23 +1460,25 @@ static int send_SRW_searchRequest(const char *arg) switch (queryType) { case QueryType_CQL: - srw_sr->u.request->query_type = Z_SRW_query_type_cql; - srw_sr->u.request->query.cql = encode_SRW_term(srw_sr_odr_out, arg); + srw_sr->u.request->queryType = "cql"; + srw_sr->u.request->query = encode_SRW_term(srw_sr_odr_out, arg); - sr->u.request->query_type = Z_SRW_query_type_cql; - sr->u.request->query.cql = encode_SRW_term(srw_sr_odr_out, arg); + sr->u.request->queryType = "cql"; + sr->u.request->query = encode_SRW_term(srw_sr_odr_out, arg); break; case QueryType_Prefix: - srw_sr->u.request->query_type = Z_SRW_query_type_pqf; - srw_sr->u.request->query.pqf = encode_SRW_term(srw_sr_odr_out, arg); + srw_sr->u.request->queryType = "pqf"; + srw_sr->u.request->query = encode_SRW_term(srw_sr_odr_out, arg); - sr->u.request->query_type = Z_SRW_query_type_pqf; - sr->u.request->query.pqf = encode_SRW_term(srw_sr_odr_out, arg); + sr->u.request->queryType = "pqf"; + sr->u.request->query = encode_SRW_term(srw_sr_odr_out, arg); break; default: printf("Only CQL and PQF supported in SRW\n"); return 0; } + if (*sru_recordPacking) + sr->u.request->recordPacking = sru_recordPacking; sru_maximumRecords = 0; sr->u.request->maximumRecords = odr_intdup(out, 0); sr->u.request->facetList = facet_list; @@ -1568,7 +1568,10 @@ static int send_Z3950_searchRequest(const char *arg) /* send a very big referenceid to test transport stack etc. */ memset(big, 'A', 2100); - bigo.len = bigo.size = 2100; + bigo.len = 2100; +#if OCT_SIZE + bigo.size = bigo.len; +#endif bigo.buf = big; req->referenceId = &bigo; } @@ -1870,7 +1873,7 @@ static void print_referenceId(int iLevel, Z_ReferenceId *referenceId) int i; print_level(iLevel); - printf("Ref Id (%d, %d): ", referenceId->len, referenceId->size); + printf("Ref Id (%d): ", referenceId->len); for (i = 0; i < referenceId->len; i++) printf("%c", referenceId->buf[i]); printf("\n"); @@ -2138,7 +2141,9 @@ static Z_External *create_external_itemRequest(void) r->u.single_ASN1_type->buf = (unsigned char *) odr_malloc(out, item_request_size); r->u.single_ASN1_type->len = item_request_size; +#if OCT_SIZE r->u.single_ASN1_type->size = item_request_size; +#endif memcpy(r->u.single_ASN1_type->buf, item_request_buf, item_request_size); @@ -2191,7 +2196,9 @@ static Z_External *create_external_ILL_APDU(void) r->u.single_ASN1_type->buf = (unsigned char *) odr_malloc(out, ill_request_size); r->u.single_ASN1_type->len = ill_request_size; +#if OCT_SIZE r->u.single_ASN1_type->size = ill_request_size; +#endif memcpy(r->u.single_ASN1_type->buf, ill_request_buf, ill_request_size); /* printf("len = %d\n", ill_request_size); */ /* do_hex_dump(ill_request_buf,ill_request_size); */ @@ -2490,7 +2497,9 @@ static int send_Z3950_update(int version, int action_no, const char *recid, notToKeep->elements[0]->u.opaque = (Odr_oct *) odr_malloc(out, sizeof(Odr_oct)); notToKeep->elements[0]->u.opaque->buf = (unsigned char *) recid; +#if OCT_SIZE notToKeep->elements[0]->u.opaque->size = strlen(recid); +#endif notToKeep->elements[0]->u.opaque->len = strlen(recid); } else @@ -2537,7 +2546,9 @@ static int send_Z3950_update(int version, int action_no, const char *recid, notToKeep->elements[0]->u.opaque = (Odr_oct *) odr_malloc(out, sizeof(Odr_oct)); notToKeep->elements[0]->u.opaque->buf = (unsigned char *) recid; +#if OCT_SIZE notToKeep->elements[0]->u.opaque->size = strlen(recid); +#endif notToKeep->elements[0]->u.opaque->len = strlen(recid); } else @@ -2828,7 +2839,8 @@ static int cmd_sru(const char *arg) } else { - int r = sscanf(arg, "%9s %9s", sru_method, sru_version); + int r = sscanf(arg, "%9s %9s %9s", sru_method, sru_version, + sru_recordPacking); if (r >= 1) { if (!yaz_matchstr(sru_method, "post")) @@ -3171,6 +3183,8 @@ static int send_SRW_presentRequest(const char *arg) return 0; if (!parse_show_args(arg, setstring, &setno, &nos)) return 0; + if (*sru_recordPacking) + sr->u.request->recordPacking = sru_recordPacking; sr->u.request->startRecord = odr_intdup(out, setno); sru_maximumRecords = nos; sr->u.request->maximumRecords = odr_intdup(out, nos); @@ -3388,9 +3402,10 @@ static int send_Z3950_scanrequest(const char *set, const char *query, { req->termListAndStartPoint->term->u.general->buf = (unsigned char *) odr_strdup(out, term); - req->termListAndStartPoint->term->u.general->len = - req->termListAndStartPoint->term->u.general->size = - strlen(term); + req->termListAndStartPoint->term->u.general->len = strlen(term); +#if OCT_SIZE + req->termListAndStartPoint->term->u.general->size = strlen(term); +#endif } } req->referenceId = set_refid(out); @@ -4444,9 +4459,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); @@ -4456,7 +4473,7 @@ static void http_response(Z_HTTP_Response *hres) Z_SOAP *soap_package = 0; ODR o = odr_createmem(ODR_DECODE); Z_SOAP_Handler soap_handlers[] = { - {YAZ_XMLNS_SRU_v2_response, 0, (Z_SOAP_fun) yaz_srw_codec}, + {YAZ_XMLNS_SRU_v2_mask, 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}