629 Z_PresentRequest *req = apdu_req->u.presentRequest;
630 std::string resultSetId = req->resultSetId;
633 Odr_int start = *req->resultSetStartPoint;
635 if (req->preferredRecordSyntax)
636 syntax = odr_oiddup(odr, req->preferredRecordSyntax);
639 if (sets_it ==
m_sets.end())
642 odr.create_presentResponse(
644 YAZ_BIB1_SPECIFIED_RESULT_SET_DOES_NOT_EXIST,
645 resultSetId.c_str());
646 package.response() = apdu;
650 std::list<RecordListPtr>::const_iterator it = rset->record_lists.begin();
651 for (; it != rset->record_lists.end(); it++)
652 if ((*it)->cmp(req->preferredRecordSyntax))
654 if (*req->resultSetStartPoint - 1 + *req->numberOfRecordsRequested
658 Z_APDU *p_apdu = zget_APDU(odr, Z_APDU_presentResponse);
659 Z_PresentResponse *p_res = p_apdu->u.presentResponse;
661 *p_res->nextResultSetPosition = *req->resultSetStartPoint +
662 *req->numberOfRecordsRequested;
663 *p_res->numberOfRecordsReturned =
664 *req->numberOfRecordsRequested;
665 p_res->records = (Z_Records *)
666 odr_malloc(odr,
sizeof(*p_res->records));
667 p_res->records->which = Z_Records_DBOSD;
668 Z_NamePlusRecordList *nprl = (Z_NamePlusRecordList *)
669 odr_malloc(odr,
sizeof(*nprl));
670 p_res->records->u.databaseOrSurDiagnostics = nprl;
671 nprl->num_records = *req->numberOfRecordsRequested;
672 nprl->records = (Z_NamePlusRecord **)
673 odr_malloc(odr, nprl->num_records *
sizeof(*nprl->records));
674 for (i = 0; i < nprl->num_records; i++)
676 int pos = i + *req->resultSetStartPoint - 1;
679 package.response() = p_apdu;
686 Package b_package(package.session(), package.origin());
687 b_package.copy_filter(package);
688 b_package.request() = apdu_req;
690 Z_GDU *gdu_res = b_package.response().get();
691 if (gdu_res && gdu_res->which == Z_GDU_Z3950 && gdu_res->u.z3950->which ==
692 Z_APDU_presentResponse)
694 Z_PresentResponse *res = gdu_res->u.z3950->u.presentResponse;
696 start, rset, syntax, req->recordComposition,
697 resultSetId.c_str());
698 package.response() = gdu_res;
701 package.response() = b_package.response();
702 if (b_package.session().is_closed())
703 b_package.session().close();