#endif
-
#if YAZ_HAVE_XML2
static zoom_ret send_srw(ZOOM_connection c, Z_SRW_PDU *sr)
{
{
yaz_sru_soap_encode(gdu->u.HTTP_Request, sr, c->odr_out, c->charset);
}
+ else if (c->sru_mode == zoom_sru_solr)
+ {
+ yaz_solr_encode_request(gdu->u.HTTP_Request, sr, c->odr_out, c->charset);
+ }
if (!z_GDU(c->odr_out, &gdu, 0, 0))
return zoom_complete;
if (c->odr_print)
}
else
{
- if (res->numberOfRecords)
+ if (res->numberOfRecords) {
resultset->size = *res->numberOfRecords;
+ yaz_log(YLOG_DEBUG, "res numberOfRecords " ODR_INT_PRINTF, *res->numberOfRecords);
+ }
for (i = 0; i<res->num_records; i++)
{
int pos;
Z_NamePlusRecord *npr = (Z_NamePlusRecord *)
odr_malloc(c->odr_in, sizeof(Z_NamePlusRecord));
-
+ /*
+ * TODO This does not work with 0-based recordPositions.
+ * We will iterate over one twice
+ */
if (res->records[i].recordPosition &&
*res->records[i].recordPosition > 0)
pos = *res->records[i].recordPosition - 1;
else
pos = *start + i;
+ yaz_log(YLOG_DEBUG, "pos %d start %d ", pos, *start);
sru_rec = &res->records[i];
*start += i;
if (*count + *start > resultset->size)
*count = resultset->size - *start;
+ yaz_log(YLOG_DEBUG, "SRU result set size " ODR_INT_PRINTF " start %d count %d", resultset->size, *start, *count);
if (*count < 0)
*count = 0;
-
nmem = odr_extract_mem(c->odr_in);
nmem_transfer(odr_getmem(resultset->odr), nmem);
nmem_destroy(nmem);
/* not redirect (normal response) */
if (!yaz_srw_check_content_type(hres))
+ {
addinfo = "content-type";
+ ret = -1;
+ }
+ else if (c->sru_mode == zoom_sru_solr)
+ {
+ Z_SRW_PDU *sr;
+ ret = yaz_solr_decode_response(c->odr_in, hres, &sr);
+ if (ret == 0)
+ if (sr->which == Z_SRW_searchRetrieve_response)
+ *cret = handle_srw_response(c, sr->u.response);
+ }
else
{
Z_SOAP *soap_package = 0;