summaryrefslogtreecommitdiff
path: root/src/ivy.h
blob: df6fcc2907574a474c55b477bc143cdc677f4df8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/*
 *	Ivy, C interface
 *
 *	Copyright (C) 1997-2000
 *	Centre d'Études de la Navigation Aérienne
 *
 * 	Main functions
 *
 *	Authors: François-Régis Colin <fcolin@cena.dgac.fr>
 *		 Stéphane Chatty <chatty@cena.dgac.fr>
 *
 *	$Id$
 * 
 *	Please refer to file version.h for the
 *	copyright notice regarding this software
 */


#ifndef IVY_H
#define IVY_H

#ifdef __cplusplus
extern "C" {
#endif


#ifndef __GNUC__
#  define  __attribute__(x)  /*NOTHING*/
#endif

/* numero par default du bus */

typedef  struct _clnt_lst_dict *RWIvyClientPtr;
typedef  const struct _clnt_lst_dict *IvyClientPtr;

typedef enum { IvyApplicationConnected, IvyApplicationDisconnected, 
	       IvyApplicationCongestion , IvyApplicationDecongestion,
	       IvyApplicationFifoFull } IvyApplicationEvent;
typedef enum { IvyAddBind, IvyRemoveBind, IvyFilterBind, IvyChangeBind } IvyBindEvent;

extern void IvyDefaultApplicationCallback( IvyClientPtr app, void *user_data, IvyApplicationEvent event ) ;
extern void IvyDefaultBindCallback( IvyClientPtr app, void *user_data, int id, const 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, const char* regexp,  IvyBindEvent event ) ;

/* callback appele sur reception de die */
typedef void (*IvyDieCallback)( IvyClientPtr app, void *user_data, int id ) ;

/* callback appele sur reception de pong */
typedef void (*IvyPongCallback)( IvyClientPtr app, int round_trip_delay) ;

/* callback appele sur reception de messages normaux */
typedef void (*MsgCallback)( IvyClientPtr app, void *user_data, int argc, char **argv ) ;

/* callback appele sur reception de messages directs */
typedef void (*MsgDirectCallback)( IvyClientPtr app, void *user_data, int id, char *msg ) ;

/* identifiant d'une expression reguliere ( Bind/Unbind ) */
typedef struct _msg_rcv *MsgRcvPtr;

/* filtrage des regexps */
void IvySetFilter( int argc, const char **argv);
void IvyAddFilter( const char *arg);
void IvyRemoveFilter( const char *arg);

void IvyInit(
	 const char *AppName,		/* nom de l'application */
	 const char *ready,		/* ready Message peut etre NULL */
	 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 IvyTerminate(void);
  
void IvySetBindCallback(	 
			  IvyBindCallback bind_callback,
			  void *bind_data );
void IvySetPongCallback(	 
			  IvyPongCallback pong_callback );

void IvyStart (const char*);
void IvyStop (void);

/* query sur les applications connectees */
const char *IvyGetApplicationName( IvyClientPtr app );
const char *IvyGetApplicationHost( IvyClientPtr app );
IvyClientPtr IvyGetApplication( char *name );
char *IvyGetApplicationList(const char *sep);
char **IvyGetApplicationMessages( IvyClientPtr app); /* demande de reception d'un message */

MsgRcvPtr IvyBindMsg( MsgCallback callback, void *user_data, const char *fmt_regexp, ... )
__attribute__((format(printf,3,4))) ; /* avec sprintf prealable */

MsgRcvPtr IvyChangeMsg (MsgRcvPtr msg, const char *fmt_regex, ... )
__attribute__((format(printf,2,3))); /* avec sprintf prealable */

void IvyUnbindMsg( MsgRcvPtr id );

/* emission d'un message d'erreur */
void IvySendError(IvyClientPtr app, int id, const char *fmt, ... )
__attribute__((format(printf,3,4))) ; /* avec sprintf prealable */

/* emmission d'un message die pour terminer l'application */
void IvySendDieMsg(IvyClientPtr app );

/* emission d'un message retourne le nb effectivement emis */

int IvySendMsg( const char *fmt_message, ... )
__attribute__((format(printf,1,2))); /* avec sprintf prealable */

/* Message Direct Inter-application */

void IvyBindDirectMsg( MsgDirectCallback callback, void *user_data);
void IvySendDirectMsg( IvyClientPtr app, int id, char *msg );

  /* to use ping protocol, you need to bind a callback to pong with IvySetPongCallback 
   prior to sending ping 
   When pong is received, your supplied callback will be called with an int argument which is :
   ° if positive value : the round trip time in micro seconds
   ° if negative value : the timout of the previous ping (for the same application) 
                         which has not yet been answered
   see ivyprobe.c to see a simple example of usage
*/
void IvySendPing( IvyClientPtr app);

#ifdef __cplusplus
}
#endif

#endif