X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=server%2Fseshigh.c;h=cb815fbf7bfb48568d5ac5766ed88c55f464f613;hp=1021c88b3ce6aa00f51eee3a41ab26e965aa17c4;hb=c3a132ce4aea3bb358b185ef58781b4bef8745fc;hpb=ab6840e96ece6494bbcc06e1c52f0deb371bcf53 diff --git a/server/seshigh.c b/server/seshigh.c index 1021c88..cb815fb 100644 --- a/server/seshigh.c +++ b/server/seshigh.c @@ -4,7 +4,13 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: seshigh.c,v $ - * Revision 1.11 1995-03-28 09:16:21 quinn + * Revision 1.13 1995-03-30 09:09:24 quinn + * Added state-handle and some support for asynchronous activities. + * + * Revision 1.12 1995/03/29 15:40:16 quinn + * Ongoing work. Statserv is now dynamic by default + * + * Revision 1.11 1995/03/28 09:16:21 quinn * Added record packing to the search request * * Revision 1.10 1995/03/27 08:34:24 quinn @@ -91,6 +97,8 @@ void destroy_association(association *h) free(h->encode_buffer); if (h->input_buffer) free(h->input_buffer); + if (h->backend) + bend_close(h->backend); free(h); } @@ -189,6 +197,7 @@ static int process_initRequest(IOCHAN client, Z_InitRequest *req) association *assoc = iochan_getdata(client); bend_initrequest binitreq; bend_initresult *binitres; + Odr_bitmask options, protocolVersion; fprintf(stderr, "Got initRequest.\n"); if (req->implementationId) @@ -205,12 +214,27 @@ static int process_initRequest(IOCHAN client, Z_InitRequest *req) return -1; } + assoc->backend = binitres->handle; apdup = &apdu; apdu.which = Z_APDU_initResponse; apdu.u.initResponse = &resp; resp.referenceId = req->referenceId; - resp.options = req->options; /* should check these */ - resp.protocolVersion = req->protocolVersion; + ODR_MASK_ZERO(&options); + if (ODR_MASK_GET(req->options, Z_Options_search)) + ODR_MASK_SET(&options, Z_Options_search); + if (ODR_MASK_GET(req->options, Z_Options_present)) + ODR_MASK_SET(&options, Z_Options_present); + if (ODR_MASK_GET(req->options, Z_Options_delSet)) + ODR_MASK_SET(&options, Z_Options_delSet); + if (ODR_MASK_GET(req->options, Z_Options_namedResultSets)) + ODR_MASK_SET(&options, Z_Options_namedResultSets); + resp.options = &options; + ODR_MASK_ZERO(&protocolVersion); + if (ODR_MASK_GET(req->protocolVersion, Z_ProtocolVersion_1)) + ODR_MASK_SET(&protocolVersion, Z_ProtocolVersion_1); + if (ODR_MASK_GET(req->protocolVersion, Z_ProtocolVersion_2)) + ODR_MASK_SET(&protocolVersion, Z_ProtocolVersion_2); + resp.protocolVersion = &protocolVersion; assoc->maximumRecordSize = *req->maximumRecordSize; /* * This is not so hot. The big todo for ODR is dynamic memory allocation @@ -226,7 +250,7 @@ static int process_initRequest(IOCHAN client, Z_InitRequest *req) resp.result = &result; resp.implementationId = "YAZ"; resp.implementationName = "Index Data/YAZ Generic Frontend Server"; - resp.implementationVersion = "$Revision: 1.11 $"; + resp.implementationVersion = "$Revision: 1.13 $"; resp.userInformationField = 0; if (!z_APDU(assoc->encode, &apdup, 0)) { @@ -328,7 +352,7 @@ static Z_Records *pack_records(association *a, char *setname, int start, } freq.setname = setname; freq.number = recno; - if (!(fres = bend_fetch(&freq))) + if (!(fres = bend_fetch(a->backend, &freq, 0))) { *pres = Z_PRES_FAILURE; return diagrec(a->proto, 2, "Backend interface problem"); @@ -447,7 +471,7 @@ static int process_searchRequest(IOCHAN client, Z_SearchRequest *req) bsrq.basenames = req->databaseNames; bsrq.query = req->query; - if (!(bsrt = bend_search(&bsrq))) + if (!(bsrt = bend_search(assoc->backend, &bsrq, 0))) return -1; else if (bsrt->errcode) resp.records = diagrec(assoc->proto, bsrt->errcode,