author | Tero Marttila <terom@fixme.fi> |
Thu, 12 Mar 2009 23:54:03 +0200 | |
changeset 48 | 4841f4398fd2 |
parent 47 | 7d4094eb3117 |
child 53 | 12d806823775 |
permissions | -rw-r--r-- |
25
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
#ifndef IRC_NET_H |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
#define IRC_NET_H |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
|
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
/** |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
* @file |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
6 |
* |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
* Support for IRC networks. This is similar to an IRC connection, but we keep track of channel state, and handle |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
8 |
* reconnects. |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
*/ |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
10 |
#include "error.h" |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
11 |
#include "irc_conn.h" |
26 | 12 |
#include "irc_chan.h" |
13 |
#include <sys/queue.h> |
|
25
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
14 |
|
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
/** |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
16 |
* Configuration info for an IRC network |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
17 |
*/ |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
18 |
struct irc_net_info { |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
19 |
/** The name of the network */ |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
20 |
const char *network; |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
21 |
|
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
22 |
/** The hostname to connect to */ |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
23 |
const char *hostname; |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
24 |
|
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
25 |
/** Service name (port) */ |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
26 |
const char *service; |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
27 |
|
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
28 |
/** SSL? */ |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
29 |
bool use_ssl; |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
30 |
|
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
/** Protocol registration info */ |
27
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
32 |
struct irc_conn_register_info register_info; |
44 | 33 |
|
34 |
/** Raw socket to use, mainly for testing purposes */ |
|
35 |
struct sock_stream *raw_sock; |
|
25
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
36 |
}; |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
37 |
|
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
38 |
/** |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
39 |
* IRC Network state |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
40 |
*/ |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
41 |
struct irc_net { |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
42 |
/* The current connection */ |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
43 |
struct irc_conn *conn; |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
44 |
|
26 | 45 |
/** The list of IRC channel states */ |
46 |
TAILQ_HEAD(irc_net_chan_list, irc_chan) channels; |
|
25
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
47 |
}; |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
48 |
|
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
49 |
/** |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
50 |
* Create a new IRC network state, using the given network info to connect/register. |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
51 |
* |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
52 |
* Errors are returned via *err, also returning the error code. |
26 | 53 |
* |
54 |
* @param net the new irc_net struct is returned via this pointer |
|
55 |
* @param info network informated, used to connect and register |
|
56 |
* @param err used to return extended error information |
|
25
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
57 |
*/ |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
58 |
err_t irc_net_create (struct irc_net **net, const struct irc_net_info *info, struct error_info *err); |
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
59 |
|
26 | 60 |
/** |
47
7d4094eb3117
add irc_net_destroy and fix code to be valgrind-clean on bin/test
Tero Marttila <terom@fixme.fi>
parents:
44
diff
changeset
|
61 |
* Destroy an irc_net state without closing anything cleanly. This destroys the irc_conn, if any, and any irc_chans as |
7d4094eb3117
add irc_net_destroy and fix code to be valgrind-clean on bin/test
Tero Marttila <terom@fixme.fi>
parents:
44
diff
changeset
|
62 |
* well. |
7d4094eb3117
add irc_net_destroy and fix code to be valgrind-clean on bin/test
Tero Marttila <terom@fixme.fi>
parents:
44
diff
changeset
|
63 |
*/ |
7d4094eb3117
add irc_net_destroy and fix code to be valgrind-clean on bin/test
Tero Marttila <terom@fixme.fi>
parents:
44
diff
changeset
|
64 |
void irc_net_destroy (struct irc_net *net); |
7d4094eb3117
add irc_net_destroy and fix code to be valgrind-clean on bin/test
Tero Marttila <terom@fixme.fi>
parents:
44
diff
changeset
|
65 |
|
7d4094eb3117
add irc_net_destroy and fix code to be valgrind-clean on bin/test
Tero Marttila <terom@fixme.fi>
parents:
44
diff
changeset
|
66 |
/** |
27
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
67 |
* Create a new irc_chan and add it to our channel list. |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
68 |
* |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
26
diff
changeset
|
69 |
* If we are connected and registered, JOIN the channel right away, otherwise, join it once we register. |
26 | 70 |
*/ |
71 |
struct irc_chan* irc_net_add_chan (struct irc_net *net, const struct irc_chan_info *info); |
|
72 |
||
73 |
/** |
|
74 |
* Look up an existing irc_chan by name, returning NULL if not found. |
|
75 |
* |
|
76 |
* @param net the network state |
|
77 |
* @param channel the channel name |
|
78 |
*/ |
|
79 |
struct irc_chan* irc_net_get_chan (struct irc_net *net, const char *channel); |
|
80 |
||
48
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
81 |
/** |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
82 |
* Quit from the IRC network, this sends a QUIT message to the server, and waits for the connection to be closed cleanly. |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
83 |
*/ |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
84 |
err_t irc_net_quit (struct irc_net *net, const char *message); |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
85 |
|
25
56367df4ce5b
add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
86 |
#endif |