X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=client%2Fclient.c;h=b404ae2a3d3d26434665a3b039f6ad22d93e6e12;hp=e6dd25a8d37c7e1134cd1006a5abca55376894a0;hb=226063abdf1fadf1850eb6a7a19cc71a9bb1c8bf;hpb=69b1d8e7b437179163fe97b7cbead51a56835f2a diff --git a/client/client.c b/client/client.c index e6dd25a..b404ae2 100644 --- a/client/client.c +++ b/client/client.c @@ -253,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) @@ -318,17 +321,9 @@ static void print_refid(Z_ReferenceId *id) static Z_ReferenceId *set_refid(ODR out) { - Z_ReferenceId *id; if (!refid) return 0; - id = (Z_ReferenceId *) odr_malloc(out, sizeof(*id)); - id->len = strlen(refid); -#if OCT_SIZE - id->size = id->len; -#endif - id->buf = (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 ------------------------------- */ @@ -846,6 +841,50 @@ static void print_record(const char *buf, size_t len) 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; @@ -931,7 +970,10 @@ static void display_record(Z_External *r) || !oid_oidcmp(oid, yaz_oid_recsyn_html)) { print_xml_record(octet_buf, octet_len); - + } + else if (!oid_oidcmp(oid, yaz_oid_recsyn_mab)) + { + print_mab_record(octet_buf, octet_len); } else { @@ -1482,8 +1524,7 @@ static int send_SRW_searchRequest(const char *arg) sru_maximumRecords = 0; sr->u.request->maximumRecords = odr_intdup(out, 0); sr->u.request->facetList = facet_list; - if (record_schema) - sr->u.request->recordSchema = record_schema; + sr->u.request->recordSchema = record_schema; if (recordsyntax_size == 1 && !yaz_matchstr(recordsyntax_list[0], "xml")) sr->u.request->recordPacking = "xml"; return send_srw(sr); @@ -1569,9 +1610,6 @@ static int send_Z3950_searchRequest(const char *arg) /* send a very big referenceid to test transport stack etc. */ memset(big, 'A', 2100); bigo.len = 2100; -#if OCT_SIZE - bigo.size = bigo.len; -#endif bigo.buf = big; req->referenceId = &bigo; } @@ -2135,18 +2173,8 @@ static Z_External *create_external_itemRequest(void) 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 = (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); - + 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; @@ -2190,20 +2218,8 @@ static Z_External *create_external_ILL_APDU(void) 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 = (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); */ -/* printf("--- end of extenal\n"); */ - + r->u.single_ASN1_type = odr_create_Odr_oct(out, ill_request_buf, + ill_request_size); } return r; } @@ -2492,18 +2508,8 @@ static int send_Z3950_update(int version, int action_no, const char *recid, 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 = (char *) recid; -#if OCT_SIZE - notToKeep->elements[0]->u.opaque->size = strlen(recid); -#endif - 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; @@ -2541,18 +2547,8 @@ static int send_Z3950_update(int version, int action_no, const char *recid, 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 = (char *) recid; -#if OCT_SIZE - notToKeep->elements[0]->u.opaque->size = strlen(recid); -#endif - 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; @@ -2682,7 +2678,7 @@ static int cmd_explain(const char *arg) setno = 1; /* save this for later .. when fetching individual records */ - sr = yaz_srw_get(out, Z_SRW_explain_request); + sr = yaz_srw_get_pdu(out, Z_SRW_explain_request, sru_version); if (recordsyntax_size == 1 && !yaz_matchstr(recordsyntax_list[0], "xml")) sr->u.explain_request->recordPacking = "xml"; @@ -3188,8 +3184,7 @@ static int send_SRW_presentRequest(const char *arg) 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; + sr->u.request->recordSchema = record_schema; if (recordsyntax_size == 1 && !yaz_matchstr(recordsyntax_list[0], "xml")) sr->u.request->recordPacking = "xml"; return send_srw(sr); @@ -3403,9 +3398,6 @@ static int send_Z3950_scanrequest(const char *set, const char *query, req->termListAndStartPoint->term->u.general->buf = odr_strdup(out, 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);