summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/ivy.c44
-rw-r--r--src/ivy.h15
2 files changed, 57 insertions, 2 deletions
diff --git a/src/ivy.c b/src/ivy.c
index abaa96f..2fd0fa0 100644
--- a/src/ivy.c
+++ b/src/ivy.c
@@ -123,6 +123,10 @@ static void *direct_user_data = 0;
static IvyApplicationCallback application_callback;
static void *application_user_data = 0;
+/* callback appele sur ajout suppression de regexp */
+static IvyBindCallback application_bind_callback;
+static void *application_bind_data = 0;
+
/* callback appele sur demande de terminaison d'application */
static IvyDieCallback application_die_callback;
static void *application_die_user_data = 0;
@@ -385,6 +389,10 @@ static void Receive( Client client, void *data, char *line )
snd->id = id;
snd->str_regexp = strdup( arg );
snd->regexp = regexp;
+ if ( application_bind_callback )
+ {
+ (*application_bind_callback)( clnt, application_bind_data, id, snd->str_regexp, IvyAddBind );
+ }
}
}
else
@@ -409,6 +417,11 @@ static void Receive( Client client, void *data, char *line )
{
printf("Error studying %s, message: %s\n",arg,errbuf);
}
+
+ if ( application_bind_callback )
+ {
+ (*application_bind_callback)( clnt, application_bind_data, id, snd->str_regexp, IvyAddBind );
+ }
}
}
else
@@ -426,6 +439,10 @@ static void Receive( Client client, void *data, char *line )
IVY_LIST_ITER( clnt->msg_send, snd, ( id != snd->id ));
if ( snd )
{
+ if ( application_bind_callback )
+ {
+ (*application_bind_callback)( clnt, application_bind_data, id, snd->str_regexp, IvyRemoveBind );
+ }
#ifndef USE_PCRE_REGEX
free( snd->str_regexp );
#else
@@ -651,6 +668,19 @@ void IvyInit (const char *appname, const char *ready,
ready_message = ready;
}
+void IvySetBindCallback(IvyBindCallback bind_callback, void *bind_data
+ )
+{
+ application_bind_callback=bind_callback;
+ application_bind_data=bind_data;
+}
+
+void IvyDelBindCallback()
+{
+ application_bind_callback=0;
+ free(application_bind_data);
+ application_bind_data=0;
+}
void IvyClasses( int argc, const char **argv)
{
messages_classes_count = argc;
@@ -901,6 +931,20 @@ void IvyDefaultApplicationCallback( IvyClientPtr app, void *user_data, IvyApplic
break;
}
}
+void IvyDefaultBindCallback( IvyClientPtr app, void *user_data, int id, char* regexp, IvyBindEvent event)
+{
+ switch ( event ) {
+ case IvyAddBind:
+ printf("Application: %s on %s add regexp %d : %s\n", IvyGetApplicationName( app ), IvyGetApplicationHost(app), id, regexp);
+ break;
+ case IvyRemoveBind:
+ printf("Application: %s on %s remove regexp %d :%s\n", IvyGetApplicationName( app ), IvyGetApplicationHost(app), id, regexp);
+ break;
+ default:
+ printf("Application: %s unkown event %d\n",IvyGetApplicationName( app ), event);
+ break;
+ }
+}
IvyClientPtr IvyGetApplication( char *name )
{
diff --git a/src/ivy.h b/src/ivy.h
index 6577e79..1ea319a 100644
--- a/src/ivy.h
+++ b/src/ivy.h
@@ -29,12 +29,18 @@ extern "C" {
typedef struct _clnt_lst *IvyClientPtr;
typedef enum { IvyApplicationConnected, IvyApplicationDisconnected } IvyApplicationEvent;
+typedef enum { IvyAddBind, IvyRemoveBind } IvyBindEvent;
extern void IvyDefaultApplicationCallback( IvyClientPtr app, void *user_data, IvyApplicationEvent event ) ;
+extern void IvyDefaultBindCallback( IvyClientPtr app, void *user_data, int id, char* regexp, IvyBindEvent event ) ;
+
/* callback callback appele sur connexion deconnexion d'une appli */
typedef void (*IvyApplicationCallback)( IvyClientPtr app, void *user_data, IvyApplicationEvent event ) ;
+/* callback callback appele sur ajout ou suppression d'un bind */
+typedef void (*IvyBindCallback)( IvyClientPtr app, void *user_data, int id, char* regexp, IvyBindEvent event ) ;
+
/* callback appele sur reception de die */
typedef void (*IvyDieCallback)( IvyClientPtr app, void *user_data, int id ) ;
@@ -56,8 +62,13 @@ void IvyInit(
IvyApplicationCallback callback, /* callback appele sur connection deconnection d'une appli */
void *data, /* user data passe au callback */
IvyDieCallback die_callback, /* last change callback before die */
- void *die_data ); /* user data */
-
+ void *die_data /* user data */
+ );
+
+ void IvySetBindCallback(
+ IvyBindCallback bind_callback,
+ void *bind_data );
+ void IvyDelBindCallback();
void IvyStart (const char*);
void IvyStop ();