X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fseshigh.c;h=19c771d74a648a53fcd3553997a6bdd732c65a15;hp=277e56896587056ae1eebcc5994b448b9b3a12bf;hb=173f78f50536784bdc6a59d4586ba409b2b69182;hpb=379504a233e3e2cc85bca1e7b6d864f1395aec7c diff --git a/src/seshigh.c b/src/seshigh.c index 277e568..19c771d 100644 --- a/src/seshigh.c +++ b/src/seshigh.c @@ -509,6 +509,7 @@ static void assoc_init_reset(association *assoc) assoc->init->bend_explain = NULL; assoc->init->bend_srw_scan = NULL; assoc->init->bend_srw_update = NULL; + assoc->init->named_result_sets = 0; assoc->init->charneg_request = NULL; assoc->init->charneg_response = NULL; @@ -664,7 +665,6 @@ static int retrieve_fetch(association *assoc, bend_fetch_rr *rr) rr->output_format = match_syntax; if (match_schema) rr->schema = odr_strdup(rr->stream, match_schema); - return 0; #else (*assoc->init->bend_fetch)(assoc->backend, rr); #endif @@ -972,7 +972,8 @@ static void srw_bend_search(association *assoc, request *req, int number = srw_req->maximumRecords ? *srw_req->maximumRecords : 0; int start = srw_req->startRecord ? *srw_req->startRecord : 1; - yaz_log(log_requestdetail, "Request to pack %d+%d out of %d", + yaz_log(log_requestdetail, "Request to pack %d+%d out of " + ODR_INT_PRINTF, start, number, rr.hits); srw_res->numberOfRecords = odr_intdup(assoc->encode, rr.hits); @@ -1129,11 +1130,11 @@ static void srw_bend_search(association *assoc, request *req, wrbuf_printf(wr, "ERROR info:http/%d", *http_code); else if (srw_res->numberOfRecords) { - wrbuf_printf(wr, "OK %d", + wrbuf_printf(wr, "OK " ODR_INT_PRINTF, (srw_res->numberOfRecords ? *srw_res->numberOfRecords : 0)); } - wrbuf_printf(wr, " %s %d+%d", + wrbuf_printf(wr, " %s " ODR_INT_PRINTF " +%d", (srw_res->resultSetId ? srw_res->resultSetId : "-"), (srw_req->startRecord ? *srw_req->startRecord : 1), @@ -1401,7 +1402,7 @@ static void srw_bend_scan(association *assoc, request *req, else wrbuf_printf(wr, "OK - - "); - wrbuf_printf(wr, "%d+%d+0 ", + wrbuf_printf(wr, ODR_INT_PRINTF "+" ODR_INT_PRINTF " ", (srw_req->responsePosition ? *srw_req->responsePosition : 1), (srw_req->maximumTerms ? @@ -2198,6 +2199,10 @@ static Z_APDU *process_initRequest(association *assoc, request *reqb) assoc->init->charneg_request = negotiation; } + /* by default named_result_sets is 0 .. Enable it if client asks for it. */ + if (ODR_MASK_GET(req->options, Z_Options_namedResultSets)) + assoc->init->named_result_sets = 1; + assoc->backend = 0; if (cb) { @@ -2264,7 +2269,8 @@ static Z_APDU *process_initRequest(association *assoc, request *reqb) ODR_MASK_SET(resp->options, Z_Options_extendedServices); strcat(options, " extendedServices"); } - if (ODR_MASK_GET(req->options, Z_Options_namedResultSets)) + if (ODR_MASK_GET(req->options, Z_Options_namedResultSets) + && assoc->init->named_result_sets) { ODR_MASK_SET(resp->options, Z_Options_namedResultSets); strcat(options, " namedresults"); @@ -2452,9 +2458,9 @@ static Z_NamePlusRecord *surrogatediagrec(association *assoc, return zget_surrogateDiagRec(assoc->encode, dbname, error, addinfo); } -static Z_Records *pack_records(association *a, char *setname, int start, - int *num, Z_RecordComposition *comp, - int *next, int *pres, +static Z_Records *pack_records(association *a, char *setname, Odr_int start, + Odr_int *num, Z_RecordComposition *comp, + Odr_int *next, Odr_int *pres, Z_ReferenceId *referenceId, Odr_oid *oid, int *errcode) { @@ -2474,8 +2480,9 @@ static Z_Records *pack_records(association *a, char *setname, int start, *num = 0; *next = 0; - yaz_log(log_requestdetail, "Request to pack %d+%d %s", start, toget, setname); - yaz_log(log_requestdetail, "pms=%d, mrs=%d", a->preferredMessageSize, + yaz_log(log_requestdetail, "Request to pack " ODR_INT_PRINTF "+%d %s", start, toget, setname); + yaz_log(log_requestdetail, "pms=" ODR_INT_PRINTF + ", mrs=" ODR_INT_PRINTF, a->preferredMessageSize, a->maximumRecordSize); for (recno = start; reclist->num_records < toget; recno++) { @@ -2570,7 +2577,8 @@ static Z_Records *pack_records(association *a, char *setname, int start, } else /* too big entirely */ { - yaz_log(log_requestdetail, "Record > maxrcdsz this=%d max=%d", + yaz_log(log_requestdetail, "Record > maxrcdsz " + "this=%d max=" ODR_INT_PRINTF, this_length, a->maximumRecordSize); reclist->records[reclist->num_records] = surrogatediagrec(a, freq.basename, 17, 0); @@ -2696,9 +2704,9 @@ static Z_APDU *response_searchRequest(association *assoc, request *reqb, Z_APDU *apdu = (Z_APDU *)odr_malloc(assoc->encode, sizeof(*apdu)); Z_SearchResponse *resp = (Z_SearchResponse *) odr_malloc(assoc->encode, sizeof(*resp)); - int *nulint = odr_intdup(assoc->encode, 0); - int *next = odr_intdup(assoc->encode, 0); - int *none = odr_intdup(assoc->encode, Z_SearchResponse_none); + Odr_int *nulint = odr_intdup(assoc->encode, 0); + Odr_int *next = odr_intdup(assoc->encode, 0); + Odr_int *none = odr_intdup(assoc->encode, Z_SearchResponse_none); int returnedrecs = 0; apdu->which = Z_APDU_searchResponse; @@ -2718,17 +2726,17 @@ static Z_APDU *response_searchRequest(association *assoc, request *reqb, resp->resultCount = nulint; resp->numberOfRecordsReturned = nulint; resp->nextResultSetPosition = nulint; - resp->searchStatus = nulint; + resp->searchStatus = odr_booldup(assoc->encode, 0); resp->resultSetStatus = none; resp->presentStatus = 0; } else { - bool_t *sr = odr_intdup(assoc->encode, 1); - int *toget = odr_intdup(assoc->encode, 0); + bool_t *sr = odr_booldup(assoc->encode, 1); + Odr_int *toget = odr_intdup(assoc->encode, 0); Z_RecordComposition comp, *compp = 0; - yaz_log(log_requestdetail, "resultCount: %d", bsrt->hits); + yaz_log(log_requestdetail, "resultCount: " ODR_INT_PRINTF, bsrt->hits); resp->records = 0; resp->resultCount = &bsrt->hits; @@ -2754,7 +2762,7 @@ static Z_APDU *response_searchRequest(association *assoc, request *reqb, if (*toget && !resp->records) { - int *presst = odr_intdup(assoc->encode, 0); + Odr_int *presst = odr_intdup(assoc->encode, 0); /* Call bend_present if defined */ if (assoc->init->bend_present) { @@ -2832,7 +2840,7 @@ static Z_APDU *response_searchRequest(association *assoc, request *reqb, if (bsrt->errcode) wrbuf_printf(wr, "ERROR %d", bsrt->errcode); else - wrbuf_printf(wr, "OK %d", bsrt->hits); + wrbuf_printf(wr, "OK " ODR_INT_PRINTF, bsrt->hits); wrbuf_printf(wr, " %s 1+%d ", req->resultSetName, returnedrecs); yaz_query_to_wrbuf(wr, req->query); @@ -2864,8 +2872,8 @@ static Z_APDU *process_presentRequest(association *assoc, request *reqb, Z_PresentRequest *req = reqb->apdu_request->u.presentRequest; Z_APDU *apdu; Z_PresentResponse *resp; - int *next; - int *num; + Odr_int *next; + Odr_int *num; int errcode = 0; const char *errstring = 0; @@ -2931,9 +2939,10 @@ static Z_APDU *process_presentRequest(association *assoc, request *reqb, else if (*resp->presentStatus == Z_PresentStatus_success) wrbuf_printf(wr, "OK - "); else - wrbuf_printf(wr, "Partial %d - ", *resp->presentStatus); + wrbuf_printf(wr, "Partial " ODR_INT_PRINTF " - ", + *resp->presentStatus); - wrbuf_printf(wr, " %s %d+%d ", + wrbuf_printf(wr, " %s " ODR_INT_PRINTF "+" ODR_INT_PRINTF " ", req->resultSetId, *req->resultSetStartPoint, *req->numberOfRecordsRequested); yaz_log(log_request, "%s", wrbuf_cstr(wr) ); @@ -2957,8 +2966,8 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd) Z_APDU *apdu = (Z_APDU *)odr_malloc(assoc->encode, sizeof(*apdu)); Z_ScanResponse *res = (Z_ScanResponse *) odr_malloc(assoc->encode, sizeof(*res)); - int *scanStatus = odr_intdup(assoc->encode, Z_Scan_failure); - int *numberOfEntriesReturned = odr_intdup(assoc->encode, 0); + Odr_int *scanStatus = odr_intdup(assoc->encode, Z_Scan_failure); + Odr_int *numberOfEntriesReturned = odr_intdup(assoc->encode, 0); Z_ListEntries *ents = (Z_ListEntries *) odr_malloc(assoc->encode, sizeof(*ents)); Z_DiagRecs *diagrecs_p = NULL; @@ -3056,7 +3065,8 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd) *scanStatus = Z_Scan_success; ents->entries = tab; ents->num_entries = bsrr->num_entries; - res->numberOfEntriesReturned = &ents->num_entries; + res->numberOfEntriesReturned = odr_intdup(assoc->encode, + ents->num_entries); res->positionOfTerm = &bsrr->term_position; for (i = 0; i < bsrr->num_entries; i++) { @@ -3095,7 +3105,7 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd) odr_malloc(assoc->encode, o->len = o->size = strlen(bsrr->entries[i].term)); memcpy(o->buf, bsrr->entries[i].term, o->len); - yaz_log(YLOG_DEBUG, " term #%d: '%s' (%d)", i, + yaz_log(YLOG_DEBUG, " term #%d: '%s' (" ODR_INT_PRINTF ")", i, bsrr->entries[i].term, bsrr->entries[i].occurrences); } else @@ -3134,7 +3144,8 @@ static Z_APDU *process_scanRequest(association *assoc, request *reqb, int *fd) else wrbuf_printf(wr, "OK"); - wrbuf_printf(wr, " %d - %d+%d+%d", + wrbuf_printf(wr, " " ODR_INT_PRINTF " - " ODR_INT_PRINTF "+" + ODR_INT_PRINTF "+" ODR_INT_PRINTF, res->numberOfEntriesReturned ? *res->numberOfEntriesReturned : 0, (req->preferredPositionInResponse ? @@ -3257,7 +3268,7 @@ static Z_APDU *process_deleteRequest(association *assoc, request *reqb, bdrr->statuses = 0; if (bdrr->num_setnames > 0) { - bdrr->statuses = (int*) + bdrr->statuses = (Odr_int*) odr_malloc(assoc->encode, sizeof(*bdrr->statuses) * bdrr->num_setnames); for (i = 0; i < bdrr->num_setnames; i++)