Fixes for ILL.
authorAdam Dickmeiss <adam@indexdata.dk>
Thu, 10 Aug 2000 08:41:26 +0000 (08:41 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Thu, 10 Aug 2000 08:41:26 +0000 (08:41 +0000)
client/client.c
ill/ill-get.c
ztest/ztest.c

index 16ac8e4..03fbd7d 100644 (file)
@@ -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, "<attrset>"},
         {"querytype", cmd_querytype, "<type>"},
        {"refid", cmd_refid, "<id>"},
-       {"itemorder", cmd_itemorder, "1|2 <item>"},
+       {"itemorder", cmd_itemorder, "ill|item <itemno>"},
        {"update", cmd_update, "<item>"},
 #ifdef ASN_COMPILED
        /* Server Admin Functions */
index 9ebe297..124e5b9 100644 (file)
@@ -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;
 
index cae1169..3279ae2 100644 (file)
@@ -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,