X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=client%2Fclient.c;h=20697e34c310291fb9bcf1b5b98d138ae8805efd;hp=b091b3199c76ea8477e0b5e52051ce86c74c9f42;hb=fe507b6b15788a3a8e58063d9dae52532a5229a5;hpb=be821514c869d68186361b5aab6bbfd1aa60e087 diff --git a/client/client.c b/client/client.c index b091b31..20697e3 100644 --- a/client/client.c +++ b/client/client.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2007, Index Data ApS * See the file LICENSE for details. * - * $Id: client.c,v 1.333 2007-04-12 20:47:27 adam Exp $ + * $Id: client.c,v 1.337 2007-05-06 20:12:19 adam Exp $ */ /** \file client.c * \brief yaz-client program @@ -173,7 +173,7 @@ int rl_attempted_completion_over = 0; #define AVOID_MARC_DECODE 1 #define maxOtherInfosSupported 10 -struct { +struct eoi { int oid[OID_SIZE]; char* value; } extraOtherInfos[maxOtherInfosSupported]; @@ -339,9 +339,7 @@ static void send_initRequest(const char* type_and_host) if (yazProxy && type_and_host) { - const int *oid_proxy = yaz_string_to_oid(yaz_oid_std(), - CLASS_USERINFO, OID_STR_PROXY); - yaz_oi_set_string_oid(&req->otherInfo, out, oid_proxy, + yaz_oi_set_string_oid(&req->otherInfo, out, yaz_oid_userinfo_proxy, 1, type_and_host); } @@ -351,7 +349,8 @@ static void send_initRequest(const char* type_and_host) yaz_oi_APDU(apdu, &p); - if ((p0=yaz_oi_update(p, out, NULL, 0, 0))) { + if ((p0=yaz_oi_update(p, out, NULL, 0, 0))) + { ODR_MASK_SET(req->options, Z_Options_negotiationModel); p0->which = Z_OtherInfo_externallyDefinedInfo; @@ -362,7 +361,6 @@ static void send_initRequest(const char* type_and_host) negotiationCharsetRecords); } } - if (send_apdu(apdu)) printf("Sent initrequest.\n"); } @@ -455,7 +453,7 @@ static int process_initResponse(Z_InitResponse *res) Z_CharSetandLanguageNegotiation *p = yaz_get_charneg_record(res->otherInfo); - + if (p) { char *charset=NULL, *lang=NULL; @@ -464,18 +462,20 @@ static int process_initResponse(Z_InitResponse *res) yaz_get_response_charneg(session_mem, p, &charset, &lang, &selected); + printf("Accepted character set : %s\n", charset); + printf("Accepted code language : %s\n", lang ? lang : "none"); + printf("Accepted records in ...: %d\n", selected ); + if (outputCharset && negotiationCharset) { - odr_set_charset (out, charset, outputCharset); - odr_set_charset (in, outputCharset, charset); + printf("Converting between %s and %s\n", + outputCharset, negotiationCharset); + odr_set_charset (out, charset, outputCharset); + odr_set_charset (in, outputCharset, charset); } else { - odr_set_charset (out, 0, 0); - odr_set_charset (in, 0, 0); + odr_set_charset (out, 0, 0); + odr_set_charset (in, 0, 0); } - - printf("Accepted character set : %s\n", charset); - printf("Accepted code language : %s\n", lang ? lang : "none"); - printf("Accepted records in ...: %d\n", selected ); } } fflush (stdout); @@ -624,7 +624,7 @@ static int parse_cmd_doc(const char **arg, ODR out, char **buf, return 0; } *len = fsize; - *buf = odr_malloc(out, fsize); + *buf = (char *) odr_malloc(out, fsize); if (fread(*buf, 1, fsize, inf) != fsize) { printf("Unable to read %s\n", fname); @@ -859,10 +859,7 @@ static void print_record(const unsigned char *buf, size_t len) static void display_record(Z_External *r) { - char oid_name_buf[OID_STR_MAX]; - int oclass; const int *oid = r->direct_reference; - const char *oid_name = 0; record_last = r; /* @@ -870,7 +867,10 @@ static void display_record(Z_External *r) */ if (oid) { - oid_name = yaz_oid_to_string_buf(oid, &oclass, oid_name_buf); + int oclass; + char oid_name_buf[OID_STR_MAX]; + const char *oid_name + = yaz_oid_to_string_buf(oid, &oclass, oid_name_buf); printf("Record type: "); if (oid_name) printf("%s\n", oid_name); @@ -908,7 +908,7 @@ static void display_record(Z_External *r) } } } - if (oid_name && !yaz_matchstr(oid_name, OID_STR_SOIF)) + if (oid && !oid_oidcmp(oid, yaz_oid_recsyn_soif)) { print_record((const unsigned char *) r->u.octet_aligned->buf, r->u.octet_aligned->len); @@ -918,14 +918,14 @@ static void display_record(Z_External *r) else if (oid && r->which == Z_External_octet) { const char *octet_buf = (char*)r->u.octet_aligned->buf; - if (oid_name && (!yaz_matchstr(oid_name, OID_STR_XML) - || !yaz_matchstr(oid_name, OID_STR_APPLICATION_XML) - || !yaz_matchstr(oid_name, OID_STR_HTML))) + if (oid && (!oid_oidcmp(oid, yaz_oid_recsyn_xml) + || !oid_oidcmp(oid, yaz_oid_recsyn_xml) + || !oid_oidcmp(oid, yaz_oid_recsyn_html))) { print_record((const unsigned char *) octet_buf, r->u.octet_aligned->len); } - else if (oid_name && !yaz_matchstr(oid_name, OID_STR_POSTSCRIPT)) + else if (oid && !oid_oidcmp(oid, yaz_oid_recsyn_postscript)) { int size = r->u.octet_aligned->len; if (size > 100) @@ -953,7 +953,7 @@ static void display_record(Z_External *r) if (marcCharset && !strcmp(marcCharset, "auto")) { - if (!yaz_matchstr(oid_name, OID_STR_USMARC)) + if (!oid_oidcmp(oid, yaz_oid_recsyn_usmarc)) { if (octet_buf[9] == 'a') from = "UTF-8"; @@ -1003,7 +1003,7 @@ static void display_record(Z_External *r) if (marc_file) fwrite (octet_buf, 1, r->u.octet_aligned->len, marc_file); } - else if (oid_name && !yaz_matchstr(oid_name, OID_STR_SUTRS)) + else if (oid && !oid_oidcmp(oid, yaz_oid_recsyn_sutrs)) { if (r->which != Z_External_sutrs) { @@ -1014,7 +1014,7 @@ static void display_record(Z_External *r) if (marc_file) fwrite (r->u.sutrs->buf, 1, r->u.sutrs->len, marc_file); } - else if (oid_name && !yaz_matchstr(oid_name, OID_STR_GRS1)) + else if (oid && !oid_oidcmp(oid, yaz_oid_recsyn_grs_1)) { WRBUF w; if (r->which != Z_External_grs1) @@ -1027,7 +1027,7 @@ static void display_record(Z_External *r) puts (wrbuf_cstr(w)); wrbuf_destroy(w); } - else if (oid_name && !yaz_matchstr(oid_name, OID_STR_OPAC)) + else if (oid && !oid_oidcmp(oid, yaz_oid_recsyn_opac)) { int i; if (r->u.opac->bibliographicRecord) @@ -1166,7 +1166,7 @@ static void display_diagrecs(Z_DiagRec **pp, int num) const char *diag_name = 0; diag_name = yaz_oid_to_string_buf (r->diagnosticSetId, &oclass, diag_name_buf); - if (yaz_matchstr(diag_name, OID_STR_BIB1)) + if (oid_oidcmp(r->diagnosticSetId, yaz_oid_diagset_bib_1)) printf("Unknown diagset: %s\n", diag_name); } printf(" [%d] %s", *r->condition, diagbib1_str(*r->condition)); @@ -1260,7 +1260,7 @@ static int send_srw(Z_SRW_PDU *sr) Z_GDU *gdu; char *path = 0; - path = odr_malloc(out, 2+strlen(databaseNames[0])); + path = (char *) odr_malloc(out, 2+strlen(databaseNames[0])); *path = '/'; strcpy(path+1, databaseNames[0]); @@ -2248,11 +2248,10 @@ static int cmd_update_Z3950(int version, int action_no, const char *recid, record_this = record_last; } - req->packageType = - yaz_string_to_oid_odr(yaz_oid_std(), - CLASS_EXTSERV, - version == 0 ? "DB. Update (first version)" : - "DB. Update", out); + req->packageType = odr_oiddup(out, (version == 0 ? + yaz_oid_extserv_database_update_first_version : + yaz_oid_extserv_database_update)); + req->packageName = esPackageName; req->referenceId = set_refid (out); @@ -3729,7 +3728,8 @@ static void initialize(void) /* If this fails, no problem: we detect cqltrans == 0 later */ #if HAVE_READLINE_READLINE_H - rl_attempted_completion_function = (CPPFunction*)readline_completer; + rl_attempted_completion_function = + (char **(*)(const char *, int, int)) readline_completer; #endif for(i = 0; i < maxOtherInfosSupported; ++i) { extraOtherInfos[i].oid[0] = -1; @@ -3864,7 +3864,7 @@ static void http_response(Z_HTTP_Response *hres) soap_handlers); if (!ret && soap_package->which == Z_SOAP_generic) { - Z_SRW_PDU *sr = soap_package->u.generic->p; + Z_SRW_PDU *sr = (Z_SRW_PDU *) soap_package->u.generic->p; if (sr->which == Z_SRW_searchRetrieve_response) handle_srw_response(sr->u.response); else if (sr->which == Z_SRW_explain_response) @@ -4767,6 +4767,7 @@ int main(int argc, char **argv) ODR_MASK_SET(&z3950_options, Z_Options_sort); ODR_MASK_SET(&z3950_options, Z_Options_extendedServices); ODR_MASK_SET(&z3950_options, Z_Options_delSet); + ODR_MASK_SET(&z3950_options, Z_Options_negotiationModel); while ((ret = options("k:c:q:a:b:m:v:p:u:t:Vxd:", argv, argc, &arg)) != -2) {