+ // 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;
+ }
+
+ return false;
+}
+
+bool
+yf::SRUtoZ3950::Rep::z3950_scan_request(mp::Package &package,
+ Z_SRW_scanRequest const *sr_req) const
+ //const std::string &database,
+ //const std::string &query,
+ //int query_type) const
+{
+ 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_scanRequest);
+
+ //TODO: add stuff in apdu
+ Z_ScanRequest *z_scanRequest = apdu->u.scanRequest;
+
+ // database repackaging
+ z_scanRequest->num_databaseNames = 1;
+ z_scanRequest->databaseNames = (char**)
+ odr_malloc(odr_en, sizeof(char *));
+ if (sr_req->database)
+ z_scanRequest->databaseNames[0]
+ = odr_strdup(odr_en, const_cast<char *>(sr_req->database));
+ else
+ z_scanRequest->databaseNames[0]
+ = odr_strdup(odr_en, "Default");
+
+
+ // query repackaging
+ // CQL or XCQL scan is not possible in Z3950, flagging a diagnostic
+ if (sr_req->query_type != Z_SRW_query_type_pqf)
+ {
+ //send_to_srw_client_error(7, "query");
+ return false;
+ }
+
+ // PQF query repackaging
+ // need to use Z_AttributesPlusTerm structure, not Z_Query
+ // this can be digget out of a
+ // Z_query->type1(Z_RPNQuery)->RPNStructure(Z_RPNStructure)
+ // ->u.simple(Z_Operand)->u.attributesPlusTerm(Z_AttributesPlusTerm )