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