1 #ifndef __GSK_STREAM_LISTENER_H_
2 #define __GSK_STREAM_LISTENER_H_
3 
4 #include "gskstream.h"
5 
6 G_BEGIN_DECLS
7 
8 typedef struct _GskStreamListener GskStreamListener;
9 typedef struct _GskStreamListenerClass GskStreamListenerClass;
10 
11 GType gsk_stream_listener_get_type(void) G_GNUC_CONST;
12 #define GSK_TYPE_STREAM_LISTENER	      (gsk_stream_listener_get_type ())
13 #define GSK_STREAM_LISTENER(obj)              (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSK_TYPE_STREAM_LISTENER, GskStreamListener))
14 #define GSK_STREAM_LISTENER_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GSK_TYPE_STREAM_LISTENER, GskStreamListenerClass))
15 #define GSK_STREAM_LISTENER_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), GSK_TYPE_STREAM_LISTENER, GskStreamListenerClass))
16 #define GSK_IS_STREAM_LISTENER(obj)           (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSK_TYPE_STREAM_LISTENER))
17 #define GSK_IS_STREAM_LISTENER_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GSK_TYPE_STREAM_LISTENER))
18 
19 /* try and handle a newly opened stream socket (is_open) */
20 typedef gboolean (*GskStreamListenerAcceptFunc)(GskStream    *stream,
21 						gpointer      data,
22 						GError      **error);
23 
24 /* handle an error accepting the latest connection */
25 typedef void     (*GskStreamListenerErrorFunc) (GError       *err,
26 						gpointer      data);
27 
28 /* --- structures --- */
29 struct _GskStreamListenerClass
30 {
31   GObjectClass object_class;
32 };
33 struct _GskStreamListener
34 {
35   GObject      object;
36 
37   GskStreamListenerAcceptFunc accept_func;
38   GskStreamListenerErrorFunc error_func;
39   gpointer           data;
40   GDestroyNotify     destroy;
41 
42   GError  *last_error;
43 };
44 
45 /* --- prototypes --- */
46 void gsk_stream_listener_handle_accept   (GskStreamListener *listener,
47 				          GskStreamListenerAcceptFunc func,
48 					  GskStreamListenerErrorFunc err_func,
49 					  gpointer           data,
50 					  GDestroyNotify     destroy);
51 
52 /* protected */
53 void gsk_stream_listener_notify_accepted (GskStreamListener *stream_listener,
54 					  GskStream         *new_stream);
55 void gsk_stream_listener_notify_error    (GskStreamListener *stream_listener,
56 					  GError            *error);
57 
58 G_END_DECLS
59 
60 #endif
61