X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=client%2Fclient.c;h=2be21dcca745724721630c3aa1d4b6ef8cf11cf1;hb=202c86ec645b0ec72aa9123dcdd8f735153114ea;hp=0cf0cadf605822900c3098782d741fbfc9c81cd1;hpb=8356ea58313ee1f350226172cf99bfb0b7c5583c;p=yaz-moved-to-github.git diff --git a/client/client.c b/client/client.c index 0cf0cad..2be21dc 100644 --- a/client/client.c +++ b/client/client.c @@ -286,14 +286,14 @@ int send_apdu(Z_APDU *a) return 1; } -static void print_stringn(const unsigned char *buf, size_t len) +static void print_stringn(const char *buf, size_t len) { size_t i; - for (i = 0; i= 32) || strchr("\n\r\t\f", buf[i])) printf("%c", buf[i]); else - printf("\\X%02X", buf[i]); + printf("\\X%02X", ((const unsigned char *)buf)[i]); } static void print_refid(Z_ReferenceId *id) @@ -301,7 +301,7 @@ static void print_refid(Z_ReferenceId *id) if (id) { printf("Reference Id: "); - print_stringn(id->buf, id->len); + print_stringn((const char *) id->buf, id->len); printf("\n"); } } @@ -435,8 +435,8 @@ static int process_initResponse(Z_InitResponse *res) else { /* Peek at any private Init-diagnostic APDUs */ - printf("### NAUGHTY: External is '%.*s'\n", - sat->len, sat->buf); + printf("yaz-client ignoring unrecognised userInformationField: %d-octet External '%.*s'\n", + (int) sat->len, sat->len, sat->buf); } } odr_reset(print); @@ -706,10 +706,6 @@ int session_connect(const char *arg) } #endif protocol = conn->protocol; - if (conn->protocol == PROTO_HTTP) - set_base(""); - else - set_base("Default"); printf("Connecting..."); fflush(stdout); if (cs_connect(conn, add) < 0) @@ -722,7 +718,10 @@ int session_connect(const char *arg) printf("OK.\n"); cs_print_session_info(conn); if (basep && *basep) - set_base (basep); + set_base(basep); + else if (protocol == PROTO_Z3950) + set_base("Default"); + if (protocol == PROTO_Z3950) { send_initRequest(type_and_host); @@ -739,9 +738,13 @@ int cmd_open(const char *arg) strncpy(cur_host, arg, sizeof(cur_host)-1); cur_host[sizeof(cur_host)-1] = 0; } + + set_base(""); r = session_connect(cur_host); if (conn && conn->protocol == PROTO_HTTP) queryType = QueryType_CQL; + + return r; } @@ -760,7 +763,7 @@ int cmd_authentication(const char *arg) } else if (r == 1) { - auth = nmem_malloc(nmem_auth, sizeof(*auth)); + auth = (Z_IdAuthentication *) nmem_malloc(nmem_auth, sizeof(*auth)); if (!strcmp(args[0], "-")) { auth->which = Z_IdAuthentication_anonymous; @@ -776,9 +779,10 @@ int cmd_authentication(const char *arg) } else if (r == 2) { - auth = nmem_malloc(nmem_auth, sizeof(*auth)); + auth = (Z_IdAuthentication *) nmem_malloc(nmem_auth, sizeof(*auth)); auth->which = Z_IdAuthentication_idPass; - auth->u.idPass = nmem_malloc(nmem_auth, sizeof(*auth->u.idPass)); + auth->u.idPass = (Z_IdPass *) + nmem_malloc(nmem_auth, sizeof(*auth->u.idPass)); auth->u.idPass->groupId = NULL; auth->u.idPass->userId = !strcmp(args[0], "-") ? 0 : args[0]; auth->u.idPass->password = !strcmp(args[1], "-") ? 0 : args[1]; @@ -787,9 +791,10 @@ int cmd_authentication(const char *arg) } else if (r == 3) { - auth = nmem_malloc(nmem_auth, sizeof(*auth)); + auth = (Z_IdAuthentication*) nmem_malloc(nmem_auth, sizeof(*auth)); auth->which = Z_IdAuthentication_idPass; - auth->u.idPass = nmem_malloc(nmem_auth, sizeof(*auth->u.idPass)); + auth->u.idPass = (Z_IdPass *) + nmem_malloc(nmem_auth, sizeof(*auth->u.idPass)); auth->u.idPass->groupId = args[1]; auth->u.idPass->userId = args[0]; auth->u.idPass->password = args[2]; @@ -808,7 +813,7 @@ int cmd_authentication(const char *arg) /* SEARCH SERVICE ------------------------------ */ static void display_record(Z_External *r); -static void print_record(const unsigned char *buf, size_t len) +static void print_record(const char *buf, size_t len) { size_t i = len; print_stringn(buf, len); @@ -868,91 +873,72 @@ static void display_record(Z_External *r) } } } - if (oid && !oid_oidcmp(oid, yaz_oid_recsyn_soif)) - { - print_record((const unsigned char *) r->u.octet_aligned->buf, - r->u.octet_aligned->len); - marc_file_write((const char *) r->u.octet_aligned->buf, - r->u.octet_aligned->len); - } - else if (oid && r->which == Z_External_octet) + if (oid && r->which == Z_External_octet) { - const char *octet_buf = (char*)r->u.octet_aligned->buf; - if (oid && (!oid_oidcmp(oid, yaz_oid_recsyn_xml) - || !oid_oidcmp(oid, yaz_oid_recsyn_xml) - || !oid_oidcmp(oid, yaz_oid_recsyn_html))) + const char *octet_buf = (const char*)r->u.octet_aligned->buf; + size_t octet_len = r->u.octet_aligned->len; + if (!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); + fwrite(octet_buf, 1, octet_len, stdout); } - else if (oid && !oid_oidcmp(oid, yaz_oid_recsyn_postscript)) - { - int size = r->u.octet_aligned->len; - if (size > 100) - size = 100; - print_record((const unsigned char *) octet_buf, size); - } - else + else if (yaz_oid_is_iso2709(oid)) { - if (oid && yaz_oid_is_iso2709(oid)) + const char *result; + size_t rlen; + yaz_iconv_t cd = 0; + yaz_marc_t mt = yaz_marc_create(); + const char *from = 0; + + if (marcCharset && !strcmp(marcCharset, "auto")) { - const char *result; - size_t rlen; - yaz_iconv_t cd = 0; - yaz_marc_t mt = yaz_marc_create(); - const char *from = 0; - - if (marcCharset && !strcmp(marcCharset, "auto")) + if (!oid_oidcmp(oid, yaz_oid_recsyn_usmarc)) { - if (!oid_oidcmp(oid, yaz_oid_recsyn_usmarc)) - { - if (octet_buf[9] == 'a') - from = "UTF-8"; - else - from = "MARC-8"; - } + if (octet_buf[9] == 'a') + from = "UTF-8"; else - from = "ISO-8859-1"; + from = "MARC-8"; } - else if (marcCharset) - from = marcCharset; - if (outputCharset && from) - { - cd = yaz_iconv_open(outputCharset, from); - printf("convert from %s to %s", from, - outputCharset); - if (!cd) - printf(" unsupported\n"); - else - { - yaz_marc_iconv(mt, cd); - printf("\n"); - } - } - - if (yaz_marc_decode_buf(mt, octet_buf, r->u.octet_aligned->len, - &result, &rlen)> 0) + else + from = "ISO-8859-1"; + } + else if (marcCharset) + from = marcCharset; + if (outputCharset && from) + { + cd = yaz_iconv_open(outputCharset, from); + printf("convert from %s to %s", from, + outputCharset); + if (!cd) + printf(" unsupported\n"); + else { - if (fwrite(result, rlen, 1, stdout) != 1) - { - printf("write to stdout failed\n"); - } + yaz_marc_iconv(mt, cd); + printf("\n"); } - else + } + + if (yaz_marc_decode_buf(mt, octet_buf, octet_len, + &result, &rlen)> 0) + { + if (fwrite(result, rlen, 1, stdout) != 1) { - printf("bad MARC. Dumping as it is:\n"); - print_record((const unsigned char*) octet_buf, - r->u.octet_aligned->len); + printf("write to stdout failed\n"); } - yaz_marc_destroy(mt); - if (cd) - yaz_iconv_close(cd); } else { - print_record((const unsigned char*) octet_buf, - r->u.octet_aligned->len); + printf("bad MARC. Dumping as it is:\n"); + print_record(octet_buf, octet_len); } + yaz_marc_destroy(mt); + if (cd) + yaz_iconv_close(cd); + } + else + { + print_record(octet_buf, octet_len); } marc_file_write(octet_buf, r->u.octet_aligned->len); } @@ -963,7 +949,7 @@ static void display_record(Z_External *r) printf("Expecting single SUTRS type for SUTRS.\n"); return; } - print_record(r->u.sutrs->buf, r->u.sutrs->len); + print_record((const char *) r->u.sutrs->buf, r->u.sutrs->len); marc_file_write((const char *) r->u.sutrs->buf, r->u.sutrs->len); } else if (oid && !oid_oidcmp(oid, yaz_oid_recsyn_grs_1)) @@ -1210,11 +1196,7 @@ static int send_srw(Z_SRW_PDU *sr) const char *charset = negotiationCharset; const char *host_port = cur_host; Z_GDU *gdu; - char *path = 0; - - path = (char *) odr_malloc(out, 2+strlen(databaseNames[0])); - *path = '/'; - strcpy(path+1, databaseNames[0]); + char *path = yaz_encode_sru_dbpath_odr(out, databaseNames[0]); gdu = z_get_HTTP_Request_host_path(out, host_port, path); @@ -1843,7 +1825,7 @@ void process_ESResponse(Z_ExtendedServicesResponse *res) if (id) { printf("Target Reference: "); - print_stringn (id->buf, id->len); + print_stringn((const char *) id->buf, id->len); printf("\n"); } if (ext->which == Z_External_update) @@ -3897,9 +3879,10 @@ static void initialize(const char *rc_file) cmd_format("usmarc"); + file_history = file_history_new(); + source_rc_file(rc_file); - file_history = file_history_new(); file_history_load(file_history); file_history_trav(file_history, 0, add_to_readline_history); } @@ -4006,6 +3989,12 @@ static void http_response(Z_HTTP_Response *hres) int ret = -1; const char *connection_head = z_HTTP_header_lookup(hres->headers, "Connection"); + + if (hres->code != 200) + { + printf("HTTP Error Status=%d\n", hres->code); + } + if (!yaz_srw_check_content_type(hres)) printf("Content type does not appear to be XML\n"); else @@ -4033,12 +4022,14 @@ static void http_response(Z_HTTP_Response *hres) printf("Got update response. Status: %s\n", sr->u.update_response->operationStatus); else + { + printf("Decoding of SRW package failed\n"); ret = -1; + } } else if (soap_package && (soap_package->which == Z_SOAP_fault || soap_package->which == Z_SOAP_error)) { - printf("HTTP Error Status=%d\n", hres->code); printf("SOAP Fault code %s\n", soap_package->u.fault->fault_code); printf("SOAP Fault string %s\n", @@ -4055,17 +4046,7 @@ static void http_response(Z_HTTP_Response *hres) odr_destroy(o); } if (ret) - { - if (hres->code != 200) - { - printf("HTTP Error Status=%d\n", hres->code); - } - else - { - printf("Decoding of SRW package failed\n"); - } - close_session(); - } + close_session(); /* close session on error */ else { if (!strcmp(hres->version, "1.0"))