+ Z_GDU *z3950_gdu = z3950_package.response().get();
+ //std::cout << "z3950_search_request " << *z3950_gdu << "\n";
+
+ if (z3950_gdu && z3950_gdu->which == Z_GDU_Z3950
+ && z3950_gdu->u.z3950->which == Z_APDU_searchResponse
+ && z3950_gdu->u.z3950->u.searchResponse->searchStatus)
+ {
+ hits = *(z3950_gdu->u.z3950->u.searchResponse->resultCount);
+ return true;
+ }
+
+ return false;
+}
+
+bool
+yf::SRUtoZ3950::Rep::z3950_present_request(mp::Package &package,
+ unsigned int &records_returned,
+ unsigned int &next_position,
+ Z_SRW_searchRetrieveRequest
+ const *sr_req)
+// unsigned int start_position,
+// unsigned int records_requested)
+ const
+{
+
+ if (!sr_req)
+ return false;
+
+ records_returned = 0;
+ next_position = 1;
+
+ // no need to work if nobody wants records seen ..
+ if (!(sr_req->maximumRecords) || 0 == *(sr_req->maximumRecords))
+ return true;
+
+ // creating Z3950 package
+ Package z3950_package(package.session(), package.origin());
+ z3950_package.copy_filter(package);
+ mp::odr odr_en(ODR_ENCODE);
+ Z_APDU *apdu = zget_APDU(odr_en, Z_APDU_presentRequest);
+
+ //TODO: add stuff in apdu
+ assert(apdu->u.presentRequest);
+
+ // z3950'fy start record position
+ if (sr_req->startRecord)
+ *(apdu->u.presentRequest->resultSetStartPoint)
+ = *(sr_req->startRecord);
+ else
+ *(apdu->u.presentRequest->resultSetStartPoint) = 1;
+
+ // z3950'fy number of records requested
+ if (sr_req->maximumRecords)
+ *(apdu->u.presentRequest->numberOfRecordsRequested)
+ = *(sr_req->maximumRecords);
+
+ // TODO: z3950'fy record schema
+ //if (sr_req->recordSchema)
+ // *(apdu->u.presentRequest->preferredRecordSyntax)
+ // = *(sr_req->recordSchema);
+
+ z3950_package.request() = apdu;
+
+ //std::cout << "z3950_present_request " << *apdu << "\n";
+ z3950_package.move();
+
+ //TODO: check success condition
+ Z_GDU *z3950_gdu = z3950_package.response().get();
+ if (z3950_gdu && z3950_gdu->which == Z_GDU_Z3950
+ && z3950_gdu->u.z3950->which == Z_APDU_presentResponse)
+ //&& z3950_gdu->u.z3950->u.presentResponse->searchStatus)
+ {
+ //std::cout << "z3950_present_request OK\n";
+ records_returned = 0;
+ next_position = 0;
+ Z_PresentResponse *pr = z3950_gdu->u.z3950->u.presentResponse;
+ if (pr)
+ {
+ if (pr->numberOfRecordsReturned)
+ records_returned = *(pr->numberOfRecordsReturned);
+ if (pr->nextResultSetPosition)
+ next_position = *(pr->nextResultSetPosition);
+ }
+ return true;
+ }
+