X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=pazpar2.c;h=1c43633d7bc2f9e3a13a114f31f8a2eb0d48702c;hb=2424ec60b95e210da9bd8152aca869e604184bff;hp=55dabb2302e9e4b021ccb5539acdcbb5ccef260d;hpb=f7fb437044f32ea7e85a114414f32b170ab0ebb0;p=pazpar2-moved-to-github.git diff --git a/pazpar2.c b/pazpar2.c index 55dabb2..1c43633 100644 --- a/pazpar2.c +++ b/pazpar2.c @@ -1,4 +1,4 @@ -/* $Id: pazpar2.c,v 1.13 2006-12-14 14:58:03 quinn Exp $ */; +/* $Id: pazpar2.c,v 1.14 2006-12-17 13:42:47 quinn Exp $ */; #include #include @@ -33,8 +33,9 @@ static void client_fatal(struct client *cl); 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; @@ -638,6 +639,7 @@ static struct record *ingest_record(struct client *cl, char *buf, int len) static void ingest_records(struct client *cl, Z_Records *r) { struct record *rec; + struct session *s = cl->session; Z_NamePlusRecordList *rlist; int i; @@ -669,6 +671,8 @@ static void ingest_records(struct client *cl, Z_Records *r) 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) @@ -1121,6 +1125,15 @@ void session_set_watch(struct session *s, int what, session_watchfun fun, void * 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)