22
22
#include "modules.h"
23
23
#include "network.h"
24
24
#include "net-sendbuffer.h"
25
#include "line-split.h"
26
25
#include "rawlog.h"
29
28
#include "irc-servers.h"
30
29
#include "irc-channels.h"
31
30
#include "servers-redirect.h"
34
32
char *current_server_event;
35
33
static int signal_default_event;
86
86
irc_server_send_data(server, cmd, len);
92
server->cmdqueue = g_slist_prepend(server->cmdqueue,
93
server->redirect_next);
94
server->cmdqueue = g_slist_prepend(server->cmdqueue,
97
server->cmdqueue = g_slist_append(server->cmdqueue,
99
server->cmdqueue = g_slist_append(server->cmdqueue,
100
server->redirect_next);
91
server->cmdqueue = g_slist_prepend(server->cmdqueue,
92
server->redirect_next);
93
server->cmdqueue = g_slist_prepend(server->cmdqueue,
96
server->cmdqueue = g_slist_append(server->cmdqueue,
98
server->cmdqueue = g_slist_append(server->cmdqueue,
99
server->redirect_next);
102
102
server->redirect_next = NULL;
206
206
if (*tmp != NULL) {
207
g_string_sprintfa(nickstr, "%s,", *tmp);
207
g_string_append_printf(nickstr, "%s,", *tmp);
208
208
if (++count < max_nicks)
283
283
const char *signal;
284
284
char *event, *args;
285
char *params, *target, *recoded_line, *recoded_nick;
287
286
g_return_if_fail(line != NULL);
289
params = event_get_params(line, 2, NULL, &args);
290
recoded_nick = recode_in(SERVER(server), nick, NULL);
291
if (ischannel(*args) ||
292
(*args++ == '@' && ischannel(*args)))
295
target = recoded_nick;
297
recoded_line = recode_in(SERVER(server), line, target);
298
288
/* split event / args */
299
event = g_strconcat("event ", recoded_line, NULL);
289
event = g_strconcat("event ", line, NULL);
300
290
args = strchr(event+6, ' ');
301
291
if (args != NULL) *args++ = '\0'; else args = "";
302
292
while (*args == ' ') args++;
303
293
g_strdown(event);
305
295
/* check if event needs to be redirected */
306
signal = server_redirect_get_signal(server, event, args);
296
signal = server_redirect_get_signal(server, nick, event, args);
307
297
if (signal == NULL)
313
303
current_server_event = event+6;
314
if (!signal_emit(signal, 4, server, args, recoded_nick, address))
315
signal_emit_id(signal_default_event, 4, server, recoded_line, recoded_nick, address);
304
if (!signal_emit(signal, 4, server, args, nick, address))
305
signal_emit_id(signal_default_event, 4, server, line, nick, address);
316
306
current_server_event = NULL;
320
g_free(recoded_line);
321
g_free(recoded_nick);
324
/* Read line from server */
325
static int irc_receive_line(SERVER_REC *server, char **str, int read_socket)
330
g_return_val_if_fail(server != NULL, -1);
331
g_return_val_if_fail(str != NULL, -1);
333
recvlen = !read_socket ? 0 :
334
net_receive(net_sendbuffer_handle(server->handle),
335
tmpbuf, sizeof(tmpbuf));
337
ret = line_split(tmpbuf, recvlen, str, &server->buffer);
339
/* connection lost */
340
server->connection_lost = TRUE;
341
server_disconnect(server);
346
311
static char *irc_parse_prefix(char *line, char **nick, char **address)
405
371
too slowly, so read only a few times from the socket before
406
372
letting other tasks to run. */
408
375
server_ref(server);
409
376
while (!server->disconnected &&
410
irc_receive_line(server, &str, count < MAX_SOCKET_READS) > 0) {
377
(ret = net_sendbuffer_receive_line(server->handle, &str, count < MAX_SOCKET_READS)) > 0) {
411
378
rawlog_input(server->rawlog, str);
412
379
signal_emit_id(signal_server_incoming, 2, server, str);