* Sebastian Hammer, Adam Dickmeiss
*
* $Log: client.c,v $
- * Revision 1.87 1999-08-27 09:40:32 adam
+ * 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
+ * Added status elements for backend delete result set handler.
+ * Updated delete result result set command for client.
+ *
+ * Revision 1.88 1999/10/11 10:00:29 adam
+ * Modified printing of records.
+ *
+ * Revision 1.87 1999/08/27 09:40:32 adam
* Renamed logf function to yaz_log. Removed VC++ project files.
*
* Revision 1.86 1999/07/06 12:13:35 adam
#include <time.h>
#include <assert.h>
-#include <yaz-util.h>
+#include <yaz/yaz-util.h>
-#include <tcpip.h>
+#include <yaz/tcpip.h>
#ifdef USE_XTIMOSI
-#include <xmosi.h>
+#include <yaz/xmosi.h>
#endif
-#include <proto.h>
-#include <marcdisp.h>
-#include <diagbib1.h>
+#include <yaz/proto.h>
+#include <yaz/marcdisp.h>
+#include <yaz/diagbib1.h>
+
+#include <yaz/pquery.h>
-#include <pquery.h>
+#ifdef ASN_COMPILED
+#include <yaz/ill.h>
+#endif
#if CCL2RPN
-#include <yaz-ccl.h>
+#include <yaz/yaz-ccl.h>
#endif
#if HAVE_READLINE_READLINE_H
}
}
+static void print_record(const unsigned char *buf, size_t len)
+{
+ size_t i;
+ for (i = 0; i<len; i++)
+ if ((buf[i] <= 126 && buf[i] >= 32) || strchr ("\n\r\t\f", buf[i]))
+ fputc (buf[i], stdout);
+ else
+ printf ("\\X%02X", buf[i]);
+ /* add newline if not already added ... */
+ if (i <= 0 || buf[i-1] != '\n')
+ fputc ('\n', stdout);
+}
+
static void display_record(Z_DatabaseRecord *p)
{
Z_External *r = (Z_External*) p;
}
}
if (ent && ent->value == VAL_SOIF)
- printf("%.*s", r->u.octet_aligned->len, r->u.octet_aligned->buf);
+ print_record(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)
- {
- int i;
- for (i = 0; i<p->u.octet_aligned->len; i++)
- if (octet_buf[i] > 126 || octet_buf[i] < 7)
- printf ("<%02X>", octet_buf[i]);
- else
- fputc (octet_buf[i], stdout);
- printf ("\n");
- }
+ 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);
}
printf("Expecting single SUTRS type for SUTRS.\n");
return;
}
- printf("%.*s", r->u.sutrs->len, r->u.sutrs->buf);
+ print_record(r->u.sutrs->buf, r->u.sutrs->len);
}
else if (ent && ent->value == VAL_GRS1)
{
static int send_deleteResultSetRequest(char *arg)
{
+ char names[8][32];
+ int i;
+
Z_APDU *apdu = zget_APDU(out, Z_APDU_deleteResultSetRequest);
Z_DeleteResultSetRequest *req = apdu->u.deleteResultSetRequest;
req->referenceId = set_refid (out);
- req->num_resultSetList = 1;
- req->resultSetList = (char **)
- odr_malloc (out, sizeof(*req->resultSetList));
- *req->resultSetList = arg;
+ req->num_resultSetList =
+ sscanf (arg, "%30s %30s %30s %30s %30s %30s %30s %30s",
+ names[0], names[1], names[2], names[3],
+ names[4], names[5], names[6], names[7]);
+
req->deleteFunction = (int *)
odr_malloc (out, sizeof(*req->deleteFunction));
- *req->deleteFunction = Z_DeleteRequest_list;
+ if (req->num_resultSetList > 0)
+ {
+ *req->deleteFunction = Z_DeleteRequest_list;
+ req->resultSetList = (char **)
+ odr_malloc (out, sizeof(*req->resultSetList)*
+ req->num_resultSetList);
+ for (i = 0; i<req->num_resultSetList; i++)
+ req->resultSetList[i] = names[i];
+ }
+ else
+ {
+ *req->deleteFunction = Z_DeleteRequest_all;
+ req->resultSetList = 0;
+ }
send_apdu(apdu);
printf("Sent deleteResultSetRequest.\n");
}
}
+#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
static Z_External *CreateItemOrderExternal(int itemno)
{
Z_External *r = (Z_External *) odr_malloc(out, sizeof(Z_External));
(int *) odr_malloc(out, sizeof(int));
*r->u.itemOrder->u.esRequest->notToKeep->resultSetItem->item = itemno;
- r->u.itemOrder->u.esRequest->notToKeep->itemRequest = NULL;
+ r->u.itemOrder->u.esRequest->notToKeep->itemRequest =
+ create_external_itemRequest();
return r;
}
static int cmd_delete(char *arg)
{
- if (!*arg)
- {
- printf("Delete what?\n");
- return 0;
- }
if (!conn)
{
printf("Not connected yet\n");
#endif
}
+void process_deleteResultSetResponse (Z_DeleteResultSetResponse *res)
+{
+ printf("Got deleteResultSetResponse status=%d\n",
+ *res->deleteOperationStatus);
+ if (res->deleteListStatuses)
+ {
+ int i;
+ for (i = 0; i < res->deleteListStatuses->num; i++)
+ {
+ printf ("%s status=%d\n", res->deleteListStatuses->elements[i]->id,
+ *res->deleteListStatuses->elements[i]->status);
+ }
+ }
+}
+
int cmd_sort_generic(char *arg, int newset)
{
if (!conn)
(apdu->u.resourceControlRequest);
break;
case Z_APDU_deleteResultSetResponse:
- printf("Got deleteResultSetResponse status=%d\n",
- *apdu->u.deleteResultSetResponse->
- deleteOperationStatus);
+ process_deleteResultSetResponse(apdu->u.
+ deleteResultSetResponse);
break;
default:
printf("Received unknown APDU type (%d).\n",