From: Adam Dickmeiss Date: Tue, 24 Sep 2013 13:06:40 +0000 (+0200) Subject: Merge branch 'master' into sru_2_0 X-Git-Tag: v5.0.0~24 X-Git-Url: http://git.indexdata.com/?a=commitdiff_plain;h=a9f1420c2c1bc16b5a49391a56c8599dbd162187;hp=-c;p=yaz-moved-to-github.git Merge branch 'master' into sru_2_0 --- a9f1420c2c1bc16b5a49391a56c8599dbd162187 diff --combined client/client.c index b6c720e,18c763a..97773d0 --- a/client/client.c +++ b/client/client.c @@@ -83,7 -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; @@@ -253,12 -252,9 +253,12 @@@ static void add_otherInfos(Z_APDU *a Z_OtherInformation **oi; int i; - yaz_oi_APDU(a, &oi); - if (facet_list) + if (facet_list && a->which == Z_APDU_searchRequest) + { + oi = &a->u.searchRequest->additionalSearchInfo; yaz_oi_set_facetlist(oi, out, facet_list); + } + yaz_oi_APDU(a, &oi); for (i = 0; i < maxOtherInfosSupported; ++i) { if (oid_oidlen(extraOtherInfos[i].oid) > 0) @@@ -321,9 -317,14 +321,9 @@@ static void print_refid(Z_ReferenceId * static Z_ReferenceId *set_refid(ODR out) { - Z_ReferenceId *id; if (!refid) return 0; - id = (Z_ReferenceId *) odr_malloc(out, sizeof(*id)); - id->size = id->len = strlen(refid); - id->buf = (unsigned char *) odr_malloc(out, id->len); - memcpy(id->buf, refid, id->len); - return id; + return odr_create_Odr_oct(out, refid, strlen(refid)); } /* INIT SERVICE ------------------------------- */ @@@ -841,6 -842,50 +841,50 @@@ static void print_record(const char *bu printf("\n"); } + static void print_mab_record(const char *buf, size_t len) + { + size_t i; + size_t last_linebreak = 0; + size_t last_subfield = 0; + for (i = 0; i < len; i++) + { + // line break after header + if ( i == 24 ) + { + printf("\n"); + last_linebreak = i - 1; + } + + // space between field and content + if ( i > 24 && i - last_linebreak == 5 ) + printf(" "); + + // space after subfield + if ( last_subfield != 0 && i - last_subfield == 2 ) + printf(" "); + + if ((buf[i] <= 126 && buf[i] >= 32) || strchr("\n\r\t\f", buf[i])) + printf("%c", buf[i]); + else if ( buf[i] == 29 ) // record separator + printf("\n"); + else if ( buf[i] == 30 ) // field separator + { + printf("\n"); + last_linebreak = i; + } + else if ( buf[i] == 31 ) // subfield + { + // space before subfields; except first one + if ( i > 24 && i - last_linebreak > 5 ) + printf(" "); + printf("$"); + last_subfield = i; + } + else + printf("\\X%02X", ((const unsigned char *)buf)[i]); + } + } + static void print_xml_record(const char *buf, size_t len) { int has_printed = 0; @@@ -929,7 -974,7 +973,7 @@@ static void display_record(Z_External * } else if (!oid_oidcmp(oid, yaz_oid_recsyn_mab)) { - print_record(octet_buf, octet_len); + print_mab_record(octet_buf, octet_len); } else { @@@ -1419,12 -1464,12 +1463,12 @@@ static int send_SRW_scanRequest(const c 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"); @@@ -1458,25 -1503,23 +1502,25 @@@ static int send_SRW_searchRequest(cons 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; @@@ -1561,12 -1604,12 +1605,12 @@@ static int send_Z3950_searchRequest(con req->referenceId = set_refid(out); if (!strcmp(arg, "@big")) /* strictly for troublemaking */ { - static unsigned char big[2100]; + static char big[2100]; static Odr_oct bigo; /* send a very big referenceid to test transport stack etc. */ memset(big, 'A', 2100); - bigo.len = bigo.size = 2100; + bigo.len = 2100; bigo.buf = big; req->referenceId = &bigo; } @@@ -1620,7 -1663,7 +1664,7 @@@ case QueryType_CCL: query.which = Z_Query_type_2; query.u.type_2 = &ccl_query; - ccl_query.buf = (unsigned char*) arg; + ccl_query.buf = (char *) arg; ccl_query.len = strlen(arg); break; case QueryType_CCL2RPN: @@@ -1868,7 -1911,7 +1912,7 @@@ static void print_referenceId(int iLeve 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"); @@@ -2130,8 -2173,16 +2174,8 @@@ static Z_External *create_external_item r->indirect_reference = 0; r->descriptor = 0; r->which = Z_External_single; - - r->u.single_ASN1_type = (Odr_oct *) - odr_malloc(out, sizeof(*r->u.single_ASN1_type)); - r->u.single_ASN1_type->buf = (unsigned char *) - odr_malloc(out, item_request_size); - r->u.single_ASN1_type->len = item_request_size; - r->u.single_ASN1_type->size = item_request_size; - memcpy(r->u.single_ASN1_type->buf, item_request_buf, - item_request_size); - + r->u.single_ASN1_type = + odr_create_Odr_oct(out, item_request_buf, item_request_size); do_hex_dump(item_request_buf,item_request_size); } return r; @@@ -2175,8 -2226,18 +2219,8 @@@ static Z_External *create_external_ILL_ r->indirect_reference = 0; r->descriptor = 0; r->which = Z_External_single; - - r->u.single_ASN1_type = (Odr_oct *) - odr_malloc(out, sizeof(*r->u.single_ASN1_type)); - r->u.single_ASN1_type->buf = (unsigned char *) - odr_malloc(out, ill_request_size); - r->u.single_ASN1_type->len = ill_request_size; - r->u.single_ASN1_type->size = ill_request_size; - 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); */ -/* printf("--- end of extenal\n"); */ - + r->u.single_ASN1_type = odr_create_Odr_oct(out, ill_request_buf, + ill_request_size); } return r; } @@@ -2465,8 -2526,16 +2509,8 @@@ static int send_Z3950_update(int versio notToKeep->elements[0] = (Z_IU0SuppliedRecords_elem *) odr_malloc(out, sizeof(**notToKeep->elements)); notToKeep->elements[0]->which = Z_IUSuppliedRecords_elem_opaque; - if (recid) - { - notToKeep->elements[0]->u.opaque = (Odr_oct *) - odr_malloc(out, sizeof(Odr_oct)); - notToKeep->elements[0]->u.opaque->buf = (unsigned char *) recid; - notToKeep->elements[0]->u.opaque->size = strlen(recid); - notToKeep->elements[0]->u.opaque->len = strlen(recid); - } - else - notToKeep->elements[0]->u.opaque = 0; + notToKeep->elements[0]->u.opaque = recid ? + odr_create_Odr_oct(out, recid, strlen(recid)) : 0; notToKeep->elements[0]->supplementalId = 0; notToKeep->elements[0]->correlationInfo = 0; notToKeep->elements[0]->record = record_this; @@@ -2504,8 -2573,16 +2548,8 @@@ notToKeep->elements[0] = (Z_IUSuppliedRecords_elem *) odr_malloc(out, sizeof(**notToKeep->elements)); notToKeep->elements[0]->which = Z_IUSuppliedRecords_elem_opaque; - if (recid) - { - notToKeep->elements[0]->u.opaque = (Odr_oct *) - odr_malloc(out, sizeof(Odr_oct)); - notToKeep->elements[0]->u.opaque->buf = (unsigned char *) recid; - notToKeep->elements[0]->u.opaque->size = strlen(recid); - notToKeep->elements[0]->u.opaque->len = strlen(recid); - } - else - notToKeep->elements[0]->u.opaque = 0; + notToKeep->elements[0]->u.opaque = recid ? + odr_create_Odr_oct(out, recid, strlen(recid)) : 0; notToKeep->elements[0]->supplementalId = 0; notToKeep->elements[0]->correlationInfo = 0; notToKeep->elements[0]->record = record_this; @@@ -2549,7 -2626,7 +2593,7 @@@ static int cmd_xmles(const char *arg &ext->u.single_ASN1_type->len) == 0) return 0; - ext->u.single_ASN1_type->buf = (unsigned char *) asn_buf; + ext->u.single_ASN1_type->buf = asn_buf; oid = yaz_string_to_oid_odr(yaz_oid_std(), CLASS_EXTSERV, oid_str, out); @@@ -2792,8 -2869,7 +2836,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")) @@@ -3136,8 -3212,6 +3180,8 @@@ static int send_SRW_presentRequest(cons 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); @@@ -3354,8 -3428,10 +3398,8 @@@ static int send_Z3950_scanrequest(cons req->termListAndStartPoint->term->u.general) { 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); + odr_strdup(out, term); + req->termListAndStartPoint->term->u.general->len = strlen(term); } } req->referenceId = set_refid(out); @@@ -4423,7 -4499,7 +4467,7 @@@ static void http_response(Z_HTTP_Respon 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}