src/irc_conn.h
author Tero Marttila <terom@fixme.fi>
Thu, 12 Mar 2009 23:54:03 +0200
changeset 48 4841f4398fd2
parent 45 71e65564afd2
child 49 96e0f703a58c
permissions -rw-r--r--
add irc_net_quit and signal handling
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
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
     8
 * communications, and then takes care of sending/receiving commands, as well as updating some core state like
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
     9
 * 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"
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
#include "sock.h"
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
#include "line_proto.h"
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
#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
    18
#include "irc_cmd.h"
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
    19
#include <stdbool.h>
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
25
56367df4ce5b add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    21
/**
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
    22
 * The info required to register with irc_conn_register
25
56367df4ce5b add irc_net module, and fix Makefile CFLAGS, add -Wextra
Tero Marttila <terom@fixme.fi>
parents: 23
diff changeset
    23
 */
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    24
struct irc_conn_register_info {
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
    /* Nickname to use on that server */
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
    const char *nickname;
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
    /* Username to supply */
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
    const char *username;
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
    /* Realname to supply */
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    const char *realname;
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
};
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
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
    35
/**
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    36
 * 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
    37
 */
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    38
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
    39
    /**
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    40
     * irc_conn_register has completed.
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    41
     */
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    42
    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
    43
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
     * The connection has failed in some way, and can not be considered useable anymore. Sending messages won't work,
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
     * and no more messages will be received. The connection should be destroyed, probably from this callback.
48
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    47
     *
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    48
     * 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
    49
     */
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
    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
    51
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
     * 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
    54
     *
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    55
     * You probably want to destroy the irc_conn now to clean up
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    56
     */
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    57
    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
    58
};
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
/*
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    61
 * Connection state
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    62
 */
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    63
struct irc_conn {
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    64
    /* We are a line-based protocol */
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    65
    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
    66
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    67
    /** Callbacks */
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    68
    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
    69
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    70
    /** 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
    71
    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
    72
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
    73
    /** @group flags @{ */
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    74
    /** 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
    75
    bool registering;
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    76
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
    77
    /** 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
    78
    bool registered;
48
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    79
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    80
    /** 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
    81
    bool quitting;
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
    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: 29
diff changeset
    83
    // @}
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
    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: 29
diff changeset
    85
    /** Our current real 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: 29
diff changeset
    86
    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
    87
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
    88
    /** Command handlers */
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
    89
    irc_cmd_handlers_t handlers;
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    90
};
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    91
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    92
/**
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    93
 * Create a new irc_conn using the given sock_stream, which should be connected to an IRC server.
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    94
 *
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    95
 * This does not yet send any requests to the server, it only sets up the core state. Use irc_conn_register to register
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
    96
 * with the server.
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
 *
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
 * On success, the resulting irc_conn is returned via *conn with SUCCESS. Otherwise, -ERR_* and error info is returned
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
 * 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
   100
 *
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
   101
 * @param conn the new irc_conn structure is returned via this pointer
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
   102
 * @param sock the socket connected to the IRC server
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
   103
 * @param err errors are returned via this pointer
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
   104
 * @return error code
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
 */
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
   106
err_t irc_conn_create (struct irc_conn **conn, struct sock_stream *sock, const 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
   107
        void *cb_arg, struct error_info *err);
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
20
d9c4c2980a0d irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   109
/**
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
   110
 * 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
   111
 *
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
   112
 * 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
   113
 */
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
   114
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
   115
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
   116
/**
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
   117
 * 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
   118
 * 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
   119
 *
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
   120
 * XXX: rename to not conflict with irc_conn_register()
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
   121
 *
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
   122
 * @param chain the array of irc_cmd_handler structs, terminated with a NULL entry
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
   123
 * @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
   124
 */
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
   125
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
   126
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
   127
/**
27
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
   128
 * 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
   129
 *
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
   130
 * This sends the NICK/USER command sequence.
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
   131
 */
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
   132
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
   133
e6639132bead add irc_conn_callbacks, and delay irc_chan_join until on_registered
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
   134
/**
20
d9c4c2980a0d irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   135
 * @group Simple request functions
d9c4c2980a0d irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   136
 *
d9c4c2980a0d irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   137
 * The error handling of these functions is such that the error return code is can be used or ignored as convenient,
d9c4c2980a0d irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   138
 * as connection-fatal errors will be handled internally.
d9c4c2980a0d irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   139
 *
d9c4c2980a0d irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   140
 * @{
d9c4c2980a0d irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   141
 */
d9c4c2980a0d irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   142
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
   143
/**
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
   144
 * Send a generic IRC 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: 21
diff changeset
   145
 *
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
   146
 * @param conn the IRC protocol connection
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
   147
 * @param line the irc_line protocol line to send
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
   148
 * @return error code
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
   149
 */
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
   150
err_t irc_conn_send (struct irc_conn *conn, const struct irc_line *line);
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
   151
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
   152
/**
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   153
 * Send a NICK 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: 21
diff changeset
   154
 *
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
   155
 * @param nickname the new nickname to use
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
 */
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
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
   158
48
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   159
/**
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   160
 * Send a USER 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: 21
diff changeset
   161
 *
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
   162
 * @param username the username to register with, may be replaced with ident reply
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
   163
 * @param realname the full-name to register with
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   164
 */
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
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
   166
48
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   167
/**
20
d9c4c2980a0d irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   168
 * 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
   169
 *
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
   170
 * @param target the PING source, aka. the target to send the PONG reply to
20
d9c4c2980a0d irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   171
 */
d9c4c2980a0d irc_conn PING/PONG code, and line_proto fixups
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   172
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
   173
48
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   174
/**
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
   175
 * Send a JOIN message for the given 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
   176
 *
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
   177
 * XXX: this doesn't implement the full command options
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
   178
 *
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
   179
 * @param channel the full channel name to join
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
   180
 */
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
   181
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
   182
48
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   183
/**
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   184
 * Send a QUIT message to the server.
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   185
 *
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   186
 * This updates our state as disconnecting, and waits for the server to close the connection cleanly.
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   187
 */
4841f4398fd2 add irc_net_quit and signal handling
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   188
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
   189
21
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
   190
// @}
0911d0b828d4 add basic log.c module
Tero Marttila <terom@fixme.fi>
parents: 20
diff changeset
   191
18
dedf137b504f add initial irc_conn code that can register
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   192
#endif /* IRC_CONN_H */