libpurple/protocols/irc/msgs.c

Thu, 27 May 2021 20:25:24 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 27 May 2021 20:25:24 -0500
branch
release-2.x.y
changeset 40892
c00b451a1dd8
parent 40718
5201d33e8999
child 40919
8924ad9e86c4
permissions
-rw-r--r--

Change the default irc server to libera.chat

This seems to make the most sense for users right now as many many channels have migrated away from freenode with many of them moving to libera.

Testing Done:
Compile only.

Reviewed at https://reviews.imfreedom.org/r/675/

6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1 /**
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
2 * @file msgs.c
13786
ec07d27800aa [gaim-migrate @ 16196]
Daniel Atallah <datallah@pidgin.im>
parents: 13667
diff changeset
3 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
4 * purple
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
5 *
32117
6d49fa9e996c Remove periodic WHO on IRC.
Ethan Blanton <elb@pidgin.im>
parents: 32037
diff changeset
6 * Copyright (C) 2003, 2012 Ethan Blanton <elb@pidgin.im>
13786
ec07d27800aa [gaim-migrate @ 16196]
Daniel Atallah <datallah@pidgin.im>
parents: 13667
diff changeset
7 *
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
11 * (at your option) any later version.
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
12 *
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
16 * GNU General Public License for more details.
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
17 *
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 17409
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
21 */
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
22
35254
7d0fb0c6d8d4 Add back some checks for gc!=NULL.
Mark Doliner <mark@kingant.net>
parents: 35250
diff changeset
23 /*
7d0fb0c6d8d4 Add back some checks for gc!=NULL.
Mark Doliner <mark@kingant.net>
parents: 35250
diff changeset
24 * Note: If you change any of these functions to use additional args you
7d0fb0c6d8d4 Add back some checks for gc!=NULL.
Mark Doliner <mark@kingant.net>
parents: 35250
diff changeset
25 * MUST ensure the arg count is correct in parse.c. Otherwise it may be
7d0fb0c6d8d4 Add back some checks for gc!=NULL.
Mark Doliner <mark@kingant.net>
parents: 35250
diff changeset
26 * possible for a malicious server or man-in-the-middle to trigger a crash.
7d0fb0c6d8d4 Add back some checks for gc!=NULL.
Mark Doliner <mark@kingant.net>
parents: 35250
diff changeset
27 */
7d0fb0c6d8d4 Add back some checks for gc!=NULL.
Mark Doliner <mark@kingant.net>
parents: 35250
diff changeset
28
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
29 #include "internal.h"
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
30
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
31 #include "conversation.h"
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
32 #include "blist.h"
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
33 #include "notify.h"
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
34 #include "util.h"
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
35 #include "debug.h"
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
36 #include "irc.h"
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
37
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
38 #include <stdio.h>
22798
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
39 #include <stdlib.h>
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
40
33404
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
41 #ifdef HAVE_CYRUS_SASL
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
42 #include <sasl/sasl.h>
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
43 #endif
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
44
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
45 static char *irc_mask_nick(const char *mask);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
46 static char *irc_mask_userhost(const char *mask);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
47 static void irc_chat_remove_buddy(PurpleConversation *convo, char *data[2]);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
48 static void irc_buddy_status(char *name, struct irc_buddy *ib, struct irc_conn *irc);
17169
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
49 static void irc_connected(struct irc_conn *irc, const char *nick);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
50
13525
e5dc8090a9b0 [gaim-migrate @ 15900]
Richard Laager <rlaager@pidgin.im>
parents: 13523
diff changeset
51 static void irc_msg_handle_privmsg(struct irc_conn *irc, const char *name,
e5dc8090a9b0 [gaim-migrate @ 15900]
Richard Laager <rlaager@pidgin.im>
parents: 13523
diff changeset
52 const char *from, const char *to,
e5dc8090a9b0 [gaim-migrate @ 15900]
Richard Laager <rlaager@pidgin.im>
parents: 13523
diff changeset
53 const char *rawmsg, gboolean notice);
e5dc8090a9b0 [gaim-migrate @ 15900]
Richard Laager <rlaager@pidgin.im>
parents: 13523
diff changeset
54
33404
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
55 #ifdef HAVE_CYRUS_SASL
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
56 static void irc_sasl_finish(struct irc_conn *irc);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
57 #endif
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
58
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
59 static char *irc_mask_nick(const char *mask)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
60 {
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
61 char *end, *buf;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
62
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
63 end = strchr(mask, '!');
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
64 if (!end)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
65 buf = g_strdup(mask);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
66 else
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
67 buf = g_strndup(mask, end - mask);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
68
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
69 return buf;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
70 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
71
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
72 static char *irc_mask_userhost(const char *mask)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
73 {
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
74 return g_strdup(strchr(mask, '!') + 1);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
75 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
76
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
77 static void irc_chat_remove_buddy(PurpleConversation *convo, char *data[2])
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
78 {
22795
2b1d41a575f5 Strip mIRC formatting codes from PART and QUIT messages.
Ethan Blanton <elb@pidgin.im>
parents: 22471
diff changeset
79 char *message, *stripped;
10730
cc7807276e53 [gaim-migrate @ 12331]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10712
diff changeset
80
22795
2b1d41a575f5 Strip mIRC formatting codes from PART and QUIT messages.
Ethan Blanton <elb@pidgin.im>
parents: 22471
diff changeset
81 stripped = data[1] ? irc_mirc2txt(data[1]) : NULL;
2b1d41a575f5 Strip mIRC formatting codes from PART and QUIT messages.
Ethan Blanton <elb@pidgin.im>
parents: 22471
diff changeset
82 message = g_strdup_printf("quit: %s", stripped);
2b1d41a575f5 Strip mIRC formatting codes from PART and QUIT messages.
Ethan Blanton <elb@pidgin.im>
parents: 22471
diff changeset
83 g_free(stripped);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
84
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
85 if (purple_conv_chat_find_user(PURPLE_CONV_CHAT(convo), data[0]))
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
86 purple_conv_chat_remove_user(PURPLE_CONV_CHAT(convo), data[0], message);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
87
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
88 g_free(message);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
89 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
90
17170
609d6acda6aa Oops; I made some errors in the last commit. This is a fix of my
Ethan Blanton <elb@pidgin.im>
parents: 17169
diff changeset
91 static void irc_connected(struct irc_conn *irc, const char *nick)
17169
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
92 {
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
93 PurpleConnection *gc;
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
94 PurpleStatus *status;
27199
ab2af9d15cba Use purple_find_buddies() instead of iterating the buddy list.
Paul Aurich <darkrain42@pidgin.im>
parents: 27044
diff changeset
95 GSList *buddies;
24398
4865c2ee6ea8 Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23582
diff changeset
96 PurpleAccount *account;
17169
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
97
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
98 if ((gc = purple_account_get_connection(irc->account)) == NULL
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
99 || PURPLE_CONNECTION_IS_CONNECTED(gc))
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
100 return;
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
101
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
102 purple_connection_set_display_name(gc, nick);
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
103 purple_connection_set_state(gc, PURPLE_CONNECTED);
24398
4865c2ee6ea8 Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23582
diff changeset
104 account = purple_connection_get_account(gc);
17169
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
105
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
106 /* If we're away then set our away message */
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
107 status = purple_account_get_active_status(irc->account);
35518
0e2608c5682d Backport some warning fixes from default branch
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35282
diff changeset
108 if (purple_status_type_get_primitive(purple_status_get_type(status)) != PURPLE_STATUS_AVAILABLE) {
17169
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
109 PurplePluginProtocolInfo *prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl);
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
110 prpl_info->set_status(irc->account, status);
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
111 }
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
112
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
113 /* this used to be in the core, but it's not now */
27199
ab2af9d15cba Use purple_find_buddies() instead of iterating the buddy list.
Paul Aurich <darkrain42@pidgin.im>
parents: 27044
diff changeset
114 for (buddies = purple_find_buddies(account, NULL); buddies;
ab2af9d15cba Use purple_find_buddies() instead of iterating the buddy list.
Paul Aurich <darkrain42@pidgin.im>
parents: 27044
diff changeset
115 buddies = g_slist_delete_link(buddies, buddies))
24940
d4e0dc304741 updated irc to use the api rather than structs directly
Gary Kramlich <grim@reaperworld.com>
parents: 24416
diff changeset
116 {
27199
ab2af9d15cba Use purple_find_buddies() instead of iterating the buddy list.
Paul Aurich <darkrain42@pidgin.im>
parents: 27044
diff changeset
117 PurpleBuddy *b = buddies->data;
ab2af9d15cba Use purple_find_buddies() instead of iterating the buddy list.
Paul Aurich <darkrain42@pidgin.im>
parents: 27044
diff changeset
118 struct irc_buddy *ib = g_new0(struct irc_buddy, 1);
ab2af9d15cba Use purple_find_buddies() instead of iterating the buddy list.
Paul Aurich <darkrain42@pidgin.im>
parents: 27044
diff changeset
119 ib->name = g_strdup(purple_buddy_get_name(b));
28118
ba26e203a9ca irc: Handle a buddy appearing in multiple groups properly.
Paul Aurich <darkrain42@pidgin.im>
parents: 27361
diff changeset
120 ib->ref = 1;
ba26e203a9ca irc: Handle a buddy appearing in multiple groups properly.
Paul Aurich <darkrain42@pidgin.im>
parents: 27361
diff changeset
121 g_hash_table_replace(irc->buddies, ib->name, ib);
17169
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
122 }
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
123
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
124 irc_blist_timeout(irc);
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
125 if (!irc->timer)
25716
1b5be208d5ba applied changes from a336cc1fd3a1ce815f97303b8d5ae8988f8cbd5b
Ethan Blanton <elb@pidgin.im>
parents: 25707
diff changeset
126 irc->timer = purple_timeout_add_seconds(45, (GSourceFunc)irc_blist_timeout, (gpointer)irc);
17169
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
127 }
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
128
32127
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
129 /* This function is ugly, but it's really an error handler. */
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
130 void irc_msg_default(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
131 {
32127
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
132 int i;
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
133 const char *end, *cur, *numeric = NULL;
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
134 char *clean, *tmp, *convname;
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
135 PurpleConversation *convo;
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
136
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
137 for (cur = args[0], i = 0; i < 4; i++) {
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
138 end = strchr(cur, ' ');
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
139 if (end == NULL) {
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
140 goto undirected;
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
141 }
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
142 /* Check for 3-digit numeric in second position */
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
143 if (i == 1) {
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
144 if (end - cur != 3
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
145 || !isdigit(cur[0]) || !isdigit(cur[1])
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
146 || !isdigit(cur[2])) {
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
147 goto undirected;
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
148 }
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
149 /* Save the numeric for printing to the channel */
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
150 numeric = cur;
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
151 }
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
152 /* Don't advance cur if we're on the final iteration. */
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
153 if (i != 3) {
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
154 cur = end + 1;
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
155 }
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
156 }
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
157
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
158 /* At this point, cur is the beginning of the fourth position,
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
159 * end is the following space, and there are remaining
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
160 * arguments. We'll check to see if this argument is a
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
161 * currently active conversation (private message or channel,
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
162 * either one), and print the numeric to that conversation if it
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
163 * is. */
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
164
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
165 tmp = g_strndup(cur, end - cur);
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
166 convname = purple_utf8_salvage(tmp);
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
167 g_free(tmp);
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
168
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
169 /* Check for an existing conversation */
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
170 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY,
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
171 convname,
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
172 irc->account);
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
173 g_free(convname);
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
174
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
175 if (convo == NULL) {
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
176 goto undirected;
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
177 }
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
178
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
179 /* end + 1 is the first argument past the target. The initial
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
180 * arguments we've skipped are routing info, numeric, recipient
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
181 * (this account's nick, most likely), and target (this
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
182 * channel). If end + 1 is an ASCII :, skip it, because it's
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
183 * meaningless in this context. This won't catch all
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
184 * :-arguments, but it'll catch the easy case. */
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
185 if (*++end == ':') {
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
186 end++;
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
187 }
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
188
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
189 /* We then print "numeric: remainder". */
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
190 clean = purple_utf8_salvage(end);
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
191 tmp = g_strdup_printf("%.3s: %s", numeric, clean);
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
192 g_free(clean);
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
193 purple_conversation_write(convo, "", tmp,
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
194 PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NO_LOG
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
195 |PURPLE_MESSAGE_RAW|PURPLE_MESSAGE_NO_LINKIFY,
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
196 time(NULL));
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
197 g_free(tmp);
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
198 return;
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
199
9c23321e1b68 Print unknown IRC numerics to channels if we can associate them.
Ethan Blanton <elb@pidgin.im>
parents: 32123
diff changeset
200 undirected:
24763
67d9d4c975c0 Replace spaces wth tabs in indentation and tabs with spaces in line continuations.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24416
diff changeset
201 /* This, too, should be escaped somehow (smarter) */
32119
86a4c1ba3c1f disapproval of revision '708334868aba738134af61e8dab50f6f14a1e872'
Ethan Blanton <elb@pidgin.im>
parents: 32118
diff changeset
202 clean = purple_utf8_salvage(args[0]);
86a4c1ba3c1f disapproval of revision '708334868aba738134af61e8dab50f6f14a1e872'
Ethan Blanton <elb@pidgin.im>
parents: 32118
diff changeset
203 purple_debug(PURPLE_DEBUG_INFO, "irc", "Unrecognized message: %s\n", clean);
86a4c1ba3c1f disapproval of revision '708334868aba738134af61e8dab50f6f14a1e872'
Ethan Blanton <elb@pidgin.im>
parents: 32118
diff changeset
204 g_free(clean);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
205 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
206
15501
8547fa591578 Recognize non-standard mode characters communicated in an 005 numeric for IRC
Ethan Blanton <elb@pidgin.im>
parents: 15444
diff changeset
207 void irc_msg_features(struct irc_conn *irc, const char *name, const char *from, char **args)
8547fa591578 Recognize non-standard mode characters communicated in an 005 numeric for IRC
Ethan Blanton <elb@pidgin.im>
parents: 15444
diff changeset
208 {
8547fa591578 Recognize non-standard mode characters communicated in an 005 numeric for IRC
Ethan Blanton <elb@pidgin.im>
parents: 15444
diff changeset
209 gchar **features;
8547fa591578 Recognize non-standard mode characters communicated in an 005 numeric for IRC
Ethan Blanton <elb@pidgin.im>
parents: 15444
diff changeset
210 int i;
8547fa591578 Recognize non-standard mode characters communicated in an 005 numeric for IRC
Ethan Blanton <elb@pidgin.im>
parents: 15444
diff changeset
211
8547fa591578 Recognize non-standard mode characters communicated in an 005 numeric for IRC
Ethan Blanton <elb@pidgin.im>
parents: 15444
diff changeset
212 features = g_strsplit(args[1], " ", -1);
8547fa591578 Recognize non-standard mode characters communicated in an 005 numeric for IRC
Ethan Blanton <elb@pidgin.im>
parents: 15444
diff changeset
213 for (i = 0; features[i]; i++) {
8547fa591578 Recognize non-standard mode characters communicated in an 005 numeric for IRC
Ethan Blanton <elb@pidgin.im>
parents: 15444
diff changeset
214 char *val;
8547fa591578 Recognize non-standard mode characters communicated in an 005 numeric for IRC
Ethan Blanton <elb@pidgin.im>
parents: 15444
diff changeset
215 if (!strncmp(features[i], "PREFIX=", 7)) {
8547fa591578 Recognize non-standard mode characters communicated in an 005 numeric for IRC
Ethan Blanton <elb@pidgin.im>
parents: 15444
diff changeset
216 if ((val = strchr(features[i] + 7, ')')) != NULL)
16167
8536102557ba Make non-standard mode characters support connection-specific instead of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15884
diff changeset
217 irc->mode_chars = g_strdup(val + 1);
15501
8547fa591578 Recognize non-standard mode characters communicated in an 005 numeric for IRC
Ethan Blanton <elb@pidgin.im>
parents: 15444
diff changeset
218 }
8547fa591578 Recognize non-standard mode characters communicated in an 005 numeric for IRC
Ethan Blanton <elb@pidgin.im>
parents: 15444
diff changeset
219 }
21684
c7881e1b73c7 another patch from my coworker Andrew Gaul that plugged a leak, I fixed it
Ka-Hing Cheung <khc@pidgin.im>
parents: 21279
diff changeset
220
c7881e1b73c7 another patch from my coworker Andrew Gaul that plugged a leak, I fixed it
Ka-Hing Cheung <khc@pidgin.im>
parents: 21279
diff changeset
221 g_strfreev(features);
15501
8547fa591578 Recognize non-standard mode characters communicated in an 005 numeric for IRC
Ethan Blanton <elb@pidgin.im>
parents: 15444
diff changeset
222 }
8547fa591578 Recognize non-standard mode characters communicated in an 005 numeric for IRC
Ethan Blanton <elb@pidgin.im>
parents: 15444
diff changeset
223
15508
51a669b06193 This should fix up IRC logins for servers which do not provide an
Ethan Blanton <elb@pidgin.im>
parents: 15501
diff changeset
224 void irc_msg_luser(struct irc_conn *irc, const char *name, const char *from, char **args)
51a669b06193 This should fix up IRC logins for servers which do not provide an
Ethan Blanton <elb@pidgin.im>
parents: 15501
diff changeset
225 {
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
226 if (purple_strequal(name, "251")) {
17169
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
227 /* 251 is required, so we pluck our nick from here and
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
228 * finalize connection */
17170
609d6acda6aa Oops; I made some errors in the last commit. This is a fix of my
Ethan Blanton <elb@pidgin.im>
parents: 17169
diff changeset
229 irc_connected(irc, args[0]);
16893
f7c5d28375a8 Fix broken IRC servers which do not send a 255 numeric
Ethan Blanton <elb@pidgin.im>
parents: 16474
diff changeset
230 /* Some IRC servers seem to not send a 255 numeric, so
f7c5d28375a8 Fix broken IRC servers which do not send a 255 numeric
Ethan Blanton <elb@pidgin.im>
parents: 16474
diff changeset
231 * I guess we can't require it; 251 will do. */
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
232 /* } else if (purple_strequal(name, "255")) { */
15508
51a669b06193 This should fix up IRC logins for servers which do not provide an
Ethan Blanton <elb@pidgin.im>
parents: 15501
diff changeset
233 }
51a669b06193 This should fix up IRC logins for servers which do not provide an
Ethan Blanton <elb@pidgin.im>
parents: 15501
diff changeset
234 }
51a669b06193 This should fix up IRC logins for servers which do not provide an
Ethan Blanton <elb@pidgin.im>
parents: 15501
diff changeset
235
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
236 void irc_msg_away(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
237 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
238 PurpleConnection *gc;
10774
f4238d6312ff [gaim-migrate @ 12383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
239 char *msg;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
240
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
241 if (irc->whois.nick && !purple_utf8_strcasecmp(irc->whois.nick, args[1])) {
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
242 /* We're doing a whois, show this in the whois dialog */
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
243 irc_msg_whois(irc, name, from, args);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
244 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
245 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
246
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
247 gc = purple_account_get_connection(irc->account);
10774
f4238d6312ff [gaim-migrate @ 12383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
248 if (gc) {
f4238d6312ff [gaim-migrate @ 12383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
249 msg = g_markup_escape_text(args[2], -1);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
250 serv_got_im(gc, args[1], msg, PURPLE_MESSAGE_AUTO_RESP, time(NULL));
10774
f4238d6312ff [gaim-migrate @ 12383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
251 g_free(msg);
f4238d6312ff [gaim-migrate @ 12383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
252 }
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
253 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
254
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
255 void irc_msg_badmode(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
256 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
257 PurpleConnection *gc = purple_account_get_connection(irc->account);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
258
35254
7d0fb0c6d8d4 Add back some checks for gc!=NULL.
Mark Doliner <mark@kingant.net>
parents: 35250
diff changeset
259 g_return_if_fail(gc);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
260
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
261 purple_notify_error(gc, NULL, _("Bad mode"), args[1]);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
262 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
263
22798
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
264 void irc_msg_ban(struct irc_conn *irc, const char *name, const char *from, char **args)
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
265 {
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
266 PurpleConversation *convo;
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
267
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
268 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT,
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
269 args[1], irc->account);
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
270
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
271 if (purple_strequal(name, "367")) {
22798
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
272 char *msg = NULL;
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
273 /* Ban list entry */
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
274 if (args[3] && args[4]) {
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
275 /* This is an extended syntax, not in RFC 1459 */
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
276 int t1 = atoi(args[4]);
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
277 time_t t2 = time(NULL);
24416
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23582
diff changeset
278 char *time = purple_str_seconds_to_string(t2 - t1);
23582
5b97b0d87d34 Use a more friendly format for the timestamp in the banlist.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 23576
diff changeset
279 msg = g_strdup_printf(_("Ban on %s by %s, set %s ago"),
24416
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23582
diff changeset
280 args[2], args[3], time);
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 23582
diff changeset
281 g_free(time);
22798
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
282 } else {
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
283 msg = g_strdup_printf(_("Ban on %s"), args[2]);
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
284 }
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
285 if (convo) {
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
286 purple_conv_chat_write(PURPLE_CONV_CHAT(convo), "", msg,
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
287 PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NO_LOG,
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
288 time(NULL));
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
289 } else {
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
290 purple_debug_info("irc", "%s\n", msg);
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
291 }
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
292 g_free(msg);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
293 } else if (purple_strequal(name, "368")) {
22798
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
294 if (!convo)
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
295 return;
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
296 /* End of ban list */
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
297 purple_conv_chat_write(PURPLE_CONV_CHAT(convo), "",
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
298 _("End of ban list"),
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
299 PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NO_LOG,
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
300 time(NULL));
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
301 }
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
302 }
a501b4137c64 Handle IRC ban lists in-channel. Channels which are not joined are
Ethan Blanton <elb@pidgin.im>
parents: 22795
diff changeset
303
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
304 void irc_msg_banned(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
305 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
306 PurpleConnection *gc = purple_account_get_connection(irc->account);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
307 char *buf;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
308
35254
7d0fb0c6d8d4 Add back some checks for gc!=NULL.
Mark Doliner <mark@kingant.net>
parents: 35250
diff changeset
309 g_return_if_fail(gc);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
310
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
311 buf = g_strdup_printf(_("You are banned from %s."), args[1]);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
312 purple_notify_error(gc, _("Banned"), _("Banned"), buf);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
313 g_free(buf);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
314 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
315
10659
caf16376fba0 [gaim-migrate @ 12192]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10637
diff changeset
316 void irc_msg_banfull(struct irc_conn *irc, const char *name, const char *from, char **args)
caf16376fba0 [gaim-migrate @ 12192]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10637
diff changeset
317 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
318 PurpleConversation *convo;
10659
caf16376fba0 [gaim-migrate @ 12192]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10637
diff changeset
319 char *buf, *nick;
caf16376fba0 [gaim-migrate @ 12192]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10637
diff changeset
320
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
321 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[1], irc->account);
10659
caf16376fba0 [gaim-migrate @ 12192]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10637
diff changeset
322 if (!convo)
caf16376fba0 [gaim-migrate @ 12192]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10637
diff changeset
323 return;
caf16376fba0 [gaim-migrate @ 12192]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10637
diff changeset
324
caf16376fba0 [gaim-migrate @ 12192]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10637
diff changeset
325 nick = g_markup_escape_text(args[2], -1);
caf16376fba0 [gaim-migrate @ 12192]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10637
diff changeset
326 buf = g_strdup_printf(_("Cannot ban %s: banlist is full"), nick);
caf16376fba0 [gaim-migrate @ 12192]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10637
diff changeset
327 g_free(nick);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
328 purple_conv_chat_write(PURPLE_CONV_CHAT(convo), "", buf,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
329 PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NO_LOG,
10659
caf16376fba0 [gaim-migrate @ 12192]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10637
diff changeset
330 time(NULL));
caf16376fba0 [gaim-migrate @ 12192]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10637
diff changeset
331 g_free(buf);
caf16376fba0 [gaim-migrate @ 12192]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10637
diff changeset
332 }
caf16376fba0 [gaim-migrate @ 12192]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10637
diff changeset
333
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
334 void irc_msg_chanmode(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
335 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
336 PurpleConversation *convo;
10774
f4238d6312ff [gaim-migrate @ 12383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
337 char *buf, *escaped;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
338
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
339 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[1], irc->account);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
340 if (!convo) /* XXX punt on channels we are not in for now */
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
341 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
342
10774
f4238d6312ff [gaim-migrate @ 12383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
343 escaped = (args[3] != NULL) ? g_markup_escape_text(args[3], -1) : NULL;
f4238d6312ff [gaim-migrate @ 12383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
344 buf = g_strdup_printf("mode for %s: %s %s", args[1], args[2], escaped ? escaped : "");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
345 purple_conv_chat_write(PURPLE_CONV_CHAT(convo), "", buf, PURPLE_MESSAGE_SYSTEM, time(NULL));
10774
f4238d6312ff [gaim-migrate @ 12383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
346 g_free(escaped);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
347 g_free(buf);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
348
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
349 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
350 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
351
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
352 void irc_msg_whois(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
353 {
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
354 if (!irc->whois.nick) {
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
355 purple_debug(PURPLE_DEBUG_WARNING, "irc", "Unexpected %s reply for %s\n", purple_strequal(name, "314") ? "WHOWAS" : "WHOIS"
16474
bc8580a69dba /whowas for IRC. Thanks, achris.
Ethan Blanton <elb@pidgin.im>
parents: 16167
diff changeset
356 , args[1]);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
357 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
358 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
359
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
360 if (purple_utf8_strcasecmp(irc->whois.nick, args[1])) {
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
361 purple_debug(PURPLE_DEBUG_WARNING, "irc", "Got %s reply for %s while waiting for %s\n", purple_strequal(name, "314") ? "WHOWAS" : "WHOIS"
16474
bc8580a69dba /whowas for IRC. Thanks, achris.
Ethan Blanton <elb@pidgin.im>
parents: 16167
diff changeset
362 , args[1], irc->whois.nick);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
363 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
364 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
365
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
366 if (purple_strequal(name, "301")) {
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
367 irc->whois.away = g_strdup(args[2]);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
368 } else if (purple_strequal(name, "311") || purple_strequal(name, "314")) {
35182
639ec03ba1ba Improve IRC whois command
Andy Spencer <andy753421@gmail.com>
parents: 35169
diff changeset
369 irc->whois.ident = g_strdup(args[2]);
639ec03ba1ba Improve IRC whois command
Andy Spencer <andy753421@gmail.com>
parents: 35169
diff changeset
370 irc->whois.host = g_strdup(args[3]);
639ec03ba1ba Improve IRC whois command
Andy Spencer <andy753421@gmail.com>
parents: 35169
diff changeset
371 irc->whois.real = g_strdup(args[5]);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
372 } else if (purple_strequal(name, "312")) {
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
373 irc->whois.server = g_strdup(args[2]);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
374 irc->whois.serverinfo = g_strdup(args[3]);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
375 } else if (purple_strequal(name, "313")) {
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
376 irc->whois.ircop = 1;
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
377 } else if (purple_strequal(name, "317")) {
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
378 irc->whois.idle = atoi(args[2]);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
379 if (args[3])
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
380 irc->whois.signon = (time_t)atoi(args[3]);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
381 } else if (purple_strequal(name, "319")) {
25703
5e04772797b3 applied changes from 0064869870b3507952491598f4d4b8d4a99fbc6b
Ethan Blanton <elb@pidgin.im>
parents: 24763
diff changeset
382 if (irc->whois.channels == NULL) {
5e04772797b3 applied changes from 0064869870b3507952491598f4d4b8d4a99fbc6b
Ethan Blanton <elb@pidgin.im>
parents: 24763
diff changeset
383 irc->whois.channels = g_string_new(args[2]);
5e04772797b3 applied changes from 0064869870b3507952491598f4d4b8d4a99fbc6b
Ethan Blanton <elb@pidgin.im>
parents: 24763
diff changeset
384 } else {
5e04772797b3 applied changes from 0064869870b3507952491598f4d4b8d4a99fbc6b
Ethan Blanton <elb@pidgin.im>
parents: 24763
diff changeset
385 irc->whois.channels = g_string_append(irc->whois.channels, args[2]);
5e04772797b3 applied changes from 0064869870b3507952491598f4d4b8d4a99fbc6b
Ethan Blanton <elb@pidgin.im>
parents: 24763
diff changeset
386 }
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
387 } else if (purple_strequal(name, "320")) {
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
388 irc->whois.identified = 1;
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
389 } else if (purple_strequal(name, "330")) {
35282
9a21b3ce6ed7 Followup on 639ec03ba1ba related to the IRC security fixes - also fix debugging
Daniel Atallah <datallah@pidgin.im>
parents: 35280
diff changeset
390 purple_debug(PURPLE_DEBUG_INFO, "irc", "330 %s: 1=[%s] 2=[%s] 3=[%s]",
35182
639ec03ba1ba Improve IRC whois command
Andy Spencer <andy753421@gmail.com>
parents: 35169
diff changeset
391 name, args[1], args[2], args[3]);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
392 if (purple_strequal(args[3], "is logged in as"))
35182
639ec03ba1ba Improve IRC whois command
Andy Spencer <andy753421@gmail.com>
parents: 35169
diff changeset
393 irc->whois.login = g_strdup(args[2]);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
394 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
395 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
396
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
397 void irc_msg_endwhois(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
398 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
399 PurpleConnection *gc;
15215
3b4c0490b8b0 [gaim-migrate @ 17939]
Mark Doliner <markdoliner@pidgin.im>
parents: 15205
diff changeset
400 char *tmp, *tmp2;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
401 PurpleNotifyUserInfo *user_info;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
402
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
403 if (!irc->whois.nick) {
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
404 purple_debug(PURPLE_DEBUG_WARNING, "irc", "Unexpected End of %s for %s\n", purple_strequal(name, "369") ? "WHOWAS" : "WHOIS"
16474
bc8580a69dba /whowas for IRC. Thanks, achris.
Ethan Blanton <elb@pidgin.im>
parents: 16167
diff changeset
405 , args[1]);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
406 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
407 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
408 if (purple_utf8_strcasecmp(irc->whois.nick, args[1])) {
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
409 purple_debug(PURPLE_DEBUG_WARNING, "irc", "Received end of %s for %s, expecting %s\n", purple_strequal(name, "369") ? "WHOWAS" : "WHOIS"
16474
bc8580a69dba /whowas for IRC. Thanks, achris.
Ethan Blanton <elb@pidgin.im>
parents: 16167
diff changeset
410 , args[1], irc->whois.nick);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
411 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
412 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
413
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
414 user_info = purple_notify_user_info_new();
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14731
diff changeset
415
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14731
diff changeset
416 tmp2 = g_markup_escape_text(args[1], -1);
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14731
diff changeset
417 tmp = g_strdup_printf("%s%s%s", tmp2,
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14731
diff changeset
418 (irc->whois.ircop ? _(" <i>(ircop)</i>") : ""),
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14731
diff changeset
419 (irc->whois.identified ? _(" <i>(identified)</i>") : ""));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
420 purple_notify_user_info_add_pair(user_info, _("Nick"), tmp);
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14731
diff changeset
421 g_free(tmp2);
10634
36376a661022 [gaim-migrate @ 12114]
Ethan Blanton <elb@pidgin.im>
parents: 10633
diff changeset
422 g_free(tmp);
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14731
diff changeset
423
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
424 if (irc->whois.away) {
10634
36376a661022 [gaim-migrate @ 12114]
Ethan Blanton <elb@pidgin.im>
parents: 10633
diff changeset
425 tmp = g_markup_escape_text(irc->whois.away, strlen(irc->whois.away));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
426 g_free(irc->whois.away);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
427 purple_notify_user_info_add_pair(user_info, _("Away"), tmp);
9589
229d4c811c01 [gaim-migrate @ 10432]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9558
diff changeset
428 g_free(tmp);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
429 }
35182
639ec03ba1ba Improve IRC whois command
Andy Spencer <andy753421@gmail.com>
parents: 35169
diff changeset
430 if (irc->whois.real) {
639ec03ba1ba Improve IRC whois command
Andy Spencer <andy753421@gmail.com>
parents: 35169
diff changeset
431 purple_notify_user_info_add_pair_plaintext(user_info, _("Real name"), irc->whois.real);
639ec03ba1ba Improve IRC whois command
Andy Spencer <andy753421@gmail.com>
parents: 35169
diff changeset
432 g_free(irc->whois.real);
639ec03ba1ba Improve IRC whois command
Andy Spencer <andy753421@gmail.com>
parents: 35169
diff changeset
433 }
639ec03ba1ba Improve IRC whois command
Andy Spencer <andy753421@gmail.com>
parents: 35169
diff changeset
434 if (irc->whois.login) {
639ec03ba1ba Improve IRC whois command
Andy Spencer <andy753421@gmail.com>
parents: 35169
diff changeset
435 purple_notify_user_info_add_pair_plaintext(user_info, _("Login name"), irc->whois.login);
639ec03ba1ba Improve IRC whois command
Andy Spencer <andy753421@gmail.com>
parents: 35169
diff changeset
436 g_free(irc->whois.login);
639ec03ba1ba Improve IRC whois command
Andy Spencer <andy753421@gmail.com>
parents: 35169
diff changeset
437 }
639ec03ba1ba Improve IRC whois command
Andy Spencer <andy753421@gmail.com>
parents: 35169
diff changeset
438 if (irc->whois.ident) {
639ec03ba1ba Improve IRC whois command
Andy Spencer <andy753421@gmail.com>
parents: 35169
diff changeset
439 purple_notify_user_info_add_pair_plaintext(user_info, _("Ident name"), irc->whois.ident);
639ec03ba1ba Improve IRC whois command
Andy Spencer <andy753421@gmail.com>
parents: 35169
diff changeset
440 g_free(irc->whois.ident);
639ec03ba1ba Improve IRC whois command
Andy Spencer <andy753421@gmail.com>
parents: 35169
diff changeset
441 }
639ec03ba1ba Improve IRC whois command
Andy Spencer <andy753421@gmail.com>
parents: 35169
diff changeset
442 if (irc->whois.host) {
639ec03ba1ba Improve IRC whois command
Andy Spencer <andy753421@gmail.com>
parents: 35169
diff changeset
443 purple_notify_user_info_add_pair_plaintext(user_info, _("Host name"), irc->whois.host);
639ec03ba1ba Improve IRC whois command
Andy Spencer <andy753421@gmail.com>
parents: 35169
diff changeset
444 g_free(irc->whois.host);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
445 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
446 if (irc->whois.server) {
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14731
diff changeset
447 tmp = g_strdup_printf("%s (%s)", irc->whois.server, irc->whois.serverinfo);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
448 purple_notify_user_info_add_pair(user_info, _("Server"), tmp);
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14731
diff changeset
449 g_free(tmp);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
450 g_free(irc->whois.server);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
451 g_free(irc->whois.serverinfo);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
452 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
453 if (irc->whois.channels) {
25703
5e04772797b3 applied changes from 0064869870b3507952491598f4d4b8d4a99fbc6b
Ethan Blanton <elb@pidgin.im>
parents: 24763
diff changeset
454 purple_notify_user_info_add_pair(user_info, _("Currently on"), irc->whois.channels->str);
5e04772797b3 applied changes from 0064869870b3507952491598f4d4b8d4a99fbc6b
Ethan Blanton <elb@pidgin.im>
parents: 24763
diff changeset
455 g_string_free(irc->whois.channels, TRUE);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
456 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
457 if (irc->whois.idle) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
458 gchar *timex = purple_str_seconds_to_string(irc->whois.idle);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
459 purple_notify_user_info_add_pair(user_info, _("Idle for"), timex);
6357
f83643b0a067 [gaim-migrate @ 6856]
Mark Doliner <markdoliner@pidgin.im>
parents: 6351
diff changeset
460 g_free(timex);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
461 purple_notify_user_info_add_pair(user_info,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
462 _("Online since"), purple_date_format_full(localtime(&irc->whois.signon)));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
463 }
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
464 if (purple_strequal(irc->whois.nick, "Paco-Paco")) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
465 purple_notify_user_info_add_pair(user_info,
15205
f642029b2f97 [gaim-migrate @ 17929]
Evan Schoenberg <evands@pidgin.im>
parents: 14731
diff changeset
466 _("<b>Defining adjective:</b>"), _("Glorious"));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
467 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
468
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
469 gc = purple_account_get_connection(irc->account);
7062
26abb8b189ce [gaim-migrate @ 7626]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
470
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
471 purple_notify_userinfo(gc, irc->whois.nick, user_info, NULL, NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
472 purple_notify_user_info_destroy(user_info);
7062
26abb8b189ce [gaim-migrate @ 7626]
Christian Hammond <chipx86@chipx86.com>
parents: 6982
diff changeset
473
10504
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10246
diff changeset
474 g_free(irc->whois.nick);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
475 memset(&irc->whois, 0, sizeof(irc->whois));
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
476 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
477
31565
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
478 void irc_msg_who(struct irc_conn *irc, const char *name, const char *from, char **args)
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
479 {
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
480 if (purple_strequal(name, "352")) {
31565
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
481 PurpleConversation *conv;
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
482 PurpleConvChat *chat;
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
483 PurpleConvChatBuddy *cb;
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
484
32037
619f32df41f1 Fix a crash when remote users have certain characters in their
Mark Doliner <markdoliner@pidgin.im>
parents: 32019
diff changeset
485 char *cur, *userhost, *realname;
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
486
31565
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
487 PurpleConvChatBuddyFlags flags;
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
488 GList *keys = NULL, *values = NULL;
32037
619f32df41f1 Fix a crash when remote users have certain characters in their
Mark Doliner <markdoliner@pidgin.im>
parents: 32019
diff changeset
489
31565
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
490 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[1], irc->account);
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
491 if (!conv) {
32037
619f32df41f1 Fix a crash when remote users have certain characters in their
Mark Doliner <markdoliner@pidgin.im>
parents: 32019
diff changeset
492 purple_debug(PURPLE_DEBUG_ERROR, "irc","Got a WHO response for %s, which doesn't exist\n", args[1]);
31565
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
493 return;
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
494 }
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
495
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
496 cb = purple_conv_chat_cb_find(PURPLE_CONV_CHAT(conv), args[5]);
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
497 if (!cb) {
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
498 purple_debug(PURPLE_DEBUG_ERROR, "irc", "Got a WHO response for %s who isn't a buddy.\n", args[5]);
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
499 return;
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
500 }
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
501
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
502 chat = PURPLE_CONV_CHAT(conv);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
503
31565
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
504 userhost = g_strdup_printf("%s@%s", args[2], args[3]);
32037
619f32df41f1 Fix a crash when remote users have certain characters in their
Mark Doliner <markdoliner@pidgin.im>
parents: 32019
diff changeset
505
619f32df41f1 Fix a crash when remote users have certain characters in their
Mark Doliner <markdoliner@pidgin.im>
parents: 32019
diff changeset
506 /* The final argument is a :-argument, but annoyingly
619f32df41f1 Fix a crash when remote users have certain characters in their
Mark Doliner <markdoliner@pidgin.im>
parents: 32019
diff changeset
507 * contains two "words", the hop count and real name. */
619f32df41f1 Fix a crash when remote users have certain characters in their
Mark Doliner <markdoliner@pidgin.im>
parents: 32019
diff changeset
508 for (cur = args[7]; *cur; cur++) {
619f32df41f1 Fix a crash when remote users have certain characters in their
Mark Doliner <markdoliner@pidgin.im>
parents: 32019
diff changeset
509 if (*cur == ' ') {
619f32df41f1 Fix a crash when remote users have certain characters in their
Mark Doliner <markdoliner@pidgin.im>
parents: 32019
diff changeset
510 cur++;
619f32df41f1 Fix a crash when remote users have certain characters in their
Mark Doliner <markdoliner@pidgin.im>
parents: 32019
diff changeset
511 break;
619f32df41f1 Fix a crash when remote users have certain characters in their
Mark Doliner <markdoliner@pidgin.im>
parents: 32019
diff changeset
512 }
619f32df41f1 Fix a crash when remote users have certain characters in their
Mark Doliner <markdoliner@pidgin.im>
parents: 32019
diff changeset
513 }
619f32df41f1 Fix a crash when remote users have certain characters in their
Mark Doliner <markdoliner@pidgin.im>
parents: 32019
diff changeset
514 realname = g_strdup(cur);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
515
31565
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
516 keys = g_list_prepend(keys, "userhost");
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
517 values = g_list_prepend(values, userhost);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
518
31565
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
519 keys = g_list_prepend(keys, "realname");
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
520 values = g_list_prepend(values, realname);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
521
31565
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
522 purple_conv_chat_cb_set_attributes(chat, cb, keys, values);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
523
31565
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
524 g_list_free(keys);
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
525 g_list_free(values);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
526
31565
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
527 g_free(userhost);
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
528 g_free(realname);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
529
31936
ca4f3c0aa125 irc: Save one useless hash table lookup
Paul Aurich <darkrain42@pidgin.im>
parents: 31565
diff changeset
530 flags = cb->flags;
31565
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
531
32117
6d49fa9e996c Remove periodic WHO on IRC.
Ethan Blanton <elb@pidgin.im>
parents: 32037
diff changeset
532 /* FIXME: I'm not sure this is really a good idea, now
6d49fa9e996c Remove periodic WHO on IRC.
Ethan Blanton <elb@pidgin.im>
parents: 32037
diff changeset
533 * that we no longer do periodic WHO. It seems to me
6d49fa9e996c Remove periodic WHO on IRC.
Ethan Blanton <elb@pidgin.im>
parents: 32037
diff changeset
534 * like it's more likely to be confusing than not.
6d49fa9e996c Remove periodic WHO on IRC.
Ethan Blanton <elb@pidgin.im>
parents: 32037
diff changeset
535 * Comments? */
31565
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
536 if (args[6][0] == 'G' && !(flags & PURPLE_CBFLAGS_AWAY)) {
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
537 purple_conv_chat_user_set_flags(chat, cb->name, flags | PURPLE_CBFLAGS_AWAY);
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
538 } else if(args[6][0] == 'H' && (flags & PURPLE_CBFLAGS_AWAY)) {
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
539 purple_conv_chat_user_set_flags(chat, cb->name, flags & ~PURPLE_CBFLAGS_AWAY);
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
540 }
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
541 }
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
542 }
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
543
8114
201c03cf6c5f [gaim-migrate @ 8818]
Tim Ringenbach <marv@pidgin.im>
parents: 7877
diff changeset
544 void irc_msg_list(struct irc_conn *irc, const char *name, const char *from, char **args)
201c03cf6c5f [gaim-migrate @ 8818]
Tim Ringenbach <marv@pidgin.im>
parents: 7877
diff changeset
545 {
201c03cf6c5f [gaim-migrate @ 8818]
Tim Ringenbach <marv@pidgin.im>
parents: 7877
diff changeset
546 if (!irc->roomlist)
201c03cf6c5f [gaim-migrate @ 8818]
Tim Ringenbach <marv@pidgin.im>
parents: 7877
diff changeset
547 return;
201c03cf6c5f [gaim-migrate @ 8818]
Tim Ringenbach <marv@pidgin.im>
parents: 7877
diff changeset
548
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
549 if (purple_strequal(name, "321")) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
550 purple_roomlist_set_in_progress(irc->roomlist, TRUE);
8114
201c03cf6c5f [gaim-migrate @ 8818]
Tim Ringenbach <marv@pidgin.im>
parents: 7877
diff changeset
551 return;
201c03cf6c5f [gaim-migrate @ 8818]
Tim Ringenbach <marv@pidgin.im>
parents: 7877
diff changeset
552 }
201c03cf6c5f [gaim-migrate @ 8818]
Tim Ringenbach <marv@pidgin.im>
parents: 7877
diff changeset
553
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
554 if (purple_strequal(name, "323")) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
555 purple_roomlist_set_in_progress(irc->roomlist, FALSE);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
556 purple_roomlist_unref(irc->roomlist);
8114
201c03cf6c5f [gaim-migrate @ 8818]
Tim Ringenbach <marv@pidgin.im>
parents: 7877
diff changeset
557 irc->roomlist = NULL;
13667
9ebf0007d912 [gaim-migrate @ 16068]
Richard Laager <rlaager@pidgin.im>
parents: 13647
diff changeset
558 return;
8114
201c03cf6c5f [gaim-migrate @ 8818]
Tim Ringenbach <marv@pidgin.im>
parents: 7877
diff changeset
559 }
201c03cf6c5f [gaim-migrate @ 8818]
Tim Ringenbach <marv@pidgin.im>
parents: 7877
diff changeset
560
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
561 if (purple_strequal(name, "322")) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
562 PurpleRoomlistRoom *room;
17409
1205b4f7bb82 This performs mIRC formatting code stripping for the room list, as
Ethan Blanton <elb@pidgin.im>
parents: 17297
diff changeset
563 char *topic;
8114
201c03cf6c5f [gaim-migrate @ 8818]
Tim Ringenbach <marv@pidgin.im>
parents: 7877
diff changeset
564
22994
b30be6210442 Patch from sadrul to fix IRC servers which neglect to send RPL_LISTSTART
Ethan Blanton <elb@pidgin.im>
parents: 22983
diff changeset
565 if (!purple_roomlist_get_in_progress(irc->roomlist)) {
b30be6210442 Patch from sadrul to fix IRC servers which neglect to send RPL_LISTSTART
Ethan Blanton <elb@pidgin.im>
parents: 22983
diff changeset
566 purple_debug_warning("irc", "Buggy server didn't send RPL_LISTSTART.\n");
b30be6210442 Patch from sadrul to fix IRC servers which neglect to send RPL_LISTSTART
Ethan Blanton <elb@pidgin.im>
parents: 22983
diff changeset
567 purple_roomlist_set_in_progress(irc->roomlist, TRUE);
b30be6210442 Patch from sadrul to fix IRC servers which neglect to send RPL_LISTSTART
Ethan Blanton <elb@pidgin.im>
parents: 22983
diff changeset
568 }
b30be6210442 Patch from sadrul to fix IRC servers which neglect to send RPL_LISTSTART
Ethan Blanton <elb@pidgin.im>
parents: 22983
diff changeset
569
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
570 room = purple_roomlist_room_new(PURPLE_ROOMLIST_ROOMTYPE_ROOM, args[1], NULL);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
571 purple_roomlist_room_add_field(irc->roomlist, room, args[1]);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
572 purple_roomlist_room_add_field(irc->roomlist, room, GINT_TO_POINTER(strtol(args[2], NULL, 10)));
17409
1205b4f7bb82 This performs mIRC formatting code stripping for the room list, as
Ethan Blanton <elb@pidgin.im>
parents: 17297
diff changeset
573 topic = irc_mirc2txt(args[3]);
1205b4f7bb82 This performs mIRC formatting code stripping for the room list, as
Ethan Blanton <elb@pidgin.im>
parents: 17297
diff changeset
574 purple_roomlist_room_add_field(irc->roomlist, room, topic);
1205b4f7bb82 This performs mIRC formatting code stripping for the room list, as
Ethan Blanton <elb@pidgin.im>
parents: 17297
diff changeset
575 g_free(topic);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
576 purple_roomlist_room_add(irc->roomlist, room);
8114
201c03cf6c5f [gaim-migrate @ 8818]
Tim Ringenbach <marv@pidgin.im>
parents: 7877
diff changeset
577 }
201c03cf6c5f [gaim-migrate @ 8818]
Tim Ringenbach <marv@pidgin.im>
parents: 7877
diff changeset
578 }
201c03cf6c5f [gaim-migrate @ 8818]
Tim Ringenbach <marv@pidgin.im>
parents: 7877
diff changeset
579
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
580 void irc_msg_topic(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
581 {
9762
125f77c00102 [gaim-migrate @ 10630]
Tim Ringenbach <marv@pidgin.im>
parents: 9741
diff changeset
582 char *chan, *topic, *msg, *nick, *tmp, *tmp2;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
583 PurpleConversation *convo;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
584
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
585 if (purple_strequal(name, "topic")) {
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
586 chan = args[0];
8529
a598c585c575 [gaim-migrate @ 9268]
Ethan Blanton <elb@pidgin.im>
parents: 8504
diff changeset
587 topic = irc_mirc2txt (args[1]);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
588 } else {
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
589 chan = args[1];
8529
a598c585c575 [gaim-migrate @ 9268]
Ethan Blanton <elb@pidgin.im>
parents: 8504
diff changeset
590 topic = irc_mirc2txt (args[2]);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
591 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
592
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
593 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, chan, irc->account);
13647
c0dd11a3254c [gaim-migrate @ 16047]
Daniel Atallah <datallah@pidgin.im>
parents: 13638
diff changeset
594 if (!convo) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
595 purple_debug(PURPLE_DEBUG_ERROR, "irc", "Got a topic for %s, which doesn't exist\n", chan);
13647
c0dd11a3254c [gaim-migrate @ 16047]
Daniel Atallah <datallah@pidgin.im>
parents: 13638
diff changeset
596 g_free(topic);
c0dd11a3254c [gaim-migrate @ 16047]
Daniel Atallah <datallah@pidgin.im>
parents: 13638
diff changeset
597 return;
c0dd11a3254c [gaim-migrate @ 16047]
Daniel Atallah <datallah@pidgin.im>
parents: 13638
diff changeset
598 }
c0dd11a3254c [gaim-migrate @ 16047]
Daniel Atallah <datallah@pidgin.im>
parents: 13638
diff changeset
599
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
600 /* If this is an interactive update, print it out */
10732
5e314ab498bf [gaim-migrate @ 12334]
Richard Laager <rlaager@pidgin.im>
parents: 10730
diff changeset
601 tmp = g_markup_escape_text(topic, -1);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
602 tmp2 = purple_markup_linkify(tmp);
9762
125f77c00102 [gaim-migrate @ 10630]
Tim Ringenbach <marv@pidgin.im>
parents: 9741
diff changeset
603 g_free(tmp);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
604 if (purple_strequal(name, "topic")) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
605 const char *current_topic = purple_conv_chat_get_topic(PURPLE_CONV_CHAT(convo));
38259
c593fc9f5438 Replace strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38258
diff changeset
606 if (!(current_topic != NULL && purple_strequal(tmp2, current_topic)))
13534
637a369ac8b0 [gaim-migrate @ 15910]
Richard Laager <rlaager@pidgin.im>
parents: 13525
diff changeset
607 {
637a369ac8b0 [gaim-migrate @ 15910]
Richard Laager <rlaager@pidgin.im>
parents: 13525
diff changeset
608 char *nick_esc;
637a369ac8b0 [gaim-migrate @ 15910]
Richard Laager <rlaager@pidgin.im>
parents: 13525
diff changeset
609 nick = irc_mask_nick(from);
637a369ac8b0 [gaim-migrate @ 15910]
Richard Laager <rlaager@pidgin.im>
parents: 13525
diff changeset
610 nick_esc = g_markup_escape_text(nick, -1);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
611 purple_conv_chat_set_topic(PURPLE_CONV_CHAT(convo), nick, topic);
13534
637a369ac8b0 [gaim-migrate @ 15910]
Richard Laager <rlaager@pidgin.im>
parents: 13525
diff changeset
612 if (*tmp2)
637a369ac8b0 [gaim-migrate @ 15910]
Richard Laager <rlaager@pidgin.im>
parents: 13525
diff changeset
613 msg = g_strdup_printf(_("%s has changed the topic to: %s"), nick_esc, tmp2);
637a369ac8b0 [gaim-migrate @ 15910]
Richard Laager <rlaager@pidgin.im>
parents: 13525
diff changeset
614 else
637a369ac8b0 [gaim-migrate @ 15910]
Richard Laager <rlaager@pidgin.im>
parents: 13525
diff changeset
615 msg = g_strdup_printf(_("%s has cleared the topic."), nick_esc);
637a369ac8b0 [gaim-migrate @ 15910]
Richard Laager <rlaager@pidgin.im>
parents: 13525
diff changeset
616 g_free(nick_esc);
637a369ac8b0 [gaim-migrate @ 15910]
Richard Laager <rlaager@pidgin.im>
parents: 13525
diff changeset
617 g_free(nick);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
618 purple_conv_chat_write(PURPLE_CONV_CHAT(convo), from, msg, PURPLE_MESSAGE_SYSTEM, time(NULL));
13534
637a369ac8b0 [gaim-migrate @ 15910]
Richard Laager <rlaager@pidgin.im>
parents: 13525
diff changeset
619 g_free(msg);
637a369ac8b0 [gaim-migrate @ 15910]
Richard Laager <rlaager@pidgin.im>
parents: 13525
diff changeset
620 }
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
621 } else {
13395
3174cf554db2 [gaim-migrate @ 15767]
Richard Laager <rlaager@pidgin.im>
parents: 13120
diff changeset
622 char *chan_esc = g_markup_escape_text(chan, -1);
3174cf554db2 [gaim-migrate @ 15767]
Richard Laager <rlaager@pidgin.im>
parents: 13120
diff changeset
623 msg = g_strdup_printf(_("The topic for %s is: %s"), chan_esc, tmp2);
3174cf554db2 [gaim-migrate @ 15767]
Richard Laager <rlaager@pidgin.im>
parents: 13120
diff changeset
624 g_free(chan_esc);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
625 purple_conv_chat_set_topic(PURPLE_CONV_CHAT(convo), NULL, topic);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
626 purple_conv_chat_write(PURPLE_CONV_CHAT(convo), "", msg, PURPLE_MESSAGE_SYSTEM, time(NULL));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
627 g_free(msg);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
628 }
9762
125f77c00102 [gaim-migrate @ 10630]
Tim Ringenbach <marv@pidgin.im>
parents: 9741
diff changeset
629 g_free(tmp2);
8529
a598c585c575 [gaim-migrate @ 9268]
Ethan Blanton <elb@pidgin.im>
parents: 8504
diff changeset
630 g_free(topic);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
631 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
632
33544
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
633 void irc_msg_topicinfo(struct irc_conn *irc, const char *name, const char *from, char **args)
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
634 {
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
635 PurpleConversation *convo;
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
636 struct tm *tm;
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
637 time_t t;
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
638 char *msg, *timestamp, *datestamp;
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
639
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
640 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[1], irc->account);
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
641 if (!convo) {
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
642 purple_debug(PURPLE_DEBUG_ERROR, "irc", "Got topic info for %s, which doesn't exist\n", args[1]);
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
643 return;
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
644 }
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
645
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
646 t = (time_t)atol(args[3]);
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
647 if (t == 0) {
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
648 purple_debug(PURPLE_DEBUG_ERROR, "irc", "Got apparently nonsensical topic timestamp %s\n", args[3]);
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
649 return;
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
650 }
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
651 tm = localtime(&t);
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
652
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
653 timestamp = g_strdup(purple_time_format(tm));
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
654 datestamp = g_strdup(purple_date_format_short(tm));
33729
ad9fe0ad7f39 The "Topic set" message should be translateable. Refs #13317
Daniel Atallah <datallah@pidgin.im>
parents: 33544
diff changeset
655 msg = g_strdup_printf(_("Topic for %s set by %s at %s on %s"), args[1], args[2], timestamp, datestamp);
33544
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
656 purple_conv_chat_write(PURPLE_CONV_CHAT(convo), "", msg, PURPLE_MESSAGE_SYSTEM | PURPLE_MESSAGE_NO_LINKIFY, time(NULL));
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
657 g_free(timestamp);
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
658 g_free(datestamp);
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
659 g_free(msg);
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
660 }
3780e4cb9738 Print topic setter information at channel join.
Ethan Blanton <elb@pidgin.im>
parents: 33407
diff changeset
661
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
662 void irc_msg_unknown(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
663 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
664 PurpleConnection *gc = purple_account_get_connection(irc->account);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
665 char *buf;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
666
35254
7d0fb0c6d8d4 Add back some checks for gc!=NULL.
Mark Doliner <mark@kingant.net>
parents: 35250
diff changeset
667 g_return_if_fail(gc);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
668
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
669 buf = g_strdup_printf(_("Unknown message '%s'"), args[1]);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
670 purple_notify_error(gc, _("Unknown message"), buf, _("The IRC server received a message it did not understand."));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
671 g_free(buf);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
672 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
673
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
674 void irc_msg_names(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
675 {
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
676 char *names, *cur, *end, *tmp, *msg;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
677 PurpleConversation *convo;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
678
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
679 if (purple_strequal(name, "366")) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
680 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY, args[1], irc->account);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
681 if (!convo) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
682 purple_debug(PURPLE_DEBUG_ERROR, "irc", "Got a NAMES list for %s, which doesn't exist\n", args[1]);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
683 g_string_free(irc->names, TRUE);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
684 irc->names = NULL;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
685 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
686 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
687
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
688 names = cur = g_string_free(irc->names, FALSE);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
689 irc->names = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
690 if (purple_conversation_get_data(convo, IRC_NAMES_FLAG)) {
11026
1f13c483db00 [gaim-migrate @ 12901]
Daniel Atallah <datallah@pidgin.im>
parents: 10816
diff changeset
691 msg = g_strdup_printf(_("Users on %s: %s"), args[1], names ? names : "");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
692 if (purple_conversation_get_type(convo) == PURPLE_CONV_TYPE_CHAT)
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
693 purple_conv_chat_write(PURPLE_CONV_CHAT(convo), "", msg, PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NO_LOG, time(NULL));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
694 else
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
695 purple_conv_im_write(PURPLE_CONV_IM(convo), "", msg, PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NO_LOG, time(NULL));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
696 g_free(msg);
32019
15434d17f320 Fix potential crash when NAMES is empty.
James McLaughlin <jamie@lacewing-project.org>
parents: 31936
diff changeset
697 } else if (cur != NULL) {
6407
d67b6a6ba7d2 [gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents: 6357
diff changeset
698 GList *users = NULL;
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
699 GList *flags = NULL;
6407
d67b6a6ba7d2 [gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents: 6357
diff changeset
700
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
701 while (*cur) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
702 PurpleConvChatBuddyFlags f = PURPLE_CBFLAGS_NONE;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
703 end = strchr(cur, ' ');
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
704 if (!end)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
705 end = cur + strlen(cur);
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
706 if (*cur == '@') {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
707 f = PURPLE_CBFLAGS_OP;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
708 cur++;
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
709 } else if (*cur == '%') {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
710 f = PURPLE_CBFLAGS_HALFOP;
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
711 cur++;
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
712 } else if(*cur == '+') {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
713 f = PURPLE_CBFLAGS_VOICE;
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
714 cur++;
16167
8536102557ba Make non-standard mode characters support connection-specific instead of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15884
diff changeset
715 } else if(irc->mode_chars
8536102557ba Make non-standard mode characters support connection-specific instead of
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15884
diff changeset
716 && strchr(irc->mode_chars, *cur)) {
22471
aa32d9ed764d Give IRC channel owners the founder icon on networks that report supporting
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21736
diff changeset
717 if (*cur == '~')
aa32d9ed764d Give IRC channel owners the founder icon on networks that report supporting
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21736
diff changeset
718 f = PURPLE_CBFLAGS_FOUNDER;
15501
8547fa591578 Recognize non-standard mode characters communicated in an 005 numeric for IRC
Ethan Blanton <elb@pidgin.im>
parents: 15444
diff changeset
719 cur++;
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
720 }
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
721 tmp = g_strndup(cur, end - cur);
11869
e77f2f29b09d [gaim-migrate @ 14160]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11535
diff changeset
722 users = g_list_prepend(users, tmp);
e77f2f29b09d [gaim-migrate @ 14160]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11535
diff changeset
723 flags = g_list_prepend(flags, GINT_TO_POINTER(f));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
724 cur = end;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
725 if (*cur)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
726 cur++;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
727 }
6407
d67b6a6ba7d2 [gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents: 6357
diff changeset
728
d67b6a6ba7d2 [gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents: 6357
diff changeset
729 if (users != NULL) {
d67b6a6ba7d2 [gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents: 6357
diff changeset
730 GList *l;
d67b6a6ba7d2 [gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents: 6357
diff changeset
731
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
732 purple_conv_chat_add_users(PURPLE_CONV_CHAT(convo), users, NULL, flags, FALSE);
6407
d67b6a6ba7d2 [gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents: 6357
diff changeset
733
d67b6a6ba7d2 [gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents: 6357
diff changeset
734 for (l = users; l != NULL; l = l->next)
d67b6a6ba7d2 [gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents: 6357
diff changeset
735 g_free(l->data);
d67b6a6ba7d2 [gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents: 6357
diff changeset
736
d67b6a6ba7d2 [gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents: 6357
diff changeset
737 g_list_free(users);
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
738 g_list_free(flags);
6407
d67b6a6ba7d2 [gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents: 6357
diff changeset
739 }
15516
07e9a078cc06 This makes IRC /names handling generally more robust, as well as
Ethan Blanton <elb@pidgin.im>
parents: 15508
diff changeset
740
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
741 purple_conversation_set_data(convo, IRC_NAMES_FLAG,
15516
07e9a078cc06 This makes IRC /names handling generally more robust, as well as
Ethan Blanton <elb@pidgin.im>
parents: 15508
diff changeset
742 GINT_TO_POINTER(TRUE));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
743 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
744 g_free(names);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
745 } else {
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
746 if (!irc->names)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
747 irc->names = g_string_new("");
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
748
15313
b6ae2956a561 [gaim-migrate @ 18041]
Ethan Blanton <elb@pidgin.im>
parents: 15215
diff changeset
749 if (irc->names->len && irc->names->str[irc->names->len - 1] != ' ')
b6ae2956a561 [gaim-migrate @ 18041]
Ethan Blanton <elb@pidgin.im>
parents: 15215
diff changeset
750 irc->names = g_string_append_c(irc->names, ' ');
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
751 irc->names = g_string_append(irc->names, args[3]);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
752 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
753 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
754
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
755 void irc_msg_motd(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
756 {
10774
f4238d6312ff [gaim-migrate @ 12383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
757 char *escaped;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
758
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
759 if (purple_strequal(name, "375")) {
38915
3236720b4eb7 irc: null irc->motd after freeing it
dx <dx@dxzone.com.ar>
parents: 38271
diff changeset
760 if (irc->motd) {
15508
51a669b06193 This should fix up IRC logins for servers which do not provide an
Ethan Blanton <elb@pidgin.im>
parents: 15501
diff changeset
761 g_string_free(irc->motd, TRUE);
38915
3236720b4eb7 irc: null irc->motd after freeing it
dx <dx@dxzone.com.ar>
parents: 38271
diff changeset
762 irc->motd = NULL;
3236720b4eb7 irc: null irc->motd after freeing it
dx <dx@dxzone.com.ar>
parents: 38271
diff changeset
763 }
15508
51a669b06193 This should fix up IRC logins for servers which do not provide an
Ethan Blanton <elb@pidgin.im>
parents: 15501
diff changeset
764 irc->motd = g_string_new("");
51a669b06193 This should fix up IRC logins for servers which do not provide an
Ethan Blanton <elb@pidgin.im>
parents: 15501
diff changeset
765 return;
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
766 } else if (purple_strequal(name, "376")) {
17169
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
767 /* dircproxy 1.0.5 does not send 251 on reconnection, so
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
768 * finalize the connection here if it is not already done. */
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
769 irc_connected(irc, args[0]);
15508
51a669b06193 This should fix up IRC logins for servers which do not provide an
Ethan Blanton <elb@pidgin.im>
parents: 15501
diff changeset
770 return;
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
771 } else if (purple_strequal(name, "422")) {
31229
4bef370d8a92 Process 422 (ERR_NOMOTD) as a valid replacement for an actual MOTD
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30270
diff changeset
772 /* in case there is no 251, and no MOTD set, finalize the connection.
4bef370d8a92 Process 422 (ERR_NOMOTD) as a valid replacement for an actual MOTD
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30270
diff changeset
773 * (and clear the motd for good measure). */
31294
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 31284
diff changeset
774
38915
3236720b4eb7 irc: null irc->motd after freeing it
dx <dx@dxzone.com.ar>
parents: 38271
diff changeset
775 if (irc->motd) {
31229
4bef370d8a92 Process 422 (ERR_NOMOTD) as a valid replacement for an actual MOTD
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30270
diff changeset
776 g_string_free(irc->motd, TRUE);
38915
3236720b4eb7 irc: null irc->motd after freeing it
dx <dx@dxzone.com.ar>
parents: 38271
diff changeset
777 irc->motd = NULL;
3236720b4eb7 irc: null irc->motd after freeing it
dx <dx@dxzone.com.ar>
parents: 38271
diff changeset
778 }
31294
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 31284
diff changeset
779
31229
4bef370d8a92 Process 422 (ERR_NOMOTD) as a valid replacement for an actual MOTD
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30270
diff changeset
780 irc_connected(irc, args[0]);
4bef370d8a92 Process 422 (ERR_NOMOTD) as a valid replacement for an actual MOTD
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 30270
diff changeset
781 return;
15508
51a669b06193 This should fix up IRC logins for servers which do not provide an
Ethan Blanton <elb@pidgin.im>
parents: 15501
diff changeset
782 }
51a669b06193 This should fix up IRC logins for servers which do not provide an
Ethan Blanton <elb@pidgin.im>
parents: 15501
diff changeset
783
51a669b06193 This should fix up IRC logins for servers which do not provide an
Ethan Blanton <elb@pidgin.im>
parents: 15501
diff changeset
784 if (!irc->motd) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
785 purple_debug_error("irc", "IRC server sent MOTD without STARTMOTD\n");
15508
51a669b06193 This should fix up IRC logins for servers which do not provide an
Ethan Blanton <elb@pidgin.im>
parents: 15501
diff changeset
786 return;
51a669b06193 This should fix up IRC logins for servers which do not provide an
Ethan Blanton <elb@pidgin.im>
parents: 15501
diff changeset
787 }
51a669b06193 This should fix up IRC logins for servers which do not provide an
Ethan Blanton <elb@pidgin.im>
parents: 15501
diff changeset
788
17169
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
789 if (!args[1])
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
790 return;
daa8fdad4564 Fix up IRC connections with dircproxy by allowing 376 to indicate success.
Ethan Blanton <elb@pidgin.im>
parents: 16993
diff changeset
791
10774
f4238d6312ff [gaim-migrate @ 12383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
792 escaped = g_markup_escape_text(args[1], -1);
f4238d6312ff [gaim-migrate @ 12383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
793 g_string_append_printf(irc->motd, "%s<br>", escaped);
f4238d6312ff [gaim-migrate @ 12383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
794 g_free(escaped);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
795 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
796
10564
1ee5ae99711d [gaim-migrate @ 11946]
Don Seiler <rizzo@gentoo.org>
parents: 10551
diff changeset
797 void irc_msg_time(struct irc_conn *irc, const char *name, const char *from, char **args)
1ee5ae99711d [gaim-migrate @ 11946]
Don Seiler <rizzo@gentoo.org>
parents: 10551
diff changeset
798 {
35249
5845d9fa7084 IRC: fill required command parameter counts (part 2)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35248
diff changeset
799 PurpleConnection *gc = purple_account_get_connection(irc->account);
10564
1ee5ae99711d [gaim-migrate @ 11946]
Don Seiler <rizzo@gentoo.org>
parents: 10551
diff changeset
800
35254
7d0fb0c6d8d4 Add back some checks for gc!=NULL.
Mark Doliner <mark@kingant.net>
parents: 35250
diff changeset
801 g_return_if_fail(gc);
10564
1ee5ae99711d [gaim-migrate @ 11946]
Don Seiler <rizzo@gentoo.org>
parents: 10551
diff changeset
802
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
803 purple_notify_message(gc, PURPLE_NOTIFY_MSG_INFO, _("Time Response"),
10564
1ee5ae99711d [gaim-migrate @ 11946]
Don Seiler <rizzo@gentoo.org>
parents: 10551
diff changeset
804 _("The IRC server's local time is:"),
1ee5ae99711d [gaim-migrate @ 11946]
Don Seiler <rizzo@gentoo.org>
parents: 10551
diff changeset
805 args[2], NULL, NULL);
1ee5ae99711d [gaim-migrate @ 11946]
Don Seiler <rizzo@gentoo.org>
parents: 10551
diff changeset
806 }
1ee5ae99711d [gaim-migrate @ 11946]
Don Seiler <rizzo@gentoo.org>
parents: 10551
diff changeset
807
7877
e523a7081aaf [gaim-migrate @ 8531]
Ethan Blanton <elb@pidgin.im>
parents: 7118
diff changeset
808 void irc_msg_nochan(struct irc_conn *irc, const char *name, const char *from, char **args)
e523a7081aaf [gaim-migrate @ 8531]
Ethan Blanton <elb@pidgin.im>
parents: 7118
diff changeset
809 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
810 PurpleConnection *gc = purple_account_get_connection(irc->account);
7877
e523a7081aaf [gaim-migrate @ 8531]
Ethan Blanton <elb@pidgin.im>
parents: 7118
diff changeset
811
35254
7d0fb0c6d8d4 Add back some checks for gc!=NULL.
Mark Doliner <mark@kingant.net>
parents: 35250
diff changeset
812 g_return_if_fail(gc);
7877
e523a7081aaf [gaim-migrate @ 8531]
Ethan Blanton <elb@pidgin.im>
parents: 7118
diff changeset
813
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
814 purple_notify_error(gc, NULL, _("No such channel"), args[1]);
7877
e523a7081aaf [gaim-migrate @ 8531]
Ethan Blanton <elb@pidgin.im>
parents: 7118
diff changeset
815 }
e523a7081aaf [gaim-migrate @ 8531]
Ethan Blanton <elb@pidgin.im>
parents: 7118
diff changeset
816
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
817 void irc_msg_nonick(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
818 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
819 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
820 PurpleConversation *convo;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
821
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
822 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY, args[1], irc->account);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
823 if (convo) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
824 if (purple_conversation_get_type(convo) == PURPLE_CONV_TYPE_CHAT) /* does this happen? */
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
825 purple_conv_chat_write(PURPLE_CONV_CHAT(convo), args[1], _("no such channel"),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
826 PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NO_LOG, time(NULL));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
827 else
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
828 purple_conv_im_write(PURPLE_CONV_IM(convo), args[1], _("User is not logged in"),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
829 PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NO_LOG, time(NULL));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
830 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
831 if ((gc = purple_account_get_connection(irc->account)) == NULL)
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
832 return;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
833 purple_notify_error(gc, NULL, _("No such nick or channel"), args[1]);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
834 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
835
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
836 if (irc->whois.nick && !purple_utf8_strcasecmp(irc->whois.nick, args[1])) {
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
837 g_free(irc->whois.nick);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
838 irc->whois.nick = NULL;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
839 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
840 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
841
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
842 void irc_msg_nosend(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
843 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
844 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
845 PurpleConversation *convo;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
846
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
847 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[1], irc->account);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
848 if (convo) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
849 purple_conv_chat_write(PURPLE_CONV_CHAT(convo), args[1], args[2], PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NO_LOG, time(NULL));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
850 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
851 if ((gc = purple_account_get_connection(irc->account)) == NULL)
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
852 return;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
853 purple_notify_error(gc, NULL, _("Could not send"), args[2]);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
854 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
855 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
856
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
857 void irc_msg_notinchan(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
858 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
859 PurpleConversation *convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[1], irc->account);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
860
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
861 purple_debug(PURPLE_DEBUG_INFO, "irc", "We're apparently not in %s, but tried to use it\n", args[1]);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
862 if (convo) {
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
863 /*g_slist_remove(irc->gc->buddy_chats, convo);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
864 purple_conversation_set_account(convo, NULL);*/
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
865 purple_conv_chat_write(PURPLE_CONV_CHAT(convo), args[1], args[2], PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NO_LOG, time(NULL));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
866 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
867 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
868
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
869 void irc_msg_notop(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
870 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
871 PurpleConversation *convo;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
872
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
873 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[1], irc->account);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
874 if (!convo)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
875 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
876
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
877 purple_conv_chat_write(PURPLE_CONV_CHAT(convo), "", args[2], PURPLE_MESSAGE_SYSTEM, time(NULL));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
878 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
879
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
880 void irc_msg_invite(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
881 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
882 PurpleConnection *gc = purple_account_get_connection(irc->account);
22876
824abbeefcc2 Avoid allocating and freeing stuff unnecessarily.
Daniel Atallah <datallah@pidgin.im>
parents: 22870
diff changeset
883 GHashTable *components;
824abbeefcc2 Avoid allocating and freeing stuff unnecessarily.
Daniel Atallah <datallah@pidgin.im>
parents: 22870
diff changeset
884 gchar *nick;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
885
35248
9f132a6855cd IRC: fill required command parameter counts (part 1)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 33803
diff changeset
886 g_return_if_fail(gc);
22876
824abbeefcc2 Avoid allocating and freeing stuff unnecessarily.
Daniel Atallah <datallah@pidgin.im>
parents: 22870
diff changeset
887
824abbeefcc2 Avoid allocating and freeing stuff unnecessarily.
Daniel Atallah <datallah@pidgin.im>
parents: 22870
diff changeset
888 components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
824abbeefcc2 Avoid allocating and freeing stuff unnecessarily.
Daniel Atallah <datallah@pidgin.im>
parents: 22870
diff changeset
889 nick = irc_mask_nick(from);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
890
22870
25b482330fec Use g_strdup to match the subsequent g_free.
Daniel Atallah <datallah@pidgin.im>
parents: 22798
diff changeset
891 g_hash_table_insert(components, g_strdup("channel"), g_strdup(args[1]));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
892
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
893 serv_got_chat_invite(gc, args[1], nick, NULL, components);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
894 g_free(nick);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
895 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
896
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
897 void irc_msg_inviteonly(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
898 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
899 PurpleConnection *gc = purple_account_get_connection(irc->account);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
900 char *buf;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
901
35254
7d0fb0c6d8d4 Add back some checks for gc!=NULL.
Mark Doliner <mark@kingant.net>
parents: 35250
diff changeset
902 g_return_if_fail(gc);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
903
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
904 buf = g_strdup_printf(_("Joining %s requires an invitation."), args[1]);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
905 purple_notify_error(gc, _("Invitation only"), _("Invitation only"), buf);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
906 g_free(buf);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
907 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
908
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
909 void irc_msg_ison(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
910 {
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
911 char **nicks;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
912 struct irc_buddy *ib;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
913 int i;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
914
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
915 nicks = g_strsplit(args[1], " ", -1);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
916 for (i = 0; nicks[i]; i++) {
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
917 if ((ib = g_hash_table_lookup(irc->buddies, (gconstpointer)nicks[i])) == NULL) {
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
918 continue;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
919 }
31284
893f2d78d438 Prevent sending ISON messages larger than 512 bytes. Fixes #9692.
Jeffrey Honig <jch@honig.net>
parents: 31229
diff changeset
920 ib->new_online_status = TRUE;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
921 }
6350
22dfc953f2fb [gaim-migrate @ 6849]
Ethan Blanton <elb@pidgin.im>
parents: 6333
diff changeset
922 g_strfreev(nicks);
22dfc953f2fb [gaim-migrate @ 6849]
Ethan Blanton <elb@pidgin.im>
parents: 6333
diff changeset
923
31284
893f2d78d438 Prevent sending ISON messages larger than 512 bytes. Fixes #9692.
Jeffrey Honig <jch@honig.net>
parents: 31229
diff changeset
924 if (irc->ison_outstanding)
893f2d78d438 Prevent sending ISON messages larger than 512 bytes. Fixes #9692.
Jeffrey Honig <jch@honig.net>
parents: 31229
diff changeset
925 irc_buddy_query(irc);
893f2d78d438 Prevent sending ISON messages larger than 512 bytes. Fixes #9692.
Jeffrey Honig <jch@honig.net>
parents: 31229
diff changeset
926
893f2d78d438 Prevent sending ISON messages larger than 512 bytes. Fixes #9692.
Jeffrey Honig <jch@honig.net>
parents: 31229
diff changeset
927 if (!irc->ison_outstanding)
893f2d78d438 Prevent sending ISON messages larger than 512 bytes. Fixes #9692.
Jeffrey Honig <jch@honig.net>
parents: 31229
diff changeset
928 g_hash_table_foreach(irc->buddies, (GHFunc)irc_buddy_status, (gpointer)irc);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
929 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
930
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
931 static void irc_buddy_status(char *name, struct irc_buddy *ib, struct irc_conn *irc)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
932 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
933 PurpleConnection *gc = purple_account_get_connection(irc->account);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
934 PurpleBuddy *buddy = purple_find_buddy(irc->account, name);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
935
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
936 if (!gc || !buddy)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
937 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
938
31284
893f2d78d438 Prevent sending ISON messages larger than 512 bytes. Fixes #9692.
Jeffrey Honig <jch@honig.net>
parents: 31229
diff changeset
939 if (ib->online && !ib->new_online_status) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
940 purple_prpl_got_user_status(irc->account, name, "offline", NULL);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
941 ib->online = FALSE;
31284
893f2d78d438 Prevent sending ISON messages larger than 512 bytes. Fixes #9692.
Jeffrey Honig <jch@honig.net>
parents: 31229
diff changeset
942 } else if (!ib->online && ib->new_online_status) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
943 purple_prpl_got_user_status(irc->account, name, "available", NULL);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
944 ib->online = TRUE;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
945 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
946 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
947
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
948 void irc_msg_join(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
949 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
950 PurpleConnection *gc = purple_account_get_connection(irc->account);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
951 PurpleConversation *convo;
31565
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
952 PurpleConvChat *chat;
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
953 PurpleConvChatBuddy *cb;
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
954
35248
9f132a6855cd IRC: fill required command parameter counts (part 1)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 33803
diff changeset
955 char *nick, *userhost, *buf;
9238
b7c5daf5748e [gaim-migrate @ 10036]
Tim Ringenbach <marv@pidgin.im>
parents: 9057
diff changeset
956 struct irc_buddy *ib;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
957 static int id = 1;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
958
35248
9f132a6855cd IRC: fill required command parameter counts (part 1)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 33803
diff changeset
959 g_return_if_fail(gc);
9f132a6855cd IRC: fill required command parameter counts (part 1)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 33803
diff changeset
960
9f132a6855cd IRC: fill required command parameter counts (part 1)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 33803
diff changeset
961 nick = irc_mask_nick(from);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
962
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
963 if (!purple_utf8_strcasecmp(nick, purple_connection_get_display_name(gc))) {
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
964 /* We are joining a channel for the first time */
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
965 serv_got_joined_chat(gc, id++, args[0]);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
966 g_free(nick);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
967 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT,
13938
dbafabe02e9e [gaim-migrate @ 16351]
Ethan Blanton <elb@pidgin.im>
parents: 13786
diff changeset
968 args[0],
dbafabe02e9e [gaim-migrate @ 16351]
Ethan Blanton <elb@pidgin.im>
parents: 13786
diff changeset
969 irc->account);
15516
07e9a078cc06 This makes IRC /names handling generally more robust, as well as
Ethan Blanton <elb@pidgin.im>
parents: 15508
diff changeset
970
13938
dbafabe02e9e [gaim-migrate @ 16351]
Ethan Blanton <elb@pidgin.im>
parents: 13786
diff changeset
971 if (convo == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
972 purple_debug_error("irc", "tried to join %s but couldn't\n", args[0]);
13938
dbafabe02e9e [gaim-migrate @ 16351]
Ethan Blanton <elb@pidgin.im>
parents: 13786
diff changeset
973 return;
dbafabe02e9e [gaim-migrate @ 16351]
Ethan Blanton <elb@pidgin.im>
parents: 13786
diff changeset
974 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
975 purple_conversation_set_data(convo, IRC_NAMES_FLAG,
15516
07e9a078cc06 This makes IRC /names handling generally more robust, as well as
Ethan Blanton <elb@pidgin.im>
parents: 15508
diff changeset
976 GINT_TO_POINTER(FALSE));
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
977
31565
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
978 // Get the real name and user host for all participants.
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
979 buf = irc_format(irc, "vc", "WHO", args[0]);
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
980 irc_send(irc, buf);
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
981 g_free(buf);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
982
20194
fee478bb059b applied changes from 26c05ed157a02643cbb12b04045422b123312bcf
Ethan Blanton <elb@pidgin.im>
parents: 19859
diff changeset
983 /* Until purple_conversation_present does something that
24763
67d9d4c975c0 Replace spaces wth tabs in indentation and tabs with spaces in line continuations.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24416
diff changeset
984 * one would expect in Pidgin, this call produces buggy
67d9d4c975c0 Replace spaces wth tabs in indentation and tabs with spaces in line continuations.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24416
diff changeset
985 * behavior both for the /join and auto-join cases. */
20194
fee478bb059b applied changes from 26c05ed157a02643cbb12b04045422b123312bcf
Ethan Blanton <elb@pidgin.im>
parents: 19859
diff changeset
986 /* purple_conversation_present(convo); */
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
987 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
988 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
989
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
990 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[0], irc->account);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
991 if (convo == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
992 purple_debug(PURPLE_DEBUG_ERROR, "irc", "JOIN for %s failed\n", args[0]);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
993 g_free(nick);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
994 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
995 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
996
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
997 userhost = irc_mask_userhost(from);
31565
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
998 chat = PURPLE_CONV_CHAT(convo);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
999
31565
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
1000 purple_conv_chat_add_user(chat, nick, userhost, PURPLE_CBFLAGS_NONE, TRUE);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
1001
31565
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
1002 cb = purple_conv_chat_cb_find(chat, nick);
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
1003
31565
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
1004 if (cb) {
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
1005 purple_conv_chat_cb_set_attribute(chat, cb, "userhost", userhost);
31565
1138b2c998ec propagate from branch 'im.pidgin.pidgin' (head e131c2da768d5bd01e4bcb33b488a43ffd378208)
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31451
diff changeset
1006 }
38258
9a6551eba09c Replace !strcmp() with purple_strequal()
qarkai <qarkai@gmail.com>
parents: 38210
diff changeset
1007
9238
b7c5daf5748e [gaim-migrate @ 10036]
Tim Ringenbach <marv@pidgin.im>
parents: 9057
diff changeset
1008 if ((ib = g_hash_table_lookup(irc->buddies, nick)) != NULL) {
31284
893f2d78d438 Prevent sending ISON messages larger than 512 bytes. Fixes #9692.
Jeffrey Honig <jch@honig.net>
parents: 31229
diff changeset
1009 ib->new_online_status = TRUE;
9238
b7c5daf5748e [gaim-migrate @ 10036]
Tim Ringenbach <marv@pidgin.im>
parents: 9057
diff changeset
1010 irc_buddy_status(nick, ib, irc);
b7c5daf5748e [gaim-migrate @ 10036]
Tim Ringenbach <marv@pidgin.im>
parents: 9057
diff changeset
1011 }
b7c5daf5748e [gaim-migrate @ 10036]
Tim Ringenbach <marv@pidgin.im>
parents: 9057
diff changeset
1012
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1013 g_free(userhost);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1014 g_free(nick);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1015 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1016
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1017 void irc_msg_kick(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1018 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1019 PurpleConnection *gc = purple_account_get_connection(irc->account);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1020 PurpleConversation *convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[0], irc->account);
35248
9f132a6855cd IRC: fill required command parameter counts (part 1)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 33803
diff changeset
1021 char *nick, *buf;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1022
35248
9f132a6855cd IRC: fill required command parameter counts (part 1)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 33803
diff changeset
1023 g_return_if_fail(gc);
9f132a6855cd IRC: fill required command parameter counts (part 1)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 33803
diff changeset
1024
9f132a6855cd IRC: fill required command parameter counts (part 1)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 33803
diff changeset
1025 nick = irc_mask_nick(from);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1026
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1027 if (!convo) {
30270
8380aae8b132 I before E, except after C
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 29286
diff changeset
1028 purple_debug(PURPLE_DEBUG_ERROR, "irc", "Received a KICK for unknown channel %s\n", args[0]);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1029 g_free(nick);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1030 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1031 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1032
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1033 if (!purple_utf8_strcasecmp(purple_connection_get_display_name(gc), args[1])) {
12855
5215e8d13a49 [gaim-migrate @ 15206]
Richard Laager <rlaager@pidgin.im>
parents: 12216
diff changeset
1034 buf = g_strdup_printf(_("You have been kicked by %s: (%s)"), nick, args[2]);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1035 purple_conv_chat_write(PURPLE_CONV_CHAT(convo), args[0], buf, PURPLE_MESSAGE_SYSTEM, time(NULL));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1036 g_free(buf);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1037 serv_got_chat_left(gc, purple_conv_chat_get_id(PURPLE_CONV_CHAT(convo)));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1038 } else {
12855
5215e8d13a49 [gaim-migrate @ 15206]
Richard Laager <rlaager@pidgin.im>
parents: 12216
diff changeset
1039 buf = g_strdup_printf(_("Kicked by %s (%s)"), nick, args[2]);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1040 purple_conv_chat_remove_user(PURPLE_CONV_CHAT(convo), args[1], buf);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1041 g_free(buf);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1042 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1043
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1044 g_free(nick);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1045 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1046 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1047
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1048 void irc_msg_mode(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1049 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1050 PurpleConversation *convo;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1051 char *nick = irc_mask_nick(from), *buf;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1052
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1053 if (*args[0] == '#' || *args[0] == '&') { /* Channel */
10774
f4238d6312ff [gaim-migrate @ 12383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
1054 char *escaped;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1055 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[0], irc->account);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1056 if (!convo) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1057 purple_debug(PURPLE_DEBUG_ERROR, "irc", "MODE received for %s, which we are not in\n", args[0]);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1058 g_free(nick);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1059 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1060 }
10774
f4238d6312ff [gaim-migrate @ 12383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
1061 escaped = (args[2] != NULL) ? g_markup_escape_text(args[2], -1) : NULL;
f4238d6312ff [gaim-migrate @ 12383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
1062 buf = g_strdup_printf(_("mode (%s %s) by %s"), args[1], escaped ? escaped : "", nick);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1063 purple_conv_chat_write(PURPLE_CONV_CHAT(convo), args[0], buf, PURPLE_MESSAGE_SYSTEM, time(NULL));
10774
f4238d6312ff [gaim-migrate @ 12383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
1064 g_free(escaped);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1065 g_free(buf);
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1066 if(args[2]) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1067 PurpleConvChatBuddyFlags newflag, flags;
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1068 char *mcur, *cur, *end, *user;
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1069 gboolean add = FALSE;
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1070 mcur = args[1];
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1071 cur = args[2];
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1072 while (*cur && *mcur) {
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1073 if ((*mcur == '+') || (*mcur == '-')) {
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1074 add = (*mcur == '+') ? TRUE : FALSE;
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1075 mcur++;
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1076 continue;
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1077 }
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1078 end = strchr(cur, ' ');
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1079 if (!end)
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1080 end = cur + strlen(cur);
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1081 user = g_strndup(cur, end - cur);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1082 flags = purple_conv_chat_user_get_flags(PURPLE_CONV_CHAT(convo), user);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1083 newflag = PURPLE_CBFLAGS_NONE;
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1084 if (*mcur == 'o')
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1085 newflag = PURPLE_CBFLAGS_OP;
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1086 else if (*mcur =='h')
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1087 newflag = PURPLE_CBFLAGS_HALFOP;
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1088 else if (*mcur == 'v')
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1089 newflag = PURPLE_CBFLAGS_VOICE;
22471
aa32d9ed764d Give IRC channel owners the founder icon on networks that report supporting
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21736
diff changeset
1090 else if(irc->mode_chars
aa32d9ed764d Give IRC channel owners the founder icon on networks that report supporting
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21736
diff changeset
1091 && strchr(irc->mode_chars, '~') && (*mcur == 'q'))
aa32d9ed764d Give IRC channel owners the founder icon on networks that report supporting
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 21736
diff changeset
1092 newflag = PURPLE_CBFLAGS_FOUNDER;
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1093 if (newflag) {
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1094 if (add)
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1095 flags |= newflag;
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1096 else
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1097 flags &= ~newflag;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1098 purple_conv_chat_user_set_flags(PURPLE_CONV_CHAT(convo), user, flags);
9554
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1099 }
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1100 g_free(user);
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1101 cur = end;
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1102 if (*cur)
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1103 cur++;
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1104 if (*mcur)
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1105 mcur++;
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1106 }
1609ba3612c3 [gaim-migrate @ 10387]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9518
diff changeset
1107 }
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1108 } else { /* User */
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1109 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1110 g_free(nick);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1111 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1112
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1113 void irc_msg_nick(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1114 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1115 PurpleConnection *gc = purple_account_get_connection(irc->account);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1116 PurpleConversation *conv;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1117 GSList *chats;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1118 char *nick = irc_mask_nick(from);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1119
23118
7ba846a8187f Fix irc nick collision handling, as requested by that demanding user elb.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22994
diff changeset
1120 irc->nickused = FALSE;
7ba846a8187f Fix irc nick collision handling, as requested by that demanding user elb.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22994
diff changeset
1121
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1122 if (!gc) {
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1123 g_free(nick);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1124 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1125 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1126 chats = gc->buddy_chats;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1127
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1128 if (!purple_utf8_strcasecmp(nick, purple_connection_get_display_name(gc))) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1129 purple_connection_set_display_name(gc, args[0]);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1130 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1131
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1132 while (chats) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1133 PurpleConvChat *chat = PURPLE_CONV_CHAT(chats->data);
9593
4231c290edfe [gaim-migrate @ 10436]
Ethan Blanton <elb@pidgin.im>
parents: 9589
diff changeset
1134 /* This is ugly ... */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1135 if (purple_conv_chat_find_user(chat, nick))
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1136 purple_conv_chat_rename_user(chat, nick, args[0]);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1137 chats = chats->next;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1138 }
10617
c9d55f2363c4 [gaim-migrate @ 12081]
Ethan Blanton <elb@pidgin.im>
parents: 10564
diff changeset
1139
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1140 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, nick,
10617
c9d55f2363c4 [gaim-migrate @ 12081]
Ethan Blanton <elb@pidgin.im>
parents: 10564
diff changeset
1141 irc->account);
c9d55f2363c4 [gaim-migrate @ 12081]
Ethan Blanton <elb@pidgin.im>
parents: 10564
diff changeset
1142 if (conv != NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1143 purple_conversation_set_name(conv, args[0]);
10617
c9d55f2363c4 [gaim-migrate @ 12081]
Ethan Blanton <elb@pidgin.im>
parents: 10564
diff changeset
1144
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1145 g_free(nick);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1146 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1147
10633
ac455de21138 [gaim-migrate @ 12113]
Ethan Blanton <elb@pidgin.im>
parents: 10617
diff changeset
1148 void irc_msg_badnick(struct irc_conn *irc, const char *name, const char *from, char **args)
ac455de21138 [gaim-migrate @ 12113]
Ethan Blanton <elb@pidgin.im>
parents: 10617
diff changeset
1149 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1150 PurpleConnection *gc = purple_account_get_connection(irc->account);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1151 if (purple_connection_get_state(gc) == PURPLE_CONNECTED) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1152 purple_notify_error(gc, _("Invalid nickname"),
13057
329564dcd96c [gaim-migrate @ 15419]
Ethan Blanton <elb@pidgin.im>
parents: 12855
diff changeset
1153 _("Invalid nickname"),
329564dcd96c [gaim-migrate @ 15419]
Ethan Blanton <elb@pidgin.im>
parents: 12855
diff changeset
1154 _("Your selected nickname was rejected by the server. It probably contains invalid characters."));
329564dcd96c [gaim-migrate @ 15419]
Ethan Blanton <elb@pidgin.im>
parents: 12855
diff changeset
1155
329564dcd96c [gaim-migrate @ 15419]
Ethan Blanton <elb@pidgin.im>
parents: 12855
diff changeset
1156 } else {
21279
40685e1f50ca Rename:
Will Thompson <resiak@pidgin.im>
parents: 21152
diff changeset
1157 purple_connection_error_reason (gc,
40685e1f50ca Rename:
Will Thompson <resiak@pidgin.im>
parents: 21152
diff changeset
1158 PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
20440
42e5e5445a2f Move prpl-irc to purple_connection_error_reason.
Will Thompson <resiak@pidgin.im>
parents: 19859
diff changeset
1159 _("Your selected account name was rejected by the server. It probably contains invalid characters."));
13057
329564dcd96c [gaim-migrate @ 15419]
Ethan Blanton <elb@pidgin.im>
parents: 12855
diff changeset
1160 }
10633
ac455de21138 [gaim-migrate @ 12113]
Ethan Blanton <elb@pidgin.im>
parents: 10617
diff changeset
1161 }
ac455de21138 [gaim-migrate @ 12113]
Ethan Blanton <elb@pidgin.im>
parents: 10617
diff changeset
1162
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1163 void irc_msg_nickused(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1164 {
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1165 char *newnick, *buf, *end;
25705
8bb42bb17cc8 applied changes from 4b0e16d96a9ee2554770c4400445bee7ceb49d9a
Ethan Blanton <elb@pidgin.im>
parents: 25703
diff changeset
1166 PurpleConnection *gc = purple_account_get_connection(irc->account);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1167
25705
8bb42bb17cc8 applied changes from 4b0e16d96a9ee2554770c4400445bee7ceb49d9a
Ethan Blanton <elb@pidgin.im>
parents: 25703
diff changeset
1168 if (gc && purple_connection_get_state(gc) == PURPLE_CONNECTED) {
8bb42bb17cc8 applied changes from 4b0e16d96a9ee2554770c4400445bee7ceb49d9a
Ethan Blanton <elb@pidgin.im>
parents: 25703
diff changeset
1169 /* We only want to do the following dance if the connection
8bb42bb17cc8 applied changes from 4b0e16d96a9ee2554770c4400445bee7ceb49d9a
Ethan Blanton <elb@pidgin.im>
parents: 25703
diff changeset
1170 has not been successfully completed. If it has, just
8bb42bb17cc8 applied changes from 4b0e16d96a9ee2554770c4400445bee7ceb49d9a
Ethan Blanton <elb@pidgin.im>
parents: 25703
diff changeset
1171 notify the user that their /nick command didn't go. */
26825
6d3bb5625183 Notify the user if an IRC /nick command fails, rather than trying fallbacks.
Ethan Blanton <elb@pidgin.im>
parents: 26752
diff changeset
1172 buf = g_strdup_printf(_("The nickname \"%s\" is already being used."),
25705
8bb42bb17cc8 applied changes from 4b0e16d96a9ee2554770c4400445bee7ceb49d9a
Ethan Blanton <elb@pidgin.im>
parents: 25703
diff changeset
1173 irc->reqnick);
26825
6d3bb5625183 Notify the user if an IRC /nick command fails, rather than trying fallbacks.
Ethan Blanton <elb@pidgin.im>
parents: 26752
diff changeset
1174 purple_notify_error(gc, _("Nickname in use"),
6d3bb5625183 Notify the user if an IRC /nick command fails, rather than trying fallbacks.
Ethan Blanton <elb@pidgin.im>
parents: 26752
diff changeset
1175 _("Nickname in use"), buf);
25705
8bb42bb17cc8 applied changes from 4b0e16d96a9ee2554770c4400445bee7ceb49d9a
Ethan Blanton <elb@pidgin.im>
parents: 25703
diff changeset
1176 g_free(buf);
8bb42bb17cc8 applied changes from 4b0e16d96a9ee2554770c4400445bee7ceb49d9a
Ethan Blanton <elb@pidgin.im>
parents: 25703
diff changeset
1177 g_free(irc->reqnick);
25706
cbaf3afc17c6 applied changes from 68cb5581c551eabb57bcdf437642ee9e6786bc64
Ethan Blanton <elb@pidgin.im>
parents: 25705
diff changeset
1178 irc->reqnick = NULL;
25707
e1b69b86aa3c Hand-pluck of 68cb5581c551eabb57bcdf437642ee9e6786bc64
Ethan Blanton <elb@pidgin.im>
parents: 25706
diff changeset
1179 return;
25705
8bb42bb17cc8 applied changes from 4b0e16d96a9ee2554770c4400445bee7ceb49d9a
Ethan Blanton <elb@pidgin.im>
parents: 25703
diff changeset
1180 }
8bb42bb17cc8 applied changes from 4b0e16d96a9ee2554770c4400445bee7ceb49d9a
Ethan Blanton <elb@pidgin.im>
parents: 25703
diff changeset
1181
23118
7ba846a8187f Fix irc nick collision handling, as requested by that demanding user elb.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22994
diff changeset
1182 if (strlen(args[1]) < strlen(irc->reqnick) || irc->nickused)
7ba846a8187f Fix irc nick collision handling, as requested by that demanding user elb.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22994
diff changeset
1183 newnick = g_strdup(args[1]);
7ba846a8187f Fix irc nick collision handling, as requested by that demanding user elb.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22994
diff changeset
1184 else
7ba846a8187f Fix irc nick collision handling, as requested by that demanding user elb.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22994
diff changeset
1185 newnick = g_strdup_printf("%s0", args[1]);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1186 end = newnick + strlen(newnick) - 1;
11386
89c0c029ecfd [gaim-migrate @ 13614]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11338
diff changeset
1187 /* try fallbacks */
89c0c029ecfd [gaim-migrate @ 13614]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11338
diff changeset
1188 if((*end < '9') && (*end >= '1')) {
89c0c029ecfd [gaim-migrate @ 13614]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11338
diff changeset
1189 *end = *end + 1;
89c0c029ecfd [gaim-migrate @ 13614]
Thomas Butter <tbutter@users.sourceforge.net>
parents: 11338
diff changeset
1190 } else *end = '1';
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1191
23118
7ba846a8187f Fix irc nick collision handling, as requested by that demanding user elb.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22994
diff changeset
1192 g_free(irc->reqnick);
7ba846a8187f Fix irc nick collision handling, as requested by that demanding user elb.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22994
diff changeset
1193 irc->reqnick = newnick;
7ba846a8187f Fix irc nick collision handling, as requested by that demanding user elb.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22994
diff changeset
1194 irc->nickused = TRUE;
7ba846a8187f Fix irc nick collision handling, as requested by that demanding user elb.
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 22994
diff changeset
1195
23576
e2978ee98aa7 set the purple connection name to the one we are about to try
Ka-Hing Cheung <khc@pidgin.im>
parents: 23475
diff changeset
1196 purple_connection_set_display_name(
e2978ee98aa7 set the purple connection name to the one we are about to try
Ka-Hing Cheung <khc@pidgin.im>
parents: 23475
diff changeset
1197 purple_account_get_connection(irc->account), newnick);
e2978ee98aa7 set the purple connection name to the one we are about to try
Ka-Hing Cheung <khc@pidgin.im>
parents: 23475
diff changeset
1198
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1199 buf = irc_format(irc, "vn", "NICK", newnick);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1200 irc_send(irc, buf);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1201 g_free(buf);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1202 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1203
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1204 void irc_msg_notice(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1205 {
13525
e5dc8090a9b0 [gaim-migrate @ 15900]
Richard Laager <rlaager@pidgin.im>
parents: 13523
diff changeset
1206 irc_msg_handle_privmsg(irc, name, from, args[0], args[1], TRUE);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1207 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1208
6718
c535c7b09353 [gaim-migrate @ 7245]
Ethan Blanton <elb@pidgin.im>
parents: 6714
diff changeset
1209 void irc_msg_nochangenick(struct irc_conn *irc, const char *name, const char *from, char **args)
c535c7b09353 [gaim-migrate @ 7245]
Ethan Blanton <elb@pidgin.im>
parents: 6714
diff changeset
1210 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1211 PurpleConnection *gc = purple_account_get_connection(irc->account);
6718
c535c7b09353 [gaim-migrate @ 7245]
Ethan Blanton <elb@pidgin.im>
parents: 6714
diff changeset
1212
35254
7d0fb0c6d8d4 Add back some checks for gc!=NULL.
Mark Doliner <mark@kingant.net>
parents: 35250
diff changeset
1213 g_return_if_fail(gc);
6718
c535c7b09353 [gaim-migrate @ 7245]
Ethan Blanton <elb@pidgin.im>
parents: 6714
diff changeset
1214
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1215 purple_notify_error(gc, _("Cannot change nick"), _("Could not change nick"), args[2]);
6718
c535c7b09353 [gaim-migrate @ 7245]
Ethan Blanton <elb@pidgin.im>
parents: 6714
diff changeset
1216 }
c535c7b09353 [gaim-migrate @ 7245]
Ethan Blanton <elb@pidgin.im>
parents: 6714
diff changeset
1217
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1218 void irc_msg_part(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1219 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1220 PurpleConnection *gc = purple_account_get_connection(irc->account);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1221 PurpleConversation *convo;
22983
861402a1fe68 Fix IRC handling of PART without a part message on Undernet IRCds.
Ethan Blanton <elb@pidgin.im>
parents: 22876
diff changeset
1222 char *nick, *msg, *channel;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1223
35248
9f132a6855cd IRC: fill required command parameter counts (part 1)
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 33803
diff changeset
1224 g_return_if_fail(gc);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1225
22983
861402a1fe68 Fix IRC handling of PART without a part message on Undernet IRCds.
Ethan Blanton <elb@pidgin.im>
parents: 22876
diff changeset
1226 /* Undernet likes to :-quote the channel name, for no good reason
24763
67d9d4c975c0 Replace spaces wth tabs in indentation and tabs with spaces in line continuations.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24416
diff changeset
1227 * that I can see. This catches that. */
22983
861402a1fe68 Fix IRC handling of PART without a part message on Undernet IRCds.
Ethan Blanton <elb@pidgin.im>
parents: 22876
diff changeset
1228 channel = (args[0][0] == ':') ? &args[0][1] : args[0];
861402a1fe68 Fix IRC handling of PART without a part message on Undernet IRCds.
Ethan Blanton <elb@pidgin.im>
parents: 22876
diff changeset
1229
861402a1fe68 Fix IRC handling of PART without a part message on Undernet IRCds.
Ethan Blanton <elb@pidgin.im>
parents: 22876
diff changeset
1230 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, channel, irc->account);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1231 if (!convo) {
22983
861402a1fe68 Fix IRC handling of PART without a part message on Undernet IRCds.
Ethan Blanton <elb@pidgin.im>
parents: 22876
diff changeset
1232 purple_debug(PURPLE_DEBUG_INFO, "irc", "Got a PART on %s, which doesn't exist -- probably closed\n", channel);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1233 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1234 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1235
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1236 nick = irc_mask_nick(from);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1237 if (!purple_utf8_strcasecmp(nick, purple_connection_get_display_name(gc))) {
29286
f9996ff32055 irc: Avoid a g_log error when parting a chatroom.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 28493
diff changeset
1238 char *escaped = args[1] ? g_markup_escape_text(args[1], -1) : NULL;
8186
3b37807ed6f2 [gaim-migrate @ 8907]
Ethan Blanton <elb@pidgin.im>
parents: 8163
diff changeset
1239 msg = g_strdup_printf(_("You have parted the channel%s%s"),
24763
67d9d4c975c0 Replace spaces wth tabs in indentation and tabs with spaces in line continuations.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24416
diff changeset
1240 (args[1] && *args[1]) ? ": " : "",
67d9d4c975c0 Replace spaces wth tabs in indentation and tabs with spaces in line continuations.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24416
diff changeset
1241 (escaped && *escaped) ? escaped : "");
12855
5215e8d13a49 [gaim-migrate @ 15206]
Richard Laager <rlaager@pidgin.im>
parents: 12216
diff changeset
1242 g_free(escaped);
22983
861402a1fe68 Fix IRC handling of PART without a part message on Undernet IRCds.
Ethan Blanton <elb@pidgin.im>
parents: 22876
diff changeset
1243 purple_conv_chat_write(PURPLE_CONV_CHAT(convo), channel, msg, PURPLE_MESSAGE_SYSTEM, time(NULL));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1244 g_free(msg);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1245 serv_got_chat_left(gc, purple_conv_chat_get_id(PURPLE_CONV_CHAT(convo)));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1246 } else {
22795
2b1d41a575f5 Strip mIRC formatting codes from PART and QUIT messages.
Ethan Blanton <elb@pidgin.im>
parents: 22471
diff changeset
1247 msg = args[1] ? irc_mirc2txt(args[1]) : NULL;
2b1d41a575f5 Strip mIRC formatting codes from PART and QUIT messages.
Ethan Blanton <elb@pidgin.im>
parents: 22471
diff changeset
1248 purple_conv_chat_remove_user(PURPLE_CONV_CHAT(convo), nick, msg);
2b1d41a575f5 Strip mIRC formatting codes from PART and QUIT messages.
Ethan Blanton <elb@pidgin.im>
parents: 22471
diff changeset
1249 g_free(msg);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1250 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1251 g_free(nick);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1252 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1253
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1254 void irc_msg_ping(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1255 {
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1256 char *buf;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1257
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1258 buf = irc_format(irc, "v:", "PONG", args[0]);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1259 irc_send(irc, buf);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1260 g_free(buf);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1261 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1262
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1263 void irc_msg_pong(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1264 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1265 PurpleConversation *convo;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1266 PurpleConnection *gc;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1267 char **parts, *msg;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1268 time_t oldstamp;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1269
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1270 parts = g_strsplit(args[1], " ", 2);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1271
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1272 if (!parts[0] || !parts[1]) {
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1273 g_strfreev(parts);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1274 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1275 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1276
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1277 if (sscanf(parts[1], "%lu", &oldstamp) != 1) {
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1278 msg = g_strdup(_("Error: invalid PONG from server"));
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1279 } else {
6350
22dfc953f2fb [gaim-migrate @ 6849]
Ethan Blanton <elb@pidgin.im>
parents: 6333
diff changeset
1280 msg = g_strdup_printf(_("PING reply -- Lag: %lu seconds"), time(NULL) - oldstamp);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1281 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1282
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1283 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY, parts[0], irc->account);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1284 g_strfreev(parts);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1285 if (convo) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1286 if (purple_conversation_get_type (convo) == PURPLE_CONV_TYPE_CHAT)
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1287 purple_conv_chat_write(PURPLE_CONV_CHAT(convo), "PONG", msg, PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NO_LOG, time(NULL));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1288 else
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1289 purple_conv_im_write(PURPLE_CONV_IM(convo), "PONG", msg, PURPLE_MESSAGE_SYSTEM|PURPLE_MESSAGE_NO_LOG, time(NULL));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1290 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1291 gc = purple_account_get_connection(irc->account);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1292 if (!gc) {
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1293 g_free(msg);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1294 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1295 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1296 purple_notify_info(gc, NULL, "PONG", msg);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1297 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1298 g_free(msg);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1299 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1300
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1301 void irc_msg_privmsg(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1302 {
13525
e5dc8090a9b0 [gaim-migrate @ 15900]
Richard Laager <rlaager@pidgin.im>
parents: 13523
diff changeset
1303 irc_msg_handle_privmsg(irc, name, from, args[0], args[1], FALSE);
e5dc8090a9b0 [gaim-migrate @ 15900]
Richard Laager <rlaager@pidgin.im>
parents: 13523
diff changeset
1304 }
e5dc8090a9b0 [gaim-migrate @ 15900]
Richard Laager <rlaager@pidgin.im>
parents: 13523
diff changeset
1305
e5dc8090a9b0 [gaim-migrate @ 15900]
Richard Laager <rlaager@pidgin.im>
parents: 13523
diff changeset
1306 static void irc_msg_handle_privmsg(struct irc_conn *irc, const char *name, const char *from, const char *to, const char *rawmsg, gboolean notice)
e5dc8090a9b0 [gaim-migrate @ 15900]
Richard Laager <rlaager@pidgin.im>
parents: 13523
diff changeset
1307 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1308 PurpleConnection *gc = purple_account_get_connection(irc->account);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1309 PurpleConversation *convo;
13525
e5dc8090a9b0 [gaim-migrate @ 15900]
Richard Laager <rlaager@pidgin.im>
parents: 13523
diff changeset
1310 char *tmp;
e5dc8090a9b0 [gaim-migrate @ 15900]
Richard Laager <rlaager@pidgin.im>
parents: 13523
diff changeset
1311 char *msg;
e5dc8090a9b0 [gaim-migrate @ 15900]
Richard Laager <rlaager@pidgin.im>
parents: 13523
diff changeset
1312 char *nick;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1313
13525
e5dc8090a9b0 [gaim-migrate @ 15900]
Richard Laager <rlaager@pidgin.im>
parents: 13523
diff changeset
1314 if (!gc)
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1315 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1316
13525
e5dc8090a9b0 [gaim-migrate @ 15900]
Richard Laager <rlaager@pidgin.im>
parents: 13523
diff changeset
1317 nick = irc_mask_nick(from);
e5dc8090a9b0 [gaim-migrate @ 15900]
Richard Laager <rlaager@pidgin.im>
parents: 13523
diff changeset
1318 tmp = irc_parse_ctcp(irc, nick, to, rawmsg, notice);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1319 if (!tmp) {
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1320 g_free(nick);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1321 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1322 }
8163
8f33bb0f433d [gaim-migrate @ 8875]
Ethan Blanton <elb@pidgin.im>
parents: 8114
diff changeset
1323
20217
9249f67ef61e applied changes from 6c08c628ee64e16c824829c25befc0ca09338f9d
Luke Schierer <lschiere@pidgin.im>
parents: 20194
diff changeset
1324 msg = irc_escape_privmsg(tmp, -1);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1325 g_free(tmp);
8163
8f33bb0f433d [gaim-migrate @ 8875]
Ethan Blanton <elb@pidgin.im>
parents: 8114
diff changeset
1326
8f33bb0f433d [gaim-migrate @ 8875]
Ethan Blanton <elb@pidgin.im>
parents: 8114
diff changeset
1327 tmp = irc_mirc2html(msg);
8f33bb0f433d [gaim-migrate @ 8875]
Ethan Blanton <elb@pidgin.im>
parents: 8114
diff changeset
1328 g_free(msg);
8f33bb0f433d [gaim-migrate @ 8875]
Ethan Blanton <elb@pidgin.im>
parents: 8114
diff changeset
1329 msg = tmp;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1330 if (notice) {
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1331 tmp = g_strdup_printf("(notice) %s", msg);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1332 g_free(msg);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1333 msg = tmp;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1334 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1335
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1336 if (!purple_utf8_strcasecmp(to, purple_connection_get_display_name(gc))) {
6982
12f08de92674 [gaim-migrate @ 7538]
Mark Doliner <markdoliner@pidgin.im>
parents: 6753
diff changeset
1337 serv_got_im(gc, nick, msg, 0, time(NULL));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1338 } else {
27044
bc111170ee11 This allows incoming channel messages with op/voice/etc. mode characters.
Marcos García Ochoa <magao@bigfoot.com>
parents: 26855
diff changeset
1339 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, irc_nick_skip_mode(irc, to), irc->account);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1340 if (convo)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1341 serv_got_chat_in(gc, purple_conv_chat_get_id(PURPLE_CONV_CHAT(convo)), nick, 0, msg, time(NULL));
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1342 else
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1343 purple_debug_error("irc", "Got a %s on %s, which does not exist\n",
24763
67d9d4c975c0 Replace spaces wth tabs in indentation and tabs with spaces in line continuations.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24416
diff changeset
1344 notice ? "NOTICE" : "PRIVMSG", to);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1345 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1346 g_free(msg);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1347 g_free(nick);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1348 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1349
6714
414a52265486 [gaim-migrate @ 7240]
Ethan Blanton <elb@pidgin.im>
parents: 6695
diff changeset
1350 void irc_msg_regonly(struct irc_conn *irc, const char *name, const char *from, char **args)
414a52265486 [gaim-migrate @ 7240]
Ethan Blanton <elb@pidgin.im>
parents: 6695
diff changeset
1351 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1352 PurpleConnection *gc = purple_account_get_connection(irc->account);
17297
4541badae267 This should suppress an annoying 477 numeric on channel joins if you
Ethan Blanton <elb@pidgin.im>
parents: 17170
diff changeset
1353 PurpleConversation *convo;
6714
414a52265486 [gaim-migrate @ 7240]
Ethan Blanton <elb@pidgin.im>
parents: 6695
diff changeset
1354 char *msg;
414a52265486 [gaim-migrate @ 7240]
Ethan Blanton <elb@pidgin.im>
parents: 6695
diff changeset
1355
35254
7d0fb0c6d8d4 Add back some checks for gc!=NULL.
Mark Doliner <mark@kingant.net>
parents: 35250
diff changeset
1356 g_return_if_fail(gc);
6714
414a52265486 [gaim-migrate @ 7240]
Ethan Blanton <elb@pidgin.im>
parents: 6695
diff changeset
1357
17297
4541badae267 This should suppress an annoying 477 numeric on channel joins if you
Ethan Blanton <elb@pidgin.im>
parents: 17170
diff changeset
1358 convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, args[1], irc->account);
4541badae267 This should suppress an annoying 477 numeric on channel joins if you
Ethan Blanton <elb@pidgin.im>
parents: 17170
diff changeset
1359 if (convo) {
4541badae267 This should suppress an annoying 477 numeric on channel joins if you
Ethan Blanton <elb@pidgin.im>
parents: 17170
diff changeset
1360 /* This is a channel we're already in; for some reason,
4541badae267 This should suppress an annoying 477 numeric on channel joins if you
Ethan Blanton <elb@pidgin.im>
parents: 17170
diff changeset
1361 * freenode feels the need to notify us that in some
4541badae267 This should suppress an annoying 477 numeric on channel joins if you
Ethan Blanton <elb@pidgin.im>
parents: 17170
diff changeset
1362 * hypothetical other situation this might not have
4541badae267 This should suppress an annoying 477 numeric on channel joins if you
Ethan Blanton <elb@pidgin.im>
parents: 17170
diff changeset
1363 * succeeded. Suppress that. */
4541badae267 This should suppress an annoying 477 numeric on channel joins if you
Ethan Blanton <elb@pidgin.im>
parents: 17170
diff changeset
1364 return;
4541badae267 This should suppress an annoying 477 numeric on channel joins if you
Ethan Blanton <elb@pidgin.im>
parents: 17170
diff changeset
1365 }
4541badae267 This should suppress an annoying 477 numeric on channel joins if you
Ethan Blanton <elb@pidgin.im>
parents: 17170
diff changeset
1366
16993
536c1485c139 Handle channel joins when registration is required more gracefully.
Ethan Blanton <elb@pidgin.im>
parents: 16893
diff changeset
1367 msg = g_strdup_printf(_("Cannot join %s: Registration is required."), args[1]);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1368 purple_notify_error(gc, _("Cannot join channel"), msg, args[2]);
6714
414a52265486 [gaim-migrate @ 7240]
Ethan Blanton <elb@pidgin.im>
parents: 6695
diff changeset
1369 g_free(msg);
414a52265486 [gaim-migrate @ 7240]
Ethan Blanton <elb@pidgin.im>
parents: 6695
diff changeset
1370 }
414a52265486 [gaim-migrate @ 7240]
Ethan Blanton <elb@pidgin.im>
parents: 6695
diff changeset
1371
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1372 void irc_msg_quit(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1373 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1374 PurpleConnection *gc = purple_account_get_connection(irc->account);
9238
b7c5daf5748e [gaim-migrate @ 10036]
Tim Ringenbach <marv@pidgin.im>
parents: 9057
diff changeset
1375 struct irc_buddy *ib;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1376 char *data[2];
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1377
35254
7d0fb0c6d8d4 Add back some checks for gc!=NULL.
Mark Doliner <mark@kingant.net>
parents: 35250
diff changeset
1378 g_return_if_fail(gc);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1379
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1380 data[0] = irc_mask_nick(from);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1381 data[1] = args[0];
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1382 /* XXX this should have an API, I shouldn't grab this directly */
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1383 g_slist_foreach(gc->buddy_chats, (GFunc)irc_chat_remove_buddy, data);
9238
b7c5daf5748e [gaim-migrate @ 10036]
Tim Ringenbach <marv@pidgin.im>
parents: 9057
diff changeset
1384
b7c5daf5748e [gaim-migrate @ 10036]
Tim Ringenbach <marv@pidgin.im>
parents: 9057
diff changeset
1385 if ((ib = g_hash_table_lookup(irc->buddies, data[0])) != NULL) {
31284
893f2d78d438 Prevent sending ISON messages larger than 512 bytes. Fixes #9692.
Jeffrey Honig <jch@honig.net>
parents: 31229
diff changeset
1386 ib->new_online_status = FALSE;
9238
b7c5daf5748e [gaim-migrate @ 10036]
Tim Ringenbach <marv@pidgin.im>
parents: 9057
diff changeset
1387 irc_buddy_status(data[0], ib, irc);
b7c5daf5748e [gaim-migrate @ 10036]
Tim Ringenbach <marv@pidgin.im>
parents: 9057
diff changeset
1388 }
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1389 g_free(data[0]);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1390
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1391 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1392 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1393
10712
2aded9e9abd4 [gaim-migrate @ 12306]
Richard Laager <rlaager@pidgin.im>
parents: 10659
diff changeset
1394 void irc_msg_unavailable(struct irc_conn *irc, const char *name, const char *from, char **args)
2aded9e9abd4 [gaim-migrate @ 12306]
Richard Laager <rlaager@pidgin.im>
parents: 10659
diff changeset
1395 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1396 PurpleConnection *gc = purple_account_get_connection(irc->account);
10712
2aded9e9abd4 [gaim-migrate @ 12306]
Richard Laager <rlaager@pidgin.im>
parents: 10659
diff changeset
1397
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1398 purple_notify_error(gc, NULL, _("Nick or channel is temporarily unavailable."), args[1]);
10712
2aded9e9abd4 [gaim-migrate @ 12306]
Richard Laager <rlaager@pidgin.im>
parents: 10659
diff changeset
1399 }
2aded9e9abd4 [gaim-migrate @ 12306]
Richard Laager <rlaager@pidgin.im>
parents: 10659
diff changeset
1400
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1401 void irc_msg_wallops(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1402 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1403 PurpleConnection *gc = purple_account_get_connection(irc->account);
10774
f4238d6312ff [gaim-migrate @ 12383]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10751
diff changeset
1404 char *nick, *msg;
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1405
35254
7d0fb0c6d8d4 Add back some checks for gc!=NULL.
Mark Doliner <mark@kingant.net>
parents: 35250
diff changeset
1406 g_return_if_fail(gc);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1407
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1408 nick = irc_mask_nick(from);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1409 msg = g_strdup_printf (_("Wallops from %s"), nick);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1410 g_free(nick);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15516
diff changeset
1411 purple_notify_info(gc, NULL, msg, args[0]);
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1412 g_free(msg);
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1413 }
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1414
33404
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1415 #ifdef HAVE_CYRUS_SASL
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1416 static int
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1417 irc_sasl_cb_secret(sasl_conn_t *conn, void *ctx, int id, sasl_secret_t **secret)
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1418 {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1419 struct irc_conn *irc = ctx;
33407
8003b9b9e602 Fix a few warnings in the IRC SASL code
Daniel Atallah <datallah@pidgin.im>
parents: 33404
diff changeset
1420 sasl_secret_t *sasl_secret;
33404
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1421 const char *pw;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1422 size_t len;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1423
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1424 pw = purple_account_get_password(irc->account);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1425
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1426 if (!conn || !secret || id != SASL_CB_PASS)
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1427 return SASL_BADPARAM;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1428
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1429 len = strlen(pw);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1430 /* Not an off-by-one because sasl_secret_t defines char data[1] */
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1431 /* TODO: This can probably be moved to glib's allocator */
33407
8003b9b9e602 Fix a few warnings in the IRC SASL code
Daniel Atallah <datallah@pidgin.im>
parents: 33404
diff changeset
1432 sasl_secret = malloc(sizeof(sasl_secret_t) + len);
33404
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1433 if (!sasl_secret)
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1434 return SASL_NOMEM;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1435
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1436 sasl_secret->len = len;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1437 strcpy((char*)sasl_secret->data, pw);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1438
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1439 *secret = sasl_secret;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1440 return SASL_OK;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1441 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1442
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1443 static int
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1444 irc_sasl_cb_log(void *context, int level, const char *message)
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1445 {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1446 if(level <= SASL_LOG_TRACE)
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1447 purple_debug_info("sasl", "%s\n", message);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1448
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1449 return SASL_OK;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1450 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1451
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1452 static int
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1453 irc_sasl_cb_simple(void *ctx, int id, const char **res, unsigned *len)
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1454 {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1455 struct irc_conn *irc = ctx;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1456 PurpleConnection *gc = purple_account_get_connection(irc->account);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1457
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1458 switch(id) {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1459 case SASL_CB_AUTHNAME:
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1460 *res = purple_connection_get_display_name(gc);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1461 break;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1462 case SASL_CB_USER:
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1463 *res = "";
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1464 break;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1465 default:
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1466 return SASL_BADPARAM;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1467 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1468 if (len) *len = strlen((char *)*res);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1469 return SASL_OK;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1470 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1471
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1472 static void
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1473 irc_auth_start_cyrus(struct irc_conn *irc)
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1474 {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1475 int ret = 0;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1476 char *buf;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1477 sasl_security_properties_t secprops;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1478 PurpleAccount *account = irc->account;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1479 PurpleConnection *gc = purple_account_get_connection(account);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1480
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1481 gboolean plaintext;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1482 gboolean again = FALSE;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1483
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1484 /* Set up security properties and options */
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1485 secprops.min_ssf = 0;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1486 secprops.security_flags = SASL_SEC_NOANONYMOUS;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1487
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1488 if (!irc->gsc) {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1489 secprops.max_ssf = -1;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1490 secprops.maxbufsize = 4096;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1491 plaintext = purple_account_get_bool(account, "auth_plain_in_clear", FALSE);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1492 if (!plaintext)
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1493 secprops.security_flags |= SASL_SEC_NOPLAINTEXT;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1494 } else {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1495 secprops.max_ssf = 0;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1496 secprops.maxbufsize = 0;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1497 plaintext = TRUE;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1498 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1499
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1500 secprops.property_names = 0;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1501 secprops.property_values = 0;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1502
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1503 do {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1504 gchar *tmp = NULL;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1505 again = FALSE;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1506
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1507 ret = sasl_client_new("irc", irc->server, NULL, NULL, irc->sasl_cb, 0, &irc->sasl_conn);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1508
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1509 if (ret != SASL_OK) {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1510 purple_debug_error("irc", "sasl_client_new failed: %d\n", ret);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1511 tmp = g_strdup_printf(_("Failed to initialize SASL authentication: %s"),
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1512 sasl_errdetail(irc->sasl_conn));
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1513 purple_connection_error_reason (gc,
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1514 PURPLE_CONNECTION_ERROR_OTHER_ERROR, tmp);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1515 g_free(tmp);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1516 return;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1517 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1518
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1519 sasl_setprop(irc->sasl_conn, SASL_AUTH_EXTERNAL, irc->account->username);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1520 sasl_setprop(irc->sasl_conn, SASL_SEC_PROPS, &secprops);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1521
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1522 ret = sasl_client_start(irc->sasl_conn, irc->sasl_mechs->str, NULL, NULL, NULL, &irc->current_mech);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1523
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1524 switch (ret) {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1525 case SASL_OK:
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1526 case SASL_CONTINUE:
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1527 irc->mech_works = FALSE;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1528 break;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1529 case SASL_NOMECH:
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1530 purple_connection_error_reason (gc,
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1531 PURPLE_CONNECTION_ERROR_AUTHENTICATION_IMPOSSIBLE,
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1532 _("SASL authentication failed: No worthy authentication mechanisms found."));
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1533
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1534 irc_sasl_finish(irc);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1535 return;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1536 case SASL_BADPARAM:
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1537 case SASL_NOMEM:
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1538 tmp = g_strdup_printf(_("SASL authentication failed: %s"), sasl_errdetail(irc->sasl_conn));
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1539 purple_connection_error_reason (gc,
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1540 PURPLE_CONNECTION_ERROR_OTHER_ERROR, tmp);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1541 g_free(tmp);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1542
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1543 irc_sasl_finish(irc);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1544 return;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1545 default:
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1546 purple_debug_error("irc", "sasl_client_start failed: %s\n", sasl_errdetail(irc->sasl_conn));
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1547
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1548 if (irc->current_mech && *irc->current_mech) {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1549 char *pos;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1550 if ((pos = strstr(irc->sasl_mechs->str, irc->current_mech))) {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1551 size_t index = pos - irc->sasl_mechs->str;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1552 g_string_erase(irc->sasl_mechs, index, strlen(irc->current_mech));
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1553
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1554 /* Remove space which separated this mech from the next */
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1555 if ((irc->sasl_mechs->str)[index] == ' ') {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1556 g_string_erase(irc->sasl_mechs, index, 1);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1557 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1558 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1559
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1560 again = TRUE;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1561 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1562 irc_sasl_finish(irc);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1563 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1564 } while (again);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1565
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1566 purple_debug_info("irc", "Using SASL: %s\n", irc->current_mech);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1567
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1568 buf = irc_format(irc, "vv", "AUTHENTICATE", irc->current_mech);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1569 irc_send(irc, buf);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1570 g_free(buf);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1571 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1572
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1573 /* SASL authentication */
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1574 void
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1575 irc_msg_cap(struct irc_conn *irc, const char *name, const char *from, char **args)
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1576 {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1577 int ret = 0;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1578 int id = 0;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1579 PurpleConnection *gc = purple_account_get_connection(irc->account);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1580 const char *mech_list = NULL;
38210
e11ea6f07c5b IRC: Skip EXTERNAL SASL auth mechanism
Kernc <kerncece@gmail.com>
parents: 37695
diff changeset
1581 char *pos;
e11ea6f07c5b IRC: Skip EXTERNAL SASL auth mechanism
Kernc <kerncece@gmail.com>
parents: 37695
diff changeset
1582 size_t index;
33404
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1583
38253
f45b9766e165 irc: Don't rely on the trailing space in "CAP ACK :sasl "
dx <dx@dxzone.com.ar>
parents: 38210
diff changeset
1584 if (strncmp(g_strstrip(args[2]), "sasl", 5))
33404
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1585 return;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1586 if (strncmp(args[1], "ACK", 4)) {
33407
8003b9b9e602 Fix a few warnings in the IRC SASL code
Daniel Atallah <datallah@pidgin.im>
parents: 33404
diff changeset
1587 const char *tmp = _("SASL authentication failed: Server does not support SASL authentication.");
33404
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1588 purple_connection_error_reason (gc,
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1589 PURPLE_CONNECTION_ERROR_AUTHENTICATION_IMPOSSIBLE, tmp);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1590
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1591 irc_sasl_finish(irc);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1592 return;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1593 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1594
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1595 if ((ret = sasl_client_init(NULL)) != SASL_OK) {
33407
8003b9b9e602 Fix a few warnings in the IRC SASL code
Daniel Atallah <datallah@pidgin.im>
parents: 33404
diff changeset
1596 const char *tmp = _("SASL authentication failed: Initializing SASL failed.");
33404
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1597 purple_connection_error_reason (gc,
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1598 PURPLE_CONNECTION_ERROR_OTHER_ERROR, tmp);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1599 return;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1600 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1601
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1602 irc->sasl_cb = g_new0(sasl_callback_t, 5);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1603
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1604 irc->sasl_cb[id].id = SASL_CB_AUTHNAME;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1605 irc->sasl_cb[id].proc = irc_sasl_cb_simple;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1606 irc->sasl_cb[id].context = (void *)irc;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1607 id++;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1608
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1609 irc->sasl_cb[id].id = SASL_CB_USER;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1610 irc->sasl_cb[id].proc = irc_sasl_cb_simple;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1611 irc->sasl_cb[id].context = (void *)irc;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1612 id++;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1613
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1614 irc->sasl_cb[id].id = SASL_CB_PASS;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1615 irc->sasl_cb[id].proc = irc_sasl_cb_secret;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1616 irc->sasl_cb[id].context = (void *)irc;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1617 id++;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1618
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1619 irc->sasl_cb[id].id = SASL_CB_LOG;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1620 irc->sasl_cb[id].proc = irc_sasl_cb_log;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1621 irc->sasl_cb[id].context = (void *)irc;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1622 id++;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1623
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1624 irc->sasl_cb[id].id = SASL_CB_LIST_END;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1625
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1626 /* We need to do this to be able to list the mechanisms. */
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1627 ret = sasl_client_new("irc", irc->server, NULL, NULL, irc->sasl_cb, 0, &irc->sasl_conn);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1628
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1629 sasl_listmech(irc->sasl_conn, NULL, "", " ", "", &mech_list, NULL, NULL);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1630 purple_debug_info("irc", "SASL: we have available: %s\n", mech_list);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1631
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1632 if (ret != SASL_OK) {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1633 gchar *tmp;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1634
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1635 purple_debug_error("irc", "sasl_client_new failed: %d\n", ret);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1636 tmp = g_strdup_printf(_("Failed to initialize SASL authentication: %s"),
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1637 sasl_errdetail(irc->sasl_conn));
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1638 purple_connection_error_reason (gc,
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1639 PURPLE_CONNECTION_ERROR_OTHER_ERROR, tmp);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1640 g_free(tmp);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1641
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1642 return;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1643 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1644
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1645 irc->sasl_mechs = g_string_new(mech_list);
38210
e11ea6f07c5b IRC: Skip EXTERNAL SASL auth mechanism
Kernc <kerncece@gmail.com>
parents: 37695
diff changeset
1646 /* Drop EXTERNAL mechanism since we don't support it */
e11ea6f07c5b IRC: Skip EXTERNAL SASL auth mechanism
Kernc <kerncece@gmail.com>
parents: 37695
diff changeset
1647 if ((pos = strstr(irc->sasl_mechs->str, "EXTERNAL"))) {
e11ea6f07c5b IRC: Skip EXTERNAL SASL auth mechanism
Kernc <kerncece@gmail.com>
parents: 37695
diff changeset
1648 index = pos - irc->sasl_mechs->str;
e11ea6f07c5b IRC: Skip EXTERNAL SASL auth mechanism
Kernc <kerncece@gmail.com>
parents: 37695
diff changeset
1649 g_string_erase(irc->sasl_mechs, index, strlen("EXTERNAL"));
e11ea6f07c5b IRC: Skip EXTERNAL SASL auth mechanism
Kernc <kerncece@gmail.com>
parents: 37695
diff changeset
1650 /* Remove space which separated this mech from the next */
e11ea6f07c5b IRC: Skip EXTERNAL SASL auth mechanism
Kernc <kerncece@gmail.com>
parents: 37695
diff changeset
1651 if ((irc->sasl_mechs->str)[index] == ' ') {
e11ea6f07c5b IRC: Skip EXTERNAL SASL auth mechanism
Kernc <kerncece@gmail.com>
parents: 37695
diff changeset
1652 g_string_erase(irc->sasl_mechs, index, 1);
e11ea6f07c5b IRC: Skip EXTERNAL SASL auth mechanism
Kernc <kerncece@gmail.com>
parents: 37695
diff changeset
1653 }
e11ea6f07c5b IRC: Skip EXTERNAL SASL auth mechanism
Kernc <kerncece@gmail.com>
parents: 37695
diff changeset
1654 }
33404
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1655
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1656 irc_auth_start_cyrus(irc);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1657 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1658
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1659 void
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1660 irc_msg_auth(struct irc_conn *irc, char *arg)
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1661 {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1662 PurpleConnection *gc = purple_account_get_connection(irc->account);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1663 char *buf, *authinfo;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1664 char *serverin = NULL;
37695
d24505afc83a irc: Base64-decode SASL messages before passing to libsasl
Mantas Mikulėnas <grawity@nullroute.eu.org>
parents: 35518
diff changeset
1665 gsize serverinlen = 0;
33404
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1666 const gchar *c_out;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1667 unsigned int clen;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1668 int ret;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1669
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1670 irc->mech_works = TRUE;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1671
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1672 if (!arg)
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1673 return;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1674
37695
d24505afc83a irc: Base64-decode SASL messages before passing to libsasl
Mantas Mikulėnas <grawity@nullroute.eu.org>
parents: 35518
diff changeset
1675 if (arg[0] != '+')
d24505afc83a irc: Base64-decode SASL messages before passing to libsasl
Mantas Mikulėnas <grawity@nullroute.eu.org>
parents: 35518
diff changeset
1676 serverin = (char *)purple_base64_decode(arg, &serverinlen);
33404
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1677
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1678 ret = sasl_client_step(irc->sasl_conn, serverin, serverinlen,
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1679 NULL, &c_out, &clen);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1680
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1681 if (ret != SASL_OK && ret != SASL_CONTINUE) {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1682
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1683 gchar *tmp = g_strdup_printf(_("SASL authentication failed: %s"),
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1684 sasl_errdetail(irc->sasl_conn));
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1685 purple_connection_error_reason (gc,
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1686 PURPLE_CONNECTION_ERROR_AUTHENTICATION_IMPOSSIBLE, tmp);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1687 g_free(tmp);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1688
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1689 irc_sasl_finish(irc);
37695
d24505afc83a irc: Base64-decode SASL messages before passing to libsasl
Mantas Mikulėnas <grawity@nullroute.eu.org>
parents: 35518
diff changeset
1690 g_free(serverin);
33404
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1691 return;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1692 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1693
35169
44348822264a Correctly send empty IRC SASL responses. Fixes #15452
Mantas MikulÄ—nas <grawity@nullroute.eu.org>
parents: 33803
diff changeset
1694 if (clen > 0)
44348822264a Correctly send empty IRC SASL responses. Fixes #15452
Mantas MikulÄ—nas <grawity@nullroute.eu.org>
parents: 33803
diff changeset
1695 authinfo = purple_base64_encode((const guchar*)c_out, clen);
44348822264a Correctly send empty IRC SASL responses. Fixes #15452
Mantas MikulÄ—nas <grawity@nullroute.eu.org>
parents: 33803
diff changeset
1696 else
44348822264a Correctly send empty IRC SASL responses. Fixes #15452
Mantas MikulÄ—nas <grawity@nullroute.eu.org>
parents: 33803
diff changeset
1697 authinfo = g_strdup("+");
33404
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1698
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1699 buf = irc_format(irc, "vv", "AUTHENTICATE", authinfo);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1700 irc_send(irc, buf);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1701 g_free(buf);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1702 g_free(authinfo);
37695
d24505afc83a irc: Base64-decode SASL messages before passing to libsasl
Mantas Mikulėnas <grawity@nullroute.eu.org>
parents: 35518
diff changeset
1703 g_free(serverin);
33404
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1704 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1705
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1706 void
38908
86e7c9ca0bcd irc: handle AUTHENTICATE as a normal command with server prefix
dx <dx@dxzone.com.ar>
parents: 38271
diff changeset
1707 irc_msg_authenticate(struct irc_conn *irc, const char *name, const char *from, char **args)
86e7c9ca0bcd irc: handle AUTHENTICATE as a normal command with server prefix
dx <dx@dxzone.com.ar>
parents: 38271
diff changeset
1708 {
86e7c9ca0bcd irc: handle AUTHENTICATE as a normal command with server prefix
dx <dx@dxzone.com.ar>
parents: 38271
diff changeset
1709 irc_msg_auth(irc, args[0]);
86e7c9ca0bcd irc: handle AUTHENTICATE as a normal command with server prefix
dx <dx@dxzone.com.ar>
parents: 38271
diff changeset
1710 }
86e7c9ca0bcd irc: handle AUTHENTICATE as a normal command with server prefix
dx <dx@dxzone.com.ar>
parents: 38271
diff changeset
1711
86e7c9ca0bcd irc: handle AUTHENTICATE as a normal command with server prefix
dx <dx@dxzone.com.ar>
parents: 38271
diff changeset
1712 void
33404
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1713 irc_msg_authok(struct irc_conn *irc, const char *name, const char *from, char **args)
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1714 {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1715 char *buf;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1716
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1717 sasl_dispose(&irc->sasl_conn);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1718 irc->sasl_conn = NULL;
40718
5201d33e8999 Fix some spelling errors
Richard Laager <rlaager@pidgin.im>
parents: 38924
diff changeset
1719 purple_debug_info("irc", "Successfully authenticated using SASL.\n");
33404
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1720
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1721 /* Finish auth session */
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1722 buf = irc_format(irc, "vv", "CAP", "END");
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1723 irc_send(irc, buf);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1724 g_free(buf);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1725 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1726
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1727 void
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1728 irc_msg_authtryagain(struct irc_conn *irc, const char *name, const char *from, char **args)
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1729 {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1730 PurpleConnection *gc = purple_account_get_connection(irc->account);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1731
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1732 /* We already received at least one AUTHENTICATE reply from the
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1733 * server. This suggests it supports this mechanism, but the
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1734 * password was incorrect. It would be better to abort and inform
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1735 * the user than to try again with a different mechanism, so they
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1736 * aren't told the server supports no worthy mechanisms.
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1737 */
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1738 if (irc->mech_works) {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1739 purple_connection_error_reason (gc,
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1740 PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED, _("Incorrect Password"));
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1741
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1742 irc_sasl_finish(irc);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1743
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1744 return;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1745 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1746
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1747 if (irc->current_mech) {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1748 char *pos;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1749 if ((pos = strstr(irc->sasl_mechs->str, irc->current_mech))) {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1750 size_t index = pos - irc->sasl_mechs->str;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1751 g_string_erase(irc->sasl_mechs, index, strlen(irc->current_mech));
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1752
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1753 /* Remove space which separated this mech from the next */
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1754 if ((irc->sasl_mechs->str)[index] == ' ') {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1755 g_string_erase(irc->sasl_mechs, index, 1);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1756 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1757 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1758 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1759 if (*irc->sasl_mechs->str) {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1760 sasl_dispose(&irc->sasl_conn);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1761
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1762 purple_debug_info("irc", "Now trying with %s\n", irc->sasl_mechs->str);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1763 irc_auth_start_cyrus(irc);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1764 } else {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1765 purple_connection_error_reason (gc,
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1766 PURPLE_CONNECTION_ERROR_AUTHENTICATION_IMPOSSIBLE,
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1767 _("SASL authentication failed: No worthy mechanisms found"));
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1768
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1769 irc_sasl_finish(irc);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1770 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1771 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1772
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1773 void
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1774 irc_msg_authfail(struct irc_conn *irc, const char *name, const char *from, char **args)
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1775 {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1776 PurpleConnection *gc = purple_account_get_connection(irc->account);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1777
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1778 /* Only show an error if we did not abort ourselves. */
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1779 if (irc->sasl_conn) {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1780 purple_debug_info("irc", "SASL authentication failed: %s", sasl_errdetail(irc->sasl_conn));
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1781
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1782 purple_connection_error_reason (gc,
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1783 PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED, _("Incorrect Password"));
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1784 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1785
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1786 irc_sasl_finish(irc);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1787 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1788
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1789 static void
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1790 irc_sasl_finish(struct irc_conn *irc)
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1791 {
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1792 char *buf;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1793
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1794 sasl_dispose(&irc->sasl_conn);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1795 irc->sasl_conn = NULL;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1796
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1797 g_free(irc->sasl_cb);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1798 irc->sasl_cb = NULL;
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1799
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1800 /* Auth failed, abort */
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1801 buf = irc_format(irc, "vv", "CAP", "END");
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1802 irc_send(irc, buf);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1803 g_free(buf);
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1804 }
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1805 #endif
bbd52f93184e Implement SASL support for IRC, using Cyrus.
Thijs Alkemade <thijsalkemade@gmail.com>
parents: 32127
diff changeset
1806
6333
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1807 void irc_msg_ignore(struct irc_conn *irc, const char *name, const char *from, char **args)
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1808 {
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1809 return;
551f4a5b3c33 [gaim-migrate @ 6832]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1810 }

mercurial