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

« back to all changes in this revision

Viewing changes to src/fe-common/irc/fe-whois.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:
6
6
#include "levels.h"
7
7
#include "misc.h"
8
8
#include "settings.h"
 
9
#include "recode.h"
9
10
 
10
11
#include "irc-servers.h"
11
12
 
13
14
 
14
15
static void event_whois(IRC_SERVER_REC *server, const char *data)
15
16
{
16
 
        char *params, *nick, *user, *host, *realname;
 
17
        char *params, *nick, *user, *host, *realname, *recoded;
17
18
 
18
19
        g_return_if_fail(data != NULL);
19
20
 
20
21
        params = event_get_params(data, 6, NULL, &nick, &user,
21
22
                                  &host, NULL, &realname);
 
23
        recoded = recode_in(SERVER(server), realname, nick);
22
24
        printformat(server, nick, MSGLEVEL_CRAP,
23
 
                    IRCTXT_WHOIS, nick, user, host, realname);
 
25
                    IRCTXT_WHOIS, nick, user, host, recoded);
24
26
        g_free(params);
 
27
        g_free(recoded);
25
28
}
26
29
 
27
30
static void event_whois_special(IRC_SERVER_REC *server, const char *data)
113
116
 
114
117
        g_return_if_fail(data != NULL);
115
118
 
116
 
        params = event_get_params(data, 6, NULL, &nick,
117
 
                                  NULL, NULL, NULL, &modes);
 
119
        params = event_get_params(data, 3 | PARAM_FLAG_GETREST,
 
120
                        NULL, &nick, &modes);
 
121
        if (!strncmp(modes, "is using modes ", 15))
 
122
                modes += 15;
118
123
        printformat(server, nick, MSGLEVEL_CRAP,
119
124
                    IRCTXT_WHOIS_MODES, nick, modes);
120
125
        g_free(params);
139
144
                if (hostname != NULL) hostname += 5;
140
145
        }
141
146
 
142
 
        if (hostname == NULL) {
 
147
        if (hostname != NULL) {
 
148
                if (!strncmp(hostname, "*@", 2))
 
149
                        hostname += 2;
143
150
                printformat(server, nick, MSGLEVEL_CRAP,
144
151
                            IRCTXT_WHOIS_REALHOST, nick, hostname, "");
145
152
        } else {
178
185
        g_free(params);
179
186
}
180
187
 
 
188
static void event_whois_realhost338(IRC_SERVER_REC *server, const char *data)
 
189
{
 
190
        char *params, *nick, *arg1, *arg2, *arg3;
 
191
 
 
192
        g_return_if_fail(data != NULL);
 
193
 
 
194
        /*
 
195
         * :<server> 338 <yournick> <nick> <user>@<host> <ip> :Actual user@host, actual IP
 
196
         * (ircu) or
 
197
         * :<server> 338 <yournick> <nick> <ip> :actually using host
 
198
         * (ratbox)
 
199
         */
 
200
        params = event_get_params(data, 5, NULL, &nick, &arg1, &arg2, &arg3);
 
201
        if (*arg3 != '\0') {
 
202
                printformat(server, nick, MSGLEVEL_CRAP,
 
203
                            IRCTXT_WHOIS_REALHOST, nick, arg1, arg2);
 
204
        } else if (*arg2 != '\0') {
 
205
                printformat(server, nick, MSGLEVEL_CRAP,
 
206
                            IRCTXT_WHOIS_REALHOST, nick, arg1, "");
 
207
        } else {
 
208
                event_whois_special(server, data);
 
209
        }
 
210
        g_free(params);
 
211
}
 
212
 
181
213
static void event_whois_usermode(IRC_SERVER_REC *server, const char *data)
182
214
{
183
215
        char *params, *txt_usermodes, *nick, *usermode;
246
278
 
247
279
static void event_whois_channels(IRC_SERVER_REC *server, const char *data)
248
280
{
249
 
        char *params, *nick, *chans;
 
281
        char *params, *nick, *chans, *recoded;
250
282
 
251
283
        g_return_if_fail(data != NULL);
252
284
 
259
291
        chans = show_lowascii(chans);
260
292
        if (settings_get_bool("whois_hide_safe_channel_id"))
261
293
                hide_safe_channel_id(server, chans);
 
294
        recoded = recode_in(SERVER(server), chans, nick);
262
295
        printformat(server, nick, MSGLEVEL_CRAP,
263
 
                    IRCTXT_WHOIS_CHANNELS, nick, chans);
 
296
                    IRCTXT_WHOIS_CHANNELS, nick, recoded);
264
297
        g_free(chans);
265
298
 
266
299
        g_free(params);
 
300
        g_free(recoded);
267
301
}
268
302
 
269
303
static void event_whois_away(IRC_SERVER_REC *server, const char *data)
270
304
{
271
 
        char *params, *nick, *awaymsg;
 
305
        char *params, *nick, *awaymsg, *recoded;
272
306
 
273
307
        g_return_if_fail(data != NULL);
274
308
 
275
309
        params = event_get_params(data, 3, NULL, &nick, &awaymsg);
 
310
        recoded = recode_in(SERVER(server), awaymsg, nick);
276
311
        printformat(server, nick, MSGLEVEL_CRAP,
277
 
                    IRCTXT_WHOIS_AWAY, nick, awaymsg);
 
312
                    IRCTXT_WHOIS_AWAY, nick, recoded);
278
313
        g_free(params);
 
314
        g_free(recoded);
279
315
}
280
316
 
281
317
static void event_end_of_whois(IRC_SERVER_REC *server, const char *data)
306
342
 
307
343
static void event_whowas(IRC_SERVER_REC *server, const char *data)
308
344
{
309
 
        char *params, *nick, *user, *host, *realname;
 
345
        char *params, *nick, *user, *host, *realname, *recoded;
310
346
 
311
347
        g_return_if_fail(data != NULL);
312
348
 
313
349
        params = event_get_params(data, 6, NULL, &nick, &user,
314
350
                                  &host, NULL, &realname);
 
351
        recoded = recode_in(SERVER(server), realname, nick);
315
352
        printformat(server, nick, MSGLEVEL_CRAP,
316
 
                    IRCTXT_WHOWAS, nick, user, host, realname);
 
353
                    IRCTXT_WHOWAS, nick, user, host, recoded);
317
354
        g_free(params);
 
355
        g_free(recoded);
318
356
}
319
357
 
320
358
static void event_end_of_whowas(IRC_SERVER_REC *server, const char *data)
340
378
        { 312, event_whois_server },
341
379
        { 326, event_whois_usermode326 },
342
380
        { 327, event_whois_realhost327 },
 
381
        { 338, event_whois_realhost338 },
343
382
        { 379, event_whois_modes },
344
383
        { 378, event_whois_realhost },
345
384
        { 377, event_whois_usermode },
381
420
        signal_add("event 379", (SIGNAL_FUNC) event_whois_modes);
382
421
        signal_add("event 327", (SIGNAL_FUNC) event_whois_realhost327);
383
422
        signal_add("event 326", (SIGNAL_FUNC) event_whois_usermode326);
 
423
        signal_add("event 338", (SIGNAL_FUNC) event_whois_realhost338);
384
424
        signal_add("whois away", (SIGNAL_FUNC) event_whois_away);
385
425
        signal_add("whois oper", (SIGNAL_FUNC) event_whois_oper);
386
426
        signal_add("whowas away", (SIGNAL_FUNC) event_whois_away);
403
443
        signal_remove("event 379", (SIGNAL_FUNC) event_whois_modes);
404
444
        signal_remove("event 327", (SIGNAL_FUNC) event_whois_realhost327);
405
445
        signal_remove("event 326", (SIGNAL_FUNC) event_whois_usermode326);
 
446
        signal_remove("event 338", (SIGNAL_FUNC) event_whois_realhost338);
406
447
        signal_remove("whois away", (SIGNAL_FUNC) event_whois_away);
407
448
        signal_remove("whois oper", (SIGNAL_FUNC) event_whois_oper);
408
449
        signal_remove("whowas away", (SIGNAL_FUNC) event_whois_away);