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