author | Tero Marttila <terom@fixme.fi> |
Thu, 28 May 2009 01:17:36 +0300 | |
branch | new-lib-errors |
changeset 219 | cefec18b8268 |
parent 217 | 7728d6ec3abf |
permissions | -rw-r--r-- |
18
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
#include "irc_conn.h" |
21 | 2 |
#include "irc_cmd.h" |
39
a4891d71aca9
rename irc_nm to irc_proto, and move numerics from irc_cmd.h
Tero Marttila <terom@fixme.fi>
parents:
37
diff
changeset
|
3 |
#include "irc_proto.h" |
22
c339c020fd33
add missing irc_cmd.h, and modify line_proto/irc_conn to use log
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
4 |
#include "log.h" |
18
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
|
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
6 |
#include <stdlib.h> |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
#include <string.h> |
84 | 8 |
#include <assert.h> |
18
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
|
37
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
10 |
/** |
45
71e65564afd2
remove irc_chan.state, modify irc_chan_callbacks.on_msg to take a irc_nm, improve error handling a bit further (up to irc_net now)
Tero Marttila <terom@fixme.fi>
parents:
39
diff
changeset
|
11 |
* Handle an async error on this IRC connection that we could not recover from any other way, the protocol is now dead, |
71e65564afd2
remove irc_chan.state, modify irc_chan_callbacks.on_msg to take a irc_nm, improve error handling a bit further (up to irc_net now)
Tero Marttila <terom@fixme.fi>
parents:
39
diff
changeset
|
12 |
* and should be considered as destroyed after this returns. |
71e65564afd2
remove irc_chan.state, modify irc_chan_callbacks.on_msg to take a irc_nm, improve error handling a bit further (up to irc_net now)
Tero Marttila <terom@fixme.fi>
parents:
39
diff
changeset
|
13 |
* |
71e65564afd2
remove irc_chan.state, modify irc_chan_callbacks.on_msg to take a irc_nm, improve error handling a bit further (up to irc_net now)
Tero Marttila <terom@fixme.fi>
parents:
39
diff
changeset
|
14 |
* For conveniance, this returns the ERROR_CODE |
21 | 15 |
*/ |
217 | 16 |
static err_t irc_conn_set_error (struct irc_conn *conn, error_t *err) |
45
71e65564afd2
remove irc_chan.state, modify irc_chan_callbacks.on_msg to take a irc_nm, improve error handling a bit further (up to irc_net now)
Tero Marttila <terom@fixme.fi>
parents:
39
diff
changeset
|
17 |
{ |
71e65564afd2
remove irc_chan.state, modify irc_chan_callbacks.on_msg to take a irc_nm, improve error handling a bit further (up to irc_net now)
Tero Marttila <terom@fixme.fi>
parents:
39
diff
changeset
|
18 |
// notify user callback |
71e65564afd2
remove irc_chan.state, modify irc_chan_callbacks.on_msg to take a irc_nm, improve error handling a bit further (up to irc_net now)
Tero Marttila <terom@fixme.fi>
parents:
39
diff
changeset
|
19 |
conn->callbacks.on_error(conn, err, conn->cb_arg); |
37
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
20 |
|
45
71e65564afd2
remove irc_chan.state, modify irc_chan_callbacks.on_msg to take a irc_nm, improve error handling a bit further (up to irc_net now)
Tero Marttila <terom@fixme.fi>
parents:
39
diff
changeset
|
21 |
return ERROR_CODE(err); |
71e65564afd2
remove irc_chan.state, modify irc_chan_callbacks.on_msg to take a irc_nm, improve error handling a bit further (up to irc_net now)
Tero Marttila <terom@fixme.fi>
parents:
39
diff
changeset
|
22 |
} |
71e65564afd2
remove irc_chan.state, modify irc_chan_callbacks.on_msg to take a irc_nm, improve error handling a bit further (up to irc_net now)
Tero Marttila <terom@fixme.fi>
parents:
39
diff
changeset
|
23 |
|
37
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
24 |
|
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
25 |
/** |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
26 |
* Update irc_conn.nickname |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
27 |
*/ |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
28 |
static err_t irc_conn_set_nickname (struct irc_conn *conn, const char *nickname) |
21 | 29 |
{ |
217 | 30 |
error_t err; |
37
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
31 |
|
171
b54f393c3df0
evil chain.h macro magic, fix irc_conn_set_nickname bug, misc. test bugs (mem leaks, missing #includes)
Tero Marttila <terom@fixme.fi>
parents:
163
diff
changeset
|
32 |
// drop old nickname |
b54f393c3df0
evil chain.h macro magic, fix irc_conn_set_nickname bug, misc. test bugs (mem leaks, missing #includes)
Tero Marttila <terom@fixme.fi>
parents:
163
diff
changeset
|
33 |
free(conn->nickname); |
b54f393c3df0
evil chain.h macro magic, fix irc_conn_set_nickname bug, misc. test bugs (mem leaks, missing #includes)
Tero Marttila <terom@fixme.fi>
parents:
163
diff
changeset
|
34 |
|
37
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
35 |
// strdup |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
36 |
if ((conn->nickname = strdup(nickname)) == NULL) { |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
37 |
SET_ERROR(&err, ERR_STRDUP); |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
38 |
|
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
39 |
// notify |
45
71e65564afd2
remove irc_chan.state, modify irc_chan_callbacks.on_msg to take a irc_nm, improve error handling a bit further (up to irc_net now)
Tero Marttila <terom@fixme.fi>
parents:
39
diff
changeset
|
40 |
return irc_conn_set_error(conn, &err); |
37
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
41 |
} |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
42 |
|
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
43 |
// ok |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
44 |
return SUCCESS; |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
45 |
} |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
46 |
|
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
47 |
/** |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
48 |
* 001 <nick> :Welcome to the Internet Relay Network <nick>!<user>@<host> |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
49 |
*/ |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
50 |
static void on_RPL_WELCOME (const struct irc_line *line, void *arg) |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
51 |
{ |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
52 |
struct irc_conn *conn = arg; |
24
08a26d0b9afd
fix ret/err bug in irc_conn_send, supress unused-argument warnings
Tero Marttila <terom@fixme.fi>
parents:
23
diff
changeset
|
53 |
|
21 | 54 |
// update state |
27
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
55 |
conn->registering = false; |
21 | 56 |
conn->registered = true; |
37
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
57 |
|
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
58 |
// set our real nickname from the message target |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
59 |
if (irc_conn_set_nickname(conn, line->args[0])) |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
60 |
return; |
22
c339c020fd33
add missing irc_cmd.h, and modify line_proto/irc_conn to use log
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
61 |
|
27
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
62 |
// trigger callback |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
63 |
if (conn->callbacks.on_registered) |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
64 |
conn->callbacks.on_registered(conn, conn->cb_arg); |
21 | 65 |
} |
66 |
||
37
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
67 |
/** |
20
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
68 |
* PING <server1> [ <server2> ] |
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
69 |
* |
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
70 |
* Send a 'PONG <server1>` reply right away. |
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
71 |
*/ |
37
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
72 |
static void on_PING (const struct irc_line *line, void *arg) |
20
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
73 |
{ |
37
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
74 |
struct irc_conn *conn = arg; |
24
08a26d0b9afd
fix ret/err bug in irc_conn_send, supress unused-argument warnings
Tero Marttila <terom@fixme.fi>
parents:
23
diff
changeset
|
75 |
|
20
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
76 |
// just reply |
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
77 |
irc_conn_PONG(conn, line->args[0]); |
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
78 |
} |
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
79 |
|
37
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
80 |
/** |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
81 |
* NICK <nickname> |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
82 |
* |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
83 |
* If the prefix is us, then update our nickname |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
84 |
*/ |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
85 |
static void on_NICK (const struct irc_line *line, void *arg) |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
86 |
{ |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
87 |
struct irc_conn *conn = arg; |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
88 |
|
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
89 |
// ignore if it's not us |
75
ff6272398d2e
change irc_line.prefix into a
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
90 |
if (!line->source || irc_cmp_nick(line->source->nickname, conn->nickname)) |
37
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
91 |
return; |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
92 |
|
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
93 |
// update our nickname |
75
ff6272398d2e
change irc_line.prefix into a
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
94 |
irc_conn_set_nickname(conn, line->args[0]); |
37
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
95 |
} |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
96 |
|
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
97 |
/** |
84 | 98 |
* CTCP ACTION handler |
99 |
*/ |
|
100 |
static void irc_conn_on_CTCP_ACTION (const struct irc_line *line, void *arg) |
|
101 |
{ |
|
102 |
struct irc_conn *conn = arg; |
|
103 |
||
104 |
// build the pseudo-line and invoke |
|
105 |
struct irc_line action_line = { |
|
106 |
.source = line->source, |
|
107 |
.command = "CTCP ACTION", |
|
108 |
.args = { |
|
109 |
line->args[0], |
|
110 |
line->args[1], |
|
111 |
NULL |
|
112 |
} |
|
113 |
}; |
|
114 |
||
115 |
// invoke the general command handlers |
|
116 |
irc_cmd_invoke(&conn->handlers, &action_line); |
|
117 |
} |
|
118 |
||
119 |
/** |
|
20
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
120 |
* Our command handlers |
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
121 |
*/ |
84 | 122 |
static struct irc_cmd_handler irc_conn_handlers[] = { |
37
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
123 |
{ IRC_RPL_WELCOME, &on_RPL_WELCOME }, |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
124 |
{ "PING", &on_PING }, |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
125 |
{ "NICK", &on_NICK }, |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
126 |
{ NULL, NULL, }, |
84 | 127 |
|
128 |
}, irc_conn_ctcp_handlers[] = { |
|
129 |
{ "ACTION", &irc_conn_on_CTCP_ACTION }, |
|
130 |
{ NULL, NULL } |
|
20
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
131 |
}; |
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
132 |
|
33
e5139b339b18
add line_proto_callbacks.on_error, although irc_conn doesn't pass it up
Tero Marttila <terom@fixme.fi>
parents:
32
diff
changeset
|
133 |
/** |
84 | 134 |
* Incoming CTCP message handler |
135 |
* |
|
136 |
* We only handle "simple" CTCP messages, i.e. those that begin and end with X-DELIM and contain a single tagged |
|
137 |
* extended message. The full range of CTCP quoting etc specified in the "offical" spec referenced below is not |
|
138 |
* implemented, as it is rarely used, or even implemented. |
|
139 |
* |
|
140 |
* http://www.irchelp.org/irchelp/rfc/ctcpspec.html |
|
141 |
*/ |
|
142 |
static void irc_conn_on_CTCP (struct irc_conn *conn, const struct irc_line *line) |
|
143 |
{ |
|
144 |
// copy the message data into a mutable buffer |
|
101
bb8ed1382103
fix off-by-one for end-NUL in strcpy bug
Tero Marttila <terom@fixme.fi>
parents:
97
diff
changeset
|
145 |
char data_buf[strlen(line->args[1]) + 1], *data = data_buf; |
84 | 146 |
strcpy(data_buf, line->args[1]); |
147 |
||
148 |
// should only be called when this is true... |
|
149 |
assert(*data++ == '\001'); |
|
150 |
||
151 |
// tokenize the extended message |
|
152 |
// XXX: do something with the trailing data? |
|
153 |
char *msg = strsep(&data, "\001"); |
|
154 |
||
155 |
// parse the "command" tag |
|
156 |
char *tag = strsep(&msg, " "); |
|
157 |
||
158 |
// invalid if missing |
|
159 |
if (tag == NULL) |
|
160 |
return log_warn("CTCP message with no tag: '%s'", data); |
|
161 |
||
162 |
// parse the CTCP "line" |
|
163 |
struct irc_line ctcp_line = { |
|
164 |
// the sender of the message |
|
165 |
.source = line->source, |
|
166 |
||
167 |
// the CTCP extended message tag |
|
168 |
.command = tag, |
|
169 |
.args = { |
|
170 |
// the destination of the message |
|
171 |
line->args[0], |
|
172 |
||
173 |
// the rest of the CTCP extended message payload |
|
174 |
msg, |
|
175 |
||
176 |
NULL |
|
177 |
} |
|
178 |
}; |
|
179 |
||
180 |
// invoke the CTCP command handlers |
|
181 |
irc_cmd_invoke(&conn->ctcp_handlers, &ctcp_line); |
|
182 |
} |
|
183 |
||
184 |
/** |
|
23
542c73d07d3c
add a simple irc_log module (with evsql code) that joins a channel and log_info's PRIVMSGs
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
185 |
* Incoming line handler |
542c73d07d3c
add a simple irc_log module (with evsql code) that joins a channel and log_info's PRIVMSGs
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
186 |
*/ |
84 | 187 |
static void irc_conn_on_line (char *line_buf, void *arg) |
18
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
188 |
{ |
20
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
189 |
struct irc_conn *conn = arg; |
18
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
190 |
struct irc_line line; |
75
ff6272398d2e
change irc_line.prefix into a
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
191 |
struct irc_nm nm; |
18
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
192 |
int err; |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
193 |
|
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
194 |
// log |
22
c339c020fd33
add missing irc_cmd.h, and modify line_proto/irc_conn to use log
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
195 |
log_debug("%s", line_buf); |
18
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
196 |
|
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
197 |
// parse |
75
ff6272398d2e
change irc_line.prefix into a
Tero Marttila <terom@fixme.fi>
parents:
49
diff
changeset
|
198 |
if ((err = irc_line_parse(&line, &nm, line_buf))) { |
23
542c73d07d3c
add a simple irc_log module (with evsql code) that joins a channel and log_info's PRIVMSGs
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
199 |
log_warn("invalid line: %s: %s\n", line_buf, error_name(err)); |
20
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
200 |
return; |
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
201 |
} |
18
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
202 |
|
84 | 203 |
// trap CTCP messages |
204 |
if (strcasecmp(line.command, "PRIVMSG") == 0 && line.args[1][0] == '\001') |
|
205 |
// parse and invoke the CTCP command handlers |
|
206 |
irc_conn_on_CTCP(conn, &line); |
|
207 |
||
208 |
else |
|
209 |
// invoke command handlers |
|
210 |
irc_cmd_invoke(&conn->handlers, &line); |
|
18
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
211 |
} |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
212 |
|
33
e5139b339b18
add line_proto_callbacks.on_error, although irc_conn doesn't pass it up
Tero Marttila <terom@fixme.fi>
parents:
32
diff
changeset
|
213 |
/** |
e5139b339b18
add line_proto_callbacks.on_error, although irc_conn doesn't pass it up
Tero Marttila <terom@fixme.fi>
parents:
32
diff
changeset
|
214 |
* Transport failed |
e5139b339b18
add line_proto_callbacks.on_error, although irc_conn doesn't pass it up
Tero Marttila <terom@fixme.fi>
parents:
32
diff
changeset
|
215 |
*/ |
217 | 216 |
static void irc_conn_on_error (error_t *err, void *arg) |
33
e5139b339b18
add line_proto_callbacks.on_error, although irc_conn doesn't pass it up
Tero Marttila <terom@fixme.fi>
parents:
32
diff
changeset
|
217 |
{ |
e5139b339b18
add line_proto_callbacks.on_error, although irc_conn doesn't pass it up
Tero Marttila <terom@fixme.fi>
parents:
32
diff
changeset
|
218 |
struct irc_conn *conn = arg; |
e5139b339b18
add line_proto_callbacks.on_error, although irc_conn doesn't pass it up
Tero Marttila <terom@fixme.fi>
parents:
32
diff
changeset
|
219 |
|
48
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
220 |
// EOF after quit? |
163
27a112d89a73
fix old usage of ERR_READ_EOF with ERR_EOF, and sock_gnutls typos/cleanup
Tero Marttila <terom@fixme.fi>
parents:
156
diff
changeset
|
221 |
if (ERROR_CODE(err) == ERR_EOF && conn->quitting) { |
49
96e0f703a58c
update irc_conn status, and add tests for irc_conn_QUIT
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
222 |
// udpate states |
96e0f703a58c
update irc_conn status, and add tests for irc_conn_QUIT
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
223 |
conn->registered = false; |
96e0f703a58c
update irc_conn status, and add tests for irc_conn_QUIT
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
224 |
conn->quitting = false; |
96e0f703a58c
update irc_conn status, and add tests for irc_conn_QUIT
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
225 |
conn->quit = true; |
96e0f703a58c
update irc_conn status, and add tests for irc_conn_QUIT
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
226 |
|
48
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
227 |
// callback |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
228 |
if (conn->callbacks.on_quit) |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
229 |
conn->callbacks.on_quit(conn, conn->cb_arg); |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
230 |
|
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
231 |
} else { |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
232 |
// log |
172
ea4972e51fa3
fix log_warn_*/log_err/log_error naming
Tero Marttila <terom@fixme.fi>
parents:
171
diff
changeset
|
233 |
log_error(err, "transport error"); |
48
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
234 |
|
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
235 |
// trash ourselves |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
236 |
irc_conn_set_error(conn, err); |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
237 |
} |
33
e5139b339b18
add line_proto_callbacks.on_error, although irc_conn doesn't pass it up
Tero Marttila <terom@fixme.fi>
parents:
32
diff
changeset
|
238 |
} |
e5139b339b18
add line_proto_callbacks.on_error, although irc_conn doesn't pass it up
Tero Marttila <terom@fixme.fi>
parents:
32
diff
changeset
|
239 |
|
84 | 240 |
static struct line_proto_callbacks irc_conn_lp_callbacks = { |
32
ae66e9ae4afb
convert line_proto to use a line_proto_callbacks struct
Tero Marttila <terom@fixme.fi>
parents:
29
diff
changeset
|
241 |
.on_line = &irc_conn_on_line, |
33
e5139b339b18
add line_proto_callbacks.on_error, although irc_conn doesn't pass it up
Tero Marttila <terom@fixme.fi>
parents:
32
diff
changeset
|
242 |
.on_error = &irc_conn_on_error, |
32
ae66e9ae4afb
convert line_proto to use a line_proto_callbacks struct
Tero Marttila <terom@fixme.fi>
parents:
29
diff
changeset
|
243 |
}; |
ae66e9ae4afb
convert line_proto to use a line_proto_callbacks struct
Tero Marttila <terom@fixme.fi>
parents:
29
diff
changeset
|
244 |
|
155
c59d3eaff0fb
most of the new transport/sock code compiles, but things are still missing
Tero Marttila <terom@fixme.fi>
parents:
150
diff
changeset
|
245 |
// XXX: ugly hack to get at an event_base |
c59d3eaff0fb
most of the new transport/sock code compiles, but things are still missing
Tero Marttila <terom@fixme.fi>
parents:
150
diff
changeset
|
246 |
#include "sock_internal.h" |
c59d3eaff0fb
most of the new transport/sock code compiles, but things are still missing
Tero Marttila <terom@fixme.fi>
parents:
150
diff
changeset
|
247 |
|
c59d3eaff0fb
most of the new transport/sock code compiles, but things are still missing
Tero Marttila <terom@fixme.fi>
parents:
150
diff
changeset
|
248 |
struct event_base **ev_base_ptr = &_sock_stream_ctx.ev_base; |
c59d3eaff0fb
most of the new transport/sock code compiles, but things are still missing
Tero Marttila <terom@fixme.fi>
parents:
150
diff
changeset
|
249 |
|
c59d3eaff0fb
most of the new transport/sock code compiles, but things are still missing
Tero Marttila <terom@fixme.fi>
parents:
150
diff
changeset
|
250 |
err_t irc_conn_create (struct irc_conn **conn_ptr, transport_t *transport, const struct irc_conn_callbacks *callbacks, |
c59d3eaff0fb
most of the new transport/sock code compiles, but things are still missing
Tero Marttila <terom@fixme.fi>
parents:
150
diff
changeset
|
251 |
void *cb_arg, error_t *err) |
18
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
252 |
{ |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
253 |
struct irc_conn *conn; |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
254 |
|
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
255 |
// alloc new state struct |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
256 |
if ((conn = calloc(1, sizeof(struct irc_conn))) == NULL) |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
257 |
return SET_ERROR(err, ERR_CALLOC); |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
258 |
|
27
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
259 |
// init state |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
260 |
conn->callbacks = *callbacks; |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
261 |
conn->cb_arg = cb_arg; |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
262 |
|
23
542c73d07d3c
add a simple irc_log module (with evsql code) that joins a channel and log_info's PRIVMSGs
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
263 |
// initialize command handlers |
37
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
264 |
irc_cmd_init(&conn->handlers); |
84 | 265 |
irc_cmd_init(&conn->ctcp_handlers); |
23
542c73d07d3c
add a simple irc_log module (with evsql code) that joins a channel and log_info's PRIVMSGs
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
266 |
|
542c73d07d3c
add a simple irc_log module (with evsql code) that joins a channel and log_info's PRIVMSGs
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
267 |
// add the core handlers |
84 | 268 |
if ( |
269 |
(ERROR_CODE(err) = irc_cmd_add(&conn->handlers, irc_conn_handlers, conn)) |
|
270 |
|| (ERROR_CODE(err) = irc_cmd_add(&conn->ctcp_handlers, irc_conn_ctcp_handlers, conn)) |
|
271 |
) |
|
28
9c1050bc8709
add sock_stream_release/line_proto_release/irc_conn_release functions, and add proper cleanup to irc_net_create
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
272 |
goto error; |
23
542c73d07d3c
add a simple irc_log module (with evsql code) that joins a channel and log_info's PRIVMSGs
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
273 |
|
18
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
274 |
// create the line_proto, with our on_line handler |
155
c59d3eaff0fb
most of the new transport/sock code compiles, but things are still missing
Tero Marttila <terom@fixme.fi>
parents:
150
diff
changeset
|
275 |
if (line_proto_create(&conn->lp, transport, IRC_LINE_MAX * 1.5, &irc_conn_lp_callbacks, conn, err)) |
28
9c1050bc8709
add sock_stream_release/line_proto_release/irc_conn_release functions, and add proper cleanup to irc_net_create
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
276 |
goto error; |
18
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
277 |
|
91
bca23cbe1dce
implement irc_queue for irc_conn, and add missing irc_queue_destroy, fix irc_conn_destroy
Tero Marttila <terom@fixme.fi>
parents:
84
diff
changeset
|
278 |
// create the outgoing line queue |
155
c59d3eaff0fb
most of the new transport/sock code compiles, but things are still missing
Tero Marttila <terom@fixme.fi>
parents:
150
diff
changeset
|
279 |
if (irc_queue_create(&conn->out_queue, *ev_base_ptr, conn->lp, err)) |
91
bca23cbe1dce
implement irc_queue for irc_conn, and add missing irc_queue_destroy, fix irc_conn_destroy
Tero Marttila <terom@fixme.fi>
parents:
84
diff
changeset
|
280 |
goto error; |
bca23cbe1dce
implement irc_queue for irc_conn, and add missing irc_queue_destroy, fix irc_conn_destroy
Tero Marttila <terom@fixme.fi>
parents:
84
diff
changeset
|
281 |
|
18
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
282 |
// ok |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
283 |
*conn_ptr = conn; |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
284 |
|
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
285 |
return SUCCESS; |
28
9c1050bc8709
add sock_stream_release/line_proto_release/irc_conn_release functions, and add proper cleanup to irc_net_create
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
286 |
|
9c1050bc8709
add sock_stream_release/line_proto_release/irc_conn_release functions, and add proper cleanup to irc_net_create
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
287 |
error: |
9c1050bc8709
add sock_stream_release/line_proto_release/irc_conn_release functions, and add proper cleanup to irc_net_create
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
288 |
// release |
9c1050bc8709
add sock_stream_release/line_proto_release/irc_conn_release functions, and add proper cleanup to irc_net_create
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
289 |
irc_conn_destroy(conn); |
9c1050bc8709
add sock_stream_release/line_proto_release/irc_conn_release functions, and add proper cleanup to irc_net_create
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
290 |
|
9c1050bc8709
add sock_stream_release/line_proto_release/irc_conn_release functions, and add proper cleanup to irc_net_create
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
291 |
return ERROR_CODE(err); |
9c1050bc8709
add sock_stream_release/line_proto_release/irc_conn_release functions, and add proper cleanup to irc_net_create
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
292 |
} |
9c1050bc8709
add sock_stream_release/line_proto_release/irc_conn_release functions, and add proper cleanup to irc_net_create
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
293 |
|
9c1050bc8709
add sock_stream_release/line_proto_release/irc_conn_release functions, and add proper cleanup to irc_net_create
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
294 |
void irc_conn_destroy (struct irc_conn *conn) |
9c1050bc8709
add sock_stream_release/line_proto_release/irc_conn_release functions, and add proper cleanup to irc_net_create
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
295 |
{ |
47
7d4094eb3117
add irc_net_destroy and fix code to be valgrind-clean on bin/test
Tero Marttila <terom@fixme.fi>
parents:
45
diff
changeset
|
296 |
// the line_proto |
28
9c1050bc8709
add sock_stream_release/line_proto_release/irc_conn_release functions, and add proper cleanup to irc_net_create
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
297 |
if (conn->lp) |
156
6534a4ac957b
add transport/sock/line_proto/etc code compiles
Tero Marttila <terom@fixme.fi>
parents:
155
diff
changeset
|
298 |
line_proto_destroy(conn->lp); |
91
bca23cbe1dce
implement irc_queue for irc_conn, and add missing irc_queue_destroy, fix irc_conn_destroy
Tero Marttila <terom@fixme.fi>
parents:
84
diff
changeset
|
299 |
|
bca23cbe1dce
implement irc_queue for irc_conn, and add missing irc_queue_destroy, fix irc_conn_destroy
Tero Marttila <terom@fixme.fi>
parents:
84
diff
changeset
|
300 |
// the queue |
bca23cbe1dce
implement irc_queue for irc_conn, and add missing irc_queue_destroy, fix irc_conn_destroy
Tero Marttila <terom@fixme.fi>
parents:
84
diff
changeset
|
301 |
if (conn->out_queue) |
bca23cbe1dce
implement irc_queue for irc_conn, and add missing irc_queue_destroy, fix irc_conn_destroy
Tero Marttila <terom@fixme.fi>
parents:
84
diff
changeset
|
302 |
irc_queue_destroy(conn->out_queue); |
37
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
303 |
|
47
7d4094eb3117
add irc_net_destroy and fix code to be valgrind-clean on bin/test
Tero Marttila <terom@fixme.fi>
parents:
45
diff
changeset
|
304 |
// the command handlers |
171
b54f393c3df0
evil chain.h macro magic, fix irc_conn_set_nickname bug, misc. test bugs (mem leaks, missing #includes)
Tero Marttila <terom@fixme.fi>
parents:
163
diff
changeset
|
305 |
irc_cmd_clear(&conn->handlers); |
b54f393c3df0
evil chain.h macro magic, fix irc_conn_set_nickname bug, misc. test bugs (mem leaks, missing #includes)
Tero Marttila <terom@fixme.fi>
parents:
163
diff
changeset
|
306 |
irc_cmd_clear(&conn->ctcp_handlers); |
28
9c1050bc8709
add sock_stream_release/line_proto_release/irc_conn_release functions, and add proper cleanup to irc_net_create
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
307 |
|
47
7d4094eb3117
add irc_net_destroy and fix code to be valgrind-clean on bin/test
Tero Marttila <terom@fixme.fi>
parents:
45
diff
changeset
|
308 |
// additional data |
7d4094eb3117
add irc_net_destroy and fix code to be valgrind-clean on bin/test
Tero Marttila <terom@fixme.fi>
parents:
45
diff
changeset
|
309 |
free(conn->nickname); |
7d4094eb3117
add irc_net_destroy and fix code to be valgrind-clean on bin/test
Tero Marttila <terom@fixme.fi>
parents:
45
diff
changeset
|
310 |
|
7d4094eb3117
add irc_net_destroy and fix code to be valgrind-clean on bin/test
Tero Marttila <terom@fixme.fi>
parents:
45
diff
changeset
|
311 |
// the irc_conn itself |
28
9c1050bc8709
add sock_stream_release/line_proto_release/irc_conn_release functions, and add proper cleanup to irc_net_create
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
312 |
free(conn); |
18
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
313 |
} |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
314 |
|
37
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
315 |
err_t irc_conn_add_cmd_handlers (struct irc_conn *conn, struct irc_cmd_handler *handlers, void *arg) |
23
542c73d07d3c
add a simple irc_log module (with evsql code) that joins a channel and log_info's PRIVMSGs
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
316 |
{ |
37
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
317 |
// use the irc_cmd stuff |
4fe4a3c4496e
change irc_chan.state into bool fields, move irc_cmd implementation from irc_conn.c into irc_cmd.c, remove irc_conn arg from irc_cmd_handler, add irc_conn.nickname tracking, and handle irc_chan JOINs
Tero Marttila <terom@fixme.fi>
parents:
33
diff
changeset
|
318 |
return irc_cmd_add(&conn->handlers, handlers, arg); |
23
542c73d07d3c
add a simple irc_log module (with evsql code) that joins a channel and log_info's PRIVMSGs
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
319 |
} |
542c73d07d3c
add a simple irc_log module (with evsql code) that joins a channel and log_info's PRIVMSGs
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
320 |
|
27
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
321 |
err_t irc_conn_register (struct irc_conn *conn, const struct irc_conn_register_info *info) |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
322 |
{ |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
323 |
err_t err; |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
324 |
|
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
325 |
if (conn->registering || conn->registered) |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
326 |
return ERR_IRC_CONN_REGISTER_STATE; |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
327 |
|
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
328 |
// send the initial messages |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
329 |
if ( |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
330 |
(err = irc_conn_NICK(conn, info->nickname)) |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
331 |
|| (err = irc_conn_USER(conn, info->username, info->realname)) |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
332 |
) |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
333 |
return err; |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
334 |
|
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
335 |
// set state |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
336 |
conn->registering = true; |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
337 |
|
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
338 |
// ok |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
339 |
return SUCCESS; |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
340 |
} |
e6639132bead
add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents:
24
diff
changeset
|
341 |
|
150
e8018446b336
special-case recieved user-mode messages, add irc_conn_self function
Tero Marttila <terom@fixme.fi>
parents:
127
diff
changeset
|
342 |
bool irc_conn_self (struct irc_conn *conn, const char *nickname) |
e8018446b336
special-case recieved user-mode messages, add irc_conn_self function
Tero Marttila <terom@fixme.fi>
parents:
127
diff
changeset
|
343 |
{ |
e8018446b336
special-case recieved user-mode messages, add irc_conn_self function
Tero Marttila <terom@fixme.fi>
parents:
127
diff
changeset
|
344 |
return conn && nickname && conn->nickname && (irc_cmp_nick(conn->nickname, nickname) == 0); |
e8018446b336
special-case recieved user-mode messages, add irc_conn_self function
Tero Marttila <terom@fixme.fi>
parents:
127
diff
changeset
|
345 |
} |
e8018446b336
special-case recieved user-mode messages, add irc_conn_self function
Tero Marttila <terom@fixme.fi>
parents:
127
diff
changeset
|
346 |
|
18
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
347 |
err_t irc_conn_send (struct irc_conn *conn, const struct irc_line *line) |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
348 |
{ |
91
bca23cbe1dce
implement irc_queue for irc_conn, and add missing irc_queue_destroy, fix irc_conn_destroy
Tero Marttila <terom@fixme.fi>
parents:
84
diff
changeset
|
349 |
// just proxy off to irc_quuee |
bca23cbe1dce
implement irc_queue for irc_conn, and add missing irc_queue_destroy, fix irc_conn_destroy
Tero Marttila <terom@fixme.fi>
parents:
84
diff
changeset
|
350 |
return irc_queue_process(conn->out_queue, line); |
18
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
351 |
} |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
352 |
|
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
353 |
err_t irc_conn_NICK (struct irc_conn *conn, const char *nickname) |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
354 |
{ |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
355 |
// NICK <nickname> |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
356 |
struct irc_line line = { |
97
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
91
diff
changeset
|
357 |
NULL, "NICK", { nickname } |
18
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
358 |
}; |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
359 |
|
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
360 |
return irc_conn_send(conn, &line); |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
361 |
} |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
362 |
|
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
363 |
err_t irc_conn_USER (struct irc_conn *conn, const char *username, const char *realname) |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
364 |
{ |
97
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
91
diff
changeset
|
365 |
// USER <user> <mode> * <realname> |
18
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
366 |
struct irc_line line = { |
97
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
91
diff
changeset
|
367 |
NULL, "USER", { username, "0", "*", realname } |
18
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
368 |
}; |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
369 |
|
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
370 |
return irc_conn_send(conn, &line); |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
371 |
} |
dedf137b504f
add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
372 |
|
20
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
373 |
err_t irc_conn_PONG (struct irc_conn *conn, const char *target) |
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
374 |
{ |
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
375 |
// PONG <server> [ <server2> ] |
29
3f0f2898fea3
add sock_gnutls_destroy, and error cleanup for sock_ssl_connect. Fix various XXX's
Tero Marttila <terom@fixme.fi>
parents:
28
diff
changeset
|
376 |
// params are actually the wrong way around now, but nobody cares |
20
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
377 |
struct irc_line line = { |
97
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
91
diff
changeset
|
378 |
NULL, "PONG", { target } |
20
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
379 |
}; |
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
380 |
|
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
381 |
return irc_conn_send(conn, &line); |
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
382 |
} |
d9c4c2980a0d
irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents:
19
diff
changeset
|
383 |
|
23
542c73d07d3c
add a simple irc_log module (with evsql code) that joins a channel and log_info's PRIVMSGs
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
384 |
err_t irc_conn_JOIN (struct irc_conn *conn, const char *channel) |
542c73d07d3c
add a simple irc_log module (with evsql code) that joins a channel and log_info's PRIVMSGs
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
385 |
{ |
97
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
91
diff
changeset
|
386 |
// JOIN (<channel> [ "," <channel> [ ... ] ]) [<key> [ "," <key> [ ... ] ] ] |
23
542c73d07d3c
add a simple irc_log module (with evsql code) that joins a channel and log_info's PRIVMSGs
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
387 |
struct irc_line line = { |
97
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
91
diff
changeset
|
388 |
NULL, "JOIN", { channel } |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
91
diff
changeset
|
389 |
}; |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
91
diff
changeset
|
390 |
|
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
91
diff
changeset
|
391 |
return irc_conn_send(conn, &line); |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
91
diff
changeset
|
392 |
} |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
91
diff
changeset
|
393 |
|
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
91
diff
changeset
|
394 |
err_t irc_conn_PRIVMSG (struct irc_conn *conn, const char *target, const char *message) |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
91
diff
changeset
|
395 |
{ |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
91
diff
changeset
|
396 |
// PRIVMSG <msgtarget> <message> |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
91
diff
changeset
|
397 |
struct irc_line line = { |
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
91
diff
changeset
|
398 |
NULL, "PRIVMSG", { target, message } |
23
542c73d07d3c
add a simple irc_log module (with evsql code) that joins a channel and log_info's PRIVMSGs
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
399 |
}; |
542c73d07d3c
add a simple irc_log module (with evsql code) that joins a channel and log_info's PRIVMSGs
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
400 |
|
542c73d07d3c
add a simple irc_log module (with evsql code) that joins a channel and log_info's PRIVMSGs
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
401 |
return irc_conn_send(conn, &line); |
542c73d07d3c
add a simple irc_log module (with evsql code) that joins a channel and log_info's PRIVMSGs
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
402 |
} |
542c73d07d3c
add a simple irc_log module (with evsql code) that joins a channel and log_info's PRIVMSGs
Tero Marttila <terom@fixme.fi>
parents:
22
diff
changeset
|
403 |
|
127
94e6c3b4230f
implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents:
101
diff
changeset
|
404 |
err_t irc_conn_NOTICE (struct irc_conn *conn, const char *target, const char *message) |
94e6c3b4230f
implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents:
101
diff
changeset
|
405 |
{ |
94e6c3b4230f
implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents:
101
diff
changeset
|
406 |
// NOTICE <msgtarget> <message> |
94e6c3b4230f
implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents:
101
diff
changeset
|
407 |
struct irc_line line = { |
94e6c3b4230f
implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents:
101
diff
changeset
|
408 |
NULL, "NOTICE", { target, message } |
94e6c3b4230f
implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents:
101
diff
changeset
|
409 |
}; |
94e6c3b4230f
implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents:
101
diff
changeset
|
410 |
|
94e6c3b4230f
implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents:
101
diff
changeset
|
411 |
return irc_conn_send(conn, &line); |
94e6c3b4230f
implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents:
101
diff
changeset
|
412 |
} |
94e6c3b4230f
implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents:
101
diff
changeset
|
413 |
|
48
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
414 |
err_t irc_conn_QUIT (struct irc_conn *conn, const char *message) |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
415 |
{ |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
416 |
err_t err; |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
417 |
|
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
418 |
struct irc_line line = { |
97
d3bc82ee76cb
add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents:
91
diff
changeset
|
419 |
NULL, "QUIT", { message } |
48
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
420 |
}; |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
421 |
|
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
422 |
// state check |
49
96e0f703a58c
update irc_conn status, and add tests for irc_conn_QUIT
Tero Marttila <terom@fixme.fi>
parents:
48
diff
changeset
|
423 |
if (conn->quitting || conn->quit) |
48
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
424 |
return ERR_IRC_CONN_QUIT_STATE; |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
425 |
|
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
426 |
// try and send |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
427 |
if ((err = irc_conn_send(conn, &line))) |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
428 |
return err; |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
429 |
|
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
430 |
// mark as quitting |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
431 |
conn->quitting = true; |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
432 |
|
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
433 |
// ok |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
434 |
return SUCCESS; |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
435 |
} |
4841f4398fd2
add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents:
47
diff
changeset
|
436 |