Mercurial > pidgin
annotate src/protocols/irc/irc.c @ 5867:db4df0be06fd
[gaim-migrate @ 6298]
Added a little bit of code to prevent duplicate accounts, but it doesn't
fix the problem of importing all new accounts when are importing from the
old .gaimrc and also have an accounts.xml already established.
committer: Tailor Script <tailor@pidgin.im>
| author | Christian Hammond <chipx86@chipx86.com> |
|---|---|
| date | Sat, 14 Jun 2003 12:01:19 +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); |
