Number of Extended Services Requests logged.
[yaz-moved-to-github.git] / ztest / ztest.c
index 32595fe..8946137 100644 (file)
@@ -6,7 +6,19 @@
  *    Chas Woodfield, Fretwell Downing Datasystems.
  *
  * $Log: ztest.c,v $
- * Revision 1.39  2001-03-12 14:40:57  adam
+ * Revision 1.43  2001-06-28 09:27:25  adam
+ * Number of Extended Services Requests logged.
+ *
+ * Revision 1.42  2001/04/06 12:26:46  adam
+ * Optional CCL module. Moved atoi_n to marcdisp.h from yaz-util.h.
+ *
+ * Revision 1.41  2001/04/05 13:08:48  adam
+ * New configure options: --enable-module.
+ *
+ * Revision 1.40  2001/03/25 21:55:13  adam
+ * Added odr_intdup. Ztest server returns TaskPackage for ItemUpdate.
+ *
+ * Revision 1.39  2001/03/12 14:40:57  adam
  * Minor change of print of item update info.
  *
  * Revision 1.38  2001/02/21 13:46:54  adam
 #include <yaz/backend.h>
 #include <yaz/log.h>
 
-#ifdef ASN_COMPILED
+#if YAZ_MODULE_ill
 #include <yaz/ill.h>
 #endif
 
@@ -164,11 +176,19 @@ int ztest_present (void *handle, bend_present_rr *rr)
 
 int ztest_esrequest (void *handle, bend_esrequest_rr *rr)
 {
-    yaz_log(LOG_LOG, "function: %d", *rr->esr->function);
+    int *counter = handle;  /* user-defined handle - created in bend_init */
+
+    yaz_log(LOG_LOG, "ESRequest no %d", *counter);
+
+    (*counter)++;
+
     if (rr->esr->packageName)
        yaz_log(LOG_LOG, "packagename: %s", rr->esr->packageName);
     yaz_log(LOG_LOG, "Waitaction: %d", *rr->esr->waitAction);
 
+
+    yaz_log(LOG_LOG, "function: %d", *rr->esr->function);
+
     if (!rr->esr->taskSpecificParameters)
     {
         yaz_log (LOG_WARN, "No task specific parameters");
@@ -209,7 +229,7 @@ int ztest_esrequest (void *handle, bend_esrequest_rr *rr)
                yaz_log(LOG_LOG, "setId: %s", n->resultSetItem->resultSetId);
                yaz_log(LOG_LOG, "item: %d", *n->resultSetItem->item);
            }
-#ifdef ASN_COMPILED
+#if YAZ_MODULE_ill
            if (n->itemRequest)
            {
                Z_External *r = (Z_External*) n->itemRequest;
@@ -220,6 +240,13 @@ int ztest_esrequest (void *handle, bend_esrequest_rr *rr)
                    oident *ent = oid_getentbyoid(r->direct_reference);
                    if (ent)
                        yaz_log(LOG_LOG, "OID %s", ent->desc);
+                    if (ent && ent->value == VAL_TEXT_XML)
+                    {
+                       yaz_log (LOG_LOG, "ILL XML request");
+                        if (r->which == Z_External_octet)
+                            yaz_log (LOG_LOG, "%.*s", r->u.octet_aligned->len,
+                                     r->u.octet_aligned->buf); 
+                    }
                    if (ent && ent->value == VAL_ISO_ILL_1)
                    {
                        yaz_log (LOG_LOG, "Decode ItemRequest begin");
@@ -336,6 +363,60 @@ int ztest_esrequest (void *handle, bend_esrequest_rr *rr)
                if (!strcmp(toKeep->databaseName, "accept"))
                    rr->errcode = -1;
            }
+           if (toKeep)
+           {
+               Z_External *ext = odr_malloc (rr->stream, sizeof(*ext));
+               Z_IUOriginPartToKeep *keep =
+                   odr_malloc (rr->stream, sizeof(*keep));
+               Z_IUTargetPart *targetPart =
+                   odr_malloc (rr->stream, sizeof(*targetPart));
+               rr->taskPackage = odr_malloc (rr->stream, sizeof(*rr->taskPackage));
+               rr->taskPackage->packageType =
+                   odr_oiddup (rr->stream, rr->esr->packageType);
+               rr->taskPackage->packageName = 0;
+               rr->taskPackage->userId = 0;
+               rr->taskPackage->retentionTime = 0;
+               rr->taskPackage->permissions = 0;
+               rr->taskPackage->description = 0;
+               rr->taskPackage->targetReference = (Odr_oct *)
+                   odr_malloc (rr->stream, sizeof(Odr_oct));
+               rr->taskPackage->targetReference->buf =
+                   odr_strdup (rr->stream, "123");
+               rr->taskPackage->targetReference->len =
+                   rr->taskPackage->targetReference->size =
+                   strlen(rr->taskPackage->targetReference->buf);
+               rr->taskPackage->creationDateTime = 0;
+               rr->taskPackage->taskStatus = odr_intdup(rr->stream, 0);
+               rr->taskPackage->packageDiagnostics = 0;
+               rr->taskPackage->taskSpecificParameters = ext;
+
+               ext->direct_reference =
+                   odr_oiddup (rr->stream, rr->esr->packageType);
+               ext->indirect_reference = 0;
+               ext->descriptor = 0;
+               ext->which = Z_External_update;
+               ext->u.update = (Z_IUUpdate *)
+                   odr_malloc (rr->stream, sizeof(*ext->u.update));
+               ext->u.update->which = Z_IUUpdate_taskPackage;
+               ext->u.update->u.taskPackage =  (Z_IUUpdateTaskPackage *)
+                   odr_malloc (rr->stream, sizeof(Z_IUUpdateTaskPackage));
+               ext->u.update->u.taskPackage->originPart = keep;
+               ext->u.update->u.taskPackage->targetPart = targetPart;
+
+               keep->action = odr_malloc (rr->stream, sizeof(int));
+               *keep->action = *toKeep->action;
+               keep->databaseName =
+                   odr_strdup (rr->stream, toKeep->databaseName);
+               keep->schema = 0;
+               keep->elementSetName = 0;
+               keep->actionQualifier = 0;
+
+               targetPart->updateStatus = odr_intdup (rr->stream, 1);
+               targetPart->num_globalDiagnostics = 0;
+               targetPart->globalDiagnostics = odr_nullval();
+               targetPart->num_taskPackageRecords = 0;
+               targetPart->taskPackageRecords = odr_nullval();
+           }
            if (notToKeep)
            {
                int i;
@@ -635,11 +716,12 @@ int ztest_scan(void *handle, bend_scan_rr *q)
 bend_initresult *bend_init(bend_initrequest *q)
 {
     bend_initresult *r = (bend_initresult *) odr_malloc (q->stream, sizeof(*r));
-    static char *dummy = "Hej fister";
+    int *counter = (int *) xmalloc (sizeof(int));
 
+    *counter = 0;
     r->errcode = 0;
     r->errstring = 0;
-    r->handle = dummy;
+    r->handle = counter;         /* user handle, in this case a simple int */
     q->bend_sort = ztest_sort;              /* register sort handler */
     q->bend_search = ztest_search;          /* register search handler */
     q->bend_present = ztest_present;        /* register present handle */
@@ -652,6 +734,7 @@ bend_initresult *bend_init(bend_initrequest *q)
 
 void bend_close(void *handle)
 {
+    xfree (handle);              /* release our user-defined handle */
     return;
 }