X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=client%2Fclient.c;h=a57f354d99afdfe7ace32dbb77cde893de03a0db;hb=fed4c59a3c26f04ba3764947aa2f7ecdd9b46889;hp=d44b50e93355fcf5523d4145bc0a4d2fd3da816f;hpb=7453b811c6086b24a0362509f38169ed42044016;p=yaz-moved-to-github.git diff --git a/client/client.c b/client/client.c index d44b50e..a57f354 100644 --- a/client/client.c +++ b/client/client.c @@ -2,7 +2,7 @@ * Copyright (c) 1995-2003, Index Data * See the file LICENSE for details. * - * $Id: client.c,v 1.199 2003-05-27 09:42:08 mike Exp $ + * $Id: client.c,v 1.205 2003-07-23 12:57:22 mike Exp $ */ #include @@ -59,7 +59,7 @@ #define C_PROMPT "Z> " static char *codeset = 0; /* character set for output */ - +static int hex_dump = 0; static ODR out, in, print; /* encoding and decoding streams */ #if HAVE_XML2 static ODR srw_sr_odr_out = 0; @@ -159,21 +159,21 @@ const char* query_type_as_string(QueryType q) } } - -void do_hex_dump(char* buf,int len) +static void do_hex_dump(const char* buf, int len) { -#if 0 - int i,x; - for( i=0; iimplementationVersion); if (res->userInformationField) { + Z_External *uif = res->userInformationField; printf("UserInformationfield:\n"); - if (!z_External(print, (Z_External**)&res-> userInformationField, - 0, 0)) + if (!z_External(print, (Z_External**)&uif, 0, 0)) { odr_perror(print, "Printing userinfo\n"); odr_reset(print); } - if (res->userInformationField->which == Z_External_octet) + if (uif->which == Z_External_octet) { printf("Guessing visiblestring:\n"); - printf("'%s'\n", res->userInformationField->u. octet_aligned->buf); - } + printf("'%s'\n", uif->u. octet_aligned->buf); + } else if (uif->which == Z_External_single) { + /* Peek at any private Init-diagnostic APDUs */ + Odr_any *sat = uif->u.single_ASN1_type; + printf("### NAUGHTY: External is '%s'\n", sat->buf); + } odr_reset (print); } printf ("Options:"); @@ -580,14 +584,20 @@ int cmd_authentication(const char *arg) r = sscanf (arg, "%39s %39s %39s", user, group, pass); if (r == 0) { - printf("Auth field set to null\n"); + printf("Authentication set to null\n"); auth = 0; } if (r == 1) { auth = &au; - au.which = Z_IdAuthentication_open; - au.u.open = user; + if (!strcmp(user, "-")) { + au.which = Z_IdAuthentication_anonymous; + printf("Authentication set to Anonymous\n"); + } else { + au.which = Z_IdAuthentication_open; + au.u.open = user; + printf("Authentication set to Open (%s)\n", user); + } } if (r == 2) { @@ -597,6 +607,7 @@ int cmd_authentication(const char *arg) idPass.groupId = NULL; idPass.userId = user; idPass.password = group; + printf("Authentication set to User (%s), Pass (%s)\n", user, group); } if (r == 3) { @@ -606,6 +617,8 @@ int cmd_authentication(const char *arg) idPass.groupId = group; idPass.userId = user; idPass.password = pass; + printf("Authentication set to User (%s), Group (%s), Pass (%s)\n", + user, group, pass); } return 1; } @@ -716,31 +729,35 @@ static void display_record(Z_External *r) &result, &rlen)> 0) { char *from = 0; - if (marcCharset && strcmp(marcCharset, "auto")) - from = marcCharset; - else + if (marcCharset && !strcmp(marcCharset, "auto")) { if (ent->value == VAL_USMARC) { if (octet_buf[9] == 'a') from = "UTF-8"; else - from = "MARC8"; + from = "MARC-8"; } else from = "ISO-8859-1"; } + else if (marcCharset) + from = marcCharset; if (outputCharset && from) { - printf ("convert from %s to %s\n", from, - outputCharset); cd = yaz_iconv_open(outputCharset, from); + printf ("convert from %s to %s", from, + outputCharset); + if (!cd) + printf (" unsupported\n"); + else + printf ("\n"); } if (!cd) fwrite (result, 1, rlen, stdout); else { - char outbuf[12]; + char outbuf[6]; size_t inbytesleft = rlen; const char *inp = result; @@ -748,9 +765,11 @@ static void display_record(Z_External *r) { size_t outbytesleft = sizeof(outbuf); char *outp = outbuf; - size_t r = yaz_iconv (cd, (char**) &inp, - &inbytesleft, - &outp, &outbytesleft); + size_t r; + + r = yaz_iconv (cd, (char**) &inp, + &inbytesleft, + &outp, &outbytesleft); if (r == (size_t) (-1)) { int e = yaz_iconv_error(cd); @@ -802,6 +821,107 @@ static void display_record(Z_External *r) puts (wrbuf_buf(w)); wrbuf_free(w, 1); } + else if ( /* OPAC display not complete yet .. */ + ent && ent->value == VAL_OPAC) + { + int i; + if (r->u.opac->bibliographicRecord) + display_record(r->u.opac->bibliographicRecord); + for (i = 0; iu.opac->num_holdingsData; i++) + { + Z_HoldingsRecord *h = r->u.opac->holdingsData[i]; + if (h->which == Z_HoldingsRecord_marcHoldingsRecord) + { + printf ("MARC holdings %d\n", i); + display_record(h->u.marcHoldingsRecord); + } + else if (h->which == Z_HoldingsRecord_holdingsAndCirc) + { + int j; + + Z_HoldingsAndCircData *data = h->u.holdingsAndCirc; + + printf ("Data holdings %d\n", i); + if (data->typeOfRecord) + printf ("typeOfRecord: %s\n", data->typeOfRecord); + if (data->encodingLevel) + printf ("encodingLevel: %s\n", data->encodingLevel); + if (data->receiptAcqStatus) + printf ("receiptAcqStatus: %s\n", data->receiptAcqStatus); + if (data->generalRetention) + printf ("generalRetention: %s\n", data->generalRetention); + if (data->completeness) + printf ("completeness: %s\n", data->completeness); + if (data->dateOfReport) + printf ("dateOfReport: %s\n", data->dateOfReport); + if (data->nucCode) + printf ("nucCode: %s\n", data->nucCode); + if (data->localLocation) + printf ("localLocation: %s\n", data->localLocation); + if (data->shelvingLocation) + printf ("shelvingLocation: %s\n", data->shelvingLocation); + if (data->callNumber) + printf ("callNumber: %s\n", data->callNumber); + if (data->copyNumber) + printf ("copyNumber: %s\n", data->copyNumber); + if (data->publicNote) + printf ("publicNote: %s\n", data->publicNote); + if (data->reproductionNote) + printf ("reproductionNote: %s\n", data->reproductionNote); + if (data->termsUseRepro) + printf ("termsUseRepro: %s\n", data->termsUseRepro); + if (data->enumAndChron) + printf ("enumAndChron: %s\n", data->enumAndChron); + for (j = 0; jnum_volumes; j++) + { + printf ("volume %d\n", j); + if (data->volumes[j]->enumeration) + printf (" enumeration: %s\n", + data->volumes[j]->enumeration); + if (data->volumes[j]->chronology) + printf (" chronology: %s\n", + data->volumes[j]->chronology); + if (data->volumes[j]->enumAndChron) + printf (" enumAndChron: %s\n", + data->volumes[j]->enumAndChron); + } + for (j = 0; jnum_circulationData; j++) + { + printf ("circulation %d\n", j); + if (data->circulationData[j]->availableNow) + printf (" availableNow: %d\n", + *data->circulationData[j]->availableNow); + if (data->circulationData[j]->availablityDate) + printf (" availabiltyDate: %s\n", + data->circulationData[j]->availablityDate); + if (data->circulationData[j]->availableThru) + printf (" availableThru: %s\n", + data->circulationData[j]->availableThru); + if (data->circulationData[j]->restrictions) + printf (" restrictions: %s\n", + data->circulationData[j]->restrictions); + if (data->circulationData[j]->itemId) + printf (" itemId: %s\n", + data->circulationData[j]->itemId); + if (data->circulationData[j]->renewable) + printf (" renewable: %d\n", + *data->circulationData[j]->renewable); + if (data->circulationData[j]->onHold) + printf (" onHold: %d\n", + *data->circulationData[j]->onHold); + if (data->circulationData[j]->enumAndChron) + printf (" enumAndChron: %s\n", + data->circulationData[j]->enumAndChron); + if (data->circulationData[j]->midspine) + printf (" midspine: %s\n", + data->circulationData[j]->midspine); + if (data->circulationData[j]->temporaryLocation) + printf (" temporaryLocation: %s\n", + data->circulationData[j]->temporaryLocation); + } + } + } + } else { printf("Unknown record representation.\n"); @@ -2825,17 +2945,6 @@ int cmd_set_marcdump(const char* arg) return 1; } -int cmd_set_proxy(const char* arg) -{ - if(yazProxy) free(yazProxy); - yazProxy=NULL; - - if(strlen(arg) > 1) { - yazProxy=strdup(arg); - } - return 1; -} - /* this command takes 3 arge {name class oid} */ @@ -3137,6 +3246,7 @@ void wait_and_handle_response() odr_reset(out); odr_reset(in); /* release APDU from last round */ record_last = 0; + do_hex_dump(netbuffer, res); odr_setbuf(in, netbuffer, res, 0); if (!z_GDU(in, &gdu, 0, 0)) @@ -3149,8 +3259,9 @@ void wait_and_handle_response() fprintf(f, "---------\n"); if (apdu_file) z_GDU(print, &gdu, 0, 0); - close_session (); - break; + if (conn && cs_more(conn)) + continue; + break; } if (ber_file) odr_dumpBER(ber_file, netbuffer, res); @@ -3802,8 +3913,10 @@ int main(int argc, char **argv) codeset = nl_langinfo(CODESET); #endif #endif + if (codeset) + outputCharset = xstrdup(codeset); - while ((ret = options("k:c:q:a:b:m:v:p:u:t:V", argv, argc, &arg)) != -2) + while ((ret = options("k:c:q:a:b:m:v:p:u:t:Vx", argv, argc, &arg)) != -2) { switch (ret) { @@ -3848,6 +3961,9 @@ int main(int argc, char **argv) else apdu_file=fopen(arg, "a"); break; + case 'x': + hex_dump = 1; + break; case 'p': yazProxy=strdup(arg); break;