Remove bend_request definition from backend.h
[yaz-moved-to-github.git] / src / seshigh.c
index 15535b1..1a3e794 100644 (file)
@@ -93,7 +93,6 @@ static Z_APDU *process_presentRequest(association *assoc, request *reqb,
 static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd);
 static Z_APDU *process_sortRequest(association *assoc, request *reqb, int *fd);
 static void process_close(association *assoc, request *reqb);
-void save_referenceId(request *reqb, Z_ReferenceId *refid);
 static Z_APDU *process_deleteRequest(association *assoc, request *reqb,
     int *fd);
 static Z_APDU *process_segmentRequest(association *assoc, request *reqb);
@@ -847,9 +846,10 @@ static int ccl2pqf(ODR odr, const Odr_oct *ccl, CCL_bibset bibset,
 
 static void srw_bend_search(association *assoc, request *req,
                             Z_SRW_PDU *sr,
-                            Z_SRW_searchRetrieveResponse *srw_res,
+                            Z_SRW_PDU *res,
                             int *http_code)
 {
+    Z_SRW_searchRetrieveResponse *srw_res = res->u.response;
     int srw_error = 0;
     Z_External *ext;
     Z_SRW_searchRetrieveRequest *srw_req = sr->u.request;
@@ -872,6 +872,8 @@ static void srw_bend_search(association *assoc, request *req,
         rr.partial_resultset = 0;
         rr.query = (Z_Query *) odr_malloc(assoc->decode, sizeof(*rr.query));
         rr.query->u.type_1 = 0;
+        rr.extra_args = sr->extra_args;
+        rr.extra_response_data = 0;
         
         if (srw_req->query_type == Z_SRW_query_type_cql)
         {
@@ -938,7 +940,6 @@ static void srw_bend_search(association *assoc, request *req,
             rr.stream = assoc->encode;
             rr.decode = assoc->decode;
             rr.print = assoc->print;
-            rr.request = req;
             if ( srw_req->sort.sortKeys )
                 rr.srw_sortKeys = odr_strdup(assoc->encode, 
                                              srw_req->sort.sortKeys );
@@ -1025,14 +1026,11 @@ static void srw_bend_search(association *assoc, request *req,
                         bprr->stream = assoc->encode;
                         bprr->referenceId = 0;
                         bprr->print = assoc->print;
-                        bprr->request = req;
                         bprr->association = assoc;
                         bprr->errcode = 0;
                         bprr->errstring = NULL;
                         (*assoc->init->bend_present)(assoc->backend, bprr);
                         
-                        if (!bprr->request)
-                            return;
                         if (bprr->errcode)
                         {
                             srw_error = yaz_diag_bib1_to_srw(bprr->errcode);
@@ -1093,6 +1091,11 @@ static void srw_bend_search(association *assoc, request *req,
                             srw_res->records = 0;
                     }
                 }
+                if (rr.extra_response_data)
+                {
+                    res->extraResponseData_buf = rr.extra_response_data;
+                    res->extraResponseData_len = strlen(rr.extra_response_data);
+                }
                 if (rr.estimated_hit_count || rr.partial_resultset)
                 {
                     yaz_add_srw_diagnostic(
@@ -1783,8 +1786,7 @@ static void process_http_request(association *assoc, request *req)
             }
             else
             {
-                srw_bend_search(assoc, req, sr, res->u.response, 
-                                &http_code);
+                srw_bend_search(assoc, req, sr, res, &http_code);
             }
             if (http_code == 200)
                 soap_package->u.generic->p = res;
@@ -2619,15 +2621,15 @@ static Z_APDU *process_searchRequest(association *assoc, request *reqb,
     
     yaz_log(log_requestdetail, "Got SearchRequest.");
     bsrr->fd = fd;
-    bsrr->request = reqb;
     bsrr->association = assoc;
     bsrr->referenceId = req->referenceId;
-    save_referenceId (reqb, bsrr->referenceId);
     bsrr->srw_sortKeys = 0;
     bsrr->srw_setname = 0;
     bsrr->srw_setnameIdleTime = 0;
     bsrr->estimated_hit_count = 0;
     bsrr->partial_resultset = 0;
+    bsrr->extra_args = 0;
+    bsrr->extra_response_data = 0;
 
     yaz_log (log_requestdetail, "ResultSet '%s'", req->resultSetName);
     if (req->databaseNames)
@@ -2680,8 +2682,6 @@ static Z_APDU *process_searchRequest(association *assoc, request *reqb,
 
         if (!bsrr->errcode)
             (assoc->init->bend_search)(assoc->backend, bsrr);
-        if (!bsrr->request)  /* backend not ready with the search response */
-            return 0;  /* should not be used any more */
     }
     else
     { 
@@ -2746,7 +2746,9 @@ static Z_APDU *response_searchRequest(association *assoc, request *reqb,
 
         comp.which = Z_RecordComp_simple;
         /* how many records does the user agent want, then? */
-        if (bsrt->hits <= *req->smallSetUpperBound)
+        if (bsrt->hits < 0)
+            *toget = 0;
+        else if (bsrt->hits <= *req->smallSetUpperBound)
         {
             *toget = bsrt->hits;
             if ((comp.u.simple = req->smallSetElementSetNames))
@@ -2779,14 +2781,11 @@ static Z_APDU *response_searchRequest(association *assoc, request *reqb,
                 bprr->referenceId = req->referenceId;
                 bprr->stream = assoc->encode;
                 bprr->print = assoc->print;
-                bprr->request = reqb;
                 bprr->association = assoc;
                 bprr->errcode = 0;
                 bprr->errstring = NULL;
                 (*assoc->init->bend_present)(assoc->backend, bprr);
 
-                if (!bprr->request)
-                    return 0;
                 if (bprr->errcode)
                 {
                     resp->records = diagrec(assoc, bprr->errcode, bprr->errstring);
@@ -2897,14 +2896,11 @@ static Z_APDU *process_presentRequest(association *assoc, request *reqb,
         bprr->referenceId = req->referenceId;
         bprr->stream = assoc->encode;
         bprr->print = assoc->print;
-        bprr->request = reqb;
         bprr->association = assoc;
         bprr->errcode = 0;
         bprr->errstring = NULL;
         (*assoc->init->bend_present)(assoc->backend, bprr);
         
-        if (!bprr->request)
-            return 0; /* should not happen */
         if (bprr->errcode)
         {
             resp->records = diagrec(assoc, bprr->errcode, bprr->errstring);
@@ -3356,72 +3352,6 @@ static void process_close(association *assoc, request *reqb)
     yaz_log(log_request,"Close OK");
 }
 
-void save_referenceId(request *reqb, Z_ReferenceId *refid)
-{
-    if (refid)
-    {
-        reqb->len_refid = refid->len;
-        reqb->refid = (char *)nmem_malloc(reqb->request_mem, refid->len);
-        memcpy(reqb->refid, refid->buf, refid->len);
-    }
-    else
-    {
-        reqb->len_refid = 0;
-        reqb->refid = NULL;
-    }
-}
-
-void bend_request_send(bend_association a, bend_request req, Z_APDU *res)
-{
-    process_z_response(a, req, res);
-}
-
-bend_request bend_request_mk(bend_association a)
-{
-    request *nreq = request_get(&a->outgoing);
-    nreq->request_mem = nmem_create();
-    return nreq;
-}
-
-Z_ReferenceId *bend_request_getid(ODR odr, bend_request req)
-{
-    Z_ReferenceId *id;
-    if (!req->refid)
-        return 0;
-    id = (Odr_oct *)odr_malloc(odr, sizeof(*odr));
-    id->buf = (unsigned char *)odr_malloc(odr, req->len_refid);
-    id->len = id->size = req->len_refid;
-    memcpy(id->buf, req->refid, req->len_refid);
-    return id;
-}
-
-void bend_request_destroy(bend_request *req)
-{
-    nmem_destroy((*req)->request_mem);
-    request_release(*req);
-    *req = NULL;
-}
-
-int bend_backend_respond(bend_association a, bend_request req)
-{
-    char *msg;
-    int r;
-    r = process_z_request(a, req, &msg);
-    if (r < 0)
-        yaz_log(YLOG_WARN, "%s", msg);
-    return r;
-}
-
-void bend_request_setdata(bend_request r, void *p)
-{
-    r->clientData = p;
-}
-
-void *bend_request_getdata(bend_request r)
-{
-    return r->clientData;
-}
-
 static Z_APDU *process_segmentRequest(association *assoc, request *reqb)
 {
     bend_segment_rr req;
@@ -3454,7 +3384,6 @@ static Z_APDU *process_ESRequest(association *assoc, request *reqb, int *fd)
     esrequest.print = assoc->print;
     esrequest.errcode = 0;
     esrequest.errstring = NULL;
-    esrequest.request = reqb;
     esrequest.association = assoc;
     esrequest.taskPackage = 0;
     esrequest.referenceId = req->referenceId;
@@ -3478,10 +3407,6 @@ static Z_APDU *process_ESRequest(association *assoc, request *reqb, int *fd)
 
     (*assoc->init->bend_esrequest)(assoc->backend, &esrequest);
     
-    /* If the response is being delayed, return NULL */
-    if (esrequest.request == NULL)
-        return(NULL);
-
     resp->referenceId = req->referenceId;
 
     if (esrequest.errcode == -1)