-/* $Id: pazpar2.c,v 1.13 2006-12-14 14:58:03 quinn Exp $ */;
+/* $Id: pazpar2.c,v 1.16 2006-12-18 16:29:57 quinn Exp $ */;
#include <stdlib.h>
#include <stdio.h>
static void connection_destroy(struct connection *co);
static int client_prep_connection(struct client *cl);
static void ingest_records(struct client *cl, Z_Records *r);
+void session_alert_watch(struct session *s, int what);
-IOCHAN channel_list = 0; // Master list of connections we're listening to.
+IOCHAN channel_list = 0; // Master list of connections we're handling events to
static struct connection *connection_freelist = 0;
static struct client *client_freelist = 0;
static void ingest_records(struct client *cl, Z_Records *r)
{
struct record *rec;
+ struct session *s = cl->session;
Z_NamePlusRecordList *rlist;
int i;
if (!rec)
continue;
}
+ if (s->watchlist[SESSION_WATCH_RECORDS].fun && rlist->num_records)
+ session_alert_watch(s, SESSION_WATCH_RECORDS);
}
static void do_presentResponse(IOCHAN i, Z_APDU *a)
if (cl)
se = cl->session;
+ else
+ {
+ yaz_log(YLOG_WARN, "Destroying orphan connection (fix me?)");
+ connection_destroy(co);
+ return;
+ }
if (co->state == Conn_Connecting && event & EVENT_OUTPUT)
{
continue;
url = line + 7;
url[strlen(url) - 1] = '\0';
- yaz_log(LOG_DEBUG, "Target: %s", url);
+ yaz_log(YLOG_DEBUG, "Target: %s", url);
if ((db = strchr(url, '/')))
*(db++) = '\0';
else
s->watchlist[what].data = data;
}
+void session_alert_watch(struct session *s, int what)
+{
+ if (!s->watchlist[what].fun)
+ return;
+ (*s->watchlist[what].fun)(s->watchlist[what].data);
+ s->watchlist[what].fun = 0;
+ s->watchlist[what].data = 0;
+}
+
// This should be extended with parameters to control selection criteria
// Associates a set of clients with a session;
int select_targets(struct session *se)