X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=client%2Fclient.c;h=769c1c5b699d2b2c07f378c08ec58c5018308d9d;hb=9c75e92604fae1efd7137d085dd2281e7886345b;hp=d8edfe1971c6e0e87e0ed1ee26dd3748129faec1;hpb=3cdfbd27dfc8dd15619f127ae78bf0f71b27dd6d;p=yaz-moved-to-github.git diff --git a/client/client.c b/client/client.c index d8edfe1..769c1c5 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.334 2007-04-16 21:53:08 adam Exp $ + * $Id: client.c,v 1.338 2007-05-08 08:22:35 adam Exp $ */ /** \file client.c * \brief yaz-client program @@ -173,8 +173,8 @@ int rl_attempted_completion_over = 0; #define AVOID_MARC_DECODE 1 #define maxOtherInfosSupported 10 -struct { - int oid[OID_SIZE]; +struct eoi { + Odr_oid oid[OID_SIZE]; char* value; } extraOtherInfos[maxOtherInfosSupported]; @@ -349,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; @@ -360,7 +361,6 @@ static void send_initRequest(const char* type_and_host) negotiationCharsetRecords); } } - if (send_apdu(apdu)) printf("Sent initrequest.\n"); } @@ -415,11 +415,9 @@ static int process_initResponse(Z_InitResponse *res) } else if (uif->which == Z_External_single) { - const int *oclc_oid = yaz_string_to_oid(yaz_oid_std(), - CLASS_GENERAL, - "OCLC-userInfo"); Odr_any *sat = uif->u.single_ASN1_type; - if (!oid_oidcmp(uif->direct_reference, oclc_oid)) + if (!oid_oidcmp(uif->direct_reference, + yaz_oid_userinfo_oclc_userinfo)) { Z_OCLC_UserInformation *oclc_ui; ODR decode = odr_createmem(ODR_DECODE); @@ -453,7 +451,7 @@ static int process_initResponse(Z_InitResponse *res) Z_CharSetandLanguageNegotiation *p = yaz_get_charneg_record(res->otherInfo); - + if (p) { char *charset=NULL, *lang=NULL; @@ -462,18 +460,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); @@ -622,7 +622,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); @@ -857,7 +857,7 @@ static void print_record(const unsigned char *buf, size_t len) static void display_record(Z_External *r) { - const int *oid = r->direct_reference; + const Odr_oid *oid = r->direct_reference; record_last = r; /* @@ -865,7 +865,7 @@ static void display_record(Z_External *r) */ if (oid) { - int oclass; + oid_class oclass; char oid_name_buf[OID_STR_MAX]; const char *oid_name = yaz_oid_to_string_buf(oid, &oclass, oid_name_buf); @@ -932,16 +932,7 @@ static void display_record(Z_External *r) } else { - const int *oidsuffix = oid_oidlen(oid) > 1 - ? oid + oid_oidlen(oid)-2 : 0; - if ( -#if AVOID_MARC_DECODE - /* primitive check for a marc OID 5.1-29 except 16 */ - oidsuffix[0] == 5 && oidsuffix[1] < 30 && oidsuffix[1] != 16 -#else - 1 -#endif - ) + if (oid && yaz_oid_is_iso2709(oid)) { const char *result; size_t rlen; @@ -1159,7 +1150,7 @@ static void display_diagrecs(Z_DiagRec **pp, int num) printf("Missing diagset\n"); else { - int oclass; + oid_class oclass; char diag_name_buf[OID_STR_MAX]; const char *diag_name = 0; diag_name = yaz_oid_to_string_buf @@ -1258,7 +1249,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]); @@ -1688,7 +1679,7 @@ static void print_oid(int iLevel, const char *pTag, Odr_oid *pOid) { if (pOid != NULL) { - int *pInt = pOid; + Odr_oid *pInt = pOid; print_level(iLevel); printf("%s:", pTag); @@ -1932,10 +1923,8 @@ static Z_External *create_external_itemRequest(void) } else { - const int *ill_oid = yaz_string_to_oid(yaz_oid_std(), - CLASS_GENERAL, "ISOILL-1"); r = (Z_External *) odr_malloc (out, sizeof(*r)); - r->direct_reference = odr_oiddup(out, ill_oid); + r->direct_reference = odr_oiddup(out, yaz_oid_general_isoill_1); r->indirect_reference = 0; r->descriptor = 0; r->which = Z_External_single; @@ -1985,13 +1974,10 @@ static Z_External *create_external_ILL_APDU(int which) } else { - const int *ill_oid = yaz_string_to_oid(yaz_oid_std(), - CLASS_GENERAL, "ISOILL-1"); - ill_request_buf = odr_getbuf (out, &ill_request_size, 0); r = (Z_External *) odr_malloc (out, sizeof(*r)); - r->direct_reference = odr_oiddup(out, ill_oid); + r->direct_reference = odr_oiddup(out, yaz_oid_general_isoill_1); r->indirect_reference = 0; r->descriptor = 0; r->which = Z_External_single; @@ -2015,10 +2001,7 @@ static Z_External *create_external_ILL_APDU(int which) static Z_External *create_ItemOrderExternal(const char *type, int itemno) { Z_External *r = (Z_External *) odr_malloc(out, sizeof(Z_External)); - const int *itemorder_oid = yaz_string_to_oid(yaz_oid_std(), - CLASS_EXTSERV, - "Item order"); - r->direct_reference = odr_oiddup(out, itemorder_oid); + r->direct_reference = odr_oiddup(out, yaz_oid_extserv_item_order); r->indirect_reference = 0; r->descriptor = 0; @@ -2066,8 +2049,6 @@ static Z_External *create_ItemOrderExternal(const char *type, int itemno) } else if (!strcmp(type, "xml") || !strcmp(type, "3")) { - const int *oid_xml = yaz_string_to_oid(yaz_oid_std(), - CLASS_RECSYN, "xml"); const char *xml_buf = "\n" " request\n" @@ -2075,7 +2056,7 @@ static Z_External *create_ItemOrderExternal(const char *type, int itemno) " 1212 \n" ""; r->u.itemOrder->u.esRequest->notToKeep->itemRequest = - z_ext_record_oid(out, oid_xml, xml_buf, strlen(xml_buf)); + z_ext_record_oid(out, yaz_oid_recsyn_xml, xml_buf, strlen(xml_buf)); } else r->u.itemOrder->u.esRequest->notToKeep->itemRequest = 0; @@ -2088,12 +2069,9 @@ static int send_itemorder(const char *type, int itemno) Z_APDU *apdu = zget_APDU(out, Z_APDU_extendedServicesRequest); Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest; - const int *itemorder_oid = yaz_string_to_oid(yaz_oid_std(), - CLASS_EXTSERV, - "Item order"); req->referenceId = set_refid (out); - req->packageType = odr_oiddup(out, itemorder_oid); + req->packageType = odr_oiddup(out, yaz_oid_extserv_item_order); req->packageName = esPackageName; req->taskSpecificParameters = create_ItemOrderExternal(type, itemno); @@ -2231,11 +2209,9 @@ static int cmd_update_Z3950(int version, int action_no, const char *recid, Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest; Z_External *r; Z_External *record_this = 0; - const int *oid_xml = yaz_string_to_oid(yaz_oid_std(), - CLASS_RECSYN, "xml"); - if (rec_buf) - record_this = z_ext_record_oid(out, oid_xml, rec_buf, rec_len); + record_this = z_ext_record_oid(out, yaz_oid_recsyn_xml, + rec_buf, rec_len); else { if (!record_last) @@ -2246,11 +2222,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); @@ -2358,7 +2333,7 @@ static int cmd_xmles(const char *arg) { char *asn_buf = 0; int noread = 0; - int *oid; + Odr_oid *oid; char oid_str[51]; Z_APDU *apdu = zget_APDU(out, Z_APDU_extendedServicesRequest); Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest; @@ -3632,8 +3607,8 @@ int cmd_register_oid(const char* args) { }; char oname_str[101], oclass_str[101], oid_str[101]; int i; - int oidclass = CLASS_GENERAL; - int oid[OID_SIZE]; + oid_class oidclass = CLASS_GENERAL; + Odr_oid oid[OID_SIZE]; if (sscanf (args, "%100[^ ] %100[^ ] %100s", oname_str,oclass_str, oid_str) < 1) { @@ -3727,7 +3702,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; @@ -3862,7 +3838,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) @@ -4142,7 +4118,7 @@ int cmd_set_otherinfo(const char* args) else { NMEM oid_tmp = nmem_create(); - const int *oid = + const Odr_oid *oid = yaz_string_to_oid_nmem(yaz_oid_std(), CLASS_GENERAL, oidstr, oid_tmp); oid_oidcpy(extraOtherInfos[otherinfoNo].oid, oid); @@ -4185,7 +4161,7 @@ int cmd_list_otherinfo(const char* args) if (extraOtherInfos[i].value) { char name_oid[OID_STR_MAX]; - int oclass; + oid_class oclass; const char *name = yaz_oid_to_string_buf(extraOtherInfos[i].oid, &oclass, name_oid); @@ -4202,7 +4178,7 @@ int cmd_list_otherinfo(const char* args) if (extraOtherInfos[i].value) { char name_oid[OID_STR_MAX]; - int oclass; + oid_class oclass; const char *name = yaz_oid_to_string_buf(extraOtherInfos[i].oid, &oclass, name_oid); @@ -4210,7 +4186,6 @@ int cmd_list_otherinfo(const char* args) i, name ? name : "null", extraOtherInfos[i].value); } - } } return 0; @@ -4765,6 +4740,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) {