src/irc_client.c
author Tero Marttila <terom@fixme.fi>
Thu, 28 May 2009 01:17:36 +0300
branchnew-lib-errors
changeset 219 cefec18b8268
parent 217 7728d6ec3abf
permissions -rw-r--r--
some of the lib/transport stuff compiles
53
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#include "irc_client.h"
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
#include "log.h"
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
#include <stdlib.h>
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
#include <string.h>
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
217
7728d6ec3abf nexus.c compiles
Tero Marttila <terom@fixme.fi>
parents: 156
diff changeset
     7
err_t irc_client_create (struct irc_client **client_ptr, error_t *err)
53
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
{
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
    struct irc_client *client;
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
    // allocate
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
    if ((client = calloc(1, sizeof(*client))) == NULL)
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
        return SET_ERROR(err, ERR_CALLOC);
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
    // init
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
    TAILQ_INIT(&client->networks);
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
    // ok
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
    *client_ptr = client;
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
    return SUCCESS;
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
}
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
void irc_client_destroy (struct irc_client *client)
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
{
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
    struct irc_net *next = TAILQ_FIRST(&client->networks), *net;
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
    // our networks
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
    while (next) {
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
        net = next;
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
        next = TAILQ_NEXT(net, client_networks);
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
        irc_net_destroy(net);
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
    }
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
    // ourselves
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
    free(client);
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
}
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
98
f357f835f0d5 add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 63
diff changeset
    40
void irc_client_set_defaults (struct irc_client *client, const struct irc_client_defaults *defaults)
f357f835f0d5 add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 63
diff changeset
    41
{
f357f835f0d5 add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 63
diff changeset
    42
    client->defaults = *defaults;
f357f835f0d5 add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 63
diff changeset
    43
}
f357f835f0d5 add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 63
diff changeset
    44
f357f835f0d5 add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 63
diff changeset
    45
#define APPLY_REGISTER_INFO_DEFAULT(out, value, def, _field_) ( \
f357f835f0d5 add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 63
diff changeset
    46
        ((out)->register_info._field_ = (    \
f357f835f0d5 add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 63
diff changeset
    47
            (value)->register_info._field_ ? (value)->register_info._field_ : (  \
f357f835f0d5 add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 63
diff changeset
    48
                (def)->register_info._field_ \
f357f835f0d5 add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 63
diff changeset
    49
            )   \
f357f835f0d5 add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 63
diff changeset
    50
        )) == NULL   \
f357f835f0d5 add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 63
diff changeset
    51
    )
f357f835f0d5 add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 63
diff changeset
    52
217
7728d6ec3abf nexus.c compiles
Tero Marttila <terom@fixme.fi>
parents: 156
diff changeset
    53
err_t irc_client_add_net (struct irc_client *client, struct irc_net **net_ptr, const struct irc_net_info *_net_info, error_t *err)
53
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
{
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
    struct irc_net *net;
98
f357f835f0d5 add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 63
diff changeset
    56
    struct irc_net_info net_info = {
140
aa390e52eda8 implement ssl_cafile/verify/cert/pkey for x509 credentials
Tero Marttila <terom@fixme.fi>
parents: 100
diff changeset
    57
        .ssl_cred   = _net_info->ssl_cred,
98
f357f835f0d5 add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 63
diff changeset
    58
    };
f357f835f0d5 add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 63
diff changeset
    59
f357f835f0d5 add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 63
diff changeset
    60
    // combine _net_info and defaults to get net_info
156
6534a4ac957b add transport/sock/line_proto/etc code compiles
Tero Marttila <terom@fixme.fi>
parents: 140
diff changeset
    61
    if (_net_info->transport)
6534a4ac957b add transport/sock/line_proto/etc code compiles
Tero Marttila <terom@fixme.fi>
parents: 140
diff changeset
    62
        RETURN_SET_ERROR_STR(err, ERR_IRC_NET_INFO, "transport");
100
cfb7776bd6f0 improve the config module futher, now the module_desc interface uses structured config_value's
Tero Marttila <terom@fixme.fi>
parents: 98
diff changeset
    63
cfb7776bd6f0 improve the config module futher, now the module_desc interface uses structured config_value's
Tero Marttila <terom@fixme.fi>
parents: 98
diff changeset
    64
    if ((net_info.network = _net_info->network) == NULL)
cfb7776bd6f0 improve the config module futher, now the module_desc interface uses structured config_value's
Tero Marttila <terom@fixme.fi>
parents: 98
diff changeset
    65
        RETURN_SET_ERROR_STR(err, ERR_IRC_NET_INFO, "network");
cfb7776bd6f0 improve the config module futher, now the module_desc interface uses structured config_value's
Tero Marttila <terom@fixme.fi>
parents: 98
diff changeset
    66
cfb7776bd6f0 improve the config module futher, now the module_desc interface uses structured config_value's
Tero Marttila <terom@fixme.fi>
parents: 98
diff changeset
    67
    if ((net_info.hostname = _net_info->hostname) == NULL)
cfb7776bd6f0 improve the config module futher, now the module_desc interface uses structured config_value's
Tero Marttila <terom@fixme.fi>
parents: 98
diff changeset
    68
        RETURN_SET_ERROR_STR(err, ERR_IRC_NET_INFO, "hostname");
cfb7776bd6f0 improve the config module futher, now the module_desc interface uses structured config_value's
Tero Marttila <terom@fixme.fi>
parents: 98
diff changeset
    69
    
cfb7776bd6f0 improve the config module futher, now the module_desc interface uses structured config_value's
Tero Marttila <terom@fixme.fi>
parents: 98
diff changeset
    70
    if ((net_info.service = (_net_info->service ? _net_info->service : (
140
aa390e52eda8 implement ssl_cafile/verify/cert/pkey for x509 credentials
Tero Marttila <terom@fixme.fi>
parents: 100
diff changeset
    71
                    _net_info->ssl_cred ? client->defaults.service_ssl : client->defaults.service
100
cfb7776bd6f0 improve the config module futher, now the module_desc interface uses structured config_value's
Tero Marttila <terom@fixme.fi>
parents: 98
diff changeset
    72
            ))) == NULL)
cfb7776bd6f0 improve the config module futher, now the module_desc interface uses structured config_value's
Tero Marttila <terom@fixme.fi>
parents: 98
diff changeset
    73
        RETURN_SET_ERROR_STR(err, ERR_IRC_NET_INFO, "service");
cfb7776bd6f0 improve the config module futher, now the module_desc interface uses structured config_value's
Tero Marttila <terom@fixme.fi>
parents: 98
diff changeset
    74
cfb7776bd6f0 improve the config module futher, now the module_desc interface uses structured config_value's
Tero Marttila <terom@fixme.fi>
parents: 98
diff changeset
    75
    if (APPLY_REGISTER_INFO_DEFAULT(&net_info, _net_info, &client->defaults, nickname))
cfb7776bd6f0 improve the config module futher, now the module_desc interface uses structured config_value's
Tero Marttila <terom@fixme.fi>
parents: 98
diff changeset
    76
        RETURN_SET_ERROR_STR(err, ERR_IRC_NET_INFO, "nickname");
cfb7776bd6f0 improve the config module futher, now the module_desc interface uses structured config_value's
Tero Marttila <terom@fixme.fi>
parents: 98
diff changeset
    77
cfb7776bd6f0 improve the config module futher, now the module_desc interface uses structured config_value's
Tero Marttila <terom@fixme.fi>
parents: 98
diff changeset
    78
    if (APPLY_REGISTER_INFO_DEFAULT(&net_info, _net_info, &client->defaults, username))
cfb7776bd6f0 improve the config module futher, now the module_desc interface uses structured config_value's
Tero Marttila <terom@fixme.fi>
parents: 98
diff changeset
    79
        RETURN_SET_ERROR_STR(err, ERR_IRC_NET_INFO, "username");
cfb7776bd6f0 improve the config module futher, now the module_desc interface uses structured config_value's
Tero Marttila <terom@fixme.fi>
parents: 98
diff changeset
    80
cfb7776bd6f0 improve the config module futher, now the module_desc interface uses structured config_value's
Tero Marttila <terom@fixme.fi>
parents: 98
diff changeset
    81
    if (APPLY_REGISTER_INFO_DEFAULT(&net_info, _net_info, &client->defaults, realname))
cfb7776bd6f0 improve the config module futher, now the module_desc interface uses structured config_value's
Tero Marttila <terom@fixme.fi>
parents: 98
diff changeset
    82
        RETURN_SET_ERROR_STR(err, ERR_IRC_NET_INFO, "realname");
53
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
    // create the new irc_chan struct
98
f357f835f0d5 add irc_client_defaults to apply default values for irc_client_add_net irc_net_info, implement --defaults cmd opt and lua_client_connect
Tero Marttila <terom@fixme.fi>
parents: 63
diff changeset
    85
    if (irc_net_create(&net, &net_info, err))
63
d399a1d915a3 start reworking option-parsing, but --module/--config is still unimplemented
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    86
        return ERROR_CODE(err);
53
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
    
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
    // add to network list
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
    TAILQ_INSERT_TAIL(&client->networks, net, client_networks);
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
    
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
    // ok
63
d399a1d915a3 start reworking option-parsing, but --module/--config is still unimplemented
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    92
    if (net_ptr)
d399a1d915a3 start reworking option-parsing, but --module/--config is still unimplemented
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    93
        *net_ptr = net;
53
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
63
d399a1d915a3 start reworking option-parsing, but --module/--config is still unimplemented
Tero Marttila <terom@fixme.fi>
parents: 55
diff changeset
    95
    return SET_ERROR(err, SUCCESS);
53
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
}
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
struct irc_net* irc_client_get_net (struct irc_client *client, const char *network)
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
{
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
    struct irc_net *net = NULL;
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
    // look for it...
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
    TAILQ_FOREACH(net, &client->networks, client_networks) {
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
        if (strcasecmp(net->info.network, network) == 0)
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
            // found it
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
            return net;
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
    }
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
    // no such network
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
    return NULL;
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
}
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
55
6f7f6ae729d0 'working' modules code, and convert irc_log to use said interface, but we've hit the limits on our Makefile, and the compiled module doesn't really work
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   113
struct irc_chan* irc_client_get_chan (struct irc_client *client, const char *network, const char *channel)
6f7f6ae729d0 'working' modules code, and convert irc_log to use said interface, but we've hit the limits on our Makefile, and the compiled module doesn't really work
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   114
{
6f7f6ae729d0 'working' modules code, and convert irc_log to use said interface, but we've hit the limits on our Makefile, and the compiled module doesn't really work
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   115
    struct irc_net *net;
6f7f6ae729d0 'working' modules code, and convert irc_log to use said interface, but we've hit the limits on our Makefile, and the compiled module doesn't really work
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   116
    
6f7f6ae729d0 'working' modules code, and convert irc_log to use said interface, but we've hit the limits on our Makefile, and the compiled module doesn't really work
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   117
    // lookup network
6f7f6ae729d0 'working' modules code, and convert irc_log to use said interface, but we've hit the limits on our Makefile, and the compiled module doesn't really work
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   118
    if ((net = irc_client_get_net(client, network)) == NULL)
6f7f6ae729d0 'working' modules code, and convert irc_log to use said interface, but we've hit the limits on our Makefile, and the compiled module doesn't really work
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   119
        return NULL;
6f7f6ae729d0 'working' modules code, and convert irc_log to use said interface, but we've hit the limits on our Makefile, and the compiled module doesn't really work
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   120
    
6f7f6ae729d0 'working' modules code, and convert irc_log to use said interface, but we've hit the limits on our Makefile, and the compiled module doesn't really work
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   121
    // and then return channel lookup
6f7f6ae729d0 'working' modules code, and convert irc_log to use said interface, but we've hit the limits on our Makefile, and the compiled module doesn't really work
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   122
    return irc_net_get_chan(net, channel);
6f7f6ae729d0 'working' modules code, and convert irc_log to use said interface, but we've hit the limits on our Makefile, and the compiled module doesn't really work
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   123
}
6f7f6ae729d0 'working' modules code, and convert irc_log to use said interface, but we've hit the limits on our Makefile, and the compiled module doesn't really work
Tero Marttila <terom@fixme.fi>
parents: 53
diff changeset
   124
53
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
err_t irc_client_quit (struct irc_client *client, const char *message)
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   126
{
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   127
    struct irc_net *net;
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   128
    err_t err;
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
    // quit each network
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   131
    TAILQ_FOREACH(net, &client->networks, client_networks) {
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
        if ((err = irc_net_quit(net, message))) {
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   133
            log_err(err, "irc_net_quit: %s [%s]", net->info.network, message);
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   134
            
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
            // XXX: destroy it?
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   136
        }
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
    }
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
    // state
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
    client->quitting = true;
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
    // ok
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
    return SUCCESS;
12d806823775 add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
}