yaz_oi_set_string_oid(oi, out, yaz_oid_userinfo_cookie,
1, c->cookie_out);
}
- if (c->client_IP)
+ if (c->client_IP && a->which == Z_APDU_initRequest)
{
Z_OtherInformation **oi;
yaz_oi_APDU(a, &oi);
auth->u.open = odr_strdup(c->odr_out, c->user);
ireq->idAuthentication = auth;
}
- if (c->proxy)
+ if (c->proxy_mode)
{
yaz_oi_set_string_oid(&ireq->otherInfo, c->odr_out,
yaz_oid_userinfo_proxy, 1, c->host_port);
static void handle_Z3950_sort_response(ZOOM_connection c, Z_SortResponse *res)
{
if (res->diagnostics && res->num_diagnostics > 0)
+ {
response_diag(c, res->diagnostics[0]);
+ ZOOM_connection_remove_tasks(c);
+ }
}
static void handle_Z3950_scan_response(ZOOM_connection c, Z_ScanResponse *res)
schema = c->tasks->u.search.schema;
if (sr && sr->which == Z_Records_NSD)
+ {
response_default_diag(c, sr->u.nonSurrogateDiagnostic);
+ ZOOM_connection_remove_tasks(c);
+ }
else if (sr && sr->which == Z_Records_multipleNSD)
{
if (sr->u.multipleNonSurDiagnostics->num_diagRecs >= 1)
response_diag(c, sr->u.multipleNonSurDiagnostics->diagRecs[0]);
else
ZOOM_set_error(c, ZOOM_ERROR_DECODE, 0);
+ ZOOM_connection_remove_tasks(c);
}
else
{
ZOOM_resultset resultset;
int *start, *count;
- if (!c->tasks)
+ if (!c->tasks || c->tasks->which == ZOOM_TASK_SORT)
return zoom_complete;
assert(c->tasks->which == ZOOM_TASK_SEARCH);
resultset = c->tasks->u.search.resultset;
if (resultset->live_set)
{
if (*start >= resultset->size)
- return zoom_complete;
- if (*start + *count > resultset->size)
+ *count = 0;
+ else if (*start + *count >= resultset->size)
*count = resultset->size - *start;
}
case Z_APDU_sortResponse:
yaz_log(c->log_api, "%p handle_Z3950_apdu Sort response", c);
handle_Z3950_sort_response(c, apdu->u.sortResponse);
- ZOOM_connection_remove_task(c);
+ if (ZOOM_connection_Z3950_search(c) == zoom_complete)
+ ZOOM_connection_remove_task(c);
break;
case Z_APDU_scanResponse:
yaz_log(c->log_api, "%p handle_Z3950_apdu Scan response", c);