X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=server%2Fseshigh.c;h=6866f9857d099294fcc10b6678388d015cd4e25a;hb=b2d4fae21009b1909a35ef9ae6bcd27c1a5dca74;hp=2722d439c010e826cc15693a95e6f89810001539;hpb=a3fb25600e5a7366e761b46c419462080fc13f73;p=yaz-moved-to-github.git diff --git a/server/seshigh.c b/server/seshigh.c index 2722d43..6866f98 100644 --- a/server/seshigh.c +++ b/server/seshigh.c @@ -4,7 +4,25 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: seshigh.c,v $ - * Revision 1.49 1995-10-16 13:51:53 quinn + * Revision 1.56 1995-12-14 11:09:57 quinn + * Work on Explain + * + * Revision 1.55 1995/11/08 17:41:37 quinn + * Smallish. + * + * Revision 1.54 1995/11/08 15:11:29 quinn + * Log of close transmit. + * + * Revision 1.53 1995/11/01 13:54:58 quinn + * Minor adjustments + * + * Revision 1.52 1995/11/01 12:19:13 quinn + * Second attempt to fix same bug. + * + * Revision 1.50 1995/10/25 16:58:32 quinn + * Simple. + * + * Revision 1.49 1995/10/16 13:51:53 quinn * Changes to provide Especs to the backend. * * Revision 1.48 1995/10/06 08:51:20 quinn @@ -190,7 +208,7 @@ #include #include -#include +#include #include #include #include @@ -229,7 +247,7 @@ association *create_association(IOCHAN channel, COMSTACK link) if (!control_block) control_block = statserv_getcontrol(); - if (!(new = malloc(sizeof(*new)))) + if (!(new = xmalloc(sizeof(*new)))) return 0; new->client_chan = channel; new->client_link = link; @@ -295,12 +313,12 @@ void destroy_association(association *h) if (h->print) odr_destroy(h->print); if (h->input_buffer) - free(h->input_buffer); + xfree(h->input_buffer); if (h->backend) bend_close(h->backend); while (request_deq(&h->incoming)); while (request_deq(&h->outgoing)); - free(h); + xfree(h); } static void do_close(association *a, int reason, char *message) @@ -314,7 +332,8 @@ static void do_close(association *a, int reason, char *message) while (request_deq(&a->outgoing)); if (a->version >= 3) { - logf(LOG_DEBUG, "Generating Close PDU"); + logf(LOG_LOG, "Sending Close PDU, reason=%d, message=%s", + reason, message ? message : "none"); apdu.which = Z_APDU_close; apdu.u.close = cls; *cls->closeReason = reason; @@ -399,8 +418,9 @@ void ir_session(IOCHAN h, int event) odr_setbuf(assoc->decode, assoc->input_buffer, res, 0); if (!z_APDU(assoc->decode, &req->request, 0)) { - logf(LOG_LOG, "ODR error on incoming PDU: %s", - odr_errlist[odr_geterror(assoc->decode)]); + logf(LOG_LOG, "ODR error on incoming PDU: %s [near byte %d] ", + odr_errlist[odr_geterror(assoc->decode)], + odr_offset(assoc->decode)); logf(LOG_LOG, "PDU dump:"); odr_dumpBER(log_file(), assoc->input_buffer, res); do_close(assoc, Z_Close_protocolError, "Malformed package"); @@ -438,7 +458,7 @@ void ir_session(IOCHAN h, int event) break; case 0: /* all sent - release the request structure */ logf(LOG_DEBUG, "Wrote PDU, %d bytes", req->len_response); - odr_release_mem(req->request_mem); + nmem_destroy(req->request_mem); request_deq(&assoc->outgoing); request_release(req); if (!request_head(&assoc->outgoing)) @@ -559,11 +579,12 @@ static int process_response(association *assoc, request *req, Z_APDU *res) { logf(LOG_WARN, "ODR error when encoding response: %s", odr_errlist[odr_geterror(assoc->decode)]); + odr_reset(assoc->encode); return -1; } req->response = odr_getbuf(assoc->encode, &req->len_response, &req->size_response); - odr_setbuf(assoc->encode, 0, 0, 0); /* don't free if we abort later */ + odr_setbuf(assoc->encode, 0, 0, 0); /* don'txfree if we abort later */ odr_reset(assoc->encode); if (assoc->print && !z_APDU(assoc->print, &res, 0)) { @@ -1040,7 +1061,7 @@ static Z_APDU *response_searchRequest(association *assoc, request *reqb, else { static int toget; - Z_RecordComposition comp; + Z_RecordComposition comp, *compp = 0; static int presst = 0; resp.records = 0; @@ -1051,14 +1072,16 @@ static Z_APDU *response_searchRequest(association *assoc, request *reqb, if (bsrt->hits <= *req->smallSetUpperBound) { toget = bsrt->hits; - comp.u.simple = req->smallSetElementSetNames; + if ((comp.u.simple = req->smallSetElementSetNames)) + compp = ∁ } else if (bsrt->hits < *req->largeSetLowerBound) { toget = *req->mediumSetPresentNumber; if (toget > bsrt->hits) toget = bsrt->hits; - comp.u.simple = req->mediumSetElementSetNames; + if ((comp.u.simple = req->mediumSetElementSetNames)) + compp = ∁ } else toget = 0; @@ -1074,7 +1097,7 @@ static Z_APDU *response_searchRequest(association *assoc, request *reqb, else form = prefformat->value; resp.records = pack_records(assoc, req->resultSetName, 1, - &toget, &comp, &next, &presst, form); + &toget, compp, &next, &presst, form); if (!resp.records) return 0; resp.numberOfRecordsReturned = &toget;