X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=client%2Fclient.c;h=7dd97d9053b49f285841b78506eaac9f27223b77;hb=a1d6c3e37313363550600ebcf45ec41ff9f1410b;hp=f3b896ce84fe8768597029226b1fbd36df758575;hpb=64a4f78d5566927b12b374157edf72f68232ffa3;p=yaz-moved-to-github.git diff --git a/client/client.c b/client/client.c index f3b896c..7dd97d9 100644 --- a/client/client.c +++ b/client/client.c @@ -2,7 +2,7 @@ * Copyright (c) 1995-2004, Index Data * See the file LICENSE for details. * - * $Id: client.c,v 1.229 2004-02-14 15:44:15 adam Exp $ + * $Id: client.c,v 1.236 2004-03-17 10:59:41 adam Exp $ */ #include @@ -97,6 +97,7 @@ static char *negotiationCharset = 0; static char *outputCharset = 0; static char *marcCharset = 0; static char* yazLang = 0; +static char* http_version = "1.1"; static char last_cmd[32] = "?"; static FILE *marc_file = 0; @@ -307,15 +308,15 @@ static void send_initRequest(const char* type_and_host) yaz_oi_APDU(apdu, &p); if ((p0=yaz_oi_update(p, out, NULL, 0, 0))) { - ODR_MASK_SET(req->options, Z_Options_negotiationModel); - - p0->which = Z_OtherInfo_externallyDefinedInfo; - p0->information.externallyDefinedInfo = - yaz_set_proposal_charneg( - out, - (const char**)&negotiationCharset, - negotiationCharset ? 1 : 0, - (const char**)&yazLang, yazLang ? 1 : 0, 1); + ODR_MASK_SET(req->options, Z_Options_negotiationModel); + + p0->which = Z_OtherInfo_externallyDefinedInfo; + p0->information.externallyDefinedInfo = + yaz_set_proposal_charneg( + out, + (const char**)&negotiationCharset, + negotiationCharset ? 1 : 0, + (const char**)&yazLang, yazLang ? 1 : 0, 1); } } @@ -711,7 +712,7 @@ static void display_record(Z_External *r) if (ent && r->which == Z_External_octet) { Z_ext_typeent *type = z_ext_getentbyref(ent->value); - void *rr; + char *rr; if (type) { @@ -720,7 +721,7 @@ static void display_record(Z_External *r) */ odr_setbuf(in, (char*)r->u.octet_aligned->buf, r->u.octet_aligned->len, 0); - if (!(*type->fun)(in, (char **)&rr, 0, 0)) + if (!(*type->fun)(in, &rr, 0, 0)) { odr_perror(in, "Decoding constructed record."); fprintf(stdout, "[Near %d]\n", odr_offset(in)); @@ -915,6 +916,8 @@ static void display_record(Z_External *r) printf ("shelvingLocation: %s\n", data->shelvingLocation); if (data->callNumber) printf ("callNumber: %s\n", data->callNumber); + if (data->shelvingData) + printf ("shelvingData: %s\n", data->shelvingData); if (data->copyNumber) printf ("copyNumber: %s\n", data->copyNumber); if (data->publicNote) @@ -1110,6 +1113,7 @@ static int send_srw(Z_SRW_PDU *sr) strcpy(path+1, databaseNames[0]); gdu = z_get_HTTP_Request(out); + gdu->u.HTTP_Request->version = http_version; gdu->u.HTTP_Request->path = odr_strdup(out, path); if (host_port) @@ -1208,8 +1212,13 @@ static int send_SRW_searchRequest(const char *arg) sr = yaz_srw_get(out, Z_SRW_searchRetrieve_request); sr->u.request->query_type = Z_SRW_query_type_cql; sr->u.request->query.cql = odr_strdup(out, arg); + + sr->u.request->maximumRecords = odr_intdup(out, 0); + if (record_schema) sr->u.request->recordSchema = record_schema; + if (recordsyntax == VAL_TEXT_XML) + sr->u.explain_request->recordPacking = "xml"; return send_srw(sr); } #endif @@ -2148,6 +2157,8 @@ static int cmd_explain(const char *arg) /* save this for later .. when fetching individual records */ sr = yaz_srw_get(out, Z_SRW_explain_request); + if (recordsyntax == VAL_TEXT_XML) + sr->u.explain_request->recordPacking = "xml"; send_srw(sr); return 2; } @@ -2384,6 +2395,8 @@ static int send_SRW_presentRequest(const char *arg) sr->u.request->maximumRecords = odr_intdup(out, nos); if (record_schema) sr->u.request->recordSchema = record_schema; + if (recordsyntax == VAL_TEXT_XML) + sr->u.request->recordPacking = "xml"; return send_srw(sr); } #endif @@ -3312,8 +3325,11 @@ static void handle_srw_response(Z_SRW_searchRetrieveResponse *res) for (i = 0; inum_diagnostics; i++) { - printf ("SRW diagnostic %s\n", - res->diagnostics[i].code); + if (res->diagnostics[i].uri) + printf ("SRW diagnostic %s\n", + res->diagnostics[i].uri); + else + printf ("SRW diagnostic missing or could not be decoded\n"); if (res->diagnostics[i].message) printf ("Message: %s\n", res->diagnostics[i].message); if (res->diagnostics[i].details)