X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=client%2Fclient.c;h=ce1adbabf23682bb8f7fedcdde550c466ee6f6de;hb=7eab93067f8ab95e6b422eedb2d900ca19d4d15e;hp=82c78cae39d9f642d7ab253089c88d3e4204fe0b;hpb=3ebf9c87afb52af8cc6e696ffbb040aeca68b3f4;p=yaz-moved-to-github.git diff --git a/client/client.c b/client/client.c index 82c78ca..ce1adba 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.342 2007-05-30 21:56:59 adam Exp $ + * $Id: client.c,v 1.349 2007-08-14 12:21:14 adam Exp $ */ /** \file client.c * \brief yaz-client program @@ -171,9 +171,6 @@ static cql_transform_t cqltrans = 0; /* CQL context-set handle */ int rl_attempted_completion_over = 0; #endif -/* set this one to 1, to avoid decode of unknown MARCs */ -#define AVOID_MARC_DECODE 1 - #define maxOtherInfosSupported 10 struct eoi { Odr_oid oid[OID_SIZE]; @@ -1918,6 +1915,20 @@ void process_ESResponse(Z_ExtendedServicesResponse *res) } } } + if (ext->which == Z_External_itemOrder) + { + Z_IOTaskPackage *otp = ext->u.itemOrder->u.taskPackage; + if (otp && otp->targetPart && otp->targetPart->itemRequest) + { + Z_External *ext = otp->targetPart->itemRequest; + if (ext->which == Z_External_octet) + { + Odr_oct *doc = ext->u.octet_aligned; + printf("Got itemRequest doc %.*s\n", + doc->len, doc->buf); + } + } + } } if (res->taskPackage && res->taskPackage->which == Z_External_octet) { @@ -3750,19 +3761,42 @@ int cmd_push_command(const char* arg) return 1; } -void source_rcfile(void) +void source_rc_file(const char *rc_file) { - /* Look for a $HOME/.yazclientrc and source it if it exists */ + /* If rc_file != NULL, source that. Else + Look for .yazclientrc and read it if it exists. + If it does not exist, read $HOME/.yazclientrc instead */ struct stat statbuf; - char fname[1000]; - char* homedir = getenv("HOME"); - sprintf(fname, "%.500s%s%s", homedir ? homedir : "", - homedir ? "/" : "", - ".yazclientrc"); - - if (stat(fname,&statbuf)==0) - cmd_source(fname, 0 ); + if (rc_file) + { + if (stat(rc_file, &statbuf) == 0) + cmd_source(rc_file, 0); + else + { + fprintf(stderr, "yaz_client: cannot source '%s'\n", rc_file); + exit(1); + } + } + else + { + char fname[1000]; + strcpy(fname, ".yazclientrc"); + if (stat(fname, &statbuf)==0) + { + cmd_source(fname, 0); + } + else + { + const char* homedir = getenv("HOME"); + if (homedir) + { + sprintf(fname, "%.800s/%s", homedir, ".yazclientrc"); + if (stat(fname, &statbuf)==0) + cmd_source(fname, 0); + } + } + } } void add_to_readline_history(void *client_data, const char *line) @@ -3773,7 +3807,7 @@ void add_to_readline_history(void *client_data, const char *line) #endif } -static void initialize(void) +static void initialize(const char *rc_file) { FILE *inf; int i; @@ -3812,7 +3846,7 @@ static void initialize(void) cmd_format("usmarc"); - source_rcfile(); + source_rc_file(rc_file); file_history = file_history_new(); file_history_load(file_history); @@ -3923,7 +3957,7 @@ static void http_response(Z_HTTP_Response *hres) const char *connection_head = z_HTTP_header_lookup(hres->headers, "Connection"); if (!yaz_srw_check_content_type(hres)) - printf("Content type does not appear to be XML"); + printf("Content type does not appear to be XML\n"); else { Z_SOAP *soap_package = 0; @@ -4820,6 +4854,7 @@ int main(int argc, char **argv) char *open_command = 0; char *auth_command = 0; char *arg; + const char *rc_file = 0; int ret; #if HAVE_LOCALE_H @@ -4844,7 +4879,7 @@ int main(int argc, char **argv) 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) + while ((ret = options("k:c:q:a:b:m:v:p:u:t:Vxd:f:", argv, argc, &arg)) != -2) { switch (ret) { @@ -4862,9 +4897,28 @@ int main(int argc, char **argv) exit(1); } break; + case 'a': + if (!strcmp(arg, "-")) + apdu_file=stderr; + else + apdu_file=fopen(arg, "a"); + break; + case 'b': + if (!strcmp(arg, "-")) + ber_file=stderr; + else + ber_file=fopen(arg, "a"); + break; + case 'c': + strncpy (ccl_fields, arg, sizeof(ccl_fields)-1); + ccl_fields[sizeof(ccl_fields)-1] = '\0'; + break; case 'd': dump_file_prefix = arg; break; + case 'f': + rc_file = arg; + break; case 'k': kilobytes = atoi(arg); break; @@ -4875,34 +4929,15 @@ int main(int argc, char **argv) exit (1); } break; - case 't': - outputCharset = xstrdup(arg); - break; - case 'c': - strncpy (ccl_fields, arg, sizeof(ccl_fields)-1); - ccl_fields[sizeof(ccl_fields)-1] = '\0'; + case 'p': + yazProxy = xstrdup(arg); break; case 'q': strncpy (cql_fields, arg, sizeof(cql_fields)-1); cql_fields[sizeof(cql_fields)-1] = '\0'; break; - case 'b': - if (!strcmp(arg, "-")) - ber_file=stderr; - else - ber_file=fopen(arg, "a"); - break; - case 'a': - if (!strcmp(arg, "-")) - apdu_file=stderr; - else - apdu_file=fopen(arg, "a"); - break; - case 'x': - hex_dump = 1; - break; - case 'p': - yazProxy = xstrdup(arg); + case 't': + outputCharset = xstrdup(arg); break; case 'u': if (!auth_command) @@ -4918,24 +4953,31 @@ int main(int argc, char **argv) case 'V': show_version(); break; + case 'x': + hex_dump = 1; + break; default: fprintf (stderr, "Usage: %s " - " [-a ]" + " [-a apdulog]" " [-b berdump]" - " [-d dump]\n" - " [-c cclfields]" + " [-c cclfile]" + " [-d dump]" + " [-f cmdfile]" " [-k size]" - " [-m ]\n" - " [-p ]" - " [-q cqlfields]" - " [-u ]" + " [-m marclog]" + " [-p proxy-addr]" + " [-q cqlfile]" + " [-t dispcharset]" + " [-u auth]" + " [-v loglevel]" " [-V]" - " []\n", + " [-x]" + " [server-addr]\n", prog); exit (1); } } - initialize(); + initialize(rc_file); if (auth_command) { #ifdef HAVE_GETTIMEOFDAY