- // now re-insructing the z3950 backend present request
-
- // z3950'fy record syntax
- //Odr_oid odr_oid;
- if(pr->preferredRecordSyntax){
- (pr->preferredRecordSyntax)
- = yaz_str_to_z3950oid(odr_en, CLASS_RECSYN, "xml");
-
- // = yaz_oidval_to_z3950oid (odr_en, CLASS_RECSYN, VAL_TEXT_XML);
+ // setting up variables for conversion state
+ yaz_record_conv_t rc = 0;
+ int ret_code;
+
+ const char *input_schema = 0;
+ Odr_oid *input_syntax = 0;
+
+ if(pr_req->recordComposition){
+ input_schema
+ = mp_util::record_composition_to_esn(pr_req->recordComposition);
+ }
+ if(pr_req->preferredRecordSyntax){
+ input_syntax = pr_req->preferredRecordSyntax;
+ }
+
+ const char *match_schema = 0;
+ int *match_syntax = 0;
+
+ const char *backend_schema = 0;
+ Odr_oid *backend_syntax = 0;
+
+ ret_code
+ = yaz_retrieval_request(m_retrieval,
+ input_schema, input_syntax,
+ &match_schema, &match_syntax,
+ &rc,
+ &backend_schema, &backend_syntax);
+
+ // error handling
+ if (ret_code != 0)
+ {
+ // need to construct present error package and send back
+
+ Z_APDU *apdu = 0;
+
+ const char *details = 0;
+ if (ret_code == -1) /* error ? */
+ {
+ details = yaz_retrieval_get_error(m_retrieval);
+ apdu = odr_en.create_presentResponse(
+ gdu_req->u.z3950,
+ YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS, details);
+ }
+ else if (ret_code == 1 || ret_code == 3)
+ {
+ details = input_schema;
+ apdu = odr_en.create_presentResponse(
+ gdu_req->u.z3950,
+ YAZ_BIB1_ELEMENT_SET_NAMES_UNSUPP, details);
+ }
+ else if (ret_code == 2)
+ {
+ char oidbuf[OID_STR_MAX];
+ oid_to_dotstring(input_syntax, oidbuf);
+ details = odr_strdup(odr_en, oidbuf);
+
+ apdu = odr_en.create_presentResponse(
+ gdu_req->u.z3950,
+ YAZ_BIB1_RECORD_SYNTAX_UNSUPP, details);
+ }
+ package.response() = apdu;
+ return;