Updated makefiles (again).
[yaz-moved-to-github.git] / server / seshigh.c
index 2e32af2..3013c83 100644 (file)
@@ -1,10 +1,25 @@
 /*
- * Copyright (c) 1995-1999, Index Data
+ * Copyright (c) 1995-2000, Index Data
  * See the file LICENSE for details.
- * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: seshigh.c,v $
- * Revision 1.95  1999-10-11 10:01:24  adam
+ * Revision 1.101  2000-01-12 14:36:07  adam
+ * Added printing stream (ODR) for backend functions.
+ *
+ * Revision 1.100  1999/12/16 23:36:19  adam
+ * Implemented ILL protocol. Minor updates ASN.1 compiler.
+ *
+ * Revision 1.99  1999/11/30 13:47:12  adam
+ * Improved installation. Moved header files to include/yaz.
+ *
+ * Revision 1.98  1999/11/29 15:12:27  adam
+ * Changed the way implementationName - and version is set.
+ *
+ * Revision 1.96  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.95  1999/10/11 10:01:24  adam
  * Implemented bend_sort_rr handler for frontend server.
  *
  * Revision 1.94  1999/08/27 09:40:32  adam
  *
  */
 
-#include <yconfig.h>
 #include <stdlib.h>
 #include <stdio.h>
 #ifdef WIN32
 #endif
 #include <assert.h>
 
-#include <xmalloc.h>
-#include <comstack.h>
+#include <yaz/yconfig.h>
+#include <yaz/xmalloc.h>
+#include <yaz/comstack.h>
 #include "eventl.h"
 #include "session.h"
-#include <proto.h>
-#include <oid.h>
-#include <log.h>
-#include <logrpn.h>
-#include <statserv.h>
+#include <yaz/proto.h>
+#include <yaz/oid.h>
+#include <yaz/log.h>
+#include <yaz/logrpn.h>
+#include <yaz/statserv.h>
 
-#include <backend.h>
+#include <yaz/backend.h>
 
 static int process_request(association *assoc, request *req, char **msg);
 void backend_response(IOCHAN i, int event);
@@ -821,6 +836,7 @@ static Z_APDU *process_initRequest(association *assoc, request *reqb)
        yaz_log(LOG_LOG, "Version:   %s", req->implementationVersion);
 
     binitreq.stream = assoc->encode;
+    binitreq.print = assoc->print;
     binitreq.configname = "default-config";
     binitreq.auth = req->idAuthentication;
     binitreq.referenceId = req->referenceId;
@@ -921,15 +937,15 @@ static Z_APDU *process_initRequest(association *assoc, request *reqb)
     resp->preferredMessageSize = &assoc->preferredMessageSize;
     resp->maximumRecordSize = &assoc->maximumRecordSize;
 
-    resp->implementationName = "Index Data/YAZ Generic Frontend Server";
+    resp->implementationName = "GFS";
 
     if (binitreq.implementation_name)
     {
        char *nv = (char *)
            odr_malloc (assoc->encode,
-                       strlen(binitreq.implementation_name) + 3 + 
+                       strlen(binitreq.implementation_name) + 10 + 
                               strlen(resp->implementationName));
-       sprintf (nv, "%s %s",
+       sprintf (nv, "%s / %s",
                 resp->implementationName, binitreq.implementation_name);
         resp->implementationName = nv;
     }
@@ -937,9 +953,9 @@ static Z_APDU *process_initRequest(association *assoc, request *reqb)
     {
        char *nv = (char *)
            odr_malloc (assoc->encode,
-                       strlen(binitreq.implementation_version) + 3 + 
+                       strlen(binitreq.implementation_version) + 10 + 
                               strlen(resp->implementationVersion));
-       sprintf (nv, "%s %s",
+       sprintf (nv, "YAZ %s / %s",
                 resp->implementationVersion, binitreq.implementation_version);
         resp->implementationVersion = nv;
     }
@@ -1122,6 +1138,7 @@ static Z_Records *pack_records(association *a, char *setname, int start,
        freq.comp = comp;
        freq.format = format;
        freq.stream = a->encode;
+       freq.print = a->print;
        freq.surrogate_flag = 0;
        freq.referenceId = referenceId;
        if (!(fres = bend_fetch(a->backend, &freq, 0)))
@@ -1242,6 +1259,7 @@ static Z_APDU *process_searchRequest(association *assoc, request *reqb,
        bsrr->query = req->query;
        bsrr->stream = assoc->encode;
        bsrr->decode = assoc->decode;
+       bsrr->print = assoc->print;
        bsrr->errcode = 0;
        bsrr->hits = 0;
        bsrr->errstring = NULL;
@@ -1263,6 +1281,7 @@ static Z_APDU *process_searchRequest(association *assoc, request *reqb,
         bsrq.referenceId = req->referenceId;
        bsrq.stream = assoc->encode;
        bsrq.decode = assoc->decode;
+       bsrq.print = assoc->print;
        if (!(bsrt = bend_search (assoc->backend, &bsrq, fd)))
            return 0;
        bsrr->hits = bsrt->hits;
@@ -1428,6 +1447,7 @@ static Z_APDU *process_presentRequest(association *assoc, request *reqb,
        bprr->comp = req->recordComposition;
        bprr->referenceId = req->referenceId;
        bprr->stream = assoc->encode;
+       bprr->print = assoc->print;
        bprr->request = reqb;
        bprr->association = assoc;
        bprr->errcode = 0;
@@ -1478,6 +1498,7 @@ static int bend_default_scan (void *handle, bend_scan_rr *rr)
     srq.term_position = rr->term_position;
     srq.num_entries = rr->num_entries;
     srq.stream = rr->stream;
+    srq.print = rr->print;
     
     srs = bend_scan(handle, &srq, 0);
 
@@ -1551,6 +1572,7 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd)
        bsrr->term = req->termListAndStartPoint;
        bsrr->referenceId = req->referenceId;
        bsrr->stream = assoc->encode;
+       bsrr->print = assoc->print;
        if (!(attset = oid_getentbyoid(req->attributeSet)) ||
            attset->oclass != CLASS_RECSYN)
            bsrr->attributeset = VAL_NONE;
@@ -1652,6 +1674,7 @@ static Z_APDU *process_sortRequest(association *assoc, request *reqb,
     bsrr->output_setname = req->sortedResultSetName;
     bsrr->sort_sequence = req->sortSequence;
     bsrr->stream = assoc->encode;
+    bsrr->print = assoc->print;
 
     bsrr->sort_status = Z_SortStatus_failure;
     bsrr->errcode = 0;
@@ -1704,9 +1727,18 @@ static Z_APDU *process_deleteRequest(association *assoc, request *reqb,
     bdrr->num_setnames = req->num_resultSetList;
     bdrr->setnames = req->resultSetList;
     bdrr->stream = assoc->encode;
+    bdrr->print = assoc->print;
     bdrr->function = *req->deleteFunction;
     bdrr->referenceId = req->referenceId;
-
+    bdrr->statuses = 0;
+    if (bdrr->num_setnames > 0)
+    {
+       int i;
+       bdrr->statuses = odr_malloc(assoc->encode, sizeof(*bdrr->statuses) *
+                                   bdrr->num_setnames);
+       for (i = 0; i < bdrr->num_setnames; i++)
+           bdrr->statuses[i] = 0;
+    }
     ((int (*)(void *, bend_delete_rr *))
      (*assoc->bend_delete))(assoc->backend, bdrr);
     
@@ -1717,6 +1749,27 @@ static Z_APDU *process_deleteRequest(association *assoc, request *reqb,
     *res->deleteOperationStatus = bdrr->delete_status;
 
     res->deleteListStatuses = 0;
+    if (bdrr->num_setnames > 0)
+    {
+       int i;
+       res->deleteListStatuses = odr_malloc(assoc->encode,
+                                            sizeof(*res->deleteListStatuses));
+       res->deleteListStatuses->num = bdrr->num_setnames;
+       res->deleteListStatuses->elements =
+           odr_malloc (assoc->encode,
+                       sizeof(*res->deleteListStatuses->elements) *
+                       bdrr->num_setnames);
+       for (i = 0; i<bdrr->num_setnames; i++)
+       {
+           res->deleteListStatuses->elements[i] =
+               odr_malloc (assoc->encode,
+                           sizeof(**res->deleteListStatuses->elements));
+           res->deleteListStatuses->elements[i]->status = bdrr->statuses+i;
+           res->deleteListStatuses->elements[i]->id =
+               odr_strdup (assoc->encode, bdrr->setnames[i]);
+           
+       }
+    }
     res->numberNotDeleted = 0;
     res->bulkStatuses = 0;
     res->deleteMessage = 0;
@@ -1832,6 +1885,8 @@ static Z_APDU *process_ESRequest(association *assoc, request *reqb, int *fd)
 
     esrequest.esr = reqb->request->u.extendedServicesRequest;
     esrequest.stream = assoc->encode;
+    esrequest.decode = assoc->decode;
+    esrequest.print = assoc->print;
     esrequest.errcode = 0;
     esrequest.errstring = NULL;
     esrequest.request = reqb;