* Sebastian Hammer, Adam Dickmeiss
*
* $Log: client.c,v $
- * Revision 1.90 1999-11-30 13:47:11 adam
+ * 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
+ * More robust ISO2709 handling (in case of real bad formats).
+ *
+ * Revision 1.91 1999/12/16 23:36:19 adam
+ * Implemented ILL protocol. Minor updates ASN.1 compiler.
+ *
+ * Revision 1.90 1999/11/30 13:47:11 adam
* Improved installation. Moved header files to include/yaz.
*
* Revision 1.89 1999/11/04 14:58:44 adam
#include <yaz/pquery.h>
+#ifdef ASN_COMPILED
+#include <yaz/ill.h>
+#endif
+
#if CCL2RPN
#include <yaz/yaz-ccl.h>
#endif
ent->value == VAL_HTML)
print_record(octet_buf, p->u.octet_aligned->len);
else
- marc_display (octet_buf, NULL);
+ {
+ 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);
+ }
+ }
if (marcdump)
fwrite (octet_buf, 1, p->u.octet_aligned->len, marcdump);
}
}
}
-static Z_External *CreateItemOrderExternal(int itemno)
+#ifdef ASN_COMPILED
+static Z_External *create_external_itemRequest()
+{
+ ILL_ItemRequest *req = ill_get_ItemRequest(out);
+ Z_External *r = 0;
+
+ if (!ill_ItemRequest (out, &req, 0, 0))
+ return 0;
+ else
+ {
+ oident oid;
+ int itemRequest_size = 0;
+ char *itemRequest_buf = odr_getbuf (out, &itemRequest_size, 0);
+
+ oid.proto = PROTO_GENERAL;
+ oid.oclass = CLASS_GENERAL;
+ oid.value = VAL_ISO_ILL_1;
+
+ r = (Z_External *) odr_malloc (out, sizeof(*r));
+ r->direct_reference = odr_oiddup(out,oid_getoidbyent(&oid));
+ r->indirect_reference = 0;
+ r->descriptor = 0;
+ r->which = Z_External_single;
+
+ 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);
+ }
+ return r;
+}
+#else
+static Z_External *create_external_itemRequest()
+{
+ return 0;
+}
+#endif
+
+#ifdef ASN_COMPILED
+static Z_External *create_external_ILLRequest()
+{
+ ILL_Request *req = ill_get_ILLRequest(out);
+ Z_External *r = 0;
+
+ if (!ill_Request (out, &req, 0, 0))
+ return 0;
+ else
+ {
+ oident oid;
+ int ill_request_size = 0;
+ char *ill_request_buf = odr_getbuf (out, &ill_request_size, 0);
+
+ oid.proto = PROTO_GENERAL;
+ oid.oclass = CLASS_GENERAL;
+ oid.value = VAL_ISO_ILL_1;
+
+ r = (Z_External *) odr_malloc (out, sizeof(*r));
+ r->direct_reference = odr_oiddup(out,oid_getoidbyent(&oid));
+ r->indirect_reference = 0;
+ r->descriptor = 0;
+ r->which = Z_External_single;
+
+ 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, ill_request_size);
+ r->u.single_ASN1_type->len = ill_request_size;
+ r->u.single_ASN1_type->size = ill_request_size;
+ memcpy (r->u.single_ASN1_type->buf, ill_request_buf, ill_request_size);
+ printf ("len = %d\n", ill_request_size);
+ }
+ return r;
+}
+#else
+static Z_External *create_external_ILLRequest()
+{
+ return 0;
+}
+#endif
+
+
+static Z_External *create_ItemOrderExternal(const char *type, int itemno)
{
Z_External *r = (Z_External *) odr_malloc(out, sizeof(Z_External));
oident ItemOrderRequest;
(int *) odr_malloc(out, sizeof(int));
*r->u.itemOrder->u.esRequest->notToKeep->resultSetItem->item = itemno;
- r->u.itemOrder->u.esRequest->notToKeep->itemRequest = NULL;
+ switch (*type)
+ {
+ case '2':
+ r->u.itemOrder->u.esRequest->notToKeep->itemRequest =
+ create_external_itemRequest();
+ break;
+ case '1':
+ r->u.itemOrder->u.esRequest->notToKeep->itemRequest =
+ create_external_ILLRequest();
+ break;
+ default:
+ r->u.itemOrder->u.esRequest->notToKeep->itemRequest = 0;
+ }
return r;
}
-/* II : Added to do DALI Item Order Extended services request */
-static int send_itemorder(char *arg)
+static int send_itemorder(const char *type, int itemno)
{
- int itemno = -1;
Z_APDU *apdu = zget_APDU(out, Z_APDU_extendedServicesRequest );
Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest;
oident ItemOrderRequest;
- if (*arg)
- itemno = atoi(arg);
-
- /* Set up item order request */
-
- /* Package type, Using protocol ILL ( But that's not in the oid.h file yet */
- /* create an object of class Extended Service, value Item Order */
ItemOrderRequest.proto = PROTO_Z3950;
ItemOrderRequest.oclass = CLASS_EXTSERV;
ItemOrderRequest.value = VAL_ITEMORDER;
req->packageType = odr_oiddup(out,oid_getoidbyent(&ItemOrderRequest));
req->packageName = "1.Extendedserveq";
- /* ** taskSpecificParameters ** */
- req->taskSpecificParameters = CreateItemOrderExternal(itemno);
+ req->taskSpecificParameters = create_ItemOrderExternal(type, itemno);
send_apdu(apdu);
return 0;
/* II : Added to do DALI Item Order Extended services request */
static int cmd_itemorder(char *arg)
{
+ char type[12];
+ int itemno;
printf("Item order request\n");
fflush(stdout);
- send_itemorder(arg);
+ if (sscanf (arg, "%10s %d", type, &itemno) != 2)
+ return 0;
+
+ send_itemorder(type, itemno);
return(2);
}
{"attributeset", cmd_attributeset, "<attrset>"},
{"querytype", cmd_querytype, "<type>"},
{"refid", cmd_refid, "<id>"},
- {"itemorder", cmd_itemorder, "<item>"},
+ {"itemorder", cmd_itemorder, "1|2 <item>"},
{"update", cmd_update, "<item>"},
{0,0}
};