+
+}
+
+int Yaz_Proxy::send_to_srw_client_ok(Z_ListEntries *entries)
+{
+ ODR o = odr_encode();
+ Z_SRW_PDU *srw_pdu = yaz_srw_get(o, Z_SRW_scan_response);
+ Z_SRW_scanResponse *srw_res = srw_pdu->u.scan_response;
+
+ if (entries && entries->num_entries > 0)
+ {
+ srw_res->num_terms = entries->num_entries;
+ int i;
+ srw_res->terms = (Z_SRW_scanTerm *)
+ odr_malloc(o, srw_res->num_terms * sizeof(Z_SRW_scanTerm));
+ for (i = 0; i < srw_res->num_terms; i++)
+ {
+ if (entries->entries[i]->which == Z_Entry_termInfo)
+ {
+ switch(entries->entries[i]->u.termInfo->term->which)
+ {
+ case Z_Term_general:
+ srw_res->terms[i].value = odr_strdupn(o,
+ (char *) entries->entries[i]->u.termInfo->term->u.general->buf,
+ entries->entries[i]->u.termInfo->term->u.general->len);
+ break;
+ default:
+ srw_res->terms[i].value = NULL;
+ }
+ if (entries->entries[i]->u.termInfo->globalOccurrences != NULL)
+ srw_res->terms[i].numberOfRecords = odr_intdup(o,
+ *entries->entries[i]->u.termInfo->globalOccurrences);
+ else
+ srw_res->terms[i].numberOfRecords = NULL;
+ if (entries->entries[i]->u.termInfo->displayTerm != NULL)
+ srw_res->terms[i].displayTerm = odr_strdup(o,
+ entries->entries[i]->u.termInfo->displayTerm);
+ else
+ srw_res->terms[i].displayTerm = NULL;
+ srw_res->terms[i].whereInList = NULL;
+ }
+ }
+ }
+ if (entries && entries->num_nonsurrogateDiagnostics > 0)
+ {
+ int http_code;
+ http_code = z_to_srw_diag(odr_encode(), srw_res,
+ entries->nonsurrogateDiagnostics[0]);
+ if (http_code)
+ return send_http_response(http_code);
+ }
+ return send_srw_response(srw_pdu);
+
+}
+
+int Yaz_Proxy::send_srw_search_response(Z_SRW_diagnostic *diagnostics,
+ int num_diagnostics, int http_code /* = 200 */)
+{
+ ODR o = odr_encode();
+ Z_SRW_PDU *srw_pdu = yaz_srw_get(o, Z_SRW_searchRetrieve_response);
+ Z_SRW_searchRetrieveResponse *srw_res = srw_pdu->u.response;
+
+ srw_res->num_diagnostics = num_diagnostics;
+ srw_res->diagnostics = diagnostics;
+ return send_srw_response(srw_pdu, http_code);
+}
+
+int Yaz_Proxy::send_srw_scan_response(Z_SRW_diagnostic *diagnostics,
+ int num_diagnostics, int http_code /* = 200 */)
+{
+ ODR o = odr_encode();
+ Z_SRW_PDU *srw_pdu = yaz_srw_get(o, Z_SRW_scan_response);
+ Z_SRW_scanResponse *srw_res = srw_pdu->u.scan_response;
+
+ srw_res->num_diagnostics = num_diagnostics;
+ srw_res->diagnostics = diagnostics;
+ return send_srw_response(srw_pdu, http_code);