equal
deleted
inserted
replaced
|
1 #ifndef IRC_LINE_H |
|
2 #define IRC_LINE_H |
|
3 |
|
4 #include "error.h" |
|
5 |
|
6 /* |
|
7 * The maximum length of a line, including terminating CRLF |
|
8 */ |
|
9 #define IRC_LINE_MAX 512 |
|
10 |
|
11 /* |
|
12 * The maximum number of arguments for a single command |
|
13 */ |
|
14 #define IRC_ARG_MAX 15 |
|
15 |
|
16 /* |
|
17 * Chars that are invalid inside of tokens |
|
18 */ |
|
19 #define IRC_TOKEN_INVALID "\r\n\n " |
|
20 #define IRC_TOKEN_TRAILING_INVALID "\r\n\n" |
|
21 |
|
22 /* |
|
23 * Low-level IRC protocol unit is a line with its bits |
|
24 */ |
|
25 struct irc_line { |
|
26 /* The message source, either a server name or a nickmask */ |
|
27 const char *prefix; |
|
28 |
|
29 /* The command, either a numeric or a primary command */ |
|
30 const char *command; |
|
31 |
|
32 /* The arguments, with unused ones set to NULL */ |
|
33 const char *args[IRC_ARG_MAX]; |
|
34 }; |
|
35 |
|
36 /* |
|
37 * Parse an IRC message to fill in an irc_line. This mutates the value of data (to insert NULs between tokens), and |
|
38 * stores pointers into this data into the irc_line. |
|
39 */ |
|
40 err_t irc_line_parse (struct irc_line *line, char *data); |
|
41 |
|
42 /* |
|
43 * Formats an irc_line as a protocol line into the given buffer (which should hold at least IRC_LINE_MAX bytes). |
|
44 */ |
|
45 err_t irc_line_build (const struct irc_line *line, char *buf); |
|
46 |
|
47 #endif /* IRC_LINE_H */ |