src/irc_conn.h
author Tero Marttila <terom@fixme.fi>
Thu, 21 May 2009 16:56:42 +0300
changeset 210 05abca972db0
parent 171 b54f393c3df0
child 217 7728d6ec3abf
permissions -rw-r--r--
implement lua_thread_abort, add lua_thread_yield_state func, and fix lua_thread_resume_state to use protected mode
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#ifndef IRC_CONN_H
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
#define IRC_CONN_H
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
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: 21
diff changeset
     4
/**
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: 21
diff changeset
     5
 * @file
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: 21
diff changeset
     6
 *
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: 21
diff changeset
     7
 * Support for connections to IRC servers, a rather fundamental thing. This holds the line_proto to handle the network
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
     8
 * communications, and then takes care of sending/receiving commands, as well as some core functionality like
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
     9
 * responding to PING requests, and tracking our current nickname.
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
 */
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
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: 21
diff changeset
    12
struct irc_conn;
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: 21
diff changeset
    13
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: 21
diff changeset
    14
#include "error.h"
155
c59d3eaff0fb most of the new transport/sock code compiles, but things are still missing
Tero Marttila <terom@fixme.fi>
parents: 150
diff changeset
    15
#include "transport.h"
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
#include "line_proto.h"
91
bca23cbe1dce implement irc_queue for irc_conn, and add missing irc_queue_destroy, fix irc_conn_destroy
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
    17
#include "irc_queue.h"
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
#include "irc_line.h"
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: 21
diff changeset
    19
#include "irc_cmd.h"
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
    20
#include <stdbool.h>
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
25
56367df4ce5b add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    22
/**
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    23
 * The info required to register using irc_conn_register()
25
56367df4ce5b add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    24
 */
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    25
struct irc_conn_register_info {
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    26
    /** Nickname to use on that server */
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
    const char *nickname;
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    29
    /** Username to supply */
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
    const char *username;
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    32
    /** Realname to supply */
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    const char *realname;
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
};
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
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: 21
diff changeset
    36
/**
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    37
 * Connection state callbacks
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    38
 */
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    39
struct irc_conn_callbacks {
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    40
    /**
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    41
     * Recieved RPL_WELCOME, so irc_conn_register has completed, and we are now registered.
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    42
     */
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    43
    void (*on_registered) (struct irc_conn *conn, void *arg);
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: 37
diff changeset
    44
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: 37
diff changeset
    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: 37
diff changeset
    46
     * The connection has failed in some way, and can not be considered useable anymore. Sending messages won't work,
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    47
     * and no more messages will be received. The connection should be destroyed, probably directly from this callback.
48
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    48
     *
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    49
     * NOTE: Implementing this callback is mandatory
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: 37
diff changeset
    50
     */
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: 37
diff changeset
    51
    void (*on_error) (struct irc_conn *conn, struct error_info *err, void *arg);
48
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    52
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    53
    /**
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    54
     * The connection was closed cleanly after irc_conn_QUIT.
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    55
     *
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    56
     * You probably want to destroy the irc_conn now to clean up.
48
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    57
     */
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    58
    void (*on_quit) (struct irc_conn *conn, void *arg);
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    59
};
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    60
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    61
/**
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    62
 * A single sock_stream connection to a single IRC server, providing a nice interface to the low-level IRC protocol.
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    63
 *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    64
 * Create a irc_conn from a connected sock_stream using irc_conn_create(), providing the high-level callbacks. Then,
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    65
 * register handlers for the IRC protocol messages recieved from the server using irc_conn_add_cmd_handlers() or
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    66
 * irc_cmd_add and irc_conn::handlers/irc_conn::ctcp_handlers.
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    67
 *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    68
 * You can then perform the registration step using irc_conn_register(), providing a irc_conn_register_info struct with
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    69
 * the relevant info.
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    70
 *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    71
 * Once you have succesfully registered (RPL_WELCOME recieved, irc_conn_callbacks::on_registered called,
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    72
 * irc_conn::registered set), you can then send messages to the server in the form of irc_line's using the set of
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    73
 * irc_conn_send functions.
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    74
 */
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    75
struct irc_conn {
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    76
    /** We are a line-based protocol, this wraps the given sock_stream */
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    77
    struct line_proto *lp;
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    78
91
bca23cbe1dce implement irc_queue for irc_conn, and add missing irc_queue_destroy, fix irc_conn_destroy
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
    79
    /** Outgoing line queue */
bca23cbe1dce implement irc_queue for irc_conn, and add missing irc_queue_destroy, fix irc_conn_destroy
Tero Marttila <terom@fixme.fi>
parents: 88
diff changeset
    80
    struct irc_queue *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: 88
diff changeset
    81
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    82
    /** High-level callbacks */
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    83
    struct irc_conn_callbacks callbacks;
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    84
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    85
    /** Opaque argument for callbacks */
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    86
    void *cb_arg;
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    87
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    88
    /** @defgroup irc_conn_status Status flags
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    89
     * @{ 
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    90
     */
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    91
    /** Registration request sent */
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    92
    bool registering;
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    93
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
    94
    /** Registered (as in, we have a working nickname) */
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    95
    bool registered;
48
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    96
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    97
    /** Quit message sent, waiting for server to close connection */
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    98
    bool quitting;
49
96e0f703a58c update irc_conn status, and add tests for irc_conn_QUIT
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    99
96e0f703a58c update irc_conn status, and add tests for irc_conn_QUIT
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   100
    /** Quit message sent, connection closed, we're done */
96e0f703a58c update irc_conn status, and add tests for irc_conn_QUIT
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   101
    bool quit;
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: 29
diff changeset
   102
    
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: 29
diff changeset
   103
    // @}
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: 29
diff changeset
   104
    
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   105
    /** 
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   106
     * Our current, actual nickname. This is set to NULL while we are still registering, but is then initialized when we
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   107
     * get the first RPL_WELCOME message, and then kept up-to-date by handling relevant NICK messages.
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   108
     */
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: 29
diff changeset
   109
    char *nickname;
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
   110
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   111
    /**
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   112
     * General IRC command handlers. These handlers are invoked directly for all irc_line's recieved from the IRC
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   113
     * server, everything including core PING/NICK/RPL_WELCOME handling is implemented using these. You should add
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   114
     * your own handlers using irc_conn_add_cmd_handlers() to implement whatever functionality it is that you want;
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   115
     * see irc_cmd.h for more info about how these work. The "command" field is the literal IRC command as received
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   116
     * from the server itself.
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   117
     *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   118
     * So for example, the following line:
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   119
     * \verbatim :nick!user@host PRIVMSG #foo :Hello everyone! \endverbatim
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   120
     *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   121
     * results in the following irc_line:
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   122
     * \code
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   123
     *  { { "nick", "user", "host" }, "PRIVMSG", { "#foo", "Hello everyone!", NULL } }
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   124
     * \endcode
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   125
     *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   126
     * As with all rules, there are exceptions - CTCP messages are handled differently. PRIVMSG's which contain
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   127
     * CTCP extended messages are trapped before these handlers are invoked, and are instead processed using
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   128
     * irc_conn::ctcp_handlers. Some built-in CTCP message handlers are provided that then submit these messages back
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   129
     * to this main irc_conn::handlers list, as pseudo-irc_line's with a command field like "CTCP ACTION". These
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   130
     * include:
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   131
     *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   132
     *  CTCP ACTION     - { { "nick", "user", "host" }, "CTCP ACTION", "#foo", "sends an action message" }
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   133
     *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   134
     * @see irc_cmd.h
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   135
     * @see irc_line
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   136
     * @see irc_conn::ctcp_handlers
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   137
     */
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: 155
diff changeset
   138
    struct irc_cmd_handlers handlers;
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   139
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   140
    /** 
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   141
     * CTCP command handlers. These handlers are invoked for all PRIVMSG's recieved from the IRC server which begin
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   142
     * with the CTCP X-DELIM char (in other words, a simplified CTCP spec is implemented). These PRIVMSG's will not be
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   143
     * seen using irc_conn::handlers. These CTCP messages are then parsed, and a pseudo-irc_line is created, with the
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   144
     * same source as the real message, the command set to the CTCP extended message tag, args[0] as the PRIVMSG's
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   145
     * destination, and args[1] as the rest of the CTCP extended message payload.
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   146
     *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   147
     * So for example, the following line:
88
233916a00429 implement CTCP-ACTION for irc_log and test
Tero Marttila <terom@fixme.fi>
parents: 84
diff changeset
   148
     * \verbatim :nick!user@host PRIVMSG #foo :\001ACTION does  something lame\001 \endverbatim
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   149
     *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   150
     * results in the following irc_line:
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   151
     * \code
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   152
     *  { { "nick", "user", "host" }, "ACTION", "#foo", "does  something lame" }
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   153
     * \endcode
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   154
     *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   155
     * Internally, some of these CTCP messages are then redirected back to handlers for convenience; currently only
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   156
     * "ACTION".
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   157
     *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   158
     * @see irc_cmd.h
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   159
     * @see irc_line
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   160
     * @see irc_conn::handlers
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   161
     */
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: 155
diff changeset
   162
    struct irc_cmd_handlers ctcp_handlers;
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
   163
};
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
   164
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
   165
/**
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   166
 * Create a new irc_conn using the given sock_stream, which should be connected to an IRC server (i.e. ready for
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   167
 * read/write).
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
   168
 *
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   169
 * This does not yet send any requests to the server, it only sets up the core state. Use irc_conn_register() to 
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   170
 * actually register with the server.
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   171
 *
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   172
 * On success, the resulting irc_conn is returned via *conn_ptr with SUCCESS. Otherwise, ERR_* with error info returned
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   173
 * via *err.
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: 21
diff changeset
   174
 *
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   175
 * @param conn_ptr returned new irc_conn structure
155
c59d3eaff0fb most of the new transport/sock code compiles, but things are still missing
Tero Marttila <terom@fixme.fi>
parents: 150
diff changeset
   176
 * @param transport connected transport
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   177
 * @param callbacks the high-level status callbacks, required
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   178
 * @param cb_arg opqaue context argument for callbacks
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   179
 * @param err returned error info
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   180
 */
155
c59d3eaff0fb most of the new transport/sock code compiles, but things are still missing
Tero Marttila <terom@fixme.fi>
parents: 150
diff changeset
   181
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
   182
        void *cb_arg, error_t *err);
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   183
20
d9c4c2980a0d irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   184
/**
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
   185
 * Destroy the irc_conn state, terminating any connection and releasing all resources.
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
   186
 *
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
   187
 * This does not end the session cleanly, and is intended mainly to be used after clean exit, or to clean up after errors.
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
   188
 */
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
   189
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
   190
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
   191
/**
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: 21
diff changeset
   192
 * Add a new chain of command handler callbacks to be used to handle irc_lines from the server. The given arg will be
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: 21
diff changeset
   193
 * passed to the callbacks as the context argument. The chain will be appended to the end of the current list of chains.
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: 21
diff changeset
   194
 *
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   195
 * @param conn the connection to use
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   196
 * @param handlers the array of irc_cmd_handler structs, terminated with a NULL entry
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: 21
diff changeset
   197
 * @param arg the context argument to use for the callbacks
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: 21
diff changeset
   198
 */
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: 29
diff changeset
   199
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: 21
diff changeset
   200
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: 21
diff changeset
   201
/**
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
   202
 * Register with the IRC server using the given registration info (initial nickname etc.)
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
   203
 *
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
   204
 * This sends the NICK/USER command sequence.
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   205
 *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   206
 * @param conn the connection to use
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   207
 * @param info the information required to register, including nickname/username/etc
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
   208
 */
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
   209
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: 25
diff changeset
   210
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
   211
/**
150
e8018446b336 special-case recieved user-mode messages, add irc_conn_self function
Tero Marttila <terom@fixme.fi>
parents: 127
diff changeset
   212
 * Compare the given nickname against our current nickname, returning true if it represents ourselves.
e8018446b336 special-case recieved user-mode messages, add irc_conn_self function
Tero Marttila <terom@fixme.fi>
parents: 127
diff changeset
   213
 *
e8018446b336 special-case recieved user-mode messages, add irc_conn_self function
Tero Marttila <terom@fixme.fi>
parents: 127
diff changeset
   214
 * As a convenience function, this is NULL-safe - it can safely be called with a NULL conn, NULL nickname, or a
e8018446b336 special-case recieved user-mode messages, add irc_conn_self function
Tero Marttila <terom@fixme.fi>
parents: 127
diff changeset
   215
 * conn that doesn't yet have a nickname, and it will simply return false.
e8018446b336 special-case recieved user-mode messages, add irc_conn_self function
Tero Marttila <terom@fixme.fi>
parents: 127
diff changeset
   216
 */
e8018446b336 special-case recieved user-mode messages, add irc_conn_self function
Tero Marttila <terom@fixme.fi>
parents: 127
diff changeset
   217
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
   218
e8018446b336 special-case recieved user-mode messages, add irc_conn_self function
Tero Marttila <terom@fixme.fi>
parents: 127
diff changeset
   219
/**
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   220
 * Send a generic IRC message by formatting the given irc_line and sending it as a line.
20
d9c4c2980a0d irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   221
 *
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   222
 * Use the irc_conn_COMMAND functions defined below for a more convenient interface.
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   223
 *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   224
 * An error is returned if the line contains invalid data or writing the line to the sock_stream fails. Possible socket
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   225
 * failures will also be reported using irc_conn_callbacks::on_error, so ignoring return values from this is usually
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   226
 * OK...
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   227
 *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   228
 * @param conn the IRC protocol connection
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   229
 * @param line the irc_line protocol line to send
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   230
 */
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   231
err_t irc_conn_send (struct irc_conn *conn, const struct irc_line *line);
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   232
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   233
/**
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   234
 * @defgroup irc_conn_COMMAND Simple request functions
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   235
 *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   236
 * These functions all simply build the corresponding irc_line struct, and then pass it on to irc_conn_send().
20
d9c4c2980a0d irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   237
 *
d9c4c2980a0d irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   238
 * @{
d9c4c2980a0d irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   239
 */
d9c4c2980a0d irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   240
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: 21
diff changeset
   241
/**
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   242
 * Send a NICK message. Usually either called indirectly via irc_conn_register, or used to change to a new nickname.
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   243
 *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   244
 * If succesfull, this will result in a NICK message for our current nickname; irc_conn will handle this to update 
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   245
 * irc_conn::nickname.
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: 21
diff changeset
   246
 *
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: 21
diff changeset
   247
 * @param conn the IRC protocol connection
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   248
 * @param nickname the new nickname to use
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: 21
diff changeset
   249
 *
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   250
 * Possible errors (from RFC2812):
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   251
 *  ERR_NONICKNAMEGIVEN
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   252
 *  ERR_NICKNAMEINUSE
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   253
 *  ERR_UNAVAILRESOURCE
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   254
 *  ERR_ERRONEUSNICKNAME
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   255
 *  ERR_NICKCOLLISION
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   256
 *  ERR_RESTRICTED
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   257
 */
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   258
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
   259
48
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   260
/**
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   261
 * Send a USER message. Usually called indirectly via irc_conn_register.
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: 21
diff changeset
   262
 *
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   263
 * @param conn the IRC protocol connection
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   264
 * @param username the username to register with, may be replaced with username from ident reply
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: 21
diff changeset
   265
 * @param realname the full-name to register with
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   266
 *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   267
 * Possible errors (from RFC2812):
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   268
 *  ERR_NEEDMOREPARAMS
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   269
 *  ERR_ALREADYREGISTRED
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   270
 */
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   271
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
   272
48
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   273
/**
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   274
 * Send a PONG message to the given target.
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: 21
diff changeset
   275
 *
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   276
 * Note that you do not need to handle the normal PING/PONG cycle, irc_conn does this for you.
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   277
 *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   278
 * @param conn the IRC protocol connection
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: 21
diff changeset
   279
 * @param target the PING source, aka. the target to send the PONG reply to
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   280
 *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   281
 * Possible errors (from RFC2812):
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   282
 *  ERR_NOORIGIN
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   283
 *  ERR_NOSUCHSERVER
20
d9c4c2980a0d irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   284
 */
d9c4c2980a0d irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   285
err_t irc_conn_PONG (struct irc_conn *conn, const char *target);
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   286
48
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   287
/**
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   288
 * Send a simple JOIN message for the given channel. Note that this does not implement all possible arguments.
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: 21
diff changeset
   289
 *
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   290
 * If succesfull, this will result in a JOIN message for us on the given channel, plus a series of
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   291
 * RPL_NAMREPLY/RPL_ENDOFNAMES/RPL_TOPIC/etc messages.
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: 21
diff changeset
   292
 *
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   293
 * @param conn the IRC protocol connection
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: 21
diff changeset
   294
 * @param channel the full channel name to join
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   295
 *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   296
 * Possible errors (from RFC2812):
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   297
 *  ERR_NEEDMOREPARAMS              ERR_BANNEDFROMCHAN
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   298
 *  ERR_INVITEONLYCHAN              ERR_BADCHANNELKEY
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   299
 *  ERR_CHANNELISFULL               ERR_BADCHANMASK
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   300
 *  ERR_NOSUCHCHANNEL               ERR_TOOMANYCHANNELS
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   301
 *  ERR_TOOMANYTARGETS              ERR_UNAVAILRESOURCE
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   302
 *
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: 21
diff changeset
   303
 */
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: 21
diff changeset
   304
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: 21
diff changeset
   305
48
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   306
/**
97
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   307
 * Send a PRIVMSG message to some target, usually a channel or another user (nickname).
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   308
 *
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   309
 * Note that the protocol limits messages to 512 bytes in length (total, including other protocol stuff), and messages
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   310
 * can't contain newlines or NULs - this will return an ERR_IRC_LINE_* in both cases.
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   311
 *
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   312
 * If succesfull, this won't result in any reply. If the target is a nickname, the server supports AWAY, and the target
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   313
 * has marked themselves as away, this may result in an RPL_AWAY reply.
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   314
 *
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   315
 * @param conn the IRC protocol connection
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   316
 * @param target the message target, usually either a channel name or a nickname
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   317
 * @param message the message to send
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   318
 *
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   319
 * Possible errors (from RFC2812):
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   320
 *  ERR_NORECIPIENT                 ERR_NOTEXTTOSEND
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   321
 *  ERR_CANNOTSENDTOCHAN            ERR_NOTOPLEVEL
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   322
 *  ERR_WILDTOPLEVEL                ERR_TOOMANYTARGETS
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   323
 *  ERR_NOSUCHNICK
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   324
 *
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   325
 */
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   326
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
   327
d3bc82ee76cb add irc_conn_PRIVMSG/irc_chan_PRIVMSG and lua bindings
Tero Marttila <terom@fixme.fi>
parents: 91
diff changeset
   328
/**
127
94e6c3b4230f implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents: 97
diff changeset
   329
 * Send a NOTICE messaeg to some target, usually a channel or another user (nickname).
94e6c3b4230f implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents: 97
diff changeset
   330
 *
94e6c3b4230f implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents: 97
diff changeset
   331
 * The same limitations on message length and data apply as for irc_conn_PRIVMSG.
94e6c3b4230f implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents: 97
diff changeset
   332
 *
94e6c3b4230f implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents: 97
diff changeset
   333
 * The only difference between PRIVMSG and NOTICE is that NOTICE messages should never generate an automated reply,
94e6c3b4230f implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents: 97
diff changeset
   334
 * hence, they are used for e.g. CTCP replies, and ideally, for IRC bot output.
94e6c3b4230f implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents: 97
diff changeset
   335
 *
94e6c3b4230f implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents: 97
diff changeset
   336
 * @param conn the IRC protocol connection
94e6c3b4230f implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents: 97
diff changeset
   337
 * @param target the message target, usually either a channel name or a nickname
94e6c3b4230f implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents: 97
diff changeset
   338
 * @param message the message to send
94e6c3b4230f implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents: 97
diff changeset
   339
 *
94e6c3b4230f implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents: 97
diff changeset
   340
 * Possible errors (from RFC2812):
94e6c3b4230f implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents: 97
diff changeset
   341
 *  None. Servers do not ever reply to NOTICE messages.
94e6c3b4230f implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents: 97
diff changeset
   342
 */
94e6c3b4230f implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents: 97
diff changeset
   343
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: 97
diff changeset
   344
94e6c3b4230f implement logwatch_on_line/logwatch_filter_apply, along with irc_*_NOTICE
Tero Marttila <terom@fixme.fi>
parents: 97
diff changeset
   345
/**
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   346
 * Send a QUIT message to the server. The server will reply with an ERROR message and close the connection.
48
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   347
 *
84
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   348
 * This updates our state as disconnecting, and once EOF is recieved, the irc_conn_callbacks::on_quit callback is
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   349
 * called.
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   350
 *
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   351
 * @param conn the IRC protocol connection
2791bb73bbee implement some simple CTCP
Tero Marttila <terom@fixme.fi>
parents: 49
diff changeset
   352
 * @param message the quit message, which may be displayed to other clients
48
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   353
 */
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   354
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: 45
diff changeset
   355
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
   356
// @}
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
   357
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   358
#endif /* IRC_CONN_H */