X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=client%2Fclient.c;h=f9350b8011edbe5d672109eed243dadd28bef5d4;hp=5789d7c0ee5c23a0ee559b988d0dd1a460b21412;hb=49efb9d1b4fc68e075b5121b68922f866f4b330f;hpb=62bcf7a811cd3151ac10f93317c9ddfa6b16f539 diff --git a/client/client.c b/client/client.c index 5789d7c..f9350b8 100644 --- a/client/client.c +++ b/client/client.c @@ -1,10 +1,28 @@ /* - * Copyright (c) 1995-1999, Index Data + * Copyright (c) 1995-2000, Index Data * See the file LICENSE for details. * Sebastian Hammer, Adam Dickmeiss * * $Log: client.c,v $ - * Revision 1.93 2000-01-15 09:39:50 adam + * Revision 1.98 2000-03-16 13:55:49 ian + * Added commands for sending shutdown and startup admin requests via the admin ES. + * + * Revision 1.97 2000/03/14 14:06:04 ian + * Minor change to order of debugging output for send_apdu, + * fixed encoding of admin request. + * + * Revision 1.96 2000/03/14 09:27:07 ian + * Added code to enable sending of admin extended service requests + * + * Revision 1.95 2000/02/28 11:20:05 adam + * Using autoconf. New definitions: YAZ_BEGIN_CDECL/YAZ_END_CDECL. + * + * Revision 1.94 2000/01/31 13:15:21 adam + * Removed uses of assert(3). Cleanup of ODR. CCL parser update so + * that some characters are not surrounded by spaces in resulting term. + * ILL-code updates. + * + * Revision 1.93 2000/01/15 09:39:50 adam * Implemented ill_get_ILLRequest. More ILL testing for client. * * Revision 1.92 1999/12/21 16:24:48 adam @@ -308,7 +326,6 @@ #include #include #include -#include #include @@ -338,6 +355,8 @@ #include #endif +#include "admin.h" + #define C_PROMPT "Z> " static ODR out, in, print; /* encoding and decoding streams */ @@ -376,22 +395,28 @@ static QueryType queryType = QueryType_Prefix; static CCL_bibset bibset; /* CCL bibset handle */ #endif -static void send_apdu(Z_APDU *a) +ODR getODROutputStream() +{ + return out; +} + +void send_apdu(Z_APDU *a) { char *buf; int len; - if (!z_APDU(out, &a, 0, 0)) - { - odr_perror(out, "Encoding APDU"); - exit(1); - } if (apdu_file) { z_APDU(print, &a, 0, 0); odr_reset(print); } + if (!z_APDU(out, &a, 0, 0)) + { + odr_perror(out, "Encoding APDU"); + exit(1); + } buf = odr_getbuf(out, &len, 0); + /* printf ("sending APDU of size %d\n", len); */ if (cs_put(conn, buf, len) < 0) { fprintf(stderr, "cs_put: %s", cs_errmsg(cs_errno(conn))); @@ -751,19 +776,21 @@ static void display_record(Z_DatabaseRecord *p) } } if (ent && ent->value == VAL_SOIF) - print_record(r->u.octet_aligned->buf, r->u.octet_aligned->len); + print_record((const unsigned char *) r->u.octet_aligned->buf, r->u.octet_aligned->len); else if (r->which == Z_External_octet && p->u.octet_aligned->len) { const char *octet_buf = (char*)p->u.octet_aligned->buf; if (ent->value == VAL_TEXT_XML || ent->value == VAL_APPLICATION_XML || ent->value == VAL_HTML) - print_record(octet_buf, p->u.octet_aligned->len); + print_record((const unsigned char *) octet_buf, + p->u.octet_aligned->len); else { if (marc_display (octet_buf, NULL) <= 0) { printf ("ISO2709 decoding failed, dumping record as is:\n"); - print_record(octet_buf, p->u.octet_aligned->len); + print_record((const unsigned char*) octet_buf, + p->u.octet_aligned->len); } } if (marcdump) @@ -1000,7 +1027,11 @@ static int send_searchRequest(char *arg) case QueryType_CCL2RPN: query.which = Z_Query_type_1; RPNquery = ccl_rpn_query(out, rpn); - assert(RPNquery); + if (!RPNquery) + { + printf ("Couldn't convert from CCL to RPN\n"); + return 0; + } bib1.proto = protocol; bib1.oclass = CLASS_ATTSET; bib1.value = VAL_BIB1; @@ -1216,19 +1247,49 @@ void process_ESResponse(Z_ExtendedServicesResponse *res) } #ifdef ASN_COMPILED + +const char *get_ill_element (void *clientData, const char *element) +{ + /* printf ("asking for %s\n", element); */ + if (!strcmp (element, "ill,transaction-id,transaction-group-qualifier")) + return "1"; + if (!strcmp (element, "ill,transaction-id,transaction-qualifier")) + return "1"; + return 0; +} + static Z_External *create_external_itemRequest() { - ILL_ItemRequest *req = ill_get_ItemRequest(out); + struct ill_get_ctl ctl; + ILL_ItemRequest *req; Z_External *r = 0; + int item_request_size = 0; + char *item_request_buf = 0; + + ctl.odr = out; + ctl.clientData = 0; + ctl.f = get_ill_element; + + req = ill_get_ItemRequest(&ctl, "ill", 0); if (!ill_ItemRequest (out, &req, 0, 0)) + { + if (apdu_file) + { + ill_ItemRequest(print, &req, 0, 0); + odr_reset(print); + } + item_request_buf = odr_getbuf (out, &item_request_size, 0); + if (item_request_buf) + odr_setbuf (out, item_request_buf, item_request_size, 1); + printf ("Couldn't encode ItemRequest, size %d\n", item_request_size); return 0; + } else { oident oid; - int itemRequest_size = 0; - char *itemRequest_buf = odr_getbuf (out, &itemRequest_size, 0); + item_request_buf = odr_getbuf (out, &item_request_size, 0); oid.proto = PROTO_GENERAL; oid.oclass = CLASS_GENERAL; oid.value = VAL_ISO_ILL_1; @@ -1241,11 +1302,12 @@ static Z_External *create_external_itemRequest() r->u.single_ASN1_type = (Odr_oct *) odr_malloc (out, sizeof(*r->u.single_ASN1_type)); - r->u.single_ASN1_type->buf = odr_malloc (out, itemRequest_size); - r->u.single_ASN1_type->len = itemRequest_size; - r->u.single_ASN1_type->size = itemRequest_size; - memcpy (r->u.single_ASN1_type->buf, itemRequest_buf, itemRequest_size); - printf ("len = %d\n", itemRequest_size); + r->u.single_ASN1_type->buf = odr_malloc (out, item_request_size); + r->u.single_ASN1_type->len = item_request_size; + r->u.single_ASN1_type->size = item_request_size; + memcpy (r->u.single_ASN1_type->buf, item_request_buf, + item_request_size); + printf ("len = %d\n", item_request_size); } return r; } @@ -1259,16 +1321,37 @@ static Z_External *create_external_itemRequest() #ifdef ASN_COMPILED static Z_External *create_external_ILLRequest() { - ILL_Request *req = ill_get_ILLRequest(out); + struct ill_get_ctl ctl; + ILL_Request *req; Z_External *r = 0; + int ill_request_size = 0; + char *ill_request_buf = 0; + + ctl.odr = out; + ctl.clientData = 0; + ctl.f = get_ill_element; + + req = ill_get_ILLRequest(&ctl, "ill", 0); if (!ill_Request (out, &req, 0, 0)) + { + if (apdu_file) + { + printf ("-------------------\n"); + ill_Request(print, &req, 0, 0); + odr_reset(print); + printf ("-------------------\n"); + } + ill_request_buf = odr_getbuf (out, &ill_request_size, 0); + if (ill_request_buf) + odr_setbuf (out, ill_request_buf, ill_request_size, 1); + printf ("Couldn't encode ILL-Request, size %d\n", ill_request_size); return 0; + } else { oident oid; - int ill_request_size = 0; - char *ill_request_buf = odr_getbuf (out, &ill_request_size, 0); + ill_request_buf = odr_getbuf (out, &ill_request_size, 0); oid.proto = PROTO_GENERAL; oid.oclass = CLASS_GENERAL; @@ -1348,10 +1431,12 @@ static Z_External *create_ItemOrderExternal(const char *type, int itemno) switch (*type) { case '2': + printf ("using item-request\n"); r->u.itemOrder->u.esRequest->notToKeep->itemRequest = create_external_itemRequest(); break; case '1': + printf ("using ILL-request\n"); r->u.itemOrder->u.esRequest->notToKeep->itemRequest = create_external_ILLRequest(); break; @@ -1441,12 +1526,12 @@ static int cmd_itemorder(char *arg) { char type[12]; int itemno; - printf("Item order request\n"); - fflush(stdout); if (sscanf (arg, "%10s %d", type, &itemno) != 2) return 0; + printf("Item order request\n"); + fflush(stdout); send_itemorder(type, itemno); return(2); } @@ -2183,6 +2268,16 @@ static int client(int wait) {"refid", cmd_refid, ""}, {"itemorder", cmd_itemorder, "1|2 "}, {"update", cmd_update, ""}, + /* Server Admin Functions */ + {"adm-reindex", cmd_adm_reindex, ""}, + {"adm-truncate", cmd_adm_truncate, "('database'|'index')"}, + {"adm-create", cmd_adm_create, ""}, + {"adm-delete", cmd_adm_delete, "('database'|'index')"}, + {"adm-import", cmd_adm_import, " "}, + {"adm-refresh", cmd_adm_refresh, ""}, + {"adm-commit", cmd_adm_commit, ""}, + {"adm-shutdown", cmd_adm_shutdown, ""}, + {"adm-startup", cmd_adm_startup, ""}, {0,0} }; char *netbuffer= 0; @@ -2289,6 +2384,8 @@ static int client(int wait) fprintf(stderr, "Packet dump:\n---------\n"); odr_dumpBER(stderr, netbuffer, res); fprintf(stderr, "---------\n"); + if (apdu_file) + z_APDU(print, &apdu, 0, 0); exit(1); } if (apdu_file && !z_APDU(print, &apdu, 0, 0))