return h;
}
-int ztest_search(void *handle, bend_search_rr *rr)
+/** \brief checks if it's a dummy Slow database..
+ \param basename database name to check
+ \param association backend association (or NULL if not available)
+ \retval 1 is slow database
+ \retval 0 is not a slow database
+
+ The Slow database is for testing.. It allows us to simulate
+ a slow server...
+*/
+static int check_slow(const char *basename, bend_association association)
{
- if (rr->num_bases != 1)
- {
- rr->errcode = YAZ_BIB1_COMBI_OF_SPECIFIED_DATABASES_UNSUPP;
- return 0;
- }
- /* Throw Database unavailable if other than Default or Slow */
- if (!yaz_matchstr(rr->basenames[0], "Default"))
- ; /* Default is OK in our test */
- else if(!yaz_matchstr(rr->basenames[0], "Slow"))
+ if (strncmp(basename, "Slow", 4) == 0)
{
#if HAVE_UNISTD_H
+ int i, w = 3;
+ if (basename[4])
+ sscanf(basename+4, "%d", &w);
/* wait up to 3 seconds and check if connection is still alive */
- int i;
- for (i = 0; i<3; i++)
+ for (i = 0; i < w; i++)
{
- if (!bend_assoc_is_alive(rr->association))
+ if (association && !bend_assoc_is_alive(association))
{
yaz_log(YLOG_LOG, "search aborted");
break;
sleep(1);
}
#endif
+ return 1;
+ }
+ return 0;
+}
+
+int ztest_search(void *handle, bend_search_rr *rr)
+{
+ if (rr->num_bases != 1)
+ {
+ rr->errcode = YAZ_BIB1_COMBI_OF_SPECIFIED_DATABASES_UNSUPP;
+ return 0;
+ }
+ /* Throw Database unavailable if other than Default or Slow */
+ if (!yaz_matchstr(rr->basenames[0], "Default"))
+ ; /* Default is OK in our test */
+ else if (check_slow(rr->basenames[0], rr->association))
+ {
rr->estimated_hit_count = 1;
}
else
return 0;
}
+ if (rr->extra_args)
+ {
+ Z_SRW_extra_arg *a;
+ WRBUF response_xml = wrbuf_alloc();
+ wrbuf_puts(response_xml, "<extra>");
+ for (a = rr->extra_args; a; a = a->next)
+ {
+ wrbuf_puts(response_xml, "<extra name=\"");
+ wrbuf_xmlputs(response_xml, a->name);
+ wrbuf_puts(response_xml, "\"");
+ if (a->value)
+ {
+ wrbuf_puts(response_xml, " value=\"");
+ wrbuf_xmlputs(response_xml, a->value);
+ wrbuf_puts(response_xml, "\"");
+ }
+ wrbuf_puts(response_xml, "/>");
+ }
+ wrbuf_puts(response_xml, "</extra>");
+ rr->extra_response_data =
+ odr_strdup(rr->stream, wrbuf_cstr(response_xml));
+ wrbuf_destroy(response_xml);
+ }
rr->hits = get_hit_count(rr->query);
return 0;
}
if (rr->esr->packageName)
yaz_log(log_level, "packagename: %s", rr->esr->packageName);
- yaz_log(log_level, "Waitaction: %d", *rr->esr->waitAction);
+ yaz_log(log_level, "Waitaction: " ODR_INT_PRINTF, *rr->esr->waitAction);
- yaz_log(log_level, "function: %d", *rr->esr->function);
+ yaz_log(log_level, "function: " ODR_INT_PRINTF, *rr->esr->function);
if (!rr->esr->taskSpecificParameters)
{
{
yaz_log(log_level, "resultsetItem");
yaz_log(log_level, "setId: %s", n->resultSetItem->resultSetId);
- yaz_log(log_level, "item: %d", *n->resultSetItem->item);
+ yaz_log(log_level, "item: " ODR_INT_PRINTF, *n->resultSetItem->item);
}
if (n->itemRequest)
{
}
if (item_req)
{
- yaz_log(log_level, "ILL protocol version = %d",
+ yaz_log(log_level, "ILL protocol version = "
+ ODR_INT_PRINTF,
*item_req->protocol_version_num);
}
}
yaz_log(log_level, " specialUpdate");
break;
default:
- yaz_log(log_level, " unknown (%d)", *toKeep->action);
+ yaz_log(log_level, " unknown (" ODR_INT_PRINTF ")",
+ *toKeep->action);
}
}
if (toKeep->databaseName)
ext->u.update->u.taskPackage->originPart = keep;
ext->u.update->u.taskPackage->targetPart = targetPart;
- keep->action = (int *) odr_malloc(rr->stream, sizeof(int));
- *keep->action = *toKeep->action;
+ keep->action = odr_intdup(rr->stream, *toKeep->action);
keep->databaseName =
odr_strdup(rr->stream, toKeep->databaseName);
keep->schema = 0;
/* Throw Database unavailable if other than Default or Slow */
if (!yaz_matchstr(q->basenames[0], "Default"))
; /* Default is OK in our test */
- else if(!yaz_matchstr(q->basenames[0], "Slow"))
- {
-#if HAVE_UNISTD_H
- sleep(3);
-#endif
+ else if (check_slow(q->basenames[0], 0 /* no assoc for scan */))
;
- }
else
{
q->errcode = YAZ_BIB1_DATABASE_UNAVAILABLE;
/*
* Local variables:
* c-basic-offset: 4
+ * c-file-style: "Stroustrup"
* indent-tabs-mode: nil
* End:
* vim: shiftwidth=4 tabstop=8 expandtab