Mercurial > pidgin
annotate src/protocols/irc/irc.c @ 4966:54cd43869333
[gaim-migrate @ 5300]
fun stuff
this makes the modify account dialog make a little more sense for jabber,
and makes irc accounts distinguishable in the assorted dropdowns.
however, there is a slight catch. IRC accounts now take the form of
nick@server. The first time you log on with an IRC account, it will change
it for you. However, if you try to edit the account before it gets signed
on, the server will revert to the default (irc.freenode.net).
So go log in with all of your IRC accounts before you go editing them ;-)
committer: Tailor Script <tailor@pidgin.im>
| author | Nathan Walp <nwalp@pidgin.im> |
|---|---|
| date | Thu, 03 Apr 2003 02:34:48 +0000 |
| parents | d9b6b5ae34e4 |
| children | ed2a6196ccab |
| rev | line source |
|---|---|
| 2086 | 1 /* |
| 2 * gaim - IRC Protocol Plugin | |
| 3 * | |
| 4 * Copyright (C) 2000-2001, Rob Flynn <rob@tgflinux.com> | |
| 5 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
|
2290
23c06449ae8e
[gaim-migrate @ 2300]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2289
diff
changeset
|
6 * |
|
23c06449ae8e
[gaim-migrate @ 2300]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2289
diff
changeset
|
7 * A large portion of this was copied more or less directly from X-Chat, |
|
23c06449ae8e
[gaim-migrate @ 2300]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2289
diff
changeset
|
8 * the world's most rocking IRC client. http://www.xchat.org/ |
| 2086 | 9 * |
| 10 * This program is free software; you can redistribute it and/or modify | |
| 11 * it under the terms of the GNU General Public License as published by | |
| 12 * the Free Software Foundation; either version 2 of the License, or | |
| 13 * (at your option) any later version. | |
| 14 * | |
| 15 * This program is distributed in the hope that it will be useful, | |
| 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 18 * GNU General Public License for more details. | |
| 19 * | |
| 20 * You should have received a copy of the GNU General Public License | |
| 21 * along with this program; if not, write to the Free Software | |
| 22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 23 * | |
| 24 */ | |
| 25 | |
|
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
26 #include <config.h> |
| 2086 | 27 |
| 3630 | 28 #ifndef _WIN32 |
| 29 #include <unistd.h> | |
| 30 #else | |
| 31 #include <winsock.h> | |
| 32 #endif | |
| 33 | |
| 3029 | 34 #include <fcntl.h> |
| 2086 | 35 #include <errno.h> |
| 36 #include <string.h> | |
| 37 #include <stdlib.h> | |
| 38 #include <stdio.h> | |
| 3867 | 39 #include <sys/time.h> |
| 2086 | 40 #include <time.h> |
| 41 #include <sys/stat.h> | |
| 42 #include <ctype.h> | |
| 4608 | 43 #include "gaim.h" |
| 2086 | 44 #include "multi.h" |
|
4373
dcc6c130c6d9
[gaim-migrate @ 4639]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
4359
diff
changeset
|
45 #include "core.h" |
| 2086 | 46 #include "prpl.h" |
| 47 #include "proxy.h" | |
| 48 | |
| 3630 | 49 #ifdef _WIN32 |
| 50 #include "win32dep.h" | |
| 51 #endif | |
| 52 | |
| 2086 | 53 #define IRC_BUF_LEN 4096 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
54 #define PDIWORDS 32 |
| 2086 | 55 |
| 56 #define USEROPT_SERV 0 | |
| 57 #define USEROPT_PORT 1 | |
| 3751 | 58 #define USEROPT_CHARSET 2 |
| 2086 | 59 |
| 4966 | 60 #define DEFAULT_SERVER "irc.freenode.net" |
| 61 | |
| 4249 | 62 static struct prpl *my_protocol = NULL; |
| 63 | |
| 3630 | 64 /* for win32 compatability */ |
| 65 G_MODULE_IMPORT GSList *connections; | |
| 66 | |
| 4422 | 67 #ifndef INET6_ADDRSTRLEN |
| 68 #define INET6_ADDRSTRLEN 46 | |
| 69 #endif | |
| 70 | |
| 3751 | 71 /* Datastructs */ |
| 3029 | 72 struct dcc_chat |
| 73 { | |
| 74 struct gaim_connection *gc; | |
| 4422 | 75 char ip_address[INET6_ADDRSTRLEN]; |
| 3029 | 76 int port; |
| 77 int fd; | |
| 78 int inpa; | |
| 79 char nick[80]; | |
| 80 }; | |
| 81 | |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
82 struct irc_xfer_data |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
83 { |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
84 char *ip; |
| 3708 | 85 int port; |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
86 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
87 struct irc_data *idata; |
| 3616 | 88 }; |
| 89 | |
| 2086 | 90 struct irc_data { |
| 91 int fd; | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
92 gboolean online; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
93 guint32 timer; |
| 2086 | 94 |
| 4966 | 95 char *server; |
| 96 | |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
97 char *rxqueue; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
98 int rxlen; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
99 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
100 GString *str; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
101 int bc; |
| 2086 | 102 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
103 char *chantypes; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
104 char *chanmodes; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
105 char *nickmodes; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
106 gboolean six_modes; |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
107 |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
108 gboolean in_whois; |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
109 gboolean in_list; |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
110 GString *liststr; |
| 3616 | 111 GSList *file_transfers; |
| 2086 | 112 }; |
| 113 | |
| 3751 | 114 /* Prototypes */ |
| 115 static void irc_start_chat(struct gaim_connection *gc, char *who); | |
| 116 static void irc_ctcp_clientinfo(struct gaim_connection *gc, char *who); | |
| 117 static void irc_ctcp_userinfo(struct gaim_connection *gc, char *who); | |
| 118 static void irc_ctcp_version(struct gaim_connection *gc, char *who); | |
| 119 static void irc_ctcp_ping(struct gaim_connection *gc, char *who); | |
| 120 | |
| 121 static void irc_send_privmsg(struct gaim_connection *gc, char *who, char *what, gboolean fragment); | |
| 122 static void irc_send_notice(struct gaim_connection *gc, char *who, char *what); | |
| 123 | |
| 124 static char *irc_send_convert(struct gaim_connection *gc, char *string, int maxlen, int *done); | |
| 125 static char *irc_recv_convert(struct gaim_connection *gc, char *string); | |
| 126 static void irc_parse_notice(struct gaim_connection *gc, char *nick, char *ex, | |
| 127 char *word[], char *word_eol[]); | |
| 128 static void irc_parse_join(struct gaim_connection *gc, char *nick, | |
| 129 char *word[], char *word_eol[]); | |
| 130 static gboolean irc_parse_part(struct gaim_connection *gc, char *nick, char *cmd, | |
| 131 char *word[], char *word_eol[]); | |
| 132 static void irc_parse_topic(struct gaim_connection *gc, char *nick, | |
| 133 char *word[], char *word_eol[]); | |
| 134 | |
| 135 static void dcc_chat_cancel(struct dcc_chat *); | |
| 136 | |
| 137 /* Global variables */ | |
| 138 GSList *dcc_chat_list = NULL; | |
| 139 | |
| 3029 | 140 struct dcc_chat * |
| 141 find_dcc_chat (struct gaim_connection *gc, char *nick) | |
| 142 { | |
| 143 GSList *tmp; | |
| 144 struct dcc_chat *data; | |
| 145 tmp = dcc_chat_list; | |
| 146 while (tmp != NULL) | |
| 147 { | |
| 148 data = (struct dcc_chat *) (tmp)->data; | |
| 149 if (data | |
| 150 && data->nick | |
| 151 && strcmp (nick, data->nick) == 0 | |
| 152 && gc == data->gc) | |
| 153 { | |
| 154 return data; | |
| 155 } | |
| 156 tmp = tmp->next; | |
| 157 } | |
| 158 return NULL; | |
| 159 } | |
| 160 | |
| 3751 | 161 static int |
| 162 irc_write(int fd, char *data, int len) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
163 { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
164 debug_printf("IRC C: %s", data); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
165 return write(fd, data, len); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
166 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
167 |
| 3751 | 168 static char * |
| 169 irc_send_convert(struct gaim_connection *gc, char *string, int maxlen, int *done) | |
| 170 { | |
| 171 char *converted = g_malloc(maxlen + 1); | |
| 172 gchar *inptr = string, *outptr = converted; | |
| 173 int inleft = strlen(string), outleft = maxlen; | |
| 174 GIConv conv; | |
| 175 | |
| 4491 | 176 conv = g_iconv_open(gc->account->proto_opt[USEROPT_CHARSET], "UTF-8"); |
| 3751 | 177 if (g_iconv(conv, &inptr, &inleft, &outptr, &outleft) == -1) { |
| 178 debug_printf("IRC charset conversion error\n"); | |
| 179 debug_printf("Sending as UTF-8 (this is a hack!)\n"); | |
| 180 g_free(converted); | |
| 181 *done = maxlen; | |
| 182 return(g_strndup(string, maxlen)); | |
| 183 } | |
| 184 | |
| 185 *done = strlen(string) - inleft; | |
| 186 *outptr = '\0'; | |
| 187 return(converted); | |
| 188 } | |
| 189 | |
| 190 static char * | |
| 191 irc_recv_convert(struct gaim_connection *gc, char *string) | |
| 192 { | |
| 193 char *utf8; | |
| 194 GError *err = NULL; | |
| 195 | |
| 196 utf8 = g_convert(string, strlen(string), "UTF-8", | |
| 4491 | 197 gc->account->proto_opt[USEROPT_CHARSET], NULL, NULL, &err); |
| 3751 | 198 if (err) { |
| 199 debug_printf("IRC recv conversion error: %s\n", err->message); | |
| 200 utf8 = g_strdup(_("(There was an error converting this message. Check the 'Encoding' option in the Account Editor)")); | |
| 201 } | |
| 202 | |
| 203 return (utf8); | |
| 204 } | |
| 205 | |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
206 static struct gaim_conversation * |
| 3751 | 207 irc_find_chat(struct gaim_connection *gc, char *name) |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
208 { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
209 GSList *bcs = gc->buddy_chats; |
| 2086 | 210 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
211 while (bcs) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
212 struct gaim_conversation *b = bcs->data; |
| 4793 | 213 if (!gaim_utf8_strcasecmp(b->name, name)) |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
214 return b; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
215 bcs = bcs->next; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
216 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
217 return NULL; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
218 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
219 |
| 3751 | 220 static void |
| 221 process_data_init(char *buf, char *cmd, char *word[], char *eol[], gboolean quotes) | |
|
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2171
diff
changeset
|
222 { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
223 int wordcount = 2; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
224 gboolean space = FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
225 gboolean quote = FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
226 int j = 0; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
227 |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
228 word[1] = cmd; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
229 eol[1] = buf; |
|
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2171
diff
changeset
|
230 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
231 while (TRUE) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
232 switch (*cmd) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
233 case 0: |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
234 buf[j] = 0; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
235 for (j = wordcount; j < PDIWORDS; j++) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
236 word[j] = "\000\000"; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
237 eol[j] = "\000\000"; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
238 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
239 return; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
240 case '"': |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
241 if (!quotes) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
242 space = FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
243 buf[j++] = *cmd; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
244 break; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
245 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
246 quote = !quote; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
247 break; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
248 case ' ': |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
249 if (quote) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
250 space = FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
251 buf[j++] = *cmd; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
252 break; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
253 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
254 if (space) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
255 break; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
256 buf[j++] = 0; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
257 word[wordcount] = &buf[j]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
258 eol[wordcount++] = cmd + 1; |
|
2294
b6c6603a8915
[gaim-migrate @ 2304]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2293
diff
changeset
|
259 if (wordcount == PDIWORDS - 1) { |
|
b6c6603a8915
[gaim-migrate @ 2304]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2293
diff
changeset
|
260 buf[j] = 0; |
|
b6c6603a8915
[gaim-migrate @ 2304]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2293
diff
changeset
|
261 return; |
|
b6c6603a8915
[gaim-migrate @ 2304]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2293
diff
changeset
|
262 } |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
263 space = TRUE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
264 break; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
265 default: |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
266 space = FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
267 buf[j++] = *cmd; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
268 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
269 cmd++; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
270 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
271 } |
|
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2171
diff
changeset
|
272 |
| 3751 | 273 static void |
| 274 handle_005(struct gaim_connection *gc, char *word[], char *word_eol[]) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
275 { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
276 int w = 4; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
277 struct irc_data *id = gc->proto_data; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
278 |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
279 while (w < PDIWORDS && *word[w]) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
280 if (!strncmp(word[w], "MODES=", 5)) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
281 if (atoi(word[w] + 6) >= 6) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
282 id->six_modes = TRUE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
283 } else if (!strncmp(word[w], "CHANTYPES=", 10)) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
284 g_free(id->chantypes); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
285 id->chantypes = g_strdup(word[w] + 10); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
286 } else if (!strncmp(word[w], "CHANMODES=", 10)) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
287 g_free(id->chanmodes); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
288 id->chanmodes = g_strdup(word[w] + 10); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
289 } else if (!strncmp(word[w], "PREFIX=", 7)) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
290 char *pre = strchr(word[w] + 7, ')'); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
291 if (pre) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
292 *pre = 0; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
293 g_free(id->nickmodes); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
294 id->nickmodes = g_strdup(word[w] + 8); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
295 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
296 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
297 w++; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
298 } |
|
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2171
diff
changeset
|
299 } |
|
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2171
diff
changeset
|
300 |
| 4221 | 301 static const char *irc_colors[] = { |
| 302 "#000000", "#ffffff", "#000066", "#006600", | |
| 303 "#ff0000", "#660000", "#660066", "#666600", | |
| 304 "#cccc00", "#33cc33", "#00acac", "#00ccac", | |
| 305 "#0000ff", "#cc00cc", "#666666", "#00ccac" | |
| 306 }; | |
| 307 | |
| 308 #define int_to_col(c) (irc_colors[(((c)<0 || (c)> 15)?0:c)]) | |
| 2086 | 309 |
| 3751 | 310 static GString * |
| 311 encode_html(char *msg) | |
| 3029 | 312 { |
| 313 GString *str = g_string_new(""); | |
| 314 char *cur = msg, *end = msg; | |
| 315 gboolean bold = FALSE, underline = FALSE, italics = FALSE; | |
| 4793 | 316 |
| 3029 | 317 while ((end = strchr(cur, '<'))) { |
| 318 *end = 0; | |
| 319 str = g_string_append(str, cur); | |
| 320 cur = ++end; | |
| 4793 | 321 if (!g_ascii_strncasecmp(cur, "B>", 2)) { |
| 3063 | 322 if (!bold) { |
| 323 bold = TRUE; | |
| 324 str = g_string_append_c(str, '\2'); | |
| 325 } | |
| 3029 | 326 cur = cur + 2; |
| 4793 | 327 } else if (!g_ascii_strncasecmp(cur, "I>", 2)) { /* use bold for italics too */ |
| 3063 | 328 if (!italics) { |
| 329 italics = TRUE; | |
| 330 str = g_string_append_c(str, '\2'); | |
| 331 } | |
| 3029 | 332 cur = cur + 2; |
| 4793 | 333 } else if (!g_ascii_strncasecmp(cur, "U>", 2)) { |
| 3063 | 334 if (!underline) { |
| 335 underline = TRUE; | |
| 336 str = g_string_append_c(str, '\37'); | |
| 337 } | |
| 3029 | 338 cur = cur + 2; |
| 4793 | 339 } else if (!g_ascii_strncasecmp(cur, "/B>", 3)) { |
| 3063 | 340 if (bold) { |
| 341 bold = FALSE; | |
| 342 str = g_string_append_c(str, '\2'); | |
| 343 } | |
| 3029 | 344 cur = cur + 3; |
| 4793 | 345 } else if (!g_ascii_strncasecmp(cur, "/I>", 3)) { |
| 3063 | 346 if (italics) { |
| 347 italics = FALSE; | |
| 348 str = g_string_append_c(str, '\2'); | |
| 349 } | |
| 3029 | 350 cur = cur + 3; |
| 4793 | 351 } else if (!g_ascii_strncasecmp(cur, "/U>", 3)) { |
| 3063 | 352 if (underline) { |
| 353 underline = FALSE; | |
| 354 str = g_string_append_c(str, '\37'); | |
| 355 } | |
| 3029 | 356 cur = cur + 3; |
| 3063 | 357 } else { |
| 358 str = g_string_append_c(str, '<'); | |
| 3029 | 359 } |
| 4793 | 360 |
| 3029 | 361 } |
| 362 str = g_string_append(str, cur); | |
| 363 return str; | |
| 364 } | |
| 365 | |
| 3751 | 366 static GString * |
| 367 decode_html(char *msg) | |
| 2086 | 368 { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
369 GString /* oo la la */ *str = g_string_new(""); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
370 char *cur = msg, *end = msg; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
371 gboolean bold = FALSE, underline = FALSE, fg = FALSE, bg = FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
372 int fore, back; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
373 while (*end) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
374 switch (*end) { |
| 3708 | 375 case 02: /* ^B */ |
| 376 *end = 0; | |
| 377 str = g_string_append(str, cur); | |
| 378 if (bold) | |
| 379 str = g_string_append(str, "</B>"); | |
| 380 else | |
| 381 str = g_string_append(str, "<B>"); | |
| 382 bold = !bold; | |
| 383 cur = end + 1; | |
| 384 break; | |
| 385 case 03: /* ^C */ | |
| 386 *end++ = 0; | |
| 387 str = g_string_append(str, cur); | |
| 388 fore = back = -1; | |
| 389 if (isdigit(*end)) { | |
| 390 fore = *end++ - '0'; | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
391 if (isdigit(*end)) { |
| 3708 | 392 fore *= 10; |
| 393 fore += *end++ - '0'; | |
| 394 } | |
| 395 if (*end == ',' && isdigit(end[1])) { | |
| 396 end++; | |
| 397 back = *end++ - '0'; | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
398 if (isdigit(*end)) { |
| 3708 | 399 back *= 10; |
| 400 back += *end++ - '0'; | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
401 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
402 } |
| 3708 | 403 } |
| 404 if (fore == -1) { | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
405 if (fg) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
406 str = g_string_append(str, "</FONT>"); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
407 if (bg) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
408 str = g_string_append(str, "</FONT>"); |
| 3708 | 409 fg = bg = FALSE; |
| 410 } else { | |
| 411 fore %= 16; | |
| 412 if (fg) | |
| 413 str = g_string_append(str, "</FONT>"); | |
| 414 if (back != -1) { | |
| 415 if (bg) | |
| 416 str = g_string_append(str, "</FONT>"); | |
| 417 back %= 16; | |
| 418 str = g_string_append(str, "<FONT BACK="); | |
| 419 str = g_string_append(str, int_to_col(back)); | |
| 420 str = g_string_append_c(str, '>'); | |
| 421 bg = TRUE; | |
| 422 } | |
| 423 str = g_string_append(str, "<FONT COLOR="); | |
| 424 str = g_string_append(str, int_to_col(fore)); | |
| 425 str = g_string_append_c(str, '>'); | |
| 426 fg = TRUE; | |
| 427 } | |
| 428 cur = end--; | |
| 429 break; | |
| 430 case 017: /* ^O */ | |
| 431 if (!bold && !underline && !fg && !bg) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
432 break; |
| 3708 | 433 *end = 0; |
| 434 str = g_string_append(str, cur); | |
| 435 if (bold) | |
| 436 str = g_string_append(str, "</B>"); | |
| 437 if (underline) | |
| 438 str = g_string_append(str, "</U>"); | |
| 439 if (fg) | |
| 440 str = g_string_append(str, "</FONT>"); | |
| 441 if (bg) | |
| 442 str = g_string_append(str, "</FONT>"); | |
| 443 bold = underline = fg = bg = FALSE; | |
| 444 cur = end + 1; | |
| 445 break; | |
| 446 case 037: /* ^_ */ | |
| 447 *end = 0; | |
| 448 str = g_string_append(str, cur); | |
| 449 if (underline) | |
| 450 str = g_string_append(str, "</U>"); | |
| 451 else | |
| 452 str = g_string_append(str, "<U>"); | |
| 453 underline = !underline; | |
| 454 cur = end + 1; | |
| 455 break; | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
456 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
457 end++; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
458 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
459 if (*cur) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
460 str = g_string_append(str, cur); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
461 return str; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
462 } |
| 2086 | 463 |
| 3751 | 464 static void |
| 465 irc_got_im(struct gaim_connection *gc, char *who, char *what, int flags, time_t t) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
466 { |
| 3751 | 467 char *utf8 = irc_recv_convert(gc, what); |
| 468 GString *str = decode_html(utf8); | |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2847
diff
changeset
|
469 serv_got_im(gc, who, str->str, flags, t, -1); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
470 g_string_free(str, TRUE); |
| 3751 | 471 g_free(utf8); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
472 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
473 |
| 3751 | 474 static void |
| 475 dcc_chat_cancel(struct dcc_chat *); | |
| 3029 | 476 |
| 477 void | |
| 478 dcc_chat_in (gpointer data, gint source, GaimInputCondition condition) | |
| 479 { | |
| 480 struct dcc_chat *chat = data; | |
| 481 gchar buffer[IRC_BUF_LEN]; | |
| 482 gchar buf[128]; | |
| 3793 | 483 int n = 0; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
484 struct gaim_conversation *convo; |
| 3029 | 485 debug_printf("THIS IS TOO MUCH EFFORT\n"); |
| 486 n = read (chat->fd, buffer, IRC_BUF_LEN); | |
| 3707 | 487 if (n > 0) { |
| 488 | |
| 489 buffer[n] = 0; | |
| 490 g_strstrip(buffer); | |
| 491 | |
| 492 /* Convert to HTML */ | |
| 493 if (strlen(buffer)) { | |
| 494 debug_printf ("DCC Message from: %s\n", chat->nick); | |
| 495 irc_got_im(chat->gc, chat->nick, buffer, 0, | |
| 496 time(NULL)); | |
| 497 } | |
| 498 } | |
| 3029 | 499 else { |
| 500 g_snprintf (buf, sizeof buf, _("DCC Chat with %s closed"), | |
| 501 chat->nick); | |
| 4491 | 502 convo = gaim_conversation_new(GAIM_CONV_IM, chat->gc->account, |
|
4476
62c1e5e656d0
[gaim-migrate @ 4751]
Christian Hammond <chipx86@chipx86.com>
parents:
4456
diff
changeset
|
503 chat->nick); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
504 gaim_conversation_write(convo, NULL, buf, -1, WFLAG_SYSTEM, |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
505 time(NULL)); |
| 3730 | 506 dcc_chat_cancel (chat); |
| 3029 | 507 } |
| 508 } | |
| 509 | |
| 3751 | 510 void |
| 511 irc_read_dcc_ack (gpointer data, gint source, GaimInputCondition condition) { | |
| 3708 | 512 /* Read ACK Here */ |
| 3633 | 513 |
| 3630 | 514 } |
| 515 | |
| 3751 | 516 void |
| 517 dcc_send_callback (gpointer data, gint source, GaimInputCondition condition) { | |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
518 #if 0 |
| 3708 | 519 struct irc_file_transfer *ift = data; |
| 520 struct sockaddr_in addr; | |
| 521 int len = sizeof(addr); | |
| 3622 | 522 |
| 3708 | 523 addr.sin_family = AF_INET; |
| 524 addr.sin_port = htons(ift->port); | |
| 525 addr.sin_addr.s_addr = INADDR_ANY; | |
| 3622 | 526 |
| 3708 | 527 ift->fd = accept(ift->fd, (struct sockaddr *)&addr, &len); |
| 528 if (!ift->fd) { | |
| 529 /* FIXME: Handle this gracefully XXX */ | |
| 530 printf("Something bad happened here, bubba!\n"); | |
| 531 return; | |
| 532 } | |
| 3622 | 533 |
| 3633 | 534 /* ift->awatcher = gaim_input_add(ift->fd, GAIM_INPUT_READ, irc_read_dcc_ack, ift); */ |
| 3630 | 535 |
| 3708 | 536 if (transfer_out_do(ift->xfer, ift->fd, 0)) { |
| 537 gaim_input_remove(ift->watcher); | |
| 538 ift->watcher = 0; | |
| 539 } | |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
540 #endif |
| 3616 | 541 } |
| 542 | |
| 3751 | 543 void |
| 544 dcc_chat_callback (gpointer data, gint source, GaimInputCondition condition) { | |
| 3029 | 545 struct dcc_chat *chat = data; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
546 struct gaim_conversation *convo; |
| 3029 | 547 char buf[IRC_BUF_LEN]; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
548 |
| 4491 | 549 convo = gaim_conversation_new(GAIM_CONV_IM, chat->gc->account, chat->nick); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
550 |
| 3029 | 551 chat->fd = source; |
| 552 g_snprintf (buf, sizeof buf, | |
| 4221 | 553 _("DCC Chat with %s established"), |
| 3029 | 554 chat->nick); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
555 gaim_conversation_write(convo, NULL, buf, -1, WFLAG_SYSTEM, time(NULL)); |
| 3029 | 556 debug_printf ("Chat with %s established\n", chat->nick); |
| 557 dcc_chat_list = g_slist_append (dcc_chat_list, chat); | |
| 558 gaim_input_remove(chat->inpa); | |
| 559 chat->inpa = gaim_input_add(source, GAIM_INPUT_READ, dcc_chat_in, chat); | |
| 560 } | |
| 561 | |
| 3751 | 562 static void |
| 563 irc_got_chat_in(struct gaim_connection *gc, int id, char *who, int whisper, char *msg, time_t t) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
564 { |
| 3751 | 565 char *utf8 = irc_recv_convert(gc, msg); |
| 566 GString *str = decode_html(utf8); | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
567 serv_got_chat_in(gc, id, who, whisper, str->str, t); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
568 g_string_free(str, TRUE); |
| 3751 | 569 g_free(utf8); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
570 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
571 |
| 3751 | 572 static void |
| 573 handle_list(struct gaim_connection *gc, char *list) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
574 { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
575 struct irc_data *id = gc->proto_data; |
| 4793 | 576 char *tmp; |
| 4785 | 577 GaimBlistNode *gnode, *bnode; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
578 |
| 4793 | 579 tmp = g_utf8_strdown(list, -1); |
| 580 | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
581 id->str = g_string_append_c(id->str, ' '); |
| 4793 | 582 id->str = g_string_append(id->str, tmp); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
583 id->bc--; |
| 4793 | 584 g_free(tmp); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
585 if (id->bc) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
586 return; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
587 |
| 4785 | 588 |
| 589 for(gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) { | |
| 590 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
| 591 continue; | |
| 592 for(bnode = gnode->child; bnode; bnode = bnode->next) { | |
| 593 struct buddy *b = (struct buddy *)bnode; | |
| 594 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
| 595 continue; | |
| 4491 | 596 if(b->account->gc == gc) { |
| 4793 | 597 char *tmp = g_utf8_strdown(b->name, -1); |
| 4349 | 598 char *x, *l; |
| 599 x = strstr(id->str->str, tmp); | |
| 600 l = x + strlen(b->name); | |
| 601 if (x && (*l != ' ' && *l != 0)) | |
| 602 x = 0; | |
| 603 if (!b->present && x) | |
| 4732 | 604 serv_got_update(gc, b->name, 1, 0, 0, 0, 0); |
| 4349 | 605 else if (b->present && !x) |
| 4732 | 606 serv_got_update(gc, b->name, 0, 0, 0, 0, 0); |
| 4349 | 607 g_free(tmp); |
| 608 } | |
| 2086 | 609 } |
| 610 } | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
611 g_string_free(id->str, TRUE); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
612 id->str = g_string_new(""); |
| 2086 | 613 } |
| 614 | |
| 3751 | 615 static gboolean |
| 616 irc_request_buddy_update(gpointer data) | |
| 2086 | 617 { |
|
2137
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
618 struct gaim_connection *gc = data; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
619 struct irc_data *id = gc->proto_data; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
620 char buf[500]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
621 int n = g_snprintf(buf, sizeof(buf), "ISON"); |
|
4416
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
622 gboolean found = FALSE; |
| 2086 | 623 |
| 4785 | 624 GaimBlistNode *gnode, *bnode; |
| 625 | |
| 626 if (id->bc) | |
|
2137
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
627 return TRUE; |
| 2086 | 628 |
| 4785 | 629 for(gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) { |
| 630 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
| 631 continue; | |
| 632 for(bnode = gnode->child; bnode; bnode = bnode->next) { | |
| 633 struct buddy *b = (struct buddy *)bnode; | |
| 634 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
| 635 continue; | |
| 4491 | 636 if(b->account->gc == gc) { |
| 4349 | 637 if (n + strlen(b->name) + 2 > sizeof(buf)) { |
| 638 g_snprintf(buf + n, sizeof(buf) - n, "\r\n"); | |
| 639 irc_write(id->fd, buf, n); | |
| 640 id->bc++; | |
| 641 n = g_snprintf(buf, sizeof(buf), "ISON"); | |
| 642 } | |
| 643 n += g_snprintf(buf + n, sizeof(buf) - n, " %s", b->name); | |
|
4416
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
644 |
|
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
645 found = TRUE; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
646 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
647 } |
| 2086 | 648 } |
|
4416
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
649 |
|
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
650 if (found) { |
|
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
651 g_snprintf(buf + n, sizeof(buf) - n, "\r\n"); |
|
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
652 irc_write(id->fd, buf, strlen(buf)); |
|
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
653 id->bc++; |
|
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
654 } |
|
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
655 |
|
2131
acc11216ec5d
[gaim-migrate @ 2141]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2123
diff
changeset
|
656 return TRUE; |
| 2086 | 657 } |
| 658 | |
| 3751 | 659 static void |
| 660 handle_names(struct gaim_connection *gc, char *chan, char *names) | |
| 2086 | 661 { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
662 struct gaim_conversation *c = irc_find_chat(gc, chan); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
663 struct gaim_chat *chat; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
664 char **buf, **tmp; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
665 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
666 if (!c) return; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
667 if (*names == ':') names++; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
668 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
669 chat = GAIM_CHAT(c); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
670 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
671 buf = g_strsplit(names, " ", -1); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
672 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
673 for (tmp = buf; *tmp; tmp++) |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
674 gaim_chat_add_user(chat, *tmp, NULL); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
675 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
676 g_strfreev(buf); |
| 2086 | 677 } |
| 678 | |
| 3751 | 679 static void |
| 680 handle_notopic(struct gaim_connection *gc, char *text) | |
| 3707 | 681 { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
682 struct gaim_conversation *c; |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
683 |
| 3707 | 684 if ((c = irc_find_chat(gc, text))) { |
| 685 char buf[IRC_BUF_LEN]; | |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
686 |
| 3707 | 687 g_snprintf(buf, sizeof(buf), _("No topic is set")); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
688 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
689 gaim_chat_set_topic(GAIM_CHAT(c), NULL, buf); |
| 3707 | 690 } |
| 691 } | |
| 692 | |
| 3751 | 693 static void |
| 694 handle_topic(struct gaim_connection *gc, char *text) | |
| 2086 | 695 { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
696 struct gaim_conversation *c; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
697 char *po = strchr(text, ' '); |
| 2086 | 698 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
699 if (!po) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
700 return; |
| 2086 | 701 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
702 *po = 0; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
703 po += 2; |
| 2086 | 704 |
|
2328
14c8df9cc75f
[gaim-migrate @ 2338]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2312
diff
changeset
|
705 if ((c = irc_find_chat(gc, text))) { |
|
14c8df9cc75f
[gaim-migrate @ 2338]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2312
diff
changeset
|
706 char buf[IRC_BUF_LEN]; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
707 gaim_chat_set_topic(GAIM_CHAT(c), NULL, po); |
|
2328
14c8df9cc75f
[gaim-migrate @ 2338]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2312
diff
changeset
|
708 g_snprintf(buf, sizeof(buf), _("<B>%s has changed the topic to: %s</B>"), |
| 3708 | 709 text, po); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
710 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
711 gaim_conversation_write(c, NULL, buf, -1, WFLAG_SYSTEM, time(NULL)); |
|
2328
14c8df9cc75f
[gaim-migrate @ 2338]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2312
diff
changeset
|
712 } |
| 2086 | 713 } |
| 714 | |
| 3751 | 715 static gboolean |
| 716 mode_has_arg(struct gaim_connection *gc, char sign, char mode) | |
| 2086 | 717 { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
718 struct irc_data *id = gc->proto_data; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
719 char *cm = id->chanmodes; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
720 int type = 0; |
| 2086 | 721 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
722 if (strchr(id->nickmodes, mode)) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
723 return TRUE; |
| 2086 | 724 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
725 while (*cm) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
726 if (*cm == ',') |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
727 type++; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
728 else if (*cm == mode) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
729 switch (type) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
730 case 0: |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
731 case 1: |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
732 return TRUE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
733 case 2: |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
734 if (sign == '+') |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
735 return TRUE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
736 case 3: |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
737 return FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
738 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
739 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
740 cm++; |
| 2086 | 741 } |
| 742 | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
743 return FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
744 } |
| 2086 | 745 |
| 3751 | 746 static void |
| 747 irc_chan_mode(struct gaim_connection *gc, char *room, char sign, char mode, char *argstr, char *who) | |
| 3452 | 748 { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
749 struct gaim_conversation *c = irc_find_chat(gc, room); |
| 3452 | 750 char buf[IRC_BUF_LEN]; |
| 751 char *nick = g_strndup(who, strchr(who, '!') - who); | |
| 752 | |
| 4221 | 753 g_snprintf(buf, sizeof(buf), _("-:- mode/%s [%c%c %s] by %s"), |
| 3707 | 754 room, sign, mode, strlen(argstr) ? argstr : "", |
| 755 nick); | |
| 3452 | 756 g_free(nick); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
757 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
758 gaim_conversation_write(c, NULL, buf, -1, WFLAG_SYSTEM, time(NULL)); |
| 3452 | 759 } |
| 760 | |
| 3751 | 761 static void |
| 762 irc_user_mode(struct gaim_connection *gc, char *room, char sign, char mode, char *nick) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
763 { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
764 struct gaim_conversation *c = irc_find_chat(gc, room); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
765 GList *r; |
| 2086 | 766 |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
767 if (mode != 'o' && mode != 'v' && mode != 'h') |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
768 return; |
| 2086 | 769 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
770 if (!c) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
771 return; |
| 2086 | 772 |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
773 r = gaim_chat_get_users(GAIM_CHAT(c)); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
774 while (r) { |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
775 gboolean op = FALSE, halfop = FALSE, voice = FALSE; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
776 char *who = r->data; |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
777 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
778 if (*who == '@') { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
779 op = TRUE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
780 who++; |
| 2086 | 781 } |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
782 |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
783 if (*who == '%') { |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
784 halfop = TRUE; |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
785 who++; |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
786 } |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
787 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
788 if (*who == '+') { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
789 voice = TRUE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
790 who++; |
| 2086 | 791 } |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
792 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
793 if (!strcmp(who, nick)) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
794 char *tmp, buf[IRC_BUF_LEN]; |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
795 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
796 if (mode == 'o') { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
797 if (sign == '-') |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
798 op = FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
799 else |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
800 op = TRUE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
801 } |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
802 |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
803 if (mode == 'h') { |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
804 if (sign == '-') |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
805 halfop = FALSE; |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
806 else |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
807 halfop = TRUE; |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
808 } |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
809 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
810 if (mode == 'v') { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
811 if (sign == '-') |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
812 voice = FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
813 else |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
814 voice = TRUE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
815 } |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
816 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
817 tmp = g_strdup(r->data); |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
818 g_snprintf(buf, sizeof(buf), "%s%s%s", |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
819 (op ? "@" : (halfop ? "%" : "")), |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
820 voice ? "+" : "", nick); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
821 gaim_chat_rename_user(GAIM_CHAT(c), tmp, buf); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
822 g_free(tmp); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
823 return; |
| 2086 | 824 } |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
825 r = r->next; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
826 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
827 } |
| 2086 | 828 |
| 3751 | 829 static void |
| 830 handle_mode(struct gaim_connection *gc, char *word[], char *word_eol[], gboolean n324) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
831 { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
832 struct irc_data *id = gc->proto_data; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
833 int offset = n324 ? 4 : 3; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
834 char *chan = word[offset]; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
835 struct gaim_conversation *c = irc_find_chat(gc, chan); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
836 char *modes = word[offset + 1]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
837 int len = strlen(word_eol[offset]) - 1; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
838 char sign = *modes++; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
839 int arg = 1; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
840 char *argstr; |
| 3452 | 841 char *who = word[1]; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
842 |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
843 if (!c) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
844 return; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
845 |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
846 if (word_eol[offset][len] == ' ') |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
847 word_eol[offset][len] = 0; |
| 2086 | 848 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
849 while (TRUE) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
850 switch (*modes) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
851 case 0: |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
852 return; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
853 case '+': |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
854 case '-': |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
855 sign = *modes; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
856 break; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
857 default: |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
858 if (mode_has_arg(gc, sign, *modes)) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
859 argstr = word[++arg + offset]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
860 else |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
861 argstr = ""; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
862 if (strchr(id->nickmodes, *modes)) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
863 irc_user_mode(gc, chan, sign, *modes, argstr); |
| 3452 | 864 else if (strchr(who, '!')) |
| 865 irc_chan_mode(gc, chan, sign, *modes, argstr, who); | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
866 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
867 modes++; |
| 2086 | 868 } |
| 869 } | |
|
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
870 |
| 3751 | 871 static void |
| 872 handle_version(struct gaim_connection *gc, char *word[], char *word_eol[], int num) | |
| 3452 | 873 { |
| 874 struct irc_data *id = gc->proto_data; | |
| 875 GString *str; | |
| 876 | |
| 877 id->liststr = g_string_new(""); | |
| 878 | |
| 879 id->liststr = g_string_append(id->liststr, "<b>Version: </b>"); | |
| 880 id->liststr = g_string_append(id->liststr, word_eol[4]); | |
| 881 | |
| 882 str = decode_html(id->liststr->str); | |
| 883 g_show_info_text(gc, NULL, 2, str->str, NULL); | |
| 884 g_string_free(str, TRUE); | |
| 885 g_string_free(id->liststr, TRUE); | |
| 886 id->liststr = NULL; | |
| 887 } | |
| 888 | |
| 3751 | 889 static void |
| 890 handle_who(struct gaim_connection *gc, char *word[], char *word_eol[], int num) | |
| 3452 | 891 { |
| 892 struct irc_data *id = gc->proto_data; | |
| 893 char buf[IRC_BUF_LEN]; | |
| 894 | |
| 895 if (!id->in_whois) { | |
| 896 id->in_whois = TRUE; | |
| 897 id->liststr = g_string_new(""); | |
| 898 } | |
| 899 | |
| 900 switch (num) { | |
| 901 case 352: | |
| 902 g_snprintf(buf, sizeof(buf), "<b>%s</b> (%s@%s): %s<br>", | |
| 903 word[8], word[5], word[6], word_eol[11]); | |
| 904 id->liststr = g_string_append(id->liststr, buf); | |
| 905 break; | |
| 906 } | |
| 907 } | |
| 908 | |
| 2648 | 909 /* Handle our whois stuff here. You know what, I have a sore throat. You know |
| 910 * what I think about that? I'm not too pleased with it. Perhaps I should take | |
| 911 * some medicine, or perhaps I should go to bed? Blah!! */ | |
| 912 | |
| 3751 | 913 static void |
| 914 handle_whois(struct gaim_connection *gc, char *word[], char *word_eol[], int num) | |
| 2648 | 915 { |
| 916 struct irc_data *id = gc->proto_data; | |
| 917 char tmp[1024]; | |
| 918 | |
| 919 if (!id->in_whois) { | |
| 920 id->in_whois = TRUE; | |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
921 id->liststr = g_string_new(""); |
| 2648 | 922 } else { |
| 923 /* I can't decide if we should have one break or two */ | |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
924 id->liststr = g_string_append(id->liststr, "<BR>"); |
| 2648 | 925 id->in_whois = TRUE; |
| 926 } | |
| 927 | |
| 928 switch (num) { | |
| 3707 | 929 case 311: |
| 930 id->liststr = g_string_append(id->liststr, "<b>User: </b>"); | |
| 931 break; | |
| 932 case 312: | |
| 933 id->liststr = g_string_append(id->liststr, "<b>Server: </b>"); | |
| 934 break; | |
| 935 case 313: | |
| 936 g_snprintf(tmp, sizeof(tmp), "<b>IRC Operator:</b> %s ", word[4]); | |
| 937 id->liststr = g_string_append(id->liststr, tmp); | |
| 938 break; | |
| 939 case 314: | |
| 940 id->liststr = g_string_append(id->liststr, "<b>User: </b>"); | |
| 941 g_snprintf(tmp, sizeof(tmp), "<b>%s</b> (%s@%s) %s", | |
| 942 word[4], word[5], word[6], word_eol[8]); | |
| 943 id->liststr = g_string_append(id->liststr, tmp); | |
| 944 return; | |
| 945 case 317: | |
| 946 id->liststr = g_string_append(id->liststr, "<b>Idle Time: </b>"); | |
| 947 break; | |
| 948 case 319: | |
| 949 id->liststr = g_string_append(id->liststr, "<b>Channels: </b>"); | |
| 950 break; | |
|
4509
cf2f5a1f1e46
[gaim-migrate @ 4785]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
951 /* Numeric 320 is used by the freenode irc network for showing |
|
cf2f5a1f1e46
[gaim-migrate @ 4785]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
952 * that a user is identified to services (Jason Straw <misato@wopn.org>)*/ |
|
cf2f5a1f1e46
[gaim-migrate @ 4785]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
953 case 320: |
|
cf2f5a1f1e46
[gaim-migrate @ 4785]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
954 g_snprintf(tmp, sizeof(tmp), "%s is an Identified User", word[4]); |
|
cf2f5a1f1e46
[gaim-migrate @ 4785]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
955 id->liststr = g_string_append(id->liststr, tmp); |
|
cf2f5a1f1e46
[gaim-migrate @ 4785]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
956 return; |
| 3707 | 957 default: |
| 958 break; | |
| 2648 | 959 } |
| 3452 | 960 |
|
2651
f84dcbcfba4b
[gaim-migrate @ 2664]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2650
diff
changeset
|
961 if (word_eol[5][0] == ':') |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
962 id->liststr = g_string_append(id->liststr, word_eol[5] + 1); |
| 3452 | 963 /* Nicer idle time output, by jonas@birme.se */ |
| 964 else if (isdigit(word_eol[5][0])) { | |
| 965 time_t idle = atol(word_eol[5]); | |
| 966 time_t signon = atol(strchr(word_eol[5], ' ')); | |
| 967 | |
| 968 g_snprintf(tmp, sizeof(tmp), | |
| 969 "%ld seconds [signon: %s]", (idle / 1000), ctime(&signon)); | |
| 970 id->liststr = g_string_append(id->liststr, tmp); | |
| 971 } | |
|
2651
f84dcbcfba4b
[gaim-migrate @ 2664]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2650
diff
changeset
|
972 else |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
973 id->liststr = g_string_append(id->liststr, word_eol[5]); |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
974 } |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
975 |
| 3751 | 976 static void |
| 977 handle_roomlist(struct gaim_connection *gc, char *word[], char *word_eol[]) | |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
978 { |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
979 struct irc_data *id = gc->proto_data; |
| 2648 | 980 |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
981 if (!id->in_list) { |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
982 id->in_list = TRUE; |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
983 id->liststr = g_string_new(""); |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
984 } else { |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
985 id->liststr = g_string_append(id->liststr, "<BR>"); |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
986 id->in_list = TRUE; |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
987 } |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
988 |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
989 id->liststr = g_string_append(id->liststr, word_eol[4]); |
| 2648 | 990 } |
| 991 | |
| 3751 | 992 static void |
| 993 irc_change_nick(void *a, char *b) { | |
| 3511 | 994 struct gaim_connection *gc = a; |
| 995 struct irc_data *id = gc->proto_data; | |
| 996 char buf[IRC_BUF_LEN]; | |
| 997 g_snprintf(buf, sizeof(buf), "NICK %s\r\n", b); | |
| 998 irc_write(id->fd, buf, strlen(buf)); | |
| 999 } | |
| 1000 | |
| 3751 | 1001 static void |
| 1002 process_numeric(struct gaim_connection *gc, char *word[], char *word_eol[]) | |
| 2086 | 1003 { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1004 struct irc_data *id = gc->proto_data; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1005 char *text = word_eol[3]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1006 int n = atoi(word[2]); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1007 |
| 4793 | 1008 if (!g_ascii_strncasecmp(gc->displayname, text, strlen(gc->displayname))) |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1009 text += strlen(gc->displayname) + 1; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1010 if (*text == ':') |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1011 text++; |
| 2086 | 1012 |
| 3707 | 1013 /* RPL_ and ERR_ */ |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1014 switch (n) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1015 case 4: |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1016 if (!strncmp(word[5], "u2.10", 5)) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1017 id->six_modes = TRUE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1018 else |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1019 id->six_modes = FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1020 break; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1021 case 5: |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1022 handle_005(gc, word, word_eol); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1023 break; |
| 3707 | 1024 case 301: /* RPL_AWAY */ |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
1025 if (id->in_whois) { |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1026 id->liststr = g_string_append(id->liststr, "<BR><b>Away: </b>"); |
|
2651
f84dcbcfba4b
[gaim-migrate @ 2664]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2650
diff
changeset
|
1027 |
|
f84dcbcfba4b
[gaim-migrate @ 2664]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2650
diff
changeset
|
1028 if (word_eol[5][0] == ':') |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1029 id->liststr = g_string_append(id->liststr, word_eol[5] + 1); |
|
2651
f84dcbcfba4b
[gaim-migrate @ 2664]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2650
diff
changeset
|
1030 else |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1031 id->liststr = g_string_append(id->liststr, word_eol[5]); |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
1032 } else |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
1033 irc_got_im(gc, word[4], word_eol[5], IM_FLAG_AWAY, time(NULL)); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1034 break; |
| 3707 | 1035 case 303: /* RPL_ISON */ |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1036 handle_list(gc, &word_eol[4][1]); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1037 break; |
| 3707 | 1038 case 311: /* RPL_WHOISUSER */ |
| 1039 case 312: /* RPL_WHOISSERVER */ | |
| 1040 case 313: /* RPL_WHOISOPERATOR */ | |
| 1041 case 314: /* RPL_WHOWASUSER */ | |
| 1042 case 317: /* RPL_WHOISIDLE */ | |
| 1043 case 319: /* RPL_WHOISCHANNELS */ | |
|
4509
cf2f5a1f1e46
[gaim-migrate @ 4785]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
1044 case 320: /* FreeNode Identified */ |
| 2648 | 1045 handle_whois(gc, word, word_eol, n); |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
1046 break; |
| 3707 | 1047 case 322: /* RPL_LIST */ |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1048 handle_roomlist(gc, word, word_eol); |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1049 break; |
| 3707 | 1050 case 315: /* RPL_ENDOFWHO */ |
| 1051 case 318: /* RPL_ENDOFWHOIS */ | |
| 1052 case 323: /* RPL_LISTEND */ | |
| 1053 case 369: /* RPL_ENDOFWHOWAS */ | |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1054 if ((id->in_whois || id->in_list) && id->liststr) { |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1055 GString *str = decode_html(id->liststr->str); |
|
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2782
diff
changeset
|
1056 g_show_info_text(gc, NULL, 2, str->str, NULL); |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
1057 g_string_free(str, TRUE); |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1058 g_string_free(id->liststr, TRUE); |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1059 id->liststr = NULL; |
|
2652
65a602693286
[gaim-migrate @ 2665]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2651
diff
changeset
|
1060 id->in_whois = FALSE; |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1061 id->in_list = FALSE; |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
1062 } |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
1063 break; |
| 3707 | 1064 case 324: /* RPL_CHANNELMODEIS */ |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1065 handle_mode(gc, word, word_eol, TRUE); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1066 break; |
| 3707 | 1067 case 331: /* RPL_NOTOPIC */ |
| 1068 handle_notopic(gc, text); | |
| 1069 break; | |
| 1070 case 332: /* RPL_TOPIC */ | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1071 handle_topic(gc, text); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1072 break; |
| 3707 | 1073 case 351: /* RPL_VERSION */ |
| 3452 | 1074 handle_version(gc, word, word_eol, n); |
| 1075 break; | |
| 3707 | 1076 case 352: /* RPL_WHOREPLY */ |
| 3708 | 1077 handle_who(gc, word, word_eol, n); |
| 1078 break; | |
| 3707 | 1079 case 353: /* RPL_NAMREPLY */ |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1080 handle_names(gc, word[5], word_eol[6]); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1081 break; |
| 3707 | 1082 case 376: /* RPL_ENDOFMOTD */ |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1083 irc_request_buddy_update(gc); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1084 break; |
| 3707 | 1085 case 382: /* RPL_REHASHING */ |
| 1086 do_error_dialog(_("Rehashing server"), _("IRC Operator"), GAIM_ERROR); | |
| 1087 break; | |
| 1088 case 401: /* ERR_NOSUCHNICK */ | |
| 1089 do_error_dialog(_("No such nick/channel"), _("IRC Error"), GAIM_ERROR); | |
|
2652
65a602693286
[gaim-migrate @ 2665]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2651
diff
changeset
|
1090 break; |
| 3707 | 1091 case 402: /* ERR_NOSUCHSERVER */ |
| 1092 do_error_dialog(_("No such server"), _("IRC Error"), GAIM_ERROR); | |
| 1093 case 431: /* ERR_NONICKNAMEGIVEN */ | |
| 1094 do_error_dialog(_("No nickname given"), _("IRC Error"), GAIM_ERROR); | |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
1095 break; |
| 3707 | 1096 case 481: /* ERR_NOPRIVILEGES */ |
| 1097 do_error_dialog(_("You're not an IRC operator!"), _("IRC Error"), GAIM_ERROR); | |
| 1098 break; | |
| 3511 | 1099 case 433: |
| 1100 do_prompt_dialog(_("That nick is already in use. Please enter a new nick"), gc->displayname, gc, irc_change_nick, NULL); | |
| 3605 | 1101 break; |
| 3452 | 1102 default: |
| 3707 | 1103 /* Other error messages */ |
| 3452 | 1104 if (n > 400 && n < 502) { |
| 1105 char errmsg[IRC_BUF_LEN]; | |
| 1106 char *errmsg1 = strrchr(text, ':'); | |
| 1107 g_snprintf(errmsg, sizeof(errmsg), "IRC Error %d", n); | |
| 1108 if (errmsg) | |
| 3536 | 1109 do_error_dialog(errmsg, errmsg1 ? errmsg1+1 : NULL, GAIM_ERROR); |
| 3452 | 1110 } |
| 1111 break; | |
| 2086 | 1112 } |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1113 } |
| 2086 | 1114 |
| 3751 | 1115 static gboolean |
| 1116 is_channel(struct gaim_connection *gc, char *name) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1117 { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1118 struct irc_data *id = gc->proto_data; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1119 if (strchr(id->chantypes, *name)) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1120 return TRUE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1121 return FALSE; |
| 2086 | 1122 } |
| 1123 | |
| 3751 | 1124 static void |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1125 irc_rem_chat_bud(struct gaim_connection *gc, char *nick, struct gaim_conversation *b, char *reason) |
| 2086 | 1126 { |
| 1127 | |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1128 struct gaim_chat *chat; |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1129 |
| 4067 | 1130 if (b) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1131 GList *r; |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1132 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1133 chat = GAIM_CHAT(b); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1134 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1135 r = gaim_chat_get_users(chat); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1136 |
| 4067 | 1137 while (r) { |
| 1138 char *who = r->data; | |
| 1139 if (*who == '@') | |
| 1140 who++; | |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
1141 if (*who == '%') |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
1142 who++; |
| 4067 | 1143 if (*who == '+') |
| 1144 who++; | |
| 4793 | 1145 if (!gaim_utf8_strcasecmp(who, nick)) { |
| 4067 | 1146 char *tmp = g_strdup(r->data); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1147 gaim_chat_remove_user(chat, tmp, reason); |
| 4067 | 1148 g_free(tmp); |
| 1149 break; | |
| 1150 } | |
| 1151 r = r->next; | |
| 4065 | 1152 } |
| 4067 | 1153 } else { |
| 1154 GSList *bcs = gc->buddy_chats; | |
| 1155 while (bcs) { | |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1156 struct gaim_conversation *bc = bcs->data; |
| 4067 | 1157 irc_rem_chat_bud(gc, nick, bc, reason); |
| 1158 bcs = bcs->next; | |
| 1159 } | |
| 2086 | 1160 } |
| 1161 } | |
| 1162 | |
| 3751 | 1163 static void |
| 1164 irc_change_name(struct gaim_connection *gc, char *old, char *new) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1165 { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1166 GSList *bcs = gc->buddy_chats; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1167 char buf[IRC_BUF_LEN]; |
| 2086 | 1168 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1169 while (bcs) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1170 struct gaim_conversation *b = bcs->data; |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1171 struct gaim_chat *chat; |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1172 GList *r; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1173 |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1174 chat = GAIM_CHAT(b); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1175 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1176 r = gaim_chat_get_users(chat); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1177 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1178 while (r) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1179 char *who = r->data; |
|
2292
6625d0755c51
[gaim-migrate @ 2302]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2291
diff
changeset
|
1180 int n = 0; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1181 if (*who == '@') |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1182 buf[n++] = *who++; |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
1183 if (*who == '%') |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
1184 buf[n++] = *who++; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1185 if (*who == '+') |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1186 buf[n++] = *who++; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1187 g_snprintf(buf + n, sizeof(buf) - n, "%s", new); |
|
2312
766603034af8
[gaim-migrate @ 2322]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2310
diff
changeset
|
1188 if (!strcmp(who, old)) { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1189 char *tmp = g_strdup(r->data); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1190 gaim_chat_rename_user(chat, tmp, buf); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1191 r = gaim_chat_get_users(chat); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1192 g_free(tmp); |
|
2725
f3c094e78609
[gaim-migrate @ 2738]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2687
diff
changeset
|
1193 break; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1194 } else |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1195 r = r->next; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1196 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1197 bcs = bcs->next; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1198 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1199 } |
| 2086 | 1200 |
| 3751 | 1201 static void |
| 1202 handle_privmsg(struct gaim_connection *gc, char *to, char *nick, char *msg) | |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1203 { |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1204 if (is_channel(gc, to)) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1205 struct gaim_conversation *c = irc_find_chat(gc, to); |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1206 if (!c) |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1207 return; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1208 irc_got_chat_in(gc, gaim_chat_get_id(GAIM_CHAT(c)), |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1209 nick, 0, msg, time(NULL)); |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1210 } else { |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1211 char *tmp = g_malloc(strlen(nick) + 2); |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1212 g_snprintf(tmp, strlen(nick) + 2, "@%s", nick); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1213 if (gaim_find_conversation(tmp)) |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1214 irc_got_im(gc, tmp, msg, 0, time(NULL)); |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1215 else { |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1216 *tmp = '+'; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1217 if (gaim_find_conversation(tmp)) |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1218 irc_got_im(gc, tmp, msg, 0, time(NULL)); |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1219 else |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1220 irc_got_im(gc, nick, msg, 0, time(NULL)); |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1221 } |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1222 g_free(tmp); |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1223 } |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1224 } |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1225 |
| 3751 | 1226 static void |
| 1227 dcc_chat_init(struct dcc_chat *data) { | |
| 4249 | 1228 if (g_slist_find(connections, data->gc)) { |
| 4634 | 1229 proxy_connect(data->gc->account, data->ip_address, data->port, dcc_chat_callback, data); |
| 4249 | 1230 } else { |
| 1231 g_free(data); | |
| 1232 } | |
| 3029 | 1233 } |
| 1234 | |
| 3751 | 1235 static void |
| 1236 dcc_chat_cancel(struct dcc_chat *data){ | |
| 4249 | 1237 if (g_slist_find(connections, data->gc) && find_dcc_chat(data->gc, data->nick)) { |
| 3029 | 1238 dcc_chat_list = g_slist_remove(dcc_chat_list, data); |
| 1239 gaim_input_remove (data->inpa); | |
| 1240 close (data->fd); | |
| 1241 } | |
| 1242 g_free(data); | |
| 1243 } | |
| 1244 | |
| 3751 | 1245 static void |
| 1246 irc_convo_closed(struct gaim_connection *gc, char *who) | |
| 3029 | 1247 { |
| 1248 struct dcc_chat *dchat = find_dcc_chat(gc, who); | |
| 1249 if (!dchat) | |
| 1250 return; | |
| 1251 | |
| 3730 | 1252 dcc_chat_cancel(dchat); |
| 3029 | 1253 } |
| 1254 | |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1255 static void |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1256 irc_xfer_init(struct gaim_xfer *xfer) |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1257 { |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1258 struct irc_xfer_data *data = (struct irc_xfer_data *)xfer->data; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1259 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1260 gaim_xfer_start(xfer, -1, data->ip, data->port); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1261 } |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1262 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1263 static void |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1264 irc_xfer_end(struct gaim_xfer *xfer) |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1265 { |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1266 struct irc_xfer_data *data = (struct irc_xfer_data *)xfer->data; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1267 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1268 data->idata->file_transfers = g_slist_remove(data->idata->file_transfers, |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1269 xfer); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1270 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1271 g_free(data); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1272 xfer->data = NULL; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1273 } |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1274 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1275 static void |
|
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1276 irc_xfer_cancel_send(struct gaim_xfer *xfer) |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1277 { |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1278 struct irc_xfer_data *data = (struct irc_xfer_data *)xfer->data; |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1279 |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1280 data->idata->file_transfers = g_slist_remove(data->idata->file_transfers, |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1281 xfer); |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1282 |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1283 g_free(data); |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1284 xfer->data = NULL; |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1285 } |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1286 |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1287 static void |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1288 irc_xfer_cancel_recv(struct gaim_xfer *xfer) |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1289 { |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1290 struct irc_xfer_data *data = (struct irc_xfer_data *)xfer->data; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1291 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1292 data->idata->file_transfers = g_slist_remove(data->idata->file_transfers, |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1293 xfer); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1294 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1295 g_free(data); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1296 xfer->data = NULL; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1297 } |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1298 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1299 static void |
| 4594 | 1300 irc_xfer_ack(struct gaim_xfer *xfer, const char *buffer, size_t size) |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1301 { |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1302 guint32 pos; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1303 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1304 pos = htonl(gaim_xfer_get_bytes_sent(xfer)); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1305 |
|
4552
a2f2a717fdf2
[gaim-migrate @ 4832]
Christian Hammond <chipx86@chipx86.com>
parents:
4514
diff
changeset
|
1306 write(xfer->fd, (char *)&pos, 4); |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1307 } |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1308 |
| 3751 | 1309 static void |
| 1310 handle_ctcp(struct gaim_connection *gc, char *to, char *nick, | |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1311 char *msg, char *word[], char *word_eol[]) |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1312 { |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1313 struct irc_data *id = gc->proto_data; |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1314 char buf[IRC_BUF_LEN]; |
| 3735 | 1315 char out[IRC_BUF_LEN]; |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1316 |
| 4793 | 1317 if (!g_ascii_strncasecmp(msg, "VERSION", 7)) { |
| 3735 | 1318 g_snprintf(buf, sizeof(buf), "\001VERSION Gaim " VERSION ": The Penguin Pimpin' " |
| 1319 "Multi-protocol Messaging Client: " WEBSITE "\001"); | |
| 1320 irc_send_notice (gc, nick, buf); | |
| 1321 g_snprintf(out, sizeof(out), ">> CTCP VERSION requested from %s", nick); | |
| 1322 do_error_dialog(out, _("IRC CTCP info"), GAIM_INFO); | |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1323 } |
| 4793 | 1324 if (!g_ascii_strncasecmp(msg, "CLIENTINFO", 10)) { |
| 3735 | 1325 g_snprintf(buf, sizeof(buf), "\001CLIENTINFO USERINFO CLIENTINFO VERSION\001"); |
| 1326 irc_send_notice (gc, nick, buf); | |
| 1327 g_snprintf(out, sizeof(out), ">> CTCP CLIENTINFO requested from %s", nick); | |
| 1328 do_error_dialog(out, _("IRC CTCP info"), GAIM_INFO); | |
| 3707 | 1329 } |
| 4793 | 1330 if (!g_ascii_strncasecmp(msg, "USERINFO", 8)) { |
| 4491 | 1331 g_snprintf(buf, sizeof(buf), "\001USERINFO Alias: %s\001", gc->account->alias); |
| 3735 | 1332 irc_send_notice (gc, nick, buf); |
| 1333 g_snprintf(out, sizeof(out), ">> CTCP USERINFO requested from %s", nick); | |
| 1334 do_error_dialog(out, _("IRC CTCP info"), GAIM_INFO); | |
| 3707 | 1335 } |
| 4793 | 1336 if (!g_ascii_strncasecmp(msg, "ACTION", 6)) { |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1337 char *po = strchr(msg + 6, 1); |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1338 char *tmp; |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1339 if (po) *po = 0; |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1340 tmp = g_strconcat("/me", msg + 6, NULL); |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1341 handle_privmsg(gc, to, nick, tmp); |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1342 g_free(tmp); |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1343 } |
| 4793 | 1344 if (!g_ascii_strncasecmp(msg, "PING", 4)) { |
| 1345 g_snprintf(buf, sizeof(buf), "\001%s\001", msg); | |
| 3735 | 1346 irc_send_notice (gc, nick, buf); |
| 1347 g_snprintf(out, sizeof(out), ">> CTCP PING requested from %s", nick); | |
| 4793 | 1348 do_error_dialog(out, _("IRC CTCP info"), GAIM_INFO); |
| 3735 | 1349 } |
| 4793 | 1350 if (!g_ascii_strncasecmp(msg, "DCC CHAT", 8)) { |
| 3029 | 1351 char **chat_args = g_strsplit(msg, " ", 5); |
| 1352 char ask[1024]; | |
| 3707 | 1353 struct dcc_chat *dccchat = g_new0(struct dcc_chat, 1); |
| 3029 | 1354 dccchat->gc = gc; |
| 1355 g_snprintf(dccchat->ip_address, sizeof(dccchat->ip_address), chat_args[3]); | |
| 1356 dccchat->port=atoi(chat_args[4]); | |
| 1357 g_snprintf(dccchat->nick, sizeof(dccchat->nick), nick); | |
| 3730 | 1358 g_snprintf(ask, sizeof(ask), _("%s would like to establish a DCC chat"), nick); |
| 4249 | 1359 do_ask_dialog(ask, _("This requires a direct connection to be established between the two computers. Messages sent will not pass through the IRC server"), dccchat, _("Connect"), dcc_chat_init, _("Cancel"), dcc_chat_cancel, my_protocol->plug ? my_protocol->plug->handle : NULL, FALSE); |
| 3029 | 1360 } |
| 3616 | 1361 |
| 1362 | |
| 4793 | 1363 if (!g_ascii_strncasecmp(msg, "DCC SEND", 8)) { |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1364 struct gaim_xfer *xfer; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1365 char **send_args; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1366 char *ip, *filename; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1367 struct irc_xfer_data *xfer_data; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1368 size_t size; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1369 int port; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1370 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1371 send_args = g_strsplit(msg, " ", 6); |
| 3708 | 1372 send_args[5][strlen(send_args[5])-1] = 0; |
| 3616 | 1373 |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1374 /* Give these better names. */ |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1375 ip = send_args[3]; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1376 filename = send_args[2]; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1377 size = atoi(send_args[5]); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1378 port = atoi(send_args[4]); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1379 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1380 /* Setup the IRC-specific transfer data. */ |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1381 xfer_data = g_malloc0(sizeof(struct irc_xfer_data)); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1382 xfer_data->ip = ip; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1383 xfer_data->port = port; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1384 xfer_data->idata = id; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1385 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1386 /* Build the file transfer handle. */ |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1387 xfer = gaim_xfer_new(gc->account, GAIM_XFER_RECEIVE, nick); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1388 xfer->data = xfer_data; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1389 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1390 /* Set the info about the incoming file. */ |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1391 gaim_xfer_set_filename(xfer, filename); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1392 gaim_xfer_set_size(xfer, size); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1393 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1394 g_free(filename); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1395 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1396 /* Setup our I/O op functions. */ |
|
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1397 gaim_xfer_set_init_fnc(xfer, irc_xfer_init); |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1398 gaim_xfer_set_end_fnc(xfer, irc_xfer_end); |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1399 gaim_xfer_set_cancel_send_fnc(xfer, irc_xfer_cancel_send); |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1400 gaim_xfer_set_cancel_recv_fnc(xfer, irc_xfer_cancel_recv); |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1401 gaim_xfer_set_ack_fnc(xfer, irc_xfer_ack); |
| 3616 | 1402 |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1403 /* Keep track of this transfer for later. */ |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1404 id->file_transfers = g_slist_append(id->file_transfers, xfer); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1405 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1406 /* Now perform the request! */ |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1407 gaim_xfer_request(xfer); |
| 3616 | 1408 } |
| 3735 | 1409 |
| 1410 /*write_to_conv(c, out, WFLAG_SYSTEM, NULL, time(NULL), -1);*/ | |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1411 } |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1412 |
| 3751 | 1413 static gboolean |
| 1414 irc_parse(struct gaim_connection *gc, char *buf) | |
| 2086 | 1415 { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1416 struct irc_data *idata = gc->proto_data; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1417 gchar outbuf[IRC_BUF_LEN]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1418 char *word[PDIWORDS], *word_eol[PDIWORDS]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1419 char pdibuf[522]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1420 char *ex, ip[128], nick[128]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1421 char *cmd; |
| 2086 | 1422 |
| 1423 /* Check for errors */ | |
| 3452 | 1424 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1425 if (*buf != ':') { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1426 if (!strncmp(buf, "NOTICE ", 7)) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1427 buf += 7; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1428 if (!strncmp(buf, "PING ", 5)) { |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1429 int r = FALSE; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1430 g_snprintf(outbuf, sizeof(outbuf), "PONG %s\r\n", buf + 5); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1431 if (irc_write(idata->fd, outbuf, strlen(outbuf)) < 0) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1432 hide_login_progress(gc, _("Unable to write")); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1433 signoff(gc); |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1434 r = TRUE; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1435 } |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1436 return r; |
| 2086 | 1437 } |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1438 /* XXX doesn't handle ERROR */ |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1439 return FALSE; |
| 2086 | 1440 } |
| 1441 | |
|
2782
428bd24c18c6
[gaim-migrate @ 2795]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
1442 if (!idata->online) { |
|
428bd24c18c6
[gaim-migrate @ 2795]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
1443 /* Now lets sign ourselves on */ |
|
428bd24c18c6
[gaim-migrate @ 2795]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
1444 account_online(gc); |
|
428bd24c18c6
[gaim-migrate @ 2795]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
1445 serv_finish_login(gc); |
|
428bd24c18c6
[gaim-migrate @ 2795]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
1446 |
|
428bd24c18c6
[gaim-migrate @ 2795]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
1447 /* we don't call this now because otherwise some IRC servers might not like us */ |
|
428bd24c18c6
[gaim-migrate @ 2795]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
1448 idata->timer = g_timeout_add(20000, irc_request_buddy_update, gc); |
|
428bd24c18c6
[gaim-migrate @ 2795]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
1449 idata->online = TRUE; |
|
428bd24c18c6
[gaim-migrate @ 2795]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
1450 } |
|
428bd24c18c6
[gaim-migrate @ 2795]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
1451 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1452 buf++; |
| 2086 | 1453 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1454 process_data_init(pdibuf, buf, word, word_eol, FALSE); |
| 2086 | 1455 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1456 if (atoi(word[2])) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1457 if (*word_eol[3]) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1458 process_numeric(gc, word, word_eol); |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1459 return FALSE; |
| 2086 | 1460 } |
| 1461 | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1462 cmd = word[2]; |
| 2086 | 1463 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1464 ex = strchr(pdibuf, '!'); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1465 if (!ex) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1466 strncpy(ip, pdibuf, sizeof(ip)); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1467 ip[sizeof(ip)-1] = 0; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1468 strncpy(nick, pdibuf, sizeof(nick)); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1469 nick[sizeof(nick)-1] = 0; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1470 } else { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1471 strncpy(ip, ex + 1, sizeof(ip)); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1472 ip[sizeof(ip)-1] = 0; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1473 strncpy(nick, pdibuf, sizeof(nick)); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1474 nick[sizeof(nick)-1] = 0; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1475 if ((ex - pdibuf) < sizeof (nick)) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1476 nick[ex - pdibuf] = 0; /* cut the buffer at the '!' */ |
| 2086 | 1477 } |
| 1478 | |
|
2847
e49bd1479edd
[gaim-migrate @ 2860]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2831
diff
changeset
|
1479 if (!strcmp(cmd, "INVITE")) { |
|
e49bd1479edd
[gaim-migrate @ 2860]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2831
diff
changeset
|
1480 char *chan = g_strdup(word[4]); |
|
e49bd1479edd
[gaim-migrate @ 2860]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2831
diff
changeset
|
1481 serv_got_chat_invite(gc, chan + 1, nick, NULL, g_list_append(NULL, chan)); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1482 } else if (!strcmp(cmd, "JOIN")) { |
| 3751 | 1483 irc_parse_join(gc, nick, word, word_eol); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1484 } else if (!strcmp(cmd, "KICK")) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1485 if (!strcmp(gc->displayname, word[4])) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1486 struct gaim_conversation *c = irc_find_chat(gc, word[3]); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1487 if (!c) |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1488 return FALSE; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1489 gc->buddy_chats = g_slist_remove(gc->buddy_chats, c); |
| 4491 | 1490 gaim_conversation_set_account(c, NULL); |
| 3707 | 1491 g_snprintf(outbuf, sizeof(outbuf), _("You have been kicked from %s: %s"), |
| 1492 word[3], *word_eol[5] == ':' ? word_eol[5] + 1 : word_eol[5]); | |
| 1493 do_error_dialog(outbuf, _("IRC Error"), GAIM_ERROR); | |
|
2820
b917845dad3c
[gaim-migrate @ 2833]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2801
diff
changeset
|
1494 } else { |
|
b917845dad3c
[gaim-migrate @ 2833]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2801
diff
changeset
|
1495 char *reason = *word_eol[5] == ':' ? word_eol[5] + 1 : word_eol[5]; |
|
b917845dad3c
[gaim-migrate @ 2833]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2801
diff
changeset
|
1496 char *msg = g_strdup_printf(_("Kicked by %s: %s"), nick, reason); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1497 struct gaim_conversation *c = irc_find_chat(gc, word[3]); |
| 4065 | 1498 irc_rem_chat_bud(gc, word[4], c, msg); |
|
2820
b917845dad3c
[gaim-migrate @ 2833]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2801
diff
changeset
|
1499 g_free(msg); |
|
b917845dad3c
[gaim-migrate @ 2833]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2801
diff
changeset
|
1500 } |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1501 } else if (!strcmp(cmd, "KILL")) { /* */ |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1502 } else if (!strcmp(cmd, "MODE")) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1503 handle_mode(gc, word, word_eol, FALSE); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1504 } else if (!strcmp(cmd, "NICK")) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1505 char *new = *word_eol[3] == ':' ? word_eol[3] + 1 : word_eol[3]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1506 if (!strcmp(gc->displayname, nick)) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1507 g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", new); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1508 irc_change_name(gc, nick, new); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1509 } else if (!strcmp(cmd, "NOTICE")) { |
| 3751 | 1510 irc_parse_notice(gc, nick, ex, word, word_eol); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1511 } else if (!strcmp(cmd, "PART")) { |
| 3751 | 1512 if (!irc_parse_part(gc, nick, cmd, word, word_eol)) |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1513 return FALSE; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1514 } else if (!strcmp(cmd, "PRIVMSG")) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1515 char *to, *msg; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1516 if (!*word[3]) |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1517 return FALSE; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1518 to = word[3]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1519 msg = *word_eol[4] == ':' ? word_eol[4] + 1 : word_eol[4]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1520 if (msg[0] == 1 && msg[strlen (msg) - 1] == 1) { /* ctcp */ |
| 4793 | 1521 if (!g_ascii_strncasecmp(msg + 1, "DCC ", 4)) |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1522 process_data_init(pdibuf, buf, word, word_eol, TRUE); |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1523 handle_ctcp(gc, to, nick, msg + 1, word, word_eol); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1524 } else { |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1525 handle_privmsg(gc, to, nick, msg); |
| 2086 | 1526 } |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1527 } else if (!strcmp(cmd, "PONG")) { /* */ |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1528 } else if (!strcmp(cmd, "QUIT")) { |
| 4065 | 1529 irc_rem_chat_bud(gc, nick, irc_find_chat(gc, word[3]), *word_eol[3] == ':' ? word_eol[3] + 1 : word_eol[3]); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1530 } else if (!strcmp(cmd, "TOPIC")) { |
| 3751 | 1531 irc_parse_topic(gc, nick, word, word_eol); |
| 3707 | 1532 } else if (!strcmp(cmd, "WALLOPS")) { /* Don't know if a dialog box is the right way? */ |
| 1533 char *msg = strrchr(word_eol[0], ':'); | |
| 1534 if (msg) | |
| 1535 do_error_dialog(msg+1, _("IRC Operator"), GAIM_ERROR); | |
| 2086 | 1536 } |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1537 |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1538 return FALSE; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1539 } |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1540 |
| 3751 | 1541 /* CTCP by jonas@birme.se */ |
| 1542 static void | |
| 1543 irc_parse_notice(struct gaim_connection *gc, char *nick, char *ex, | |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1544 char *word[], char *word_eol[]) |
| 3751 | 1545 { |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1546 char buf[IRC_BUF_LEN]; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1547 |
| 4793 | 1548 if (!g_ascii_strcasecmp(word[4], ":\001CLIENTINFO")) { |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1549 char *p = g_strrstr(word_eol[5], "\001"); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1550 *p = 0; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1551 g_snprintf(buf, sizeof(buf), "CTCP Answer: %s", word_eol[5]); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1552 do_error_dialog(buf, _("CTCP ClientInfo"), GAIM_INFO); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1553 |
| 4793 | 1554 } else if (!g_ascii_strcasecmp(word[4], ":\001USERINFO")) { |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1555 char *p = g_strrstr(word_eol[5], "\001"); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1556 *p = 0; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1557 g_snprintf(buf, sizeof(buf), "CTCP Answer: %s", word_eol[5]); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1558 do_error_dialog(buf, _("CTCP UserInfo"), GAIM_INFO); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1559 |
| 4793 | 1560 } else if (!g_ascii_strcasecmp(word[4], ":\001VERSION")) { |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1561 char *p = g_strrstr(word_eol[5], "\001"); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1562 *p = 0; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1563 g_snprintf(buf, sizeof(buf), "CTCP Answer: %s", word_eol[5]); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1564 do_error_dialog(buf, _("CTCP Version"), GAIM_INFO); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1565 |
| 4793 | 1566 } else if (!g_ascii_strcasecmp(word[4], ":\001PING")) { |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1567 char *p = g_strrstr(word_eol[5], "\001"); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1568 struct timeval ping_time; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1569 struct timeval now; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1570 gchar **vector; |
| 3751 | 1571 |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1572 if (p) |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1573 *p = 0; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1574 |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1575 vector = g_strsplit(word_eol[5], " ", 2); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1576 |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1577 if (gettimeofday(&now, NULL) == 0 && vector != NULL) { |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1578 if (now.tv_usec - atol(vector[1]) < 0) { |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1579 ping_time.tv_sec = now.tv_sec - atol(vector[0]) - 1; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1580 ping_time.tv_usec = now.tv_usec - atol(vector[1]) + 1000000; |
| 3751 | 1581 |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1582 } else { |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1583 ping_time.tv_sec = now.tv_sec - atol(vector[0]); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1584 ping_time.tv_usec = now.tv_usec - atol(vector[1]); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1585 } |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1586 |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1587 g_snprintf(buf, sizeof(buf), |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1588 "CTCP Ping reply from %s: %lu.%.03lu seconds", |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1589 nick, ping_time.tv_sec, (ping_time.tv_usec/1000)); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1590 |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1591 do_error_dialog(buf, _("CTCP Ping"), GAIM_INFO); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1592 g_strfreev(vector); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1593 } |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1594 } else { |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1595 if (*word_eol[4] == ':') word_eol[4]++; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1596 if (ex) |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1597 irc_got_im(gc, nick, word_eol[4], 0, time(NULL)); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1598 } |
| 3751 | 1599 } |
| 1600 | |
| 1601 static void | |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1602 irc_parse_join(struct gaim_connection *gc, char *nick, |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1603 char *word[], char *word_eol[]) |
| 3751 | 1604 { |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1605 char *chan = *word[3] == ':' ? word[3] + 1 : word[3]; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1606 static int id = 1; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1607 struct gaim_conversation *c; |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1608 char *hostmask, *p; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1609 |
| 4793 | 1610 if (!gaim_utf8_strcasecmp(gc->displayname, nick)) { |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1611 serv_got_joined_chat(gc, id++, chan); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1612 } else { |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1613 c = irc_find_chat(gc, chan); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1614 if (c) { |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1615 hostmask = g_strdup(word[1]); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1616 p = strchr(hostmask, '!'); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1617 if (p) { |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1618 char *pend = strchr(p, ' '); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1619 if (pend) { |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1620 *pend = 0; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1621 } |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1622 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1623 gaim_chat_add_user(GAIM_CHAT(c), nick, p + 1); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1624 |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1625 g_free(hostmask); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1626 } |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1627 } |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1628 } |
| 3751 | 1629 } |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1630 |
| 3751 | 1631 static void |
| 1632 irc_parse_topic(struct gaim_connection *gc, char *nick, | |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1633 char *word[], char *word_eol[]) |
| 3751 | 1634 { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1635 struct gaim_conversation *c = irc_find_chat(gc, word[3]); |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1636 char *topic = *word_eol[4] == ':' ? word_eol[4] + 1 : word_eol[4]; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1637 char buf[IRC_BUF_LEN]; |
| 3751 | 1638 |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1639 if (c) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1640 gaim_chat_set_topic(GAIM_CHAT(c), nick, topic); |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1641 g_snprintf(buf, sizeof(buf), |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1642 _("<B>%s has changed the topic to: %s</B>"), nick, topic); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1643 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1644 gaim_conversation_write(c, NULL, buf, -1, WFLAG_SYSTEM, time(NULL)); |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1645 } |
| 3751 | 1646 } |
| 1647 | |
| 1648 static gboolean | |
| 1649 irc_parse_part(struct gaim_connection *gc, char *nick, char *cmd, | |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1650 char *word[], char *word_eol[]) |
| 3751 | 1651 { |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1652 char *chan = cmd + 5; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1653 struct gaim_conversation *c; |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1654 struct gaim_chat *chat; |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1655 char *reason = word_eol[4]; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1656 GList *r; |
| 3751 | 1657 |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1658 if (*chan == ':') |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1659 chan++; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1660 if (*reason == ':') |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1661 reason++; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1662 if (!(c = irc_find_chat(gc, chan))) |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1663 return FALSE; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1664 if (!strcmp(nick, gc->displayname)) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1665 serv_got_chat_left(gc, gaim_chat_get_id(GAIM_CHAT(c))); |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1666 return FALSE; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1667 } |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1668 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1669 chat = GAIM_CHAT(c); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1670 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1671 r = gaim_chat_get_users(GAIM_CHAT(c)); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1672 |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1673 while (r) { |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1674 char *who = r->data; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1675 if (*who == '@') |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1676 who++; |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
1677 if (*who == '%') |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
1678 who++; |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1679 if (*who == '+') |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1680 who++; |
| 4793 | 1681 if (!gaim_utf8_strcasecmp(who, nick)) { |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1682 char *tmp = g_strdup(r->data); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1683 gaim_chat_remove_user(chat, tmp, reason); |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1684 g_free(tmp); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1685 break; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1686 } |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1687 r = r->next; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1688 } |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1689 return TRUE; |
| 3751 | 1690 } |
| 1691 | |
| 1692 static void | |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1693 irc_callback(gpointer data, gint source, GaimInputCondition condition) |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1694 { |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1695 struct gaim_connection *gc = data; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1696 struct irc_data *idata = gc->proto_data; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1697 int i = 0; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1698 gchar buf[1024]; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1699 gboolean off; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1700 |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1701 i = read(idata->fd, buf, 1024); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1702 if (i <= 0) { |
| 3074 | 1703 hide_login_progress_error(gc, "Read error"); |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1704 signoff(gc); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1705 return; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1706 } |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1707 |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1708 idata->rxqueue = g_realloc(idata->rxqueue, i + idata->rxlen + 1); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1709 memcpy(idata->rxqueue + idata->rxlen, buf, i); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1710 idata->rxlen += i; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1711 idata->rxqueue[idata->rxlen] = 0; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1712 |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1713 while (1) { |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1714 char *d, *e; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1715 int len; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1716 |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1717 if (!idata->rxqueue || ((e = strchr(idata->rxqueue, '\n')) == NULL)) |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1718 return; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1719 |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1720 len = e - idata->rxqueue + 1; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1721 d = g_strndup(idata->rxqueue, len); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1722 g_strchomp(d); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1723 debug_printf("IRC S: %s\n", d); |
| 3707 | 1724 |
| 3708 | 1725 /* REMOVE ME BEFORE SUBMIT! */ |
| 3751 | 1726 /*fprintf(stderr, "IRC S: %s\n", d);*/ |
| 3708 | 1727 |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1728 idata->rxlen -= len; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1729 if (idata->rxlen) { |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1730 char *tmp = g_strdup(e + 1); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1731 g_free(idata->rxqueue); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1732 idata->rxqueue = tmp; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1733 } else { |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1734 g_free(idata->rxqueue); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1735 idata->rxqueue = NULL; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1736 } |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1737 |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1738 off = irc_parse(gc, d); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1739 |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1740 g_free(d); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1741 |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1742 if (off) |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1743 return; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1744 } |
| 2086 | 1745 } |
| 1746 | |
| 3751 | 1747 static void |
| 1748 irc_login_callback(gpointer data, gint source, GaimInputCondition condition) | |
| 2086 | 1749 { |
| 1750 struct gaim_connection *gc = data; | |
| 1751 struct irc_data *idata; | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1752 char hostname[256]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1753 char buf[IRC_BUF_LEN]; |
| 3751 | 1754 char *test; |
| 1755 GError *err = NULL; | |
| 1756 | |
| 2086 | 1757 if (!g_slist_find(connections, gc)) { |
| 1758 close(source); | |
| 1759 return; | |
| 1760 } | |
| 1761 | |
| 1762 idata = gc->proto_data; | |
| 1763 | |
| 4456 | 1764 if (source < 0) { |
| 2086 | 1765 hide_login_progress(gc, "Write error"); |
| 1766 signoff(gc); | |
| 1767 return; | |
| 1768 } | |
| 4452 | 1769 idata->fd = source; |
| 3751 | 1770 |
| 1771 /* Try a quick conversion to see if the specified encoding is OK */ | |
| 4491 | 1772 test = g_convert("test", strlen("test"), gc->account->proto_opt[USEROPT_CHARSET], |
| 3751 | 1773 "UTF-8", NULL, NULL, &err); |
| 1774 if (err) { | |
| 1775 debug_printf("Couldn't initialize %s for IRC charset conversion, using ISO-8859-1\n", | |
| 4491 | 1776 gc->account->proto_opt[USEROPT_CHARSET]); |
| 1777 strcpy(gc->account->proto_opt[USEROPT_CHARSET], "ISO-8859-1"); | |
| 3751 | 1778 } |
| 1779 | |
| 4223 | 1780 g_free(test); |
| 1781 | |
|
2574
3526c5581f92
[gaim-migrate @ 2587]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2536
diff
changeset
|
1782 gethostname(hostname, sizeof(hostname) - 1); |
|
3526c5581f92
[gaim-migrate @ 2587]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2536
diff
changeset
|
1783 hostname[sizeof(hostname) - 1] = 0; |
|
3526c5581f92
[gaim-migrate @ 2587]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2536
diff
changeset
|
1784 if (!*hostname) |
|
3526c5581f92
[gaim-migrate @ 2587]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2536
diff
changeset
|
1785 g_snprintf(hostname, sizeof(hostname), "localhost"); |
| 3789 | 1786 |
| 4491 | 1787 if (*gc->account->password) { |
| 1788 g_snprintf(buf, sizeof(buf), "PASS %s\r\n", gc->account->password); | |
| 3789 | 1789 |
| 1790 if (irc_write(idata->fd, buf, strlen(buf)) < 0) { | |
| 1791 hide_login_progress(gc, "Write error"); | |
| 1792 signoff(gc); | |
| 1793 return; | |
| 1794 } | |
| 1795 } | |
| 1796 | |
| 3562 | 1797 g_snprintf(buf, sizeof(buf), "USER %s %s %s :%s\r\n", |
| 4966 | 1798 g_get_user_name(), hostname, |
| 1799 idata->server, | |
| 1800 *gc->account->alias ? gc->account->alias : "gaim"); | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1801 if (irc_write(idata->fd, buf, strlen(buf)) < 0) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1802 hide_login_progress(gc, "Write error"); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1803 signoff(gc); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1804 return; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1805 } |
| 2086 | 1806 |
| 4966 | 1807 g_snprintf(buf, sizeof(buf), "NICK %s\r\n", gc->displayname); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1808 if (irc_write(idata->fd, buf, strlen(buf)) < 0) { |
| 2086 | 1809 hide_login_progress(gc, "Write error"); |
| 1810 signoff(gc); | |
| 1811 return; | |
| 1812 } | |
| 1813 | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1814 gc->inpa = gaim_input_add(idata->fd, GAIM_INPUT_READ, irc_callback, gc); |
| 2086 | 1815 } |
| 1816 | |
| 3751 | 1817 static void |
| 4491 | 1818 irc_login(struct gaim_account *account) |
| 2086 | 1819 { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1820 char buf[IRC_BUF_LEN]; |
| 4422 | 1821 int rc; |
| 2086 | 1822 |
| 4966 | 1823 struct gaim_connection *gc; |
| 1824 struct irc_data *idata; | |
| 1825 char **parts; | |
| 1826 if(!strrchr(account->username, '@')) { | |
| 1827 char *username = g_strdup(account->username); | |
| 1828 g_snprintf(account->username, sizeof(account->username), "%s@%s", | |
| 1829 username, *account->proto_opt[USEROPT_SERV] ? | |
| 1830 account->proto_opt[USEROPT_SERV] : DEFAULT_SERVER); | |
| 1831 g_free(username); | |
| 1832 strcpy(account->proto_opt[USEROPT_SERV], ""); | |
| 1833 save_prefs(); | |
| 1834 } | |
| 2086 | 1835 |
| 4966 | 1836 gc = new_gaim_conn(account); |
| 1837 idata = gc->proto_data = g_new0(struct irc_data, 1); | |
| 1838 | |
| 1839 parts = g_strsplit(gc->username, "@", 2); | |
| 1840 g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", parts[0]); | |
| 1841 idata->server = g_strdup(parts[1]); | |
| 1842 g_strfreev(parts); | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1843 |
| 4834 | 1844 g_snprintf(buf, sizeof(buf), _("Signon: %s"), gc->username); |
| 2086 | 1845 set_login_progress(gc, 2, buf); |
| 1846 | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1847 idata->chantypes = g_strdup("#&!+"); |
| 3452 | 1848 idata->chanmodes = g_strdup("beI,k,lnt"); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1849 idata->nickmodes = g_strdup("ohv"); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1850 idata->str = g_string_new(""); |
| 4422 | 1851 idata->fd = -1; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1852 |
| 4966 | 1853 rc = proxy_connect(account, idata->server, |
| 4491 | 1854 account->proto_opt[USEROPT_PORT][0] ? |
| 1855 atoi(account->proto_opt[USEROPT_PORT]) : 6667, | |
| 1856 irc_login_callback, gc); | |
| 1857 if (!account->gc || (rc != 0)) { | |
| 2086 | 1858 hide_login_progress(gc, "Unable to create socket"); |
| 1859 signoff(gc); | |
| 1860 return; | |
| 1861 } | |
| 1862 } | |
| 1863 | |
| 3751 | 1864 static void |
| 1865 irc_close(struct gaim_connection *gc) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1866 { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1867 struct irc_data *idata = (struct irc_data *)gc->proto_data; |
| 3618 | 1868 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1869 gchar buf[IRC_BUF_LEN]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1870 |
| 3452 | 1871 if (idata->str->len > 0) { |
| 1872 g_snprintf(buf, sizeof(buf), "QUIT :%s\r\n", idata->str->str); | |
| 1873 } else { | |
| 1874 g_snprintf(buf, sizeof(buf), | |
| 1875 "QUIT :Download Gaim [%s]\r\n", WEBSITE); | |
| 1876 } | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1877 irc_write(idata->fd, buf, strlen(buf)); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1878 |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1879 if (idata->rxqueue) |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1880 g_free(idata->rxqueue); |
| 3618 | 1881 |
| 3619 | 1882 idata->rxqueue = NULL; |
| 1883 idata->rxlen = 0; | |
| 1884 | |
| 3618 | 1885 /* Kill any existing transfers */ |
| 1886 while (idata->file_transfers) { | |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1887 struct gaim_xfer *xfer; |
| 3618 | 1888 |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1889 xfer = (struct gaim_xfer *)idata->file_transfers->data; |
| 3618 | 1890 |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1891 gaim_xfer_end(xfer); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1892 gaim_xfer_destroy(xfer); |
| 3618 | 1893 |
| 3708 | 1894 idata->file_transfers = idata->file_transfers->next; |
| 3618 | 1895 } |
| 3619 | 1896 idata->file_transfers = NULL; |
| 3618 | 1897 |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1898 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1899 g_free(idata->chantypes); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1900 g_free(idata->chanmodes); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1901 g_free(idata->nickmodes); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1902 |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1903 g_string_free(idata->str, TRUE); |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1904 if (idata->liststr) |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1905 g_string_free(idata->liststr, TRUE); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1906 |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1907 if (idata->timer) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1908 g_source_remove(idata->timer); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1909 |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1910 if (gc->inpa) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1911 gaim_input_remove(gc->inpa); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1912 |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1913 close(idata->fd); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1914 g_free(gc->proto_data); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1915 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1916 |
| 3751 | 1917 static void |
| 1918 set_mode_3(struct gaim_connection *gc, char *who, int sign, int mode, | |
| 3708 | 1919 int start, int end, char *word[]) |
| 2086 | 1920 { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1921 struct irc_data *id = gc->proto_data; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1922 char buf[IRC_BUF_LEN]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1923 int left; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1924 int i = start; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1925 |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1926 while (1) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1927 left = end - i; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1928 switch (left) { |
| 3708 | 1929 case 0: |
| 1930 return; | |
| 1931 case 1: | |
| 1932 g_snprintf(buf, sizeof(buf), "MODE %s %c%c %s\r\n", | |
| 1933 who, sign, mode, word[i]); | |
| 1934 i += 1; | |
| 1935 break; | |
| 1936 case 2: | |
| 1937 g_snprintf(buf, sizeof(buf), "MODE %s %c%c%c %s %s\r\n", | |
| 1938 who, sign, mode, mode, word[i], word[i + 1]); | |
| 1939 i += 2; | |
| 1940 break; | |
| 1941 default: | |
| 1942 g_snprintf(buf, sizeof(buf), "MODE %s %c%c%c%c %s %s %s\r\n", | |
| 1943 who, sign, mode, mode, mode, | |
| 1944 word[i], word[i + 1], word[i + 2]); | |
| 1945 i += 2; | |
| 1946 break; | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1947 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1948 irc_write(id->fd, buf, strlen(buf)); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1949 if (left < 3) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1950 return; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1951 } |
| 2086 | 1952 } |
| 1953 | |
| 3751 | 1954 static void |
| 1955 set_mode_6(struct gaim_connection *gc, char *who, int sign, int mode, | |
| 3708 | 1956 int start, int end, char *word[]) |
| 2086 | 1957 { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1958 struct irc_data *id = gc->proto_data; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1959 char buf[IRC_BUF_LEN]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1960 int left; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1961 int i = start; |
| 2086 | 1962 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1963 while (1) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1964 left = end - i; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1965 switch (left) { |
| 3708 | 1966 case 0: |
| 1967 return; | |
| 1968 case 1: | |
| 1969 g_snprintf(buf, sizeof(buf), "MODE %s %c%c %s\r\n", | |
| 1970 who, sign, mode, word[i]); | |
| 1971 i += 1; | |
| 1972 break; | |
| 1973 case 2: | |
| 1974 g_snprintf(buf, sizeof(buf), "MODE %s %c%c%c %s %s\r\n", | |
| 1975 who, sign, mode, mode, word[i], word[i + 1]); | |
| 1976 i += 2; | |
| 1977 break; | |
| 1978 case 3: | |
| 1979 g_snprintf(buf, sizeof(buf), "MODE %s %c%c%c%c %s %s %s\r\n", | |
| 1980 who, sign, mode, mode, mode, | |
| 1981 word[i], word[i + 1], word[i + 2]); | |
| 1982 i += 3; | |
| 1983 break; | |
| 1984 case 4: | |
| 1985 g_snprintf(buf, sizeof(buf), "MODE %s %c%c%c%c%c %s %s %s %s\r\n", | |
| 1986 who, sign, mode, mode, mode, mode, | |
| 1987 word[i], word[i + 1], word[i + 2], word[i + 3]); | |
| 1988 i += 4; | |
| 1989 break; | |
| 1990 case 5: | |
| 1991 g_snprintf(buf, sizeof(buf), "MODE %s %c%c%c%c%c%c %s %s %s %s %s\r\n", | |
| 1992 who, sign, mode, mode, mode, mode, mode, | |
| 1993 word[i], word[i + 1], word[i + 2], | |
| 1994 word[i + 3], word[i + 4]); | |
| 1995 i += 5; | |
| 1996 break; | |
| 1997 default: | |
| 1998 g_snprintf(buf, sizeof(buf), "MODE %s %c%c%c%c%c%c%c %s %s %s %s %s %s\r\n", | |
| 1999 who, sign, mode, mode, mode, mode, mode, mode, | |
| 2000 word[i], word[i + 1], word[i + 2], | |
| 2001 word[i + 3], word[i + 4], word[i + 5]); | |
| 2002 i += 6; | |
| 2003 break; | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2004 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2005 irc_write(id->fd, buf, strlen(buf)); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2006 if (left < 6) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2007 return; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2008 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2009 } |
| 2086 | 2010 |
| 3751 | 2011 static void |
| 2012 set_mode(struct gaim_connection *gc, char *who, int sign, int mode, char *word[]) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2013 { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2014 struct irc_data *id = gc->proto_data; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2015 int i = 2; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2016 |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2017 while (1) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2018 if (!*word[i]) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2019 if (i == 2) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2020 return; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2021 if (id->six_modes) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2022 set_mode_6(gc, who, sign, mode, 2, i, word); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2023 else |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2024 set_mode_3(gc, who, sign, mode, 2, i, word); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2025 return; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2026 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2027 i++; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2028 } |
| 2086 | 2029 } |
| 2030 | |
| 3751 | 2031 static void |
| 2032 set_chan_mode(struct gaim_connection *gc, char *chan, char *mode_str) | |
| 3452 | 2033 { |
| 2034 struct irc_data *id = gc->proto_data; | |
| 2035 char buf[IRC_BUF_LEN]; | |
| 2036 | |
| 2037 if ((mode_str[0] == '-') || (mode_str[0] == '+')) { | |
| 2038 g_snprintf(buf, sizeof(buf), "MODE %s %s\r\n", chan, mode_str); | |
| 2039 irc_write(id->fd, buf, strlen(buf)); | |
| 2040 } | |
| 2041 } | |
| 2042 | |
| 3751 | 2043 static int |
| 2044 handle_command(struct gaim_connection *gc, char *who, char *what) | |
| 2086 | 2045 { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2046 char buf[IRC_BUF_LEN]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2047 char pdibuf[IRC_BUF_LEN]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2048 char *word[PDIWORDS], *word_eol[PDIWORDS]; |
| 3029 | 2049 char *tmp = g_strdup(what); |
| 2050 GString *str = encode_html(tmp); | |
| 3751 | 2051 char *intl; |
| 2052 int len; | |
| 3029 | 2053 struct dcc_chat *dccchat = find_dcc_chat(gc, who); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2054 struct irc_data *id = gc->proto_data; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2055 |
| 3029 | 2056 g_free(tmp); |
| 3030 | 2057 what = str->str; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2058 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2059 if (*what != '/') { |
| 3029 | 2060 if (dccchat) { |
| 3751 | 2061 intl = irc_send_convert(gc, what, sizeof(buf), &len); |
| 2062 g_snprintf(buf, sizeof(buf), "%s\r\n", intl); | |
| 2063 g_free(intl); | |
| 3029 | 2064 irc_write(dccchat->fd, buf, strlen(buf)); |
| 2065 g_string_free(str, TRUE); | |
| 2066 return 1; | |
| 2067 } | |
| 3751 | 2068 irc_send_privmsg (gc, who, what, TRUE); |
| 3029 | 2069 g_string_free(str, TRUE); |
|
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2302
diff
changeset
|
2070 return 1; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2071 } |
| 3029 | 2072 |
| 3033 | 2073 process_data_init(pdibuf, what + 1, word, word_eol, TRUE); |
| 2074 g_string_free(str, FALSE); | |
| 4793 | 2075 if (!g_ascii_strcasecmp(pdibuf, "ME")) { |
| 3029 | 2076 if (dccchat) { |
| 3751 | 2077 intl = irc_send_convert(gc, word_eol[2], sizeof(buf), &len); |
| 2078 g_snprintf(buf, sizeof(buf), "\001ACTION %s\001\r\n", intl); | |
| 2079 g_free(intl); | |
| 3029 | 2080 irc_write(dccchat->fd, buf, strlen(buf)); |
| 3033 | 2081 g_free(what); |
| 3029 | 2082 return 1; |
| 2083 } | |
| 3735 | 2084 g_snprintf(buf, sizeof(buf), "\001ACTION %s\001", word_eol[2]); |
| 3751 | 2085 irc_send_privmsg (gc, who, buf, FALSE); |
| 3033 | 2086 g_free(what); |
|
2304
15fb364935ec
[gaim-migrate @ 2314]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2303
diff
changeset
|
2087 return 1; |
| 4793 | 2088 } else if (!g_ascii_strcasecmp(pdibuf, "INVITE")) { |
|
2847
e49bd1479edd
[gaim-migrate @ 2860]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2831
diff
changeset
|
2089 char buf[IRC_BUF_LEN]; |
|
e49bd1479edd
[gaim-migrate @ 2860]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2831
diff
changeset
|
2090 g_snprintf(buf, sizeof(buf), "INVITE %s\r\n", word_eol[2]); |
|
e49bd1479edd
[gaim-migrate @ 2860]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2831
diff
changeset
|
2091 irc_write(id->fd, buf, strlen(buf)); |
| 4793 | 2092 } else if (!g_ascii_strcasecmp(pdibuf, "TOPIC")) { |
| 3033 | 2093 if (!*word_eol[2]) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2094 struct gaim_conversation *c; |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2095 struct gaim_chat *chat; |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2096 |
| 3501 | 2097 c = irc_find_chat(gc, who); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2098 chat = GAIM_CHAT(c); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2099 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2100 g_snprintf(buf, sizeof(buf), _("Topic for %s is %s"), |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2101 who, (gaim_chat_get_topic(chat) |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2102 ? gaim_chat_get_topic(chat) |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2103 : "(no topic set)")); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2104 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2105 gaim_conversation_write(c, NULL, buf, -1, |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2106 WFLAG_SYSTEM | WFLAG_NOLOG, time(NULL)); |
| 3501 | 2107 } else { |
| 3751 | 2108 /* This could be too long */ |
| 2109 intl = irc_send_convert(gc, word_eol[2], sizeof(buf), &len); | |
| 2110 g_snprintf(buf, sizeof(buf), "TOPIC %s :%s\r\n", who, intl); | |
| 2111 g_free(intl); | |
| 3501 | 2112 irc_write(id->fd, buf, strlen(buf)); |
| 3033 | 2113 } |
| 4793 | 2114 } else if (!g_ascii_strcasecmp(pdibuf, "NICK")) { |
| 3033 | 2115 if (!*word_eol[2]) { |
| 2116 g_free(what); | |
|
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2302
diff
changeset
|
2117 return -EINVAL; |
| 3033 | 2118 } |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2119 g_snprintf(buf, sizeof(buf), "NICK %s\r\n", word_eol[2]); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2120 irc_write(id->fd, buf, strlen(buf)); |
| 4793 | 2121 } else if (!g_ascii_strcasecmp(pdibuf, "OP")) { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2122 set_mode(gc, who, '+', 'o', word); |
| 4793 | 2123 } else if (!g_ascii_strcasecmp(pdibuf, "DEOP")) { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2124 set_mode(gc, who, '-', 'o', word); |
| 4793 | 2125 } else if (!g_ascii_strcasecmp(pdibuf, "VOICE")) { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2126 set_mode(gc, who, '+', 'v', word); |
| 4793 | 2127 } else if (!g_ascii_strcasecmp(pdibuf, "DEVOICE")) { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2128 set_mode(gc, who, '-', 'v', word); |
| 4793 | 2129 } else if (!g_ascii_strcasecmp(pdibuf, "MODE")) { |
| 3452 | 2130 char *chan = who; |
| 2131 set_chan_mode(gc, chan, word_eol[2]); | |
| 4793 | 2132 } else if (!g_ascii_strcasecmp(pdibuf, "QUOTE")) { |
| 3033 | 2133 if (!*word_eol[2]) { |
| 2134 g_free(what); | |
|
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2302
diff
changeset
|
2135 return -EINVAL; |
| 3033 | 2136 } |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2137 g_snprintf(buf, sizeof(buf), "%s\r\n", word_eol[2]); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2138 irc_write(id->fd, buf, strlen(buf)); |
| 4793 | 2139 } else if (!g_ascii_strcasecmp(pdibuf, "SAY")) { |
| 3033 | 2140 if (!*word_eol[2]) { |
| 2141 g_free(what); | |
|
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2302
diff
changeset
|
2142 return -EINVAL; |
| 3033 | 2143 } |
| 3751 | 2144 irc_send_privmsg (gc, who, word_eol[2], TRUE); |
|
2305
0371b905baef
[gaim-migrate @ 2315]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2304
diff
changeset
|
2145 return 1; |
| 4793 | 2146 } else if (!g_ascii_strcasecmp(pdibuf, "MSG")) { |
| 3033 | 2147 if (!*word[2]) { |
| 2148 g_free(what); | |
|
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2302
diff
changeset
|
2149 return -EINVAL; |
| 3033 | 2150 } |
| 2151 if (!*word_eol[3]) { | |
| 2152 g_free(what); | |
|
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2302
diff
changeset
|
2153 return -EINVAL; |
| 3033 | 2154 } |
| 3751 | 2155 irc_send_privmsg (gc, word[2], word_eol[3], TRUE); |
| 4793 | 2156 } else if (!g_ascii_strcasecmp(pdibuf, "KICK")) { |
| 3033 | 2157 if (!*word[2]) { |
| 2158 g_free(what); | |
|
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2302
diff
changeset
|
2159 return -EINVAL; |
| 3033 | 2160 } |
| 3751 | 2161 if (*word_eol[3]) { |
| 2162 intl = irc_send_convert(gc, word_eol[3], sizeof(buf), &len); | |
| 2163 g_snprintf(buf, sizeof(buf), "KICK %s %s :%s\r\n", who, word[2], intl); | |
| 2164 g_free(intl); | |
| 2165 } else | |
|
2298
57da45349e50
[gaim-migrate @ 2308]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2295
diff
changeset
|
2166 g_snprintf(buf, sizeof(buf), "KICK %s %s\r\n", who, word[2]); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2167 irc_write(id->fd, buf, strlen(buf)); |
| 4793 | 2168 } else if (!g_ascii_strcasecmp(pdibuf, "JOIN") || !g_ascii_strcasecmp(pdibuf, "J")) { |
| 3033 | 2169 if (!*word[2]) { |
| 2170 g_free(what); | |
|
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2302
diff
changeset
|
2171 return -EINVAL; |
| 3033 | 2172 } |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2173 if (*word[3]) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2174 g_snprintf(buf, sizeof(buf), "JOIN %s %s\r\n", word[2], word[3]); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2175 else |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2176 g_snprintf(buf, sizeof(buf), "JOIN %s\r\n", word[2]); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2177 irc_write(id->fd, buf, strlen(buf)); |
| 4793 | 2178 } else if (!g_ascii_strcasecmp(pdibuf, "PART")) { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2179 char *chan = *word[2] ? word[2] : who; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2180 char *reason = word_eol[3]; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2181 struct gaim_conversation *c; |
| 3033 | 2182 if (!is_channel(gc, chan)) { |
| 2183 g_free(what); | |
|
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2302
diff
changeset
|
2184 return -EINVAL; |
| 3033 | 2185 } |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2186 c = irc_find_chat(gc, chan); |
| 3751 | 2187 if (*reason) { |
| 2188 intl = irc_send_convert(gc, reason, sizeof(buf), &len); | |
| 2189 g_snprintf(buf, sizeof(buf), "PART %s :%s\r\n", chan, intl); | |
| 2190 g_free(intl); | |
| 2191 } else | |
| 2192 g_snprintf(buf, sizeof(buf), "PART %s\r\n", chan); | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2193 irc_write(id->fd, buf, strlen(buf)); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2194 if (c) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2195 gc->buddy_chats = g_slist_remove(gc->buddy_chats, c); |
| 4491 | 2196 gaim_conversation_set_account(c, NULL); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2197 g_snprintf(buf, sizeof(buf), _("You have left %s"), chan); |
| 3707 | 2198 do_error_dialog(buf, _("IRC Part"), GAIM_INFO); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2199 } |
| 4793 | 2200 } else if (!g_ascii_strcasecmp(pdibuf, "WHOIS")) { |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2201 g_snprintf(buf, sizeof(buf), "WHOIS %s\r\n", word_eol[2]); |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2202 irc_write(id->fd, buf, strlen(buf)); |
| 4793 | 2203 } else if (!g_ascii_strcasecmp(pdibuf, "WHOWAS")) { |
| 3707 | 2204 g_snprintf(buf, sizeof(buf), "WHOWAS %s\r\n", word_eol[2]); |
| 2205 irc_write(id->fd, buf, strlen(buf)); | |
| 4793 | 2206 } else if (!g_ascii_strcasecmp(pdibuf, "LIST")) { |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
2207 g_snprintf(buf, sizeof(buf), "LIST\r\n"); |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
2208 irc_write(id->fd, buf, strlen(buf)); |
| 4793 | 2209 } else if (!g_ascii_strcasecmp(pdibuf, "QUIT")) { |
| 3452 | 2210 char *reason = word_eol[2]; |
| 2211 id->str = g_string_insert(id->str, 0, reason); | |
| 2212 do_quit(); | |
| 4793 | 2213 } else if (!g_ascii_strcasecmp(pdibuf, "VERSION")) { |
| 3452 | 2214 g_snprintf(buf, sizeof(buf), "VERSION\r\n"); |
| 2215 irc_write(id->fd, buf, strlen(buf)); | |
| 4793 | 2216 } else if (!g_ascii_strcasecmp(pdibuf, "W")) { |
| 3452 | 2217 g_snprintf(buf, sizeof(buf), "WHO *\r\n"); |
| 2218 irc_write(id->fd, buf, strlen(buf)); | |
| 4793 | 2219 } else if (!g_ascii_strcasecmp(pdibuf, "REHASH")) { |
| 3707 | 2220 g_snprintf(buf, sizeof(buf), "REHASH\r\n"); |
| 4793 | 2221 irc_write(id->fd, buf, strlen(buf)); |
| 2222 } else if (!g_ascii_strcasecmp(pdibuf, "RESTART")) { | |
| 3707 | 2223 g_snprintf(buf, sizeof(buf), "RESTART\r\n"); |
| 2224 irc_write(id->fd, buf, strlen(buf)); | |
| 4793 | 2225 } else if (!g_ascii_strcasecmp(pdibuf, "CTCP")) { |
| 2226 if (!g_ascii_strcasecmp(word[2], "CLIENTINFO")) { | |
| 3707 | 2227 if (word[3]) |
| 2228 irc_ctcp_clientinfo(gc, word[3]); | |
| 4793 | 2229 } else if (!g_ascii_strcasecmp(word[2], "USERINFO")) { |
| 3707 | 2230 if (word[3]) |
| 2231 irc_ctcp_userinfo(gc, word[3]); | |
| 4793 | 2232 } else if (!g_ascii_strcasecmp(word[2], "VERSION")) { |
| 3707 | 2233 if (word[3]) |
| 2234 irc_ctcp_version(gc, word[3]); | |
| 4793 | 2235 |
| 2236 } else if (!g_ascii_strcasecmp(word[2], "PING")) { | |
| 3735 | 2237 if (word[3]) |
| 2238 irc_ctcp_ping(gc, word[3]); | |
| 3707 | 2239 } |
| 4793 | 2240 } else if (!g_ascii_strcasecmp(pdibuf, "DCC")) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2241 struct gaim_conversation *c = NULL; |
| 4793 | 2242 if (!g_ascii_strcasecmp(word[2], "CHAT")) { |
| 3707 | 2243 if (word[3]) |
| 2244 irc_start_chat(gc, word[3]); | |
| 2245 | |
| 2246 if (is_channel(gc, who)) { | |
| 2247 c = irc_find_chat(gc, who); | |
| 2248 } else { | |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2249 c = gaim_find_conversation(who); |
| 3707 | 2250 } |
| 2251 if (c) { | |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2252 gaim_conversation_write(c, NULL, |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2253 _("<I>Requesting DCC CHAT</I>"), |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2254 -1, WFLAG_SYSTEM, time(NULL)); |
| 3707 | 2255 } |
| 2256 } | |
| 4793 | 2257 } else if (!g_ascii_strcasecmp(pdibuf, "HELP")) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2258 struct gaim_conversation *c = NULL; |
|
2301
171d11fb37b9
[gaim-migrate @ 2311]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2299
diff
changeset
|
2259 if (is_channel(gc, who)) { |
|
171d11fb37b9
[gaim-migrate @ 2311]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2299
diff
changeset
|
2260 c = irc_find_chat(gc, who); |
|
171d11fb37b9
[gaim-migrate @ 2311]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2299
diff
changeset
|
2261 } else { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2262 c = gaim_find_conversation(who); |
|
2301
171d11fb37b9
[gaim-migrate @ 2311]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2299
diff
changeset
|
2263 } |
| 3033 | 2264 if (!c) { |
| 2265 g_free(what); | |
|
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2302
diff
changeset
|
2266 return -EINVAL; |
| 3033 | 2267 } |
| 4793 | 2268 if (!g_ascii_strcasecmp(word[2], "OPER")) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2269 gaim_conversation_write(c, NULL, |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2270 _("<B>Operator commands:<BR>" |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2271 "REHASH RESTART</B>"), |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2272 -1, WFLAG_NOLOG, time(NULL)); |
| 4793 | 2273 } else if (!g_ascii_strcasecmp(word[2], "CTCP")) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2274 gaim_conversation_write(c, NULL, |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2275 _("<B>CTCP commands:<BR>" |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2276 "CLIENTINFO <nick><BR>" |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2277 "USERINFO <nick><BR>" |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2278 "VERSION <nick><BR>" |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2279 "PING <nick></B><BR>"), |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2280 -1, WFLAG_NOLOG, time(NULL)); |
| 4793 | 2281 } else if (!g_ascii_strcasecmp(word[2], "DCC")) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2282 gaim_conversation_write(c, NULL, |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2283 _("<B>DCC commands:<BR>" |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2284 "CHAT <nick></B>"), |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2285 -1, WFLAG_NOLOG, time(NULL)); |
| 3707 | 2286 } else { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2287 gaim_conversation_write(c, NULL, |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2288 _("<B>Currently supported commands:<BR>" |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2289 "WHOIS INVITE NICK LIST<BR>" |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2290 "JOIN PART TOPIC KICK<BR>" |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2291 "OP DEOP VOICE DEVOICE<BR>" |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2292 "ME MSG QUOTE SAY QUIT<BR>" |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2293 "MODE VERSION W WHOWAS<BR>" |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2294 "Type /HELP OPER for operator commands<BR>" |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2295 "Type /HELP CTCP for CTCP commands<BR>" |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2296 "Type /HELP DCC for DCC commands"), |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2297 -1, WFLAG_NOLOG, time(NULL)); |
| 3707 | 2298 } |
|
2305
0371b905baef
[gaim-migrate @ 2315]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2304
diff
changeset
|
2299 } else { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2300 struct gaim_conversation *c = NULL; |
|
2305
0371b905baef
[gaim-migrate @ 2315]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2304
diff
changeset
|
2301 if (is_channel(gc, who)) { |
|
0371b905baef
[gaim-migrate @ 2315]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2304
diff
changeset
|
2302 c = irc_find_chat(gc, who); |
|
0371b905baef
[gaim-migrate @ 2315]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2304
diff
changeset
|
2303 } else { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2304 c = gaim_find_conversation(who); |
|
2305
0371b905baef
[gaim-migrate @ 2315]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2304
diff
changeset
|
2305 } |
| 3033 | 2306 if (!c) { |
| 2307 g_free(what); | |
|
2305
0371b905baef
[gaim-migrate @ 2315]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2304
diff
changeset
|
2308 return -EINVAL; |
| 3033 | 2309 } |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2310 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2311 gaim_conversation_write(c, NULL, _("<B>Unknown command</B>"), |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2312 -1, WFLAG_NOLOG, time(NULL)); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2313 } |
| 3033 | 2314 g_free(what); |
|
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2302
diff
changeset
|
2315 return 0; |
| 2086 | 2316 } |
| 2317 | |
| 3751 | 2318 static int |
| 2319 send_msg(struct gaim_connection *gc, char *who, char *what) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2320 { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2321 char *cr = strchr(what, '\n'); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2322 if (cr) { |
|
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2302
diff
changeset
|
2323 int ret = 0; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2324 while (TRUE) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2325 if (cr) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2326 *cr = 0; |
|
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2302
diff
changeset
|
2327 ret = handle_command(gc, who, what); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2328 if (!cr) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2329 break; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2330 what = cr + 1; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2331 if (!*what) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2332 break; |
|
2295
24dc9ce95127
[gaim-migrate @ 2305]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2294
diff
changeset
|
2333 *cr = '\n'; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2334 cr = strchr(what, '\n'); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2335 } |
|
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2302
diff
changeset
|
2336 return ret; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2337 } else |
|
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2302
diff
changeset
|
2338 return handle_command(gc, who, what); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2339 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2340 |
| 3751 | 2341 static void |
| 2342 irc_chat_invite(struct gaim_connection *gc, int idn, const char *message, const char *name) { | |
|
2847
e49bd1479edd
[gaim-migrate @ 2860]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2831
diff
changeset
|
2343 char buf[IRC_BUF_LEN]; |
|
e49bd1479edd
[gaim-migrate @ 2860]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2831
diff
changeset
|
2344 struct irc_data *id = gc->proto_data; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2345 struct gaim_conversation *c = gaim_find_chat(gc, idn); |
|
2847
e49bd1479edd
[gaim-migrate @ 2860]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2831
diff
changeset
|
2346 g_snprintf(buf, sizeof(buf), "INVITE %s %s\r\n", name, c->name); |
|
e49bd1479edd
[gaim-migrate @ 2860]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2831
diff
changeset
|
2347 irc_write(id->fd, buf, strlen(buf)); |
|
e49bd1479edd
[gaim-migrate @ 2860]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2831
diff
changeset
|
2348 } |
|
e49bd1479edd
[gaim-migrate @ 2860]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2831
diff
changeset
|
2349 |
| 3751 | 2350 static int |
| 2351 irc_send_im(struct gaim_connection *gc, char *who, char *what, int len, int flags) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2352 { |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
2353 if (*who == '@' || *who == '%' || *who == '+') |
|
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2302
diff
changeset
|
2354 return send_msg(gc, who + 1, what); |
|
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2302
diff
changeset
|
2355 return send_msg(gc, who, what); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2356 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2357 |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2358 /* IRC doesn't have a buddy list, but we can still figure out who's online with ISON */ |
| 3751 | 2359 static void |
| 2360 irc_add_buddy(struct gaim_connection *gc, const char *who) {} | |
| 2361 static void | |
| 2362 irc_remove_buddy(struct gaim_connection *gc, char *who, char *group) {} | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2363 |
| 3751 | 2364 static GList * |
| 2365 irc_chat_info(struct gaim_connection *gc) | |
| 2086 | 2366 { |
|
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2367 GList *m = NULL; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2368 struct proto_chat_entry *pce; |
|
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2369 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2370 pce = g_new0(struct proto_chat_entry, 1); |
|
2466
f8eb5f120603
[gaim-migrate @ 2479]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2459
diff
changeset
|
2371 pce->label = _("Channel:"); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2372 m = g_list_append(m, pce); |
|
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2373 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2374 pce = g_new0(struct proto_chat_entry, 1); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2375 pce->label = _("Password:"); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2376 m = g_list_append(m, pce); |
|
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2377 |
|
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2167
diff
changeset
|
2378 return m; |
| 2086 | 2379 } |
| 2380 | |
| 3751 | 2381 static void |
| 2382 irc_join_chat(struct gaim_connection *gc, GList *data) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2383 { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2384 struct irc_data *id = gc->proto_data; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2385 char buf[IRC_BUF_LEN]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2386 char *name, *pass; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2387 |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2388 if (!data) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2389 return; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2390 name = data->data; |
|
2299
b5b7dece5249
[gaim-migrate @ 2309]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2298
diff
changeset
|
2391 if (data->next) { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2392 pass = data->next->data; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2393 g_snprintf(buf, sizeof(buf), "JOIN %s %s\r\n", name, pass); |
|
2299
b5b7dece5249
[gaim-migrate @ 2309]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2298
diff
changeset
|
2394 } else |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2395 g_snprintf(buf, sizeof(buf), "JOIN %s\r\n", name); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2396 irc_write(id->fd, buf, strlen(buf)); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2397 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2398 |
| 3751 | 2399 static void |
| 2400 irc_chat_leave(struct gaim_connection *gc, int id) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2401 { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2402 struct irc_data *idata = gc->proto_data; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2403 struct gaim_conversation *c = gaim_find_chat(gc, id); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2404 char buf[IRC_BUF_LEN]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2405 |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2406 if (!c) return; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2407 |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2408 g_snprintf(buf, sizeof(buf), "PART %s\r\n", c->name); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2409 irc_write(idata->fd, buf, strlen(buf)); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2410 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2411 |
| 3751 | 2412 static int |
| 2413 irc_chat_send(struct gaim_connection *gc, int id, char *what) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2414 { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2415 struct gaim_conversation *c = gaim_find_chat(gc, id); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2416 if (!c) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2417 return -EINVAL; |
|
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2302
diff
changeset
|
2418 if (send_msg(gc, c->name, what) > 0) |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2419 serv_got_chat_in(gc, gaim_chat_get_id(GAIM_CHAT(c)), |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2420 gc->displayname, 0, what, time(NULL)); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2421 return 0; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2422 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2423 |
| 3751 | 2424 static GList * |
| 2425 irc_away_states(struct gaim_connection *gc) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2426 { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2427 return g_list_append(NULL, GAIM_AWAY_CUSTOM); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2428 } |
| 2086 | 2429 |
| 3751 | 2430 static void |
| 2431 irc_set_away(struct gaim_connection *gc, char *state, char *msg) | |
| 2086 | 2432 { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2433 struct irc_data *idata = gc->proto_data; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2434 char buf[IRC_BUF_LEN]; |
| 2086 | 2435 |
|
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4067
diff
changeset
|
2436 if (gc->away) { |
|
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4067
diff
changeset
|
2437 g_free(gc->away); |
|
2394
579f8d4347ad
[gaim-migrate @ 2407]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2393
diff
changeset
|
2438 gc->away = NULL; |
|
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4067
diff
changeset
|
2439 } |
|
2393
a7ecfd3f7714
[gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2382
diff
changeset
|
2440 |
|
a7ecfd3f7714
[gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2382
diff
changeset
|
2441 if (msg) { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2442 g_snprintf(buf, sizeof(buf), "AWAY :%s\r\n", msg); |
|
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4067
diff
changeset
|
2443 gc->away = g_strdup(msg); |
|
2393
a7ecfd3f7714
[gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2382
diff
changeset
|
2444 } else |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2445 g_snprintf(buf, sizeof(buf), "AWAY\r\n"); |
|
4111
ee884f1d7ae3
[gaim-migrate @ 4326]
Christian Hammond <chipx86@chipx86.com>
parents:
4067
diff
changeset
|
2446 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2447 irc_write(idata->fd, buf, strlen(buf)); |
| 2086 | 2448 } |
| 2449 | |
| 4687 | 2450 static const char * |
| 2451 irc_list_icon(struct gaim_account *a, struct buddy *b) | |
| 2086 | 2452 { |
| 4687 | 2453 return "irc"; |
| 2086 | 2454 } |
| 2455 | |
| 4916 | 2456 static void irc_list_emblems(struct buddy *b, char **se, char **sw, char **nw, char **ne) |
| 2457 { | |
| 2458 if (b->present == 0) | |
| 2459 *se = "offline"; | |
| 2460 } | |
| 2461 | |
| 3751 | 2462 static int |
| 2463 getlocalip(char *ip) /* Thanks, libfaim */ | |
| 3029 | 2464 { |
| 2465 struct hostent *hptr; | |
| 2466 char localhost[129]; | |
| 2467 long unsigned add; | |
| 2468 | |
| 2469 /* XXX if available, use getaddrinfo() */ | |
| 2470 /* XXX allow client to specify which IP to use for multihomed boxes */ | |
| 2471 | |
| 2472 if (gethostname(localhost, 128) < 0) | |
| 2473 return -1; | |
| 2474 | |
| 2475 if (!(hptr = gethostbyname(localhost))) | |
| 2476 return -1; | |
| 2477 | |
| 2478 memcpy(&add, hptr->h_addr_list[0], 4); | |
| 2479 add = htonl(add); | |
| 2480 g_snprintf(ip, 11, "%lu", add); | |
| 2481 | |
| 2482 return 0; | |
| 2483 } | |
| 2484 | |
| 3751 | 2485 static void |
| 2486 dcc_chat_connected(gpointer data, gint source, GdkInputCondition condition) | |
| 3029 | 2487 { |
| 2488 struct dcc_chat *chat = data; | |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2489 struct gaim_conversation *convo; |
| 3029 | 2490 char buf[128]; |
| 2491 struct sockaddr_in addr; | |
| 2492 int addrlen = sizeof (addr); | |
| 2493 addr.sin_family = AF_INET; | |
| 2494 addr.sin_port = htons (chat->port); | |
| 2495 addr.sin_addr.s_addr = INADDR_ANY; | |
| 2496 chat->fd = accept (chat->fd, (struct sockaddr *) (&addr), &addrlen); | |
| 3707 | 2497 if (!chat->fd) { |
| 3730 | 2498 dcc_chat_cancel (chat); |
| 4491 | 2499 convo = gaim_conversation_new(GAIM_CONV_IM, chat->gc->account, |
|
4476
62c1e5e656d0
[gaim-migrate @ 4751]
Christian Hammond <chipx86@chipx86.com>
parents:
4456
diff
changeset
|
2500 chat->nick); |
| 3707 | 2501 g_snprintf (buf, sizeof buf, _("DCC Chat with %s closed"), |
| 2502 chat->nick); | |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2503 gaim_conversation_write(convo, NULL, buf, -1, |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2504 WFLAG_SYSTEM, time(NULL)); |
| 3707 | 2505 return; |
| 2506 } | |
| 3029 | 2507 chat->inpa = |
| 2508 gaim_input_add (chat->fd, GAIM_INPUT_READ, dcc_chat_in, chat); | |
| 4491 | 2509 convo = gaim_conversation_new(GAIM_CONV_IM, chat->gc->account, chat->nick); |
| 4221 | 2510 g_snprintf (buf, sizeof buf, _("DCC Chat with %s established"), |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2511 chat->nick); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2512 gaim_conversation_write(convo, NULL, buf, -1, WFLAG_SYSTEM, time(NULL)); |
| 3029 | 2513 debug_printf ("Chat with %s established\n", chat->nick); |
| 2514 dcc_chat_list = g_slist_append (dcc_chat_list, chat); | |
| 2515 } | |
|
3665
7cb6cf20ed7d
[gaim-migrate @ 3794]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
3633
diff
changeset
|
2516 #if 0 |
| 3751 | 2517 static void |
| 2518 irc_ask_send_file(struct gaim_connection *gc, char *destsn) { | |
| 3708 | 2519 struct irc_data *id = (struct irc_data *)gc->proto_data; |
| 2520 struct irc_file_transfer *ift = g_new0(struct irc_file_transfer, 1); | |
| 2521 char *localip = (char *)malloc(12); | |
| 3622 | 2522 |
| 3708 | 2523 if (getlocalip(localip) == -1) { |
| 2524 free(localip); | |
| 2525 return; | |
| 2526 } | |
| 3616 | 2527 |
| 3708 | 2528 ift->type = IFT_SENDFILE_OUT; |
| 2529 ift->sn = g_strdup(destsn); | |
| 2530 ift->gc = gc; | |
| 2531 snprintf(ift->ip, sizeof(ift->ip), "%s", localip); | |
| 2532 id->file_transfers = g_slist_append(id->file_transfers, ift); | |
| 3622 | 2533 |
| 3708 | 2534 ift->xfer = transfer_out_add(gc, ift->sn); |
| 3616 | 2535 } |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
2536 |
| 3751 | 2537 static struct |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
2538 irc_file_transfer *find_ift_by_xfer(struct gaim_connection *gc, |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
2539 struct file_transfer *xfer) { |
| 3616 | 2540 |
| 3708 | 2541 GSList *g = ((struct irc_data *)gc->proto_data)->file_transfers; |
| 2542 struct irc_file_transfer *f = NULL; | |
| 3616 | 2543 |
| 3708 | 2544 while (g) { |
| 2545 f = (struct irc_file_transfer *)g->data; | |
| 2546 if (f->xfer == xfer) | |
| 2547 break; | |
| 2548 g = g->next; | |
| 2549 f = NULL; | |
| 2550 } | |
| 3616 | 2551 |
| 3708 | 2552 return f; |
| 3616 | 2553 } |
| 2554 | |
| 3751 | 2555 static void |
| 2556 irc_file_transfer_data_chunk(struct gaim_connection *gc, struct file_transfer *xfer, const char *data, int len) { | |
| 3616 | 2557 struct irc_file_transfer *ift = find_ift_by_xfer(gc, xfer); |
| 2558 guint32 pos; | |
| 2559 | |
| 2560 ift->cur += len; | |
| 2561 pos = htonl(ift->cur); | |
| 2562 write(ift->fd, (char *)&pos, 4); | |
| 2563 | |
| 3623 | 2564 // FIXME: You should check to verify that they received the data when |
| 2565 // you are sending a file ... | |
| 3616 | 2566 } |
| 2567 | |
| 3751 | 2568 static void |
| 2569 irc_file_transfer_cancel (struct gaim_connection *gc, struct file_transfer *xfer) { | |
| 3616 | 2570 struct irc_data *id = (struct irc_data *)gc->proto_data; |
| 2571 struct irc_file_transfer *ift = find_ift_by_xfer(gc, xfer); | |
| 2572 | |
| 2573 printf("Our shit got canceled, yo!\n"); | |
| 2574 | |
| 2575 /* Remove the FT from our list of transfers */ | |
| 2576 id->file_transfers = g_slist_remove(id->file_transfers, ift); | |
| 2577 | |
| 2578 gaim_input_remove(ift->watcher); | |
| 2579 | |
| 2580 /* Close our FT because we're done */ | |
| 2581 close(ift->fd); | |
| 2582 | |
| 2583 g_free(ift->sn); | |
| 2584 g_free(ift->name); | |
| 2585 | |
| 2586 g_free(ift); | |
| 2587 } | |
| 2588 | |
| 3751 | 2589 static void |
| 2590 irc_file_transfer_done(struct gaim_connection *gc, struct file_transfer *xfer) { | |
| 3616 | 2591 struct irc_data *id = (struct irc_data *)gc->proto_data; |
| 2592 struct irc_file_transfer *ift = find_ift_by_xfer(gc, xfer); | |
| 2593 | |
| 2594 | |
| 2595 printf("Our shit be done, yo.\n"); | |
| 2596 | |
| 2597 /* Remove the FT from our list of transfers */ | |
| 2598 id->file_transfers = g_slist_remove(id->file_transfers, ift); | |
| 2599 | |
| 2600 gaim_input_remove(ift->watcher); | |
| 2601 | |
| 2602 /* Close our FT because we're done */ | |
| 2603 close(ift->fd); | |
| 2604 | |
| 2605 g_free(ift->sn); | |
| 2606 g_free(ift->name); | |
| 2607 | |
| 2608 g_free(ift); | |
| 2609 } | |
| 2610 | |
| 3751 | 2611 static void |
| 2612 irc_file_transfer_out (struct gaim_connection *gc, struct file_transfer *xfer, const char *name, int totfiles, int totsize) { | |
| 3622 | 2613 struct irc_file_transfer *ift = find_ift_by_xfer(gc, xfer); |
| 2614 struct sockaddr_in addr; | |
| 2615 char buf[IRC_BUF_LEN]; | |
| 2616 int len; | |
| 2617 | |
| 2618 | |
| 2619 ift->fd = socket (AF_INET, SOCK_STREAM, 0); | |
| 2620 addr.sin_family = AF_INET; | |
| 2621 addr.sin_port = 0; | |
| 2622 addr.sin_addr.s_addr = INADDR_ANY; | |
| 2623 bind (ift->fd, (struct sockaddr *) &addr, sizeof(addr)); | |
| 2624 listen(ift->fd, 1); | |
| 2625 | |
| 2626 len = sizeof(addr); | |
| 2627 getsockname (ift->fd, (struct sockaddr *) &addr, &len); | |
| 2628 | |
| 2629 ift->port = ntohs(addr.sin_port); | |
| 2630 | |
| 2631 ift->watcher = gaim_input_add (ift->fd, GAIM_INPUT_READ, dcc_send_callback, ift); | |
| 3633 | 2632 printf("watcher is %d\n", ift->watcher); |
| 3622 | 2633 |
| 2634 snprintf(buf, sizeof(buf), "\001DCC SEND %s %s %d %d\001\n", name, ift->ip, ift->port, totsize); | |
| 2635 printf("Trying: %s\n", buf); | |
| 2636 irc_send_im (gc, ift->sn, buf, -1, 0); | |
| 2637 } | |
| 2638 | |
| 3751 | 2639 static void |
| 2640 irc_file_transfer_in(struct gaim_connection *gc, | |
| 3708 | 2641 struct file_transfer *xfer, int offset) { |
| 3616 | 2642 |
| 2643 struct irc_file_transfer *ift = find_ift_by_xfer(gc, xfer); | |
| 2644 | |
| 2645 ift->xfer = xfer; | |
| 4634 | 2646 proxy_connect(gc->account, ift->ip, ift->port, dcc_recv_callback, ift); |
| 3616 | 2647 } |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
2648 #endif |
| 3616 | 2649 |
| 3751 | 2650 static void |
| 2651 irc_ctcp_clientinfo(struct gaim_connection *gc, char *who) | |
| 2652 { | |
| 2653 char buf[IRC_BUF_LEN]; | |
| 2654 | |
| 2655 snprintf (buf, sizeof buf, "\001CLIENTINFO\001"); | |
| 2656 irc_send_privmsg(gc, who, buf, FALSE); | |
| 2657 } | |
| 2658 | |
| 2659 static void | |
| 2660 irc_ctcp_userinfo(struct gaim_connection *gc, char *who) | |
| 3707 | 2661 { |
| 3735 | 2662 char buf[IRC_BUF_LEN]; |
| 2663 | |
| 3751 | 2664 snprintf (buf, sizeof buf, "\001USERINFO\001"); |
| 2665 irc_send_privmsg(gc, who, buf, FALSE); | |
| 3707 | 2666 } |
| 2667 | |
| 3751 | 2668 static void |
| 2669 irc_ctcp_version(struct gaim_connection *gc, char *who) | |
| 3707 | 2670 { |
| 3735 | 2671 char buf[IRC_BUF_LEN]; |
| 2672 | |
| 3751 | 2673 snprintf (buf, sizeof buf, "\001VERSION\001"); |
| 2674 irc_send_privmsg(gc, who, buf, FALSE); | |
| 3707 | 2675 } |
| 2676 | |
| 3751 | 2677 static void |
| 2678 irc_ctcp_ping(struct gaim_connection *gc, char *who) | |
| 3707 | 2679 { |
| 3735 | 2680 char buf[IRC_BUF_LEN]; |
| 2681 | |
| 3867 | 2682 g_snprintf (buf, sizeof(buf), "\001PING %ld\001", time(NULL)); |
| 3751 | 2683 irc_send_privmsg(gc, who, buf, FALSE); |
| 3735 | 2684 } |
| 2685 | |
| 3751 | 2686 static void |
| 2687 irc_send_notice(struct gaim_connection *gc, char *who, char *what) | |
| 3735 | 2688 { |
| 3751 | 2689 char buf[IRC_BUF_LEN], *intl; |
| 3735 | 2690 struct irc_data *id = gc->proto_data; |
| 3751 | 2691 int len; |
| 2692 | |
| 2693 intl = irc_send_convert(gc, what, 501, &len); | |
| 2694 g_snprintf(buf, sizeof(buf), "NOTICE %s :%s\r\n", who, intl); | |
| 2695 g_free(intl); | |
| 3735 | 2696 irc_write(id->fd, buf, strlen(buf)); |
| 2697 } | |
| 2698 | |
| 3751 | 2699 /* Don't call this guy with fragment = 1 for anything but straight |
| 2700 * up privmsgs. (no CTCP/whatever) It's still dangerous for CTCPs | |
| 2701 * (it might not include the trailing \001), but I think this behavior | |
| 2702 * is generally better than not fragmenting at all on lots of our | |
| 2703 * packets. */ | |
| 2704 /* From RFC2812: | |
| 2705 * IRC messages are always lines of characters terminated with a CR-LF | |
| 2706 * (Carriage Return - Line Feed) pair, and these messages SHALL NOT | |
| 2707 * exceed 512 characters in length, counting all characters including | |
| 2708 * the trailing CR-LF. Thus, there are 510 characters maximum allowed | |
| 2709 * for the command and its parameters. */ | |
| 2710 /* So apparently that includes all the inter-server crap, which is up | |
| 2711 * to NINETY-THREE chars on dancer, which seems to be a pretty liberal | |
| 2712 * ircd. My rough calculation for now is ":<nick>!~<user>@<host> ", | |
| 2713 * where <host> is a max of an (uncalculated) 63 chars. Thanks to | |
| 2714 * trelane and #freenode for giving a hand here. */ | |
| 2715 static void | |
| 2716 irc_send_privmsg(struct gaim_connection *gc, char *who, char *what, gboolean fragment) | |
| 3735 | 2717 { |
| 3751 | 2718 char buf[IRC_BUF_LEN], *intl; |
| 3735 | 2719 struct irc_data *id = gc->proto_data; |
| 3751 | 2720 /* 512 - 12 (for PRIVMSG" "" :""\r\n") - namelen - nicklen - 68 */ |
| 4491 | 2721 int nicklen = (gc->account->alias && strlen(gc->account->alias)) ? strlen(gc->account->alias) : 4; |
| 3751 | 2722 int max = 444 - strlen(who) - strlen(g_get_user_name()) - nicklen; |
| 2723 | |
| 2724 int len; | |
| 2725 | |
| 2726 do { | |
| 2727 /* the \001 on CTCPs may cause a problem here for some | |
| 2728 * charsets, but probably not ones people use for IRC. */ | |
| 2729 intl = irc_send_convert(gc, what, max, &len); | |
| 2730 g_snprintf(buf, sizeof(buf), "PRIVMSG %s :%s\r\n", who, intl); | |
| 2731 g_free(intl); | |
| 2732 irc_write(id->fd, buf, strlen(buf)); | |
| 2733 what += len; | |
| 2734 } while (fragment && strlen(what)); | |
| 3707 | 2735 } |
| 2736 | |
| 3751 | 2737 static void |
| 2738 irc_start_chat(struct gaim_connection *gc, char *who) { | |
| 3029 | 2739 struct dcc_chat *chat; |
| 2740 int len; | |
| 2741 struct sockaddr_in addr; | |
| 3735 | 2742 char buf[IRC_BUF_LEN]; |
| 3029 | 2743 |
| 2744 /* Create a socket */ | |
| 2745 chat = g_new0 (struct dcc_chat, 1); | |
| 2746 chat->fd = socket (AF_INET, SOCK_STREAM, 0); | |
| 2747 chat->gc = gc; | |
| 2748 g_snprintf (chat->nick, sizeof (chat->nick), "%s", who); | |
| 2749 if (chat->fd < 0) { | |
| 3730 | 2750 dcc_chat_cancel (chat); |
| 3708 | 2751 return; |
| 3029 | 2752 } |
| 2753 addr.sin_family = AF_INET; | |
| 2754 addr.sin_port = 0; | |
| 2755 addr.sin_addr.s_addr = INADDR_ANY; | |
| 2756 bind (chat->fd, (struct sockaddr *) &addr, sizeof (addr)); | |
| 2757 listen (chat->fd, 1); | |
| 2758 len = sizeof (addr); | |
| 2759 getsockname (chat->fd, (struct sockaddr *) &addr, &len); | |
| 2760 chat->port = ntohs (addr.sin_port); | |
| 2761 getlocalip(chat->ip_address); | |
| 2762 chat->inpa = | |
| 2763 gaim_input_add (chat->fd, GAIM_INPUT_READ, dcc_chat_connected, | |
| 3708 | 2764 chat); |
| 3630 | 2765 g_snprintf (buf, sizeof buf, "\001DCC CHAT chat %s %d\001\n", |
| 3708 | 2766 chat->ip_address, chat->port); |
| 3033 | 2767 irc_send_im (gc, who, buf, -1, 0); |
| 3029 | 2768 } |
| 2769 | |
| 3751 | 2770 static void |
| 2771 irc_get_info(struct gaim_connection *gc, char *who) | |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2772 { |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2773 struct irc_data *idata = gc->proto_data; |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2774 char buf[IRC_BUF_LEN]; |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2775 |
|
2633
b740a33875c3
[gaim-migrate @ 2646]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2620
diff
changeset
|
2776 if (*who == '@') |
|
b740a33875c3
[gaim-migrate @ 2646]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2620
diff
changeset
|
2777 who++; |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
2778 if (*who == '%') |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
2779 who++; |
|
2633
b740a33875c3
[gaim-migrate @ 2646]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2620
diff
changeset
|
2780 if (*who == '+') |
|
b740a33875c3
[gaim-migrate @ 2646]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2620
diff
changeset
|
2781 who++; |
|
b740a33875c3
[gaim-migrate @ 2646]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2620
diff
changeset
|
2782 |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2783 g_snprintf(buf, sizeof(buf), "WHOIS %s\r\n", who); |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2784 irc_write(idata->fd, buf, strlen(buf)); |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2785 } |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2786 |
| 3751 | 2787 static GList * |
| 2788 irc_buddy_menu(struct gaim_connection *gc, char *who) | |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2789 { |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2790 GList *m = NULL; |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2791 struct proto_buddy_menu *pbm; |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2792 |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2793 pbm = g_new0(struct proto_buddy_menu, 1); |
| 3029 | 2794 pbm->label = _("DCC Chat"); |
| 2795 pbm->callback = irc_start_chat; | |
| 2796 pbm->gc = gc; | |
| 2797 m = g_list_append(m, pbm); | |
| 3708 | 2798 /* |
| 2799 pbm = g_new0(struct proto_buddy_menu, 1); | |
| 2800 pbm->label = _("DCC Send"); | |
| 2801 pbm->callback = irc_ask_send_file; | |
| 2802 pbm->gc = gc; | |
| 2803 m = g_list_append(m, pbm); | |
| 2804 */ | |
| 3707 | 2805 |
| 2806 pbm = g_new0(struct proto_buddy_menu, 1); | |
| 2807 pbm->label = _("CTCP ClientInfo"); | |
| 2808 pbm->callback = irc_ctcp_clientinfo; | |
| 2809 pbm->gc = gc; | |
| 2810 m = g_list_append(m, pbm); | |
| 2811 | |
| 2812 pbm = g_new0(struct proto_buddy_menu, 1); | |
| 2813 pbm->label = _("CTCP UserInfo"); | |
| 2814 pbm->callback = irc_ctcp_userinfo; | |
| 2815 pbm->gc = gc; | |
| 2816 m = g_list_append(m, pbm); | |
| 2817 | |
| 2818 pbm = g_new0(struct proto_buddy_menu, 1); | |
| 2819 pbm->label = _("CTCP Version"); | |
| 2820 pbm->callback = irc_ctcp_version; | |
| 2821 pbm->gc = gc; | |
| 2822 m = g_list_append(m, pbm); | |
| 2823 | |
| 3735 | 2824 pbm = g_new0(struct proto_buddy_menu, 1); |
| 2825 pbm->label = _("CTCP Ping"); | |
| 2826 pbm->callback = irc_ctcp_ping; | |
| 2827 pbm->gc = gc; | |
| 2828 m = g_list_append(m, pbm); | |
| 2829 | |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2830 return m; |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2831 } |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2832 |
| 3751 | 2833 G_MODULE_EXPORT void |
| 2834 irc_init(struct prpl *ret) | |
| 2086 | 2835 { |
| 4966 | 2836 struct proto_user_split *pus; |
| 3572 | 2837 struct proto_user_opt *puo; |
| 2086 | 2838 ret->protocol = PROTO_IRC; |
| 3789 | 2839 ret->options = OPT_PROTO_CHAT_TOPIC | OPT_PROTO_PASSWORD_OPTIONAL; |
| 3572 | 2840 ret->name = g_strdup("IRC"); |
| 2086 | 2841 ret->list_icon = irc_list_icon; |
| 4916 | 2842 ret->list_emblems = irc_list_emblems; |
| 2086 | 2843 ret->login = irc_login; |
| 2844 ret->close = irc_close; | |
| 2845 ret->send_im = irc_send_im; | |
|
2681
37d80035e77f
[gaim-migrate @ 2694]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2652
diff
changeset
|
2846 ret->add_buddy = irc_add_buddy; |
|
37d80035e77f
[gaim-migrate @ 2694]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2652
diff
changeset
|
2847 ret->remove_buddy = irc_remove_buddy; |
|
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2171
diff
changeset
|
2848 ret->chat_info = irc_chat_info; |
| 2086 | 2849 ret->join_chat = irc_join_chat; |
| 2850 ret->chat_leave = irc_chat_leave; | |
| 2851 ret->chat_send = irc_chat_send; | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2852 ret->away_states = irc_away_states; |
| 2086 | 2853 ret->set_away = irc_set_away; |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2854 ret->get_info = irc_get_info; |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2855 ret->buddy_menu = irc_buddy_menu; |
|
2847
e49bd1479edd
[gaim-migrate @ 2860]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2831
diff
changeset
|
2856 ret->chat_invite = irc_chat_invite; |
| 3029 | 2857 ret->convo_closed = irc_convo_closed; |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
2858 #if 0 |
| 3622 | 2859 ret->file_transfer_out = irc_file_transfer_out; |
| 3616 | 2860 ret->file_transfer_in = irc_file_transfer_in; |
| 2861 ret->file_transfer_data_chunk = irc_file_transfer_data_chunk; | |
| 2862 ret->file_transfer_done = irc_file_transfer_done; | |
| 2863 ret->file_transfer_cancel =irc_file_transfer_cancel; | |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
2864 #endif |
| 3572 | 2865 |
| 4966 | 2866 pus = g_new0(struct proto_user_split, 1); |
| 2867 pus->sep = '@'; | |
| 2868 pus->label = g_strdup(_("Server:")); | |
| 2869 pus->def = g_strdup(DEFAULT_SERVER); | |
| 2870 ret->user_splits = g_list_append(ret->user_splits, pus); | |
| 3572 | 2871 |
| 2872 puo = g_new0(struct proto_user_opt, 1); | |
| 4115 | 2873 puo->label = g_strdup(_("Port:")); |
| 3572 | 2874 puo->def = g_strdup("6667"); |
| 2875 puo->pos = USEROPT_PORT; | |
| 2876 ret->user_opts = g_list_append(ret->user_opts, puo); | |
| 2877 | |
| 3751 | 2878 puo = g_new0(struct proto_user_opt, 1); |
| 4115 | 2879 puo->label = g_strdup(_("Encoding:")); |
| 3751 | 2880 puo->def = g_strdup("ISO-8859-1"); |
| 2881 puo->pos = USEROPT_CHARSET; | |
| 2882 ret->user_opts = g_list_append(ret->user_opts, puo); | |
| 4966 | 2883 |
| 3616 | 2884 my_protocol = ret; |
| 2086 | 2885 } |
| 2886 | |
| 2887 #ifndef STATIC | |
| 3751 | 2888 G_MODULE_EXPORT void |
| 2889 gaim_prpl_init(struct prpl* prpl) | |
| 2086 | 2890 { |
| 3572 | 2891 irc_init(prpl); |
| 2892 prpl->plug->desc.api_version = PLUGIN_API_VERSION; | |
| 2086 | 2893 } |
| 2894 | |
| 2895 #endif |
