author | Tero Marttila <terom@fixme.fi> |
Fri, 13 Mar 2009 16:10:48 +0200 | |
changeset 53 | 12d806823775 |
child 55 | 6f7f6ae729d0 |
permissions | -rw-r--r-- |
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 |
|
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
err_t irc_client_create (struct irc_client **client_ptr, struct error_info *err) |
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 |
|
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
40 |
err_t irc_client_add_net (struct irc_client *client, struct irc_net **net_ptr, struct irc_net_info *net_info) |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
41 |
{ |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
42 |
struct irc_net *net; |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
43 |
struct error_info err; |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
44 |
|
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
45 |
// create the new irc_chan struct |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
46 |
if (irc_net_create(&net, net_info, &err)) |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
47 |
return ERROR_CODE(&err); |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
48 |
|
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
49 |
// add to network list |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
50 |
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
|
51 |
|
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
52 |
// ok |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
53 |
*net_ptr = net; |
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 |
return SUCCESS; |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
56 |
} |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
57 |
|
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
58 |
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
|
59 |
{ |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
60 |
struct irc_net *net = NULL; |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
61 |
|
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
62 |
// look for it... |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
63 |
TAILQ_FOREACH(net, &client->networks, client_networks) { |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
64 |
if (strcasecmp(net->info.network, network) == 0) |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
65 |
// found it |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
66 |
return net; |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
67 |
} |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
68 |
|
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
69 |
// no such network |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
70 |
return NULL; |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
71 |
} |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
72 |
|
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
73 |
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
|
74 |
{ |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
75 |
struct irc_net *net; |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
76 |
err_t err; |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
77 |
|
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
78 |
// quit each network |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
79 |
TAILQ_FOREACH(net, &client->networks, client_networks) { |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
80 |
if ((err = irc_net_quit(net, message))) { |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
81 |
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
|
82 |
|
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
83 |
// XXX: destroy it? |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
84 |
} |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
85 |
} |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
86 |
|
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
87 |
// state |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
88 |
client->quitting = true; |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
89 |
|
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
90 |
// ok |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
91 |
return SUCCESS; |
12d806823775
add irc_client module, plus nexus.h header
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
92 |
} |