{
if (assoc->state != ASSOC_UP)
{
- yaz_log(YLOG_DEBUG, "Final timeout - closing connection.");
+ yaz_log(log_session, "Timeout. Closing connection");
/* do we need to lod this at all */
cs_close(conn);
destroy_association(assoc);
}
else
{
- yaz_log(log_sessiondetail,
- "Session idle too long. Sending close.");
+ yaz_log(log_sessiondetail, "Timeout. Sending Z39.50 Close");
do_close(assoc, Z_Close_lackOfActivity, 0);
}
return;
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
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;
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)
{
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);
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(
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),
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 ?
int num_diagnostic = 0;
const char *host = z_HTTP_header_lookup(hreq->headers, "Host");
+ yaz_log(log_request, "%s %s HTTP/%s", hreq->method, hreq->path, hreq->version);
if (!control_association(assoc, host, 0))
{
p = z_get_HTTP_Response(o, 404);
}
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;
binitres->errstring);
*resp->result = 0;
}
+ else
+ assoc->state = ASSOC_UP;
+
if (log_request)
{
if (!req->idAuthentication)
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)
{
*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++)
{
}
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);
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)
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;
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;
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))
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)
{
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);
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;
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) );
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;
*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++)
{
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
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 ?
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++)