- Z_APDU *apdu = 0;
- Z_PresentRequest *req = 0;
- int i = 0;
- const char *syntax = 0;
- const char *elementSetName = 0;
- ZOOM_resultset resultset;
- int *start, *count;
-
- if (!c->tasks)
- {
- yaz_log(c->log_details, "%p send_present no tasks", c);
- return zoom_complete;
- }
-
- switch (c->tasks->which)
- {
- case ZOOM_TASK_SEARCH:
- resultset = c->tasks->u.search.resultset;
- start = &c->tasks->u.search.start;
- count = &c->tasks->u.search.count;
- syntax = c->tasks->u.search.syntax;
- elementSetName = c->tasks->u.search.elementSetName;
- break;
- case ZOOM_TASK_RETRIEVE:
- resultset = c->tasks->u.retrieve.resultset;
- start = &c->tasks->u.retrieve.start;
- count = &c->tasks->u.retrieve.count;
- syntax = c->tasks->u.retrieve.syntax;
- elementSetName = c->tasks->u.retrieve.elementSetName;
- break;
- default:
- return zoom_complete;
- }
- yaz_log(c->log_details, "%p send_present start=%d count=%d",
- c, *start, *count);
-
- if (*start < 0 || *count < 0 || *start + *count > resultset->size)
- {
- ZOOM_set_dset_error(c, YAZ_BIB1_PRESENT_REQUEST_OUT_OF_RANGE, "Bib-1",
- "", 0);
- }
- if (c->error) /* don't continue on error */
- return zoom_complete;
- yaz_log(c->log_details, "send_present resultset=%p start=%d count=%d",
- resultset, *start, *count);
-
- for (i = 0; i < *count; i++)
- {
- ZOOM_record rec =
- ZOOM_record_cache_lookup(resultset, i + *start,
- syntax, elementSetName);
- if (!rec)
- break;
- else
- {
- ZOOM_Event event = ZOOM_Event_create(ZOOM_EVENT_RECV_RECORD);
- ZOOM_connection_put_event(c, event);
- }
- }
- *start += i;
- *count -= i;
-
- if (*count == 0)
- {
- yaz_log(c->log_details, "%p send_present skip=%d no more to fetch", c, i);
- return zoom_complete;
- }
+ Z_APDU *apdu = zget_APDU(c->odr_out, Z_APDU_presentRequest);
+ Z_PresentRequest *req = apdu->u.presentRequest;
+ ZOOM_resultset resultset = c->tasks->u.search.resultset;
+ const char *syntax = c->tasks->u.search.syntax;
+ const char *elementSetName = c->tasks->u.search.elementSetName;
+ const char *schema = c->tasks->u.search.schema;