summaryrefslogtreecommitdiff
path: root/irc.h
blob: a9a3520cd9d058237de68ed295a3ebbcaed9453c (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
#include <glib.h>

/*
 * Irc utilities
 */

/*
 * IrcServer
 */

typedef struct IrcServer IrcServer;
typedef struct IrcChannel IrcChannel;

#define IRC_ERROR irc_error_quark ()

typedef enum
{
    IRC_ERROR_MALFORMED_MESSAGE
} IrcError;

GQuark     irc_error_quark      (void);

typedef enum
{
    IRC_SERVER_LOOKING_UP_HOSTNAME,
    IRC_SERVER_FOUND_HOST_NAME,
    IRC_SERVER_CONNECTING,
    IRC_SERVER_CONNECTED,
    IRC_SERVER_DISCONNECT,
    IRC_SERVER_ERROR
} IrcServerEvent;

typedef enum
{
    IRC_CHANNEL_MESSAGE,
    IRC_TOPIC_CHANGED,
    IRC_USER_JOINED,
} IrcChannelEvent;

typedef void (* IrcServerFunc) (IrcServer *server,
				const IrcServerEvent *event);

typedef void (* IrcChannelListFunc) (GList *channels, gpointer data);

IrcServer *irc_server_new        (const char    *name,
				  gint           port,
				  IrcServerFunc  func,
				  gpointer       data);
gpointer   irc_server_get_data   (IrcServer     *server);

void	   irc_server_list_channels (IrcServer *server,
				     IrcChannelListFunc func,
				     gpointer data);

void       irc_server_connect    (IrcServer     *server,
				  const char    *nickname,
				  const char    *password);
void       irc_server_disconnect (IrcServer     *server);

typedef void (* IrcChannelFunc) (IrcChannel *channel,
				 const IrcChannelEvent *event,
				 gpointer data);

IrcChannel *irc_server_join_channel (IrcServer *server,
				     const char *name,
				     IrcChannelFunc func,
				     gpointer data);


/* Channel operations */