~ubuntu-branches/ubuntu/oneiric/irssi/oneiric

« back to all changes in this revision

Viewing changes to src/irc/core/irc.c

  • Committer: Bazaar Package Importer
  • Author(s): Andres Rodriguez
  • Date: 2009-05-05 15:50:50 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20090505155050-aoqlnpes7che9rtd
Tags: 0.8.13-1ubuntu1
* Merge from debian unstable (LP: #372411), remaining changes:
  - debian/patches: 03firsttimer_text
    + Adapt it so it tells you about connecting to irc.ubuntu.com and
      joining #ubuntu instead of irc.debian.org and #debian.
  - debian/patches: 90irc-ubuntu-com
* Fixed debian/patches/90irc-ubuntu-com for new irssi.conf.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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"
27
26
#include "misc.h"
28
27
 
29
28
#include "irc-servers.h"
30
29
#include "irc-channels.h"
31
30
#include "servers-redirect.h"
32
 
#include "recode.h"
33
31
 
34
32
char *current_server_event;
35
33
static int signal_default_event;
58
56
                return;
59
57
 
60
58
        len = strlen(cmd);
 
59
        if (server->cmdcount == 0)
 
60
                irc_servers_start_cmd_timeout();
61
61
        server->cmdcount++;
62
62
 
63
63
        if (!raw) {
84
84
 
85
85
        if (send_now) {
86
86
                irc_server_send_data(server, cmd, len);
87
 
                return;
88
 
        }
89
 
 
90
 
        /* add to queue */
91
 
        if (immediate) {
92
 
                server->cmdqueue = g_slist_prepend(server->cmdqueue,
93
 
                                                   server->redirect_next);
94
 
                server->cmdqueue = g_slist_prepend(server->cmdqueue,
95
 
                                                   g_strdup(cmd));
96
87
        } else {
97
 
                server->cmdqueue = g_slist_append(server->cmdqueue,
98
 
                                                  g_strdup(cmd));
99
 
                server->cmdqueue = g_slist_append(server->cmdqueue,
100
 
                                                  server->redirect_next);
 
88
 
 
89
                /* add to queue */
 
90
                if (immediate) {
 
91
                        server->cmdqueue = g_slist_prepend(server->cmdqueue,
 
92
                                                           server->redirect_next);
 
93
                        server->cmdqueue = g_slist_prepend(server->cmdqueue,
 
94
                                                           g_strdup(cmd));
 
95
                } else {
 
96
                        server->cmdqueue = g_slist_append(server->cmdqueue,
 
97
                                                          g_strdup(cmd));
 
98
                        server->cmdqueue = g_slist_append(server->cmdqueue,
 
99
                                                          server->redirect_next);
 
100
                }
101
101
        }
102
102
        server->redirect_next = NULL;
103
103
}
204
204
        tmp = nicklist;
205
205
        for (;; tmp++) {
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)
209
209
                                continue;
210
210
                }
282
282
{
283
283
        const char *signal;
284
284
        char *event, *args;
285
 
        char *params, *target, *recoded_line, *recoded_nick;
286
285
 
287
286
        g_return_if_fail(line != NULL);
288
287
 
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)))
293
 
                target = args;
294
 
        else {
295
 
                target = recoded_nick;
296
 
        }
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);
304
294
 
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)
308
298
                signal = event;
309
299
        else
311
301
 
312
302
        /* emit it */
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;
317
307
 
318
308
        g_free(event);
319
 
        g_free(params);
320
 
        g_free(recoded_line);
321
 
        g_free(recoded_nick);
322
 
}
323
 
 
324
 
/* Read line from server */
325
 
static int irc_receive_line(SERVER_REC *server, char **str, int read_socket)
326
 
{
327
 
        char tmpbuf[512];
328
 
        int recvlen, ret;
329
 
 
330
 
        g_return_val_if_fail(server != NULL, -1);
331
 
        g_return_val_if_fail(str != NULL, -1);
332
 
 
333
 
        recvlen = !read_socket ? 0 :
334
 
                net_receive(net_sendbuffer_handle(server->handle),
335
 
                            tmpbuf, sizeof(tmpbuf));
336
 
 
337
 
        ret = line_split(tmpbuf, recvlen, str, &server->buffer);
338
 
        if (ret == -1) {
339
 
                /* connection lost */
340
 
                server->connection_lost = TRUE;
341
 
                server_disconnect(server);
342
 
        }
343
 
        return ret;
344
309
}
345
310
 
346
311
static char *irc_parse_prefix(char *line, char **nick, char **address)
398
363
{
399
364
        char *str;
400
365
        int count;
 
366
        int ret;
401
367
 
402
368
        g_return_if_fail(server != NULL);
403
369
 
405
371
           too slowly, so read only a few times from the socket before
406
372
           letting other tasks to run. */
407
373
        count = 0;
 
374
        ret = 0;
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);
413
380
 
416
383
 
417
384
                count++;
418
385
        }
 
386
        if (ret == -1) {
 
387
                /* connection lost */
 
388
                server->connection_lost = TRUE;
 
389
                server_disconnect(server);
 
390
        }
419
391
        server_unref(server);
420
392
}
421
393