From 16ce40aa92448a07d7b8673d873f549087f27e83 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Thu, 10 Aug 2000 08:41:26 +0000 Subject: [PATCH] Fixes for ILL. --- client/client.c | 30 ++++++++--------- ill/ill-get.c | 99 ++++++++++++++++++++++++++++++++++++++++++++++--------- ztest/ztest.c | 15 +++++++-- 3 files changed, 111 insertions(+), 33 deletions(-) diff --git a/client/client.c b/client/client.c index 16ac8e4..03fbd7d 100644 --- a/client/client.c +++ b/client/client.c @@ -4,7 +4,10 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: client.c,v $ - * Revision 1.102 2000-05-18 11:57:04 adam + * Revision 1.103 2000-08-10 08:41:26 adam + * Fixes for ILL. + * + * Revision 1.102 2000/05/18 11:57:04 adam * Client display time elapsed. * * Revision 1.101 2000/04/05 07:39:54 adam @@ -1262,11 +1265,7 @@ void process_ESResponse(Z_ExtendedServicesResponse *res) 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"; + printf ("%s\n", element); return 0; } @@ -1283,7 +1282,9 @@ static Z_External *create_external_itemRequest() ctl.f = get_ill_element; req = ill_get_ItemRequest(&ctl, "ill", 0); - + if (!req) + printf ("ill_get_ItemRequest failed\n"); + if (!ill_ItemRequest (out, &req, 0, 0)) { if (apdu_file) @@ -1440,21 +1441,20 @@ static Z_External *create_ItemOrderExternal(const char *type, int itemno) (int *) odr_malloc(out, sizeof(int)); *r->u.itemOrder->u.esRequest->notToKeep->resultSetItem->item = itemno; - switch (*type) + if (!strcmp (type, "item") || !strcmp(type, "2")) { - case '2': printf ("using item-request\n"); r->u.itemOrder->u.esRequest->notToKeep->itemRequest = create_external_itemRequest(); - break; - case '1': + } + else if (!strcmp(type, "ill") || !strcmp(type, "1")) + { printf ("using ILL-request\n"); r->u.itemOrder->u.esRequest->notToKeep->itemRequest = create_external_ILLRequest(); - break; - default: - r->u.itemOrder->u.esRequest->notToKeep->itemRequest = 0; } + else + r->u.itemOrder->u.esRequest->notToKeep->itemRequest = 0; return r; } @@ -2278,7 +2278,7 @@ static int client(int wait) {"attributeset", cmd_attributeset, ""}, {"querytype", cmd_querytype, ""}, {"refid", cmd_refid, ""}, - {"itemorder", cmd_itemorder, "1|2 "}, + {"itemorder", cmd_itemorder, "ill|item "}, {"update", cmd_update, ""}, #ifdef ASN_COMPILED /* Server Admin Functions */ diff --git a/ill/ill-get.c b/ill/ill-get.c index 9ebe297..124e5b9 100644 --- a/ill/ill-get.c +++ b/ill/ill-get.c @@ -3,7 +3,10 @@ * See the file LICENSE for details. * * $Log: ill-get.c,v $ - * Revision 1.5 2000-02-24 08:52:01 adam + * Revision 1.6 2000-08-10 08:41:26 adam + * Fixes for ILL. + * + * Revision 1.5 2000/02/24 08:52:01 adam * Bug fix. * * Revision 1.4 2000/02/04 11:01:15 adam @@ -75,8 +78,8 @@ int *ill_get_enumerated (struct ill_get_ctl *gc, const char *name, return ill_get_int(gc, name, sub, val); } -ILL_String *ill_get_ILL_String (struct ill_get_ctl *gc, const char *name, - const char *sub) +ILL_String *ill_get_ILL_String_x (struct ill_get_ctl *gc, const char *name, + const char *sub, const char *vdefault) { ILL_String *r = (ILL_String *) odr_malloc (gc->odr, sizeof(*r)); char element[128]; @@ -90,12 +93,19 @@ ILL_String *ill_get_ILL_String (struct ill_get_ctl *gc, const char *name, } v = (gc->f)(gc->clientData, element); if (!v) + v = vdefault; + if (!v) return 0; r->which = ILL_String_GeneralString; r->u.GeneralString = odr_strdup (gc->odr, v); return r; } +ILL_String *ill_get_ILL_String(struct ill_get_ctl *gc, const char *name, + const char *sub) +{ + return ill_get_ILL_String_x (gc, name, sub, 0); +} ILL_ISO_Date *ill_get_ILL_ISO_Date (struct ill_get_ctl *gc, const char *name, const char *sub, const char *val) @@ -223,9 +233,9 @@ ILL_Transaction_Id *ill_get_Transaction_Id (struct ill_get_ctl *gc, r->initial_requester_id = ill_get_System_Id (gc, element, "initial-requester-id"); r->transaction_group_qualifier = - ill_get_ILL_String (gc, element, "transaction-group-qualifier"); + ill_get_ILL_String_x (gc, element, "transaction-group-qualifier", ""); r->transaction_qualifier = - ill_get_ILL_String (gc, element, "transaction-qualifier"); + ill_get_ILL_String_x (gc, element, "transaction-qualifier", ""); r->sub_transaction_qualifier = ill_get_ILL_String (gc, element, "sub-transaction-qualifier"); return r; @@ -349,7 +359,7 @@ ILL_Item_Id *ill_get_Item_Id ( ill_get_ILL_String(gc, element, "publication-date-of-component"); r->author_of_article = ill_get_ILL_String(gc, element, "author-of-article"); - r->title_of_article = ill_get_ILL_String(gc, element, "title-or-article"); + r->title_of_article = ill_get_ILL_String(gc, element, "title-of-article"); r->pagination = ill_get_ILL_String(gc, element, "pagination"); r->national_bibliography_no = 0; r->iSBN = ill_get_ILL_String(gc, element, "ISBN"); @@ -362,14 +372,6 @@ ILL_Item_Id *ill_get_Item_Id ( return r; } -ILL_ItemRequest *ill_get_ItemRequest ( - struct ill_get_ctl *gc, const char *name, const char *sub) -{ - ODR o = gc->odr; - ILL_ItemRequest *r = (ILL_ItemRequest *)odr_malloc(o, sizeof(*r)); - return 0; -} - ILL_Client_Id *ill_get_Client_Id ( struct ill_get_ctl *gc, const char *name, const char *sub) @@ -529,7 +531,74 @@ ILL_Request *ill_get_ILLRequest ( r->requester_optional_messages = ill_get_Requester_Optional_Messages_Type ( gc, element,"requester-optional-messages"); - r->search_type = 0; /* TODO */ + r->search_type = ill_get_Search_Type(gc, element, "search-type"); + r->num_supply_medium_info_type = 0; + r->supply_medium_info_type = 0; + + r->place_on_hold = ill_get_enumerated ( + gc, element, "place-on-hold", + ILL_Place_On_Hold_Type_according_to_responder_policy); + r->client_id = ill_get_Client_Id (gc, element, "client-id"); + + r->item_id = ill_get_Item_Id (gc, element, "item-id"); + r->supplemental_item_description = 0; + r->cost_info_type = 0; + r->copyright_compliance = + ill_get_ILL_String(gc, element, "copyright-complicance"); + r->third_party_info_type = 0; + r->retry_flag = ill_get_bool (gc, element, "retry-flag", 0); + r->forward_flag = ill_get_bool (gc, element, "forward-flag", 0); + r->requester_note = ill_get_ILL_String(gc, element, "requester-note"); + r->forward_note = ill_get_ILL_String(gc, element, "forward-note"); + r->num_iLL_request_extensions = 0; + r->iLL_request_extensions = 0; + return r; +} + +ILL_ItemRequest *ill_get_ItemRequest ( + struct ill_get_ctl *gc, const char *name, const char *sub) +{ + ODR o = gc->odr; + ILL_ItemRequest *r = (ILL_ItemRequest *)odr_malloc(o, sizeof(*r)); + char element[128]; + + strcpy(element, name); + if (sub) + { + strcat (element, ","); + strcat (element, sub); + } + r->protocol_version_num = + ill_get_enumerated (gc, element, "protocol-version-num", + ILL_Request_version_2); + + r->transaction_id = ill_get_Transaction_Id (gc, element, "transaction-id"); + r->service_date_time = + ill_get_Service_Date_Time (gc, element, "service-date-time"); + r->requester_id = ill_get_System_Id (gc, element, "requester-id"); + r->responder_id = ill_get_System_Id (gc, element, "responder-id"); + r->transaction_type = + ill_get_enumerated(gc, element, "transaction-type", 1); + + r->delivery_address = + ill_get_Delivery_Address (gc, element, "delivery-address"); + r->delivery_service = 0; /* TODO */ + /* ill_get_Delivery_Service (gc, element, "delivery-service"); */ + r->billing_address = + ill_get_Delivery_Address (gc, element, "billing-address"); + + r->num_iLL_service_type = 1; + r->iLL_service_type = (ILL_Service_Type **) + odr_malloc (o, sizeof(*r->iLL_service_type)); + *r->iLL_service_type = + ill_get_enumerated (gc, element, "ill-service-type", + ILL_Service_Type_copy_non_returnable); + + r->responder_specific_service = 0; + r->requester_optional_messages = + ill_get_Requester_Optional_Messages_Type ( + gc, element,"requester-optional-messages"); + r->search_type = ill_get_Search_Type(gc, element, "search-type"); r->num_supply_medium_info_type = 0; r->supply_medium_info_type = 0; diff --git a/ztest/ztest.c b/ztest/ztest.c index cae1169..3279ae2 100644 --- a/ztest/ztest.c +++ b/ztest/ztest.c @@ -6,7 +6,10 @@ * Chas Woodfield, Fretwell Downing Datasystems. * * $Log: ztest.c,v $ - * Revision 1.32 2000-04-05 07:39:55 adam + * Revision 1.33 2000-08-10 08:41:26 adam + * Fixes for ILL. + * + * Revision 1.32 2000/04/05 07:39:55 adam * Added shared library support (libtool). * * Revision 1.31 2000/01/31 13:15:21 adam @@ -201,7 +204,7 @@ int ztest_esrequest (void *handle, bend_esrequest_rr *rr) yaz_log(LOG_LOG, "OID %s", ent->desc); if (ent && ent->value == VAL_ISO_ILL_1) { - yaz_log (LOG_LOG, "ItemRequest"); + yaz_log (LOG_LOG, "Decode ItemRequest begin"); if (r->which == ODR_EXTERNAL_single) { odr_setbuf(rr->decode, @@ -214,11 +217,15 @@ int ztest_esrequest (void *handle, bend_esrequest_rr *rr) "Couldn't decode ItemRequest %s near %d", odr_errmsg(odr_geterror(rr->decode)), odr_offset(rr->decode)); +#if 0 yaz_log(LOG_LOG, "PDU dump:"); odr_dumpBER(log_file(), r->u.single_ASN1_type->buf, r->u.single_ASN1_type->len); +#endif } + else + yaz_log(LOG_LOG, "Decode ItemRequest OK"); if (rr->print) { ill_ItemRequest (rr->print, &item_req, 0, @@ -228,7 +235,7 @@ int ztest_esrequest (void *handle, bend_esrequest_rr *rr) } if (!item_req && r->which == ODR_EXTERNAL_single) { - yaz_log (LOG_LOG, "ILLRequest"); + yaz_log (LOG_LOG, "Decode ILLRequest begin"); odr_setbuf(rr->decode, r->u.single_ASN1_type->buf, r->u.single_ASN1_type->len, 0); @@ -244,6 +251,8 @@ int ztest_esrequest (void *handle, bend_esrequest_rr *rr) r->u.single_ASN1_type->buf, r->u.single_ASN1_type->len); } + else + yaz_log(LOG_LOG, "Decode ILLRequest OK"); if (rr->print) { ill_Request (rr->print, &ill_req, 0, -- 1.7.10.4