Mercurial > pidgin
annotate src/protocols/irc/irc.c @ 5255:c0baa01cdeda
[gaim-migrate @ 5627]
Paul A (darkrain) writes:
" This patch updates the events.c, filectl.c, gaiminc.c,
and mailchk.c plugins to the new api as well as
updating mailchk.c to the new buddy list code.
events.so, gaiminc.so, and mailchk.so all load and
function properly on my computer.
filectl doesn't even compile, but then, it has been a
while since it did actually compile. I didn't even bother
to update a few of the other plugins, since they're
completely out of date. Perhaps one of the developers
needs to go through and prune out a bunch of the
plugins that are not kept up to date.
Out of date plugins:
chatlist.c - superceded by faceprint's recent commit to
cvs.
filectl.c - doesn't support multiple accounts for IMs and
away messages.
raw.c - does anyone use this? it doesn't compile, but it
looks like an easy fix. "
committer: Tailor Script <tailor@pidgin.im>
| author | Luke Schierer <lschiere@pidgin.im> |
|---|---|
| date | Mon, 28 Apr 2003 18:45:38 +0000 |
| parents | 0d4b8ca97c17 |
| children | 0e2cc6379618 |
| rev | line source |
|---|---|
| 2086 | 1 /* |
| 2 * gaim - IRC Protocol Plugin | |
| 3 * | |
| 4 * Copyright (C) 2000-2001, Rob Flynn <rob@tgflinux.com> | |
| 5 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net> | |
|
2290
23c06449ae8e
[gaim-migrate @ 2300]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2289
diff
changeset
|
6 * |
|
23c06449ae8e
[gaim-migrate @ 2300]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2289
diff
changeset
|
7 * A large portion of this was copied more or less directly from X-Chat, |
|
23c06449ae8e
[gaim-migrate @ 2300]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2289
diff
changeset
|
8 * the world's most rocking IRC client. http://www.xchat.org/ |
| 2086 | 9 * |
| 10 * This program is free software; you can redistribute it and/or modify | |
| 11 * it under the terms of the GNU General Public License as published by | |
| 12 * the Free Software Foundation; either version 2 of the License, or | |
| 13 * (at your option) any later version. | |
| 14 * | |
| 15 * This program is distributed in the hope that it will be useful, | |
| 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 18 * GNU General Public License for more details. | |
| 19 * | |
| 20 * You should have received a copy of the GNU General Public License | |
| 21 * along with this program; if not, write to the Free Software | |
| 22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 23 * | |
| 24 */ | |
| 25 | |
|
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
26 #include <config.h> |
| 2086 | 27 |
| 3630 | 28 #ifndef _WIN32 |
| 29 #include <unistd.h> | |
| 30 #else | |
| 31 #include <winsock.h> | |
| 32 #endif | |
| 33 | |
| 3029 | 34 #include <fcntl.h> |
| 2086 | 35 #include <errno.h> |
| 36 #include <string.h> | |
| 37 #include <stdlib.h> | |
| 38 #include <stdio.h> | |
| 3867 | 39 #include <sys/time.h> |
| 2086 | 40 #include <time.h> |
| 41 #include <sys/stat.h> | |
| 42 #include <ctype.h> | |
| 4608 | 43 #include "gaim.h" |
| 2086 | 44 #include "multi.h" |
|
4373
dcc6c130c6d9
[gaim-migrate @ 4639]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
4359
diff
changeset
|
45 #include "core.h" |
| 2086 | 46 #include "prpl.h" |
| 47 #include "proxy.h" | |
| 48 | |
| 3630 | 49 #ifdef _WIN32 |
| 50 #include "win32dep.h" | |
| 51 #endif | |
| 52 | |
| 2086 | 53 #define IRC_BUF_LEN 4096 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
54 #define PDIWORDS 32 |
| 2086 | 55 |
| 56 #define USEROPT_SERV 0 | |
| 57 #define USEROPT_PORT 1 | |
| 3751 | 58 #define USEROPT_CHARSET 2 |
| 2086 | 59 |
| 4966 | 60 #define DEFAULT_SERVER "irc.freenode.net" |
| 61 | |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
62 static GaimPlugin *my_protocol = NULL; |
| 4249 | 63 |
| 3630 | 64 /* for win32 compatability */ |
| 65 G_MODULE_IMPORT GSList *connections; | |
| 66 | |
| 4422 | 67 #ifndef INET6_ADDRSTRLEN |
| 68 #define INET6_ADDRSTRLEN 46 | |
| 69 #endif | |
| 70 | |
| 3751 | 71 /* Datastructs */ |
| 3029 | 72 struct dcc_chat |
| 73 { | |
| 74 struct gaim_connection *gc; | |
| 4422 | 75 char ip_address[INET6_ADDRSTRLEN]; |
| 3029 | 76 int port; |
| 77 int fd; | |
| 78 int inpa; | |
| 79 char nick[80]; | |
| 80 }; | |
| 81 | |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
82 struct irc_xfer_data |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
83 { |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
84 char *ip; |
| 3708 | 85 int port; |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
86 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
87 struct irc_data *idata; |
| 3616 | 88 }; |
| 89 | |
| 2086 | 90 struct irc_data { |
| 91 int fd; | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
92 gboolean online; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
93 guint32 timer; |
| 2086 | 94 |
| 4966 | 95 char *server; |
| 96 | |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
97 char *rxqueue; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
98 int rxlen; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
99 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
100 GString *str; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
101 int bc; |
| 2086 | 102 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
103 char *chantypes; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
104 char *chanmodes; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
105 char *nickmodes; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
106 gboolean six_modes; |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
107 |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
108 gboolean in_whois; |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
109 gboolean in_list; |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
110 GString *liststr; |
| 3616 | 111 GSList *file_transfers; |
| 2086 | 112 }; |
| 113 | |
| 3751 | 114 /* Prototypes */ |
| 5136 | 115 static void irc_start_chat(struct gaim_connection *gc, const char *who); |
| 116 static void irc_ctcp_clientinfo(struct gaim_connection *gc, const char *who); | |
| 117 static void irc_ctcp_userinfo(struct gaim_connection *gc, const char *who); | |
| 118 static void irc_ctcp_version(struct gaim_connection *gc, const char *who); | |
| 119 static void irc_ctcp_ping(struct gaim_connection *gc, const char *who); | |
| 3751 | 120 |
| 5136 | 121 static void irc_send_privmsg(struct gaim_connection *gc, const char *who, const char *what, gboolean fragment); |
| 3751 | 122 static void irc_send_notice(struct gaim_connection *gc, char *who, char *what); |
| 123 | |
| 5136 | 124 static char *irc_send_convert(struct gaim_connection *gc, const char *string, int maxlen, int *done); |
| 3751 | 125 static char *irc_recv_convert(struct gaim_connection *gc, char *string); |
| 126 static void irc_parse_notice(struct gaim_connection *gc, char *nick, char *ex, | |
| 127 char *word[], char *word_eol[]); | |
| 128 static void irc_parse_join(struct gaim_connection *gc, char *nick, | |
| 129 char *word[], char *word_eol[]); | |
| 130 static gboolean irc_parse_part(struct gaim_connection *gc, char *nick, char *cmd, | |
| 131 char *word[], char *word_eol[]); | |
| 132 static void irc_parse_topic(struct gaim_connection *gc, char *nick, | |
| 133 char *word[], char *word_eol[]); | |
| 134 | |
| 135 static void dcc_chat_cancel(struct dcc_chat *); | |
| 136 | |
| 137 /* Global variables */ | |
| 138 GSList *dcc_chat_list = NULL; | |
| 139 | |
| 3029 | 140 struct dcc_chat * |
| 5136 | 141 find_dcc_chat (struct gaim_connection *gc, const char *nick) |
| 3029 | 142 { |
| 143 GSList *tmp; | |
| 144 struct dcc_chat *data; | |
| 145 tmp = dcc_chat_list; | |
| 146 while (tmp != NULL) | |
| 147 { | |
| 148 data = (struct dcc_chat *) (tmp)->data; | |
| 149 if (data | |
| 150 && data->nick | |
| 151 && strcmp (nick, data->nick) == 0 | |
| 152 && gc == data->gc) | |
| 153 { | |
| 154 return data; | |
| 155 } | |
| 156 tmp = tmp->next; | |
| 157 } | |
| 158 return NULL; | |
| 159 } | |
| 160 | |
| 3751 | 161 static int |
| 162 irc_write(int fd, char *data, int len) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
163 { |
|
5221
abe4d103e300
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
164 gaim_debug(GAIM_DEBUG_MISC, "irc", "C: %s", data); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
165 return write(fd, data, len); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
166 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
167 |
| 3751 | 168 static char * |
| 5136 | 169 irc_send_convert(struct gaim_connection *gc, const char *string, int maxlen, int *done) |
| 3751 | 170 { |
| 171 char *converted = g_malloc(maxlen + 1); | |
| 5136 | 172 gchar *inptr = (gchar*)string, *outptr = converted; |
| 3751 | 173 int inleft = strlen(string), outleft = maxlen; |
| 174 GIConv conv; | |
| 175 | |
| 4491 | 176 conv = g_iconv_open(gc->account->proto_opt[USEROPT_CHARSET], "UTF-8"); |
| 3751 | 177 if (g_iconv(conv, &inptr, &inleft, &outptr, &outleft) == -1) { |
|
5221
abe4d103e300
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
178 gaim_debug(GAIM_DEBUG_ERROR, "irc", "Charset conversion error\n"); |
|
abe4d103e300
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
179 gaim_debug(GAIM_DEBUG_ERROR, "irc", |
|
abe4d103e300
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
180 "Sending as UTF-8 (this is a hack!)\n"); |
| 3751 | 181 g_free(converted); |
| 182 *done = maxlen; | |
| 183 return(g_strndup(string, maxlen)); | |
| 184 } | |
| 185 | |
| 186 *done = strlen(string) - inleft; | |
| 187 *outptr = '\0'; | |
| 188 return(converted); | |
| 189 } | |
| 190 | |
| 191 static char * | |
| 192 irc_recv_convert(struct gaim_connection *gc, char *string) | |
| 193 { | |
| 194 char *utf8; | |
| 195 GError *err = NULL; | |
| 196 | |
| 197 utf8 = g_convert(string, strlen(string), "UTF-8", | |
| 4491 | 198 gc->account->proto_opt[USEROPT_CHARSET], NULL, NULL, &err); |
| 3751 | 199 if (err) { |
|
5221
abe4d103e300
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
200 gaim_debug(GAIM_DEBUG_ERROR, "irc", |
|
abe4d103e300
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
201 "recv conversion error: %s\n", err->message); |
| 3751 | 202 utf8 = g_strdup(_("(There was an error converting this message. Check the 'Encoding' option in the Account Editor)")); |
| 203 } | |
| 204 | |
| 205 return (utf8); | |
| 206 } | |
| 207 | |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
208 static struct gaim_conversation * |
| 5136 | 209 irc_find_chat(struct gaim_connection *gc, const char *name) |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
210 { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
211 GSList *bcs = gc->buddy_chats; |
| 2086 | 212 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
213 while (bcs) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
214 struct gaim_conversation *b = bcs->data; |
| 4793 | 215 if (!gaim_utf8_strcasecmp(b->name, name)) |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
216 return b; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
217 bcs = bcs->next; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
218 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
219 return NULL; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
220 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
221 |
| 3751 | 222 static void |
| 223 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
|
224 { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
225 int wordcount = 2; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
226 gboolean space = FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
227 gboolean quote = FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
228 int j = 0; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
229 |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
230 word[1] = cmd; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
231 eol[1] = buf; |
|
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2171
diff
changeset
|
232 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
233 while (TRUE) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
234 switch (*cmd) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
235 case 0: |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
236 buf[j] = 0; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
237 for (j = wordcount; j < PDIWORDS; j++) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
238 word[j] = "\000\000"; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
239 eol[j] = "\000\000"; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
240 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
241 return; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
242 case '"': |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
243 if (!quotes) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
244 space = FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
245 buf[j++] = *cmd; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
246 break; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
247 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
248 quote = !quote; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
249 break; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
250 case ' ': |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
251 if (quote) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
252 space = FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
253 buf[j++] = *cmd; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
254 break; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
255 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
256 if (space) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
257 break; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
258 buf[j++] = 0; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
259 word[wordcount] = &buf[j]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
260 eol[wordcount++] = cmd + 1; |
|
2294
b6c6603a8915
[gaim-migrate @ 2304]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2293
diff
changeset
|
261 if (wordcount == PDIWORDS - 1) { |
|
b6c6603a8915
[gaim-migrate @ 2304]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2293
diff
changeset
|
262 buf[j] = 0; |
|
b6c6603a8915
[gaim-migrate @ 2304]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2293
diff
changeset
|
263 return; |
|
b6c6603a8915
[gaim-migrate @ 2304]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2293
diff
changeset
|
264 } |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
265 space = TRUE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
266 break; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
267 default: |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
268 space = FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
269 buf[j++] = *cmd; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
270 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
271 cmd++; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
272 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
273 } |
|
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2171
diff
changeset
|
274 |
| 3751 | 275 static void |
| 276 handle_005(struct gaim_connection *gc, char *word[], char *word_eol[]) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
277 { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
278 int w = 4; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
279 struct irc_data *id = gc->proto_data; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
280 |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
281 while (w < PDIWORDS && *word[w]) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
282 if (!strncmp(word[w], "MODES=", 5)) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
283 if (atoi(word[w] + 6) >= 6) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
284 id->six_modes = TRUE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
285 } else if (!strncmp(word[w], "CHANTYPES=", 10)) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
286 g_free(id->chantypes); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
287 id->chantypes = g_strdup(word[w] + 10); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
288 } else if (!strncmp(word[w], "CHANMODES=", 10)) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
289 g_free(id->chanmodes); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
290 id->chanmodes = g_strdup(word[w] + 10); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
291 } else if (!strncmp(word[w], "PREFIX=", 7)) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
292 char *pre = strchr(word[w] + 7, ')'); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
293 if (pre) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
294 *pre = 0; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
295 g_free(id->nickmodes); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
296 id->nickmodes = g_strdup(word[w] + 8); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
297 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
298 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
299 w++; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
300 } |
|
2205
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2171
diff
changeset
|
301 } |
|
cff4fbe01c7b
[gaim-migrate @ 2215]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2171
diff
changeset
|
302 |
| 4221 | 303 static const char *irc_colors[] = { |
| 304 "#000000", "#ffffff", "#000066", "#006600", | |
| 305 "#ff0000", "#660000", "#660066", "#666600", | |
| 306 "#cccc00", "#33cc33", "#00acac", "#00ccac", | |
| 307 "#0000ff", "#cc00cc", "#666666", "#00ccac" | |
| 308 }; | |
| 309 | |
| 310 #define int_to_col(c) (irc_colors[(((c)<0 || (c)> 15)?0:c)]) | |
| 2086 | 311 |
| 3751 | 312 static GString * |
| 313 encode_html(char *msg) | |
| 3029 | 314 { |
| 315 GString *str = g_string_new(""); | |
| 316 char *cur = msg, *end = msg; | |
| 317 gboolean bold = FALSE, underline = FALSE, italics = FALSE; | |
| 4793 | 318 |
| 3029 | 319 while ((end = strchr(cur, '<'))) { |
| 320 *end = 0; | |
| 321 str = g_string_append(str, cur); | |
| 322 cur = ++end; | |
| 4793 | 323 if (!g_ascii_strncasecmp(cur, "B>", 2)) { |
| 3063 | 324 if (!bold) { |
| 325 bold = TRUE; | |
| 326 str = g_string_append_c(str, '\2'); | |
| 327 } | |
| 3029 | 328 cur = cur + 2; |
| 4793 | 329 } else if (!g_ascii_strncasecmp(cur, "I>", 2)) { /* use bold for italics too */ |
| 3063 | 330 if (!italics) { |
| 331 italics = TRUE; | |
| 332 str = g_string_append_c(str, '\2'); | |
| 333 } | |
| 3029 | 334 cur = cur + 2; |
| 4793 | 335 } else if (!g_ascii_strncasecmp(cur, "U>", 2)) { |
| 3063 | 336 if (!underline) { |
| 337 underline = TRUE; | |
| 338 str = g_string_append_c(str, '\37'); | |
| 339 } | |
| 3029 | 340 cur = cur + 2; |
| 4793 | 341 } else if (!g_ascii_strncasecmp(cur, "/B>", 3)) { |
| 3063 | 342 if (bold) { |
| 343 bold = FALSE; | |
| 344 str = g_string_append_c(str, '\2'); | |
| 345 } | |
| 3029 | 346 cur = cur + 3; |
| 4793 | 347 } else if (!g_ascii_strncasecmp(cur, "/I>", 3)) { |
| 3063 | 348 if (italics) { |
| 349 italics = FALSE; | |
| 350 str = g_string_append_c(str, '\2'); | |
| 351 } | |
| 3029 | 352 cur = cur + 3; |
| 4793 | 353 } else if (!g_ascii_strncasecmp(cur, "/U>", 3)) { |
| 3063 | 354 if (underline) { |
| 355 underline = FALSE; | |
| 356 str = g_string_append_c(str, '\37'); | |
| 357 } | |
| 3029 | 358 cur = cur + 3; |
| 3063 | 359 } else { |
| 360 str = g_string_append_c(str, '<'); | |
| 3029 | 361 } |
| 4793 | 362 |
| 3029 | 363 } |
| 364 str = g_string_append(str, cur); | |
| 365 return str; | |
| 366 } | |
| 367 | |
| 3751 | 368 static GString * |
| 369 decode_html(char *msg) | |
| 2086 | 370 { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
371 GString /* oo la la */ *str = g_string_new(""); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
372 char *cur = msg, *end = msg; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
373 gboolean bold = FALSE, underline = FALSE, fg = FALSE, bg = FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
374 int fore, back; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
375 while (*end) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
376 switch (*end) { |
| 3708 | 377 case 02: /* ^B */ |
| 378 *end = 0; | |
| 379 str = g_string_append(str, cur); | |
| 380 if (bold) | |
| 381 str = g_string_append(str, "</B>"); | |
| 382 else | |
| 383 str = g_string_append(str, "<B>"); | |
| 384 bold = !bold; | |
| 385 cur = end + 1; | |
| 386 break; | |
| 387 case 03: /* ^C */ | |
| 388 *end++ = 0; | |
| 389 str = g_string_append(str, cur); | |
| 390 fore = back = -1; | |
| 391 if (isdigit(*end)) { | |
| 392 fore = *end++ - '0'; | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
393 if (isdigit(*end)) { |
| 3708 | 394 fore *= 10; |
| 395 fore += *end++ - '0'; | |
| 396 } | |
| 397 if (*end == ',' && isdigit(end[1])) { | |
| 398 end++; | |
| 399 back = *end++ - '0'; | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
400 if (isdigit(*end)) { |
| 3708 | 401 back *= 10; |
| 402 back += *end++ - '0'; | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
403 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
404 } |
| 3708 | 405 } |
| 406 if (fore == -1) { | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
407 if (fg) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
408 str = g_string_append(str, "</FONT>"); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
409 if (bg) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
410 str = g_string_append(str, "</FONT>"); |
| 3708 | 411 fg = bg = FALSE; |
| 412 } else { | |
| 413 fore %= 16; | |
| 414 if (fg) | |
| 415 str = g_string_append(str, "</FONT>"); | |
| 416 if (back != -1) { | |
| 417 if (bg) | |
| 418 str = g_string_append(str, "</FONT>"); | |
| 419 back %= 16; | |
| 420 str = g_string_append(str, "<FONT BACK="); | |
| 421 str = g_string_append(str, int_to_col(back)); | |
| 422 str = g_string_append_c(str, '>'); | |
| 423 bg = TRUE; | |
| 424 } | |
| 425 str = g_string_append(str, "<FONT COLOR="); | |
| 426 str = g_string_append(str, int_to_col(fore)); | |
| 427 str = g_string_append_c(str, '>'); | |
| 428 fg = TRUE; | |
| 429 } | |
| 430 cur = end--; | |
| 431 break; | |
| 432 case 017: /* ^O */ | |
| 433 if (!bold && !underline && !fg && !bg) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
434 break; |
| 3708 | 435 *end = 0; |
| 436 str = g_string_append(str, cur); | |
| 437 if (bold) | |
| 438 str = g_string_append(str, "</B>"); | |
| 439 if (underline) | |
| 440 str = g_string_append(str, "</U>"); | |
| 441 if (fg) | |
| 442 str = g_string_append(str, "</FONT>"); | |
| 443 if (bg) | |
| 444 str = g_string_append(str, "</FONT>"); | |
| 445 bold = underline = fg = bg = FALSE; | |
| 446 cur = end + 1; | |
| 447 break; | |
| 448 case 037: /* ^_ */ | |
| 449 *end = 0; | |
| 450 str = g_string_append(str, cur); | |
| 451 if (underline) | |
| 452 str = g_string_append(str, "</U>"); | |
| 453 else | |
| 454 str = g_string_append(str, "<U>"); | |
| 455 underline = !underline; | |
| 456 cur = end + 1; | |
| 457 break; | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
458 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
459 end++; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
460 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
461 if (*cur) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
462 str = g_string_append(str, cur); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
463 return str; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
464 } |
| 2086 | 465 |
| 3751 | 466 static void |
| 467 irc_got_im(struct gaim_connection *gc, char *who, char *what, int flags, time_t t) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
468 { |
| 3751 | 469 char *utf8 = irc_recv_convert(gc, what); |
| 470 GString *str = decode_html(utf8); | |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2847
diff
changeset
|
471 serv_got_im(gc, who, str->str, flags, t, -1); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
472 g_string_free(str, TRUE); |
| 3751 | 473 g_free(utf8); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
474 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
475 |
| 3751 | 476 static void |
| 477 dcc_chat_cancel(struct dcc_chat *); | |
| 3029 | 478 |
| 479 void | |
| 480 dcc_chat_in (gpointer data, gint source, GaimInputCondition condition) | |
| 481 { | |
| 482 struct dcc_chat *chat = data; | |
| 483 gchar buffer[IRC_BUF_LEN]; | |
| 484 gchar buf[128]; | |
| 3793 | 485 int n = 0; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
486 struct gaim_conversation *convo; |
|
5221
abe4d103e300
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
487 gaim_debug(GAIM_DEBUG_MISC, "irc", "THIS IS TOO MUCH EFFORT\n"); |
| 3029 | 488 n = read (chat->fd, buffer, IRC_BUF_LEN); |
| 3707 | 489 if (n > 0) { |
| 490 | |
| 491 buffer[n] = 0; | |
| 492 g_strstrip(buffer); | |
| 493 | |
| 494 /* Convert to HTML */ | |
| 495 if (strlen(buffer)) { | |
|
5221
abe4d103e300
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
496 gaim_debug(GAIM_DEBUG_INFO, "irc", |
|
abe4d103e300
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
497 "DCC Message from: %s\n", chat->nick); |
| 3707 | 498 irc_got_im(chat->gc, chat->nick, buffer, 0, |
| 499 time(NULL)); | |
| 500 } | |
| 501 } | |
| 3029 | 502 else { |
| 503 g_snprintf (buf, sizeof buf, _("DCC Chat with %s closed"), | |
| 504 chat->nick); | |
| 4491 | 505 convo = gaim_conversation_new(GAIM_CONV_IM, chat->gc->account, |
|
4476
62c1e5e656d0
[gaim-migrate @ 4751]
Christian Hammond <chipx86@chipx86.com>
parents:
4456
diff
changeset
|
506 chat->nick); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
507 gaim_conversation_write(convo, NULL, buf, -1, WFLAG_SYSTEM, |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
508 time(NULL)); |
| 3730 | 509 dcc_chat_cancel (chat); |
| 3029 | 510 } |
| 511 } | |
| 512 | |
| 3751 | 513 void |
| 514 irc_read_dcc_ack (gpointer data, gint source, GaimInputCondition condition) { | |
| 3708 | 515 /* Read ACK Here */ |
| 3633 | 516 |
| 3630 | 517 } |
| 518 | |
| 3751 | 519 void |
| 520 dcc_send_callback (gpointer data, gint source, GaimInputCondition condition) { | |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
521 #if 0 |
| 3708 | 522 struct irc_file_transfer *ift = data; |
| 523 struct sockaddr_in addr; | |
| 524 int len = sizeof(addr); | |
| 3622 | 525 |
| 3708 | 526 addr.sin_family = AF_INET; |
| 527 addr.sin_port = htons(ift->port); | |
| 528 addr.sin_addr.s_addr = INADDR_ANY; | |
| 3622 | 529 |
| 3708 | 530 ift->fd = accept(ift->fd, (struct sockaddr *)&addr, &len); |
| 531 if (!ift->fd) { | |
| 532 /* FIXME: Handle this gracefully XXX */ | |
| 533 printf("Something bad happened here, bubba!\n"); | |
| 534 return; | |
| 535 } | |
| 3622 | 536 |
| 3633 | 537 /* ift->awatcher = gaim_input_add(ift->fd, GAIM_INPUT_READ, irc_read_dcc_ack, ift); */ |
| 3630 | 538 |
| 3708 | 539 if (transfer_out_do(ift->xfer, ift->fd, 0)) { |
| 540 gaim_input_remove(ift->watcher); | |
| 541 ift->watcher = 0; | |
| 542 } | |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
543 #endif |
| 3616 | 544 } |
| 545 | |
| 3751 | 546 void |
| 547 dcc_chat_callback (gpointer data, gint source, GaimInputCondition condition) { | |
| 3029 | 548 struct dcc_chat *chat = data; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
549 struct gaim_conversation *convo; |
| 3029 | 550 char buf[IRC_BUF_LEN]; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
551 |
| 4491 | 552 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
|
553 |
| 3029 | 554 chat->fd = source; |
| 555 g_snprintf (buf, sizeof buf, | |
| 4221 | 556 _("DCC Chat with %s established"), |
| 3029 | 557 chat->nick); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
558 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
|
559 gaim_debug(GAIM_DEBUG_INFO, "irc", |
|
abe4d103e300
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
560 "Chat with %s established\n", chat->nick); |
| 3029 | 561 dcc_chat_list = g_slist_append (dcc_chat_list, chat); |
| 562 gaim_input_remove(chat->inpa); | |
| 563 chat->inpa = gaim_input_add(source, GAIM_INPUT_READ, dcc_chat_in, chat); | |
| 564 } | |
| 565 | |
| 3751 | 566 static void |
| 567 irc_got_chat_in(struct gaim_connection *gc, int id, char *who, int whisper, char *msg, time_t t) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
568 { |
| 3751 | 569 char *utf8 = irc_recv_convert(gc, msg); |
| 570 GString *str = decode_html(utf8); | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
571 serv_got_chat_in(gc, id, who, whisper, str->str, t); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
572 g_string_free(str, TRUE); |
| 3751 | 573 g_free(utf8); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
574 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
575 |
| 3751 | 576 static void |
| 577 handle_list(struct gaim_connection *gc, char *list) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
578 { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
579 struct irc_data *id = gc->proto_data; |
| 4793 | 580 char *tmp; |
| 4785 | 581 GaimBlistNode *gnode, *bnode; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
582 |
| 4793 | 583 tmp = g_utf8_strdown(list, -1); |
| 584 | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
585 id->str = g_string_append_c(id->str, ' '); |
| 4793 | 586 id->str = g_string_append(id->str, tmp); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
587 id->bc--; |
| 4793 | 588 g_free(tmp); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
589 if (id->bc) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
590 return; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
591 |
| 4785 | 592 |
| 593 for(gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) { | |
| 594 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
| 595 continue; | |
| 596 for(bnode = gnode->child; bnode; bnode = bnode->next) { | |
| 597 struct buddy *b = (struct buddy *)bnode; | |
| 598 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
| 599 continue; | |
| 4491 | 600 if(b->account->gc == gc) { |
| 4793 | 601 char *tmp = g_utf8_strdown(b->name, -1); |
| 4349 | 602 char *x, *l; |
| 603 x = strstr(id->str->str, tmp); | |
| 604 l = x + strlen(b->name); | |
| 605 if (x && (*l != ' ' && *l != 0)) | |
| 606 x = 0; | |
| 5068 | 607 if (!GAIM_BUDDY_IS_ONLINE(b) && x) |
| 4732 | 608 serv_got_update(gc, b->name, 1, 0, 0, 0, 0); |
| 5068 | 609 else if (GAIM_BUDDY_IS_ONLINE(b) && !x) |
| 4732 | 610 serv_got_update(gc, b->name, 0, 0, 0, 0, 0); |
| 4349 | 611 g_free(tmp); |
| 612 } | |
| 2086 | 613 } |
| 614 } | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
615 g_string_free(id->str, TRUE); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
616 id->str = g_string_new(""); |
| 2086 | 617 } |
| 618 | |
| 3751 | 619 static gboolean |
| 620 irc_request_buddy_update(gpointer data) | |
| 2086 | 621 { |
|
2137
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
622 struct gaim_connection *gc = data; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
623 struct irc_data *id = gc->proto_data; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
624 char buf[500]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
625 int n = g_snprintf(buf, sizeof(buf), "ISON"); |
|
4416
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
626 gboolean found = FALSE; |
| 2086 | 627 |
| 4785 | 628 GaimBlistNode *gnode, *bnode; |
| 629 | |
| 630 if (id->bc) | |
|
2137
18722ae5b882
[gaim-migrate @ 2147]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2131
diff
changeset
|
631 return TRUE; |
| 2086 | 632 |
| 4785 | 633 for(gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) { |
| 634 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
| 635 continue; | |
| 636 for(bnode = gnode->child; bnode; bnode = bnode->next) { | |
| 637 struct buddy *b = (struct buddy *)bnode; | |
| 638 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
| 639 continue; | |
| 4491 | 640 if(b->account->gc == gc) { |
| 4349 | 641 if (n + strlen(b->name) + 2 > sizeof(buf)) { |
| 642 g_snprintf(buf + n, sizeof(buf) - n, "\r\n"); | |
| 643 irc_write(id->fd, buf, n); | |
| 644 id->bc++; | |
| 645 n = g_snprintf(buf, sizeof(buf), "ISON"); | |
| 646 } | |
| 647 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
|
648 |
|
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
649 found = TRUE; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
650 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
651 } |
| 2086 | 652 } |
|
4416
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
653 |
|
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
654 if (found) { |
|
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
655 g_snprintf(buf + n, sizeof(buf) - n, "\r\n"); |
|
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
656 irc_write(id->fd, buf, strlen(buf)); |
|
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
657 id->bc++; |
|
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
658 } |
|
8e62cee6d738
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
659 |
|
2131
acc11216ec5d
[gaim-migrate @ 2141]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2123
diff
changeset
|
660 return TRUE; |
| 2086 | 661 } |
| 662 | |
| 3751 | 663 static void |
| 664 handle_names(struct gaim_connection *gc, char *chan, char *names) | |
| 2086 | 665 { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
666 struct gaim_conversation *c = irc_find_chat(gc, chan); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
667 struct gaim_chat *chat; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
668 char **buf, **tmp; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
669 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
670 if (!c) return; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
671 if (*names == ':') names++; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
672 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
673 chat = GAIM_CHAT(c); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
674 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
675 buf = g_strsplit(names, " ", -1); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
676 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
677 for (tmp = buf; *tmp; tmp++) |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
678 gaim_chat_add_user(chat, *tmp, NULL); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
679 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
680 g_strfreev(buf); |
| 2086 | 681 } |
| 682 | |
| 3751 | 683 static void |
| 684 handle_notopic(struct gaim_connection *gc, char *text) | |
| 3707 | 685 { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
686 struct gaim_conversation *c; |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
687 |
| 3707 | 688 if ((c = irc_find_chat(gc, text))) { |
| 689 char buf[IRC_BUF_LEN]; | |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
690 |
| 3707 | 691 g_snprintf(buf, sizeof(buf), _("No topic is set")); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
692 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
693 gaim_chat_set_topic(GAIM_CHAT(c), NULL, buf); |
| 3707 | 694 } |
| 695 } | |
| 696 | |
| 3751 | 697 static void |
| 698 handle_topic(struct gaim_connection *gc, char *text) | |
| 2086 | 699 { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
700 struct gaim_conversation *c; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
701 char *po = strchr(text, ' '); |
| 2086 | 702 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
703 if (!po) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
704 return; |
| 2086 | 705 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
706 *po = 0; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
707 po += 2; |
| 2086 | 708 |
|
2328
14c8df9cc75f
[gaim-migrate @ 2338]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2312
diff
changeset
|
709 if ((c = irc_find_chat(gc, text))) { |
|
14c8df9cc75f
[gaim-migrate @ 2338]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2312
diff
changeset
|
710 char buf[IRC_BUF_LEN]; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
711 gaim_chat_set_topic(GAIM_CHAT(c), NULL, po); |
|
2328
14c8df9cc75f
[gaim-migrate @ 2338]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2312
diff
changeset
|
712 g_snprintf(buf, sizeof(buf), _("<B>%s has changed the topic to: %s</B>"), |
| 3708 | 713 text, po); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
714 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
715 gaim_conversation_write(c, NULL, buf, -1, WFLAG_SYSTEM, time(NULL)); |
|
2328
14c8df9cc75f
[gaim-migrate @ 2338]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2312
diff
changeset
|
716 } |
| 2086 | 717 } |
| 718 | |
| 3751 | 719 static gboolean |
| 720 mode_has_arg(struct gaim_connection *gc, char sign, char mode) | |
| 2086 | 721 { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
722 struct irc_data *id = gc->proto_data; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
723 char *cm = id->chanmodes; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
724 int type = 0; |
| 2086 | 725 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
726 if (strchr(id->nickmodes, mode)) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
727 return TRUE; |
| 2086 | 728 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
729 while (*cm) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
730 if (*cm == ',') |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
731 type++; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
732 else if (*cm == mode) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
733 switch (type) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
734 case 0: |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
735 case 1: |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
736 return TRUE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
737 case 2: |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
738 if (sign == '+') |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
739 return TRUE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
740 case 3: |
|
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 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
743 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
744 cm++; |
| 2086 | 745 } |
| 746 | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
747 return FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
748 } |
| 2086 | 749 |
| 3751 | 750 static void |
| 751 irc_chan_mode(struct gaim_connection *gc, char *room, char sign, char mode, char *argstr, char *who) | |
| 3452 | 752 { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
753 struct gaim_conversation *c = irc_find_chat(gc, room); |
| 3452 | 754 char buf[IRC_BUF_LEN]; |
| 755 char *nick = g_strndup(who, strchr(who, '!') - who); | |
| 756 | |
| 4221 | 757 g_snprintf(buf, sizeof(buf), _("-:- mode/%s [%c%c %s] by %s"), |
| 3707 | 758 room, sign, mode, strlen(argstr) ? argstr : "", |
| 759 nick); | |
| 3452 | 760 g_free(nick); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
761 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
762 gaim_conversation_write(c, NULL, buf, -1, WFLAG_SYSTEM, time(NULL)); |
| 3452 | 763 } |
| 764 | |
| 3751 | 765 static void |
| 766 irc_user_mode(struct gaim_connection *gc, char *room, char sign, char mode, char *nick) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
767 { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
768 struct gaim_conversation *c = irc_find_chat(gc, room); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
769 GList *r; |
| 2086 | 770 |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
771 if (mode != 'o' && mode != 'v' && mode != 'h') |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
772 return; |
| 2086 | 773 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
774 if (!c) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
775 return; |
| 2086 | 776 |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
777 r = gaim_chat_get_users(GAIM_CHAT(c)); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
778 while (r) { |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
779 gboolean op = FALSE, halfop = FALSE, voice = FALSE; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
780 char *who = r->data; |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
781 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
782 if (*who == '@') { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
783 op = TRUE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
784 who++; |
| 2086 | 785 } |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
786 |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
787 if (*who == '%') { |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
788 halfop = TRUE; |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
789 who++; |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
790 } |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
791 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
792 if (*who == '+') { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
793 voice = TRUE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
794 who++; |
| 2086 | 795 } |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
796 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
797 if (!strcmp(who, nick)) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
798 char *tmp, buf[IRC_BUF_LEN]; |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
799 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
800 if (mode == 'o') { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
801 if (sign == '-') |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
802 op = FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
803 else |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
804 op = TRUE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
805 } |
|
4621
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 if (mode == 'h') { |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
808 if (sign == '-') |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
809 halfop = FALSE; |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
810 else |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
811 halfop = TRUE; |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
812 } |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
813 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
814 if (mode == 'v') { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
815 if (sign == '-') |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
816 voice = FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
817 else |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
818 voice = TRUE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
819 } |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
820 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
821 tmp = g_strdup(r->data); |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
822 g_snprintf(buf, sizeof(buf), "%s%s%s", |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
823 (op ? "@" : (halfop ? "%" : "")), |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
824 voice ? "+" : "", nick); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
825 gaim_chat_rename_user(GAIM_CHAT(c), tmp, buf); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
826 g_free(tmp); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
827 return; |
| 2086 | 828 } |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
829 r = r->next; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
830 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
831 } |
| 2086 | 832 |
| 3751 | 833 static void |
| 834 handle_mode(struct gaim_connection *gc, char *word[], char *word_eol[], gboolean n324) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
835 { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
836 struct irc_data *id = gc->proto_data; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
837 int offset = n324 ? 4 : 3; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
838 char *chan = word[offset]; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
839 struct gaim_conversation *c = irc_find_chat(gc, chan); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
840 char *modes = word[offset + 1]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
841 int len = strlen(word_eol[offset]) - 1; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
842 char sign = *modes++; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
843 int arg = 1; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
844 char *argstr; |
| 3452 | 845 char *who = word[1]; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
846 |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
847 if (!c) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
848 return; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
849 |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
850 if (word_eol[offset][len] == ' ') |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
851 word_eol[offset][len] = 0; |
| 2086 | 852 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
853 while (TRUE) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
854 switch (*modes) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
855 case 0: |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
856 return; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
857 case '+': |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
858 case '-': |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
859 sign = *modes; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
860 break; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
861 default: |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
862 if (mode_has_arg(gc, sign, *modes)) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
863 argstr = word[++arg + offset]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
864 else |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
865 argstr = ""; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
866 if (strchr(id->nickmodes, *modes)) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
867 irc_user_mode(gc, chan, sign, *modes, argstr); |
| 3452 | 868 else if (strchr(who, '!')) |
| 869 irc_chan_mode(gc, chan, sign, *modes, argstr, who); | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
870 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
871 modes++; |
| 2086 | 872 } |
| 873 } | |
|
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
874 |
| 3751 | 875 static void |
| 876 handle_version(struct gaim_connection *gc, char *word[], char *word_eol[], int num) | |
| 3452 | 877 { |
| 878 struct irc_data *id = gc->proto_data; | |
| 879 GString *str; | |
| 880 | |
| 881 id->liststr = g_string_new(""); | |
| 882 | |
| 883 id->liststr = g_string_append(id->liststr, "<b>Version: </b>"); | |
| 884 id->liststr = g_string_append(id->liststr, word_eol[4]); | |
| 885 | |
| 886 str = decode_html(id->liststr->str); | |
| 887 g_show_info_text(gc, NULL, 2, str->str, NULL); | |
| 888 g_string_free(str, TRUE); | |
| 889 g_string_free(id->liststr, TRUE); | |
| 890 id->liststr = NULL; | |
| 891 } | |
| 892 | |
| 3751 | 893 static void |
| 894 handle_who(struct gaim_connection *gc, char *word[], char *word_eol[], int num) | |
| 3452 | 895 { |
| 896 struct irc_data *id = gc->proto_data; | |
| 897 char buf[IRC_BUF_LEN]; | |
| 898 | |
| 899 if (!id->in_whois) { | |
| 900 id->in_whois = TRUE; | |
| 901 id->liststr = g_string_new(""); | |
| 902 } | |
| 903 | |
| 904 switch (num) { | |
| 905 case 352: | |
| 906 g_snprintf(buf, sizeof(buf), "<b>%s</b> (%s@%s): %s<br>", | |
| 907 word[8], word[5], word[6], word_eol[11]); | |
| 908 id->liststr = g_string_append(id->liststr, buf); | |
| 909 break; | |
| 910 } | |
| 911 } | |
| 912 | |
| 2648 | 913 /* Handle our whois stuff here. You know what, I have a sore throat. You know |
| 914 * what I think about that? I'm not too pleased with it. Perhaps I should take | |
| 915 * some medicine, or perhaps I should go to bed? Blah!! */ | |
| 916 | |
| 3751 | 917 static void |
| 918 handle_whois(struct gaim_connection *gc, char *word[], char *word_eol[], int num) | |
| 2648 | 919 { |
| 920 struct irc_data *id = gc->proto_data; | |
| 921 char tmp[1024]; | |
| 922 | |
| 923 if (!id->in_whois) { | |
| 924 id->in_whois = TRUE; | |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
925 id->liststr = g_string_new(""); |
| 2648 | 926 } else { |
| 927 /* 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
|
928 id->liststr = g_string_append(id->liststr, "<BR>"); |
| 2648 | 929 id->in_whois = TRUE; |
| 930 } | |
| 931 | |
| 932 switch (num) { | |
| 3707 | 933 case 311: |
| 5236 | 934 g_snprintf(tmp, sizeof(tmp), "<b>%s: </b>", _("User")); |
| 935 id->liststr = g_string_append(id->liststr, tmp); | |
| 3707 | 936 break; |
| 937 case 312: | |
| 5236 | 938 g_snprintf(tmp, sizeof(tmp), "<b>%s: </b>", _("Server")); |
| 939 id->liststr = g_string_append(id->liststr, tmp); | |
| 3707 | 940 break; |
| 941 case 313: | |
| 5236 | 942 g_snprintf(tmp, sizeof(tmp), "<b>%s:</b> %s ", _("IRC Operator"), word[4]); |
| 3707 | 943 id->liststr = g_string_append(id->liststr, tmp); |
| 944 break; | |
| 945 case 314: | |
| 5236 | 946 g_snprintf(tmp, sizeof(tmp), "<b>%s: </b><b>%s</b> (%s@%s) %s", |
| 947 _("User"), word[4], word[5], word[6], word_eol[8]); | |
| 3707 | 948 id->liststr = g_string_append(id->liststr, tmp); |
| 949 return; | |
| 950 case 317: | |
| 5236 | 951 g_snprintf(tmp, sizeof(tmp), "<b>%s: </b>", _("Idle Time")); |
| 952 id->liststr = g_string_append(id->liststr, tmp); | |
| 3707 | 953 break; |
| 954 case 319: | |
| 5236 | 955 g_snprintf(tmp, sizeof(tmp), "<b>%s: </b>", _("Channels")); |
| 956 id->liststr = g_string_append(id->liststr, tmp); | |
| 3707 | 957 break; |
|
4509
cf2f5a1f1e46
[gaim-migrate @ 4785]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
958 /* Numeric 320 is used by the freenode irc network for showing |
|
cf2f5a1f1e46
[gaim-migrate @ 4785]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
959 * 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
|
960 case 320: |
| 5236 | 961 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
|
962 id->liststr = g_string_append(id->liststr, tmp); |
|
cf2f5a1f1e46
[gaim-migrate @ 4785]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
963 return; |
| 3707 | 964 default: |
| 965 break; | |
| 2648 | 966 } |
| 3452 | 967 |
|
2651
f84dcbcfba4b
[gaim-migrate @ 2664]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2650
diff
changeset
|
968 if (word_eol[5][0] == ':') |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
969 id->liststr = g_string_append(id->liststr, word_eol[5] + 1); |
| 3452 | 970 /* Nicer idle time output, by jonas@birme.se */ |
| 971 else if (isdigit(word_eol[5][0])) { | |
| 972 time_t idle = atol(word_eol[5]); | |
| 973 time_t signon = atol(strchr(word_eol[5], ' ')); | |
| 974 | |
| 975 g_snprintf(tmp, sizeof(tmp), | |
| 5236 | 976 _("%ld seconds [signon: %s]"), (idle / 1000), ctime(&signon)); |
| 3452 | 977 id->liststr = g_string_append(id->liststr, tmp); |
| 978 } | |
|
2651
f84dcbcfba4b
[gaim-migrate @ 2664]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2650
diff
changeset
|
979 else |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
980 id->liststr = g_string_append(id->liststr, word_eol[5]); |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
981 } |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
982 |
| 3751 | 983 static void |
| 984 handle_roomlist(struct gaim_connection *gc, char *word[], char *word_eol[]) | |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
985 { |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
986 struct irc_data *id = gc->proto_data; |
| 2648 | 987 |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
988 if (!id->in_list) { |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
989 id->in_list = TRUE; |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
990 id->liststr = g_string_new(""); |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
991 } else { |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
992 id->liststr = g_string_append(id->liststr, "<BR>"); |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
993 id->in_list = TRUE; |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
994 } |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
995 |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
996 id->liststr = g_string_append(id->liststr, word_eol[4]); |
| 2648 | 997 } |
| 998 | |
| 3751 | 999 static void |
| 1000 irc_change_nick(void *a, char *b) { | |
| 3511 | 1001 struct gaim_connection *gc = a; |
| 1002 struct irc_data *id = gc->proto_data; | |
| 1003 char buf[IRC_BUF_LEN]; | |
| 1004 g_snprintf(buf, sizeof(buf), "NICK %s\r\n", b); | |
| 1005 irc_write(id->fd, buf, strlen(buf)); | |
| 5150 | 1006 g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", b); |
| 3511 | 1007 } |
| 1008 | |
| 3751 | 1009 static void |
| 1010 process_numeric(struct gaim_connection *gc, char *word[], char *word_eol[]) | |
| 2086 | 1011 { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1012 struct irc_data *id = gc->proto_data; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1013 char *text = word_eol[3]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1014 int n = atoi(word[2]); |
| 5236 | 1015 char tmp[1024]; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1016 |
| 4793 | 1017 if (!g_ascii_strncasecmp(gc->displayname, text, strlen(gc->displayname))) |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1018 text += strlen(gc->displayname) + 1; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1019 if (*text == ':') |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1020 text++; |
| 2086 | 1021 |
| 3707 | 1022 /* RPL_ and ERR_ */ |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1023 switch (n) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1024 case 4: |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1025 if (!strncmp(word[5], "u2.10", 5)) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1026 id->six_modes = TRUE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1027 else |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1028 id->six_modes = FALSE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1029 break; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1030 case 5: |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1031 handle_005(gc, word, word_eol); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1032 break; |
| 3707 | 1033 case 301: /* RPL_AWAY */ |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
1034 if (id->in_whois) { |
| 5236 | 1035 g_snprintf(tmp, sizeof(tmp), "<BR><b>%s: </b>", _("Away")); |
| 1036 id->liststr = g_string_append(id->liststr, tmp); | |
|
2651
f84dcbcfba4b
[gaim-migrate @ 2664]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2650
diff
changeset
|
1037 |
|
f84dcbcfba4b
[gaim-migrate @ 2664]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2650
diff
changeset
|
1038 if (word_eol[5][0] == ':') |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1039 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
|
1040 else |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1041 id->liststr = g_string_append(id->liststr, word_eol[5]); |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
1042 } else |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
1043 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
|
1044 break; |
| 3707 | 1045 case 303: /* RPL_ISON */ |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1046 handle_list(gc, &word_eol[4][1]); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1047 break; |
| 3707 | 1048 case 311: /* RPL_WHOISUSER */ |
| 1049 case 312: /* RPL_WHOISSERVER */ | |
| 1050 case 313: /* RPL_WHOISOPERATOR */ | |
| 1051 case 314: /* RPL_WHOWASUSER */ | |
| 1052 case 317: /* RPL_WHOISIDLE */ | |
| 1053 case 319: /* RPL_WHOISCHANNELS */ | |
|
4509
cf2f5a1f1e46
[gaim-migrate @ 4785]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
1054 case 320: /* FreeNode Identified */ |
| 2648 | 1055 handle_whois(gc, word, word_eol, n); |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
1056 break; |
| 3707 | 1057 case 322: /* RPL_LIST */ |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1058 handle_roomlist(gc, word, word_eol); |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1059 break; |
| 3707 | 1060 case 315: /* RPL_ENDOFWHO */ |
| 1061 case 318: /* RPL_ENDOFWHOIS */ | |
| 1062 case 323: /* RPL_LISTEND */ | |
| 1063 case 369: /* RPL_ENDOFWHOWAS */ | |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1064 if ((id->in_whois || id->in_list) && id->liststr) { |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1065 GString *str = decode_html(id->liststr->str); |
|
2791
8f6365332a05
[gaim-migrate @ 2804]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2782
diff
changeset
|
1066 g_show_info_text(gc, NULL, 2, str->str, NULL); |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
1067 g_string_free(str, TRUE); |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1068 g_string_free(id->liststr, TRUE); |
|
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1069 id->liststr = NULL; |
|
2652
65a602693286
[gaim-migrate @ 2665]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2651
diff
changeset
|
1070 id->in_whois = FALSE; |
|
2829
e3f98544eae0
[gaim-migrate @ 2842]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
1071 id->in_list = FALSE; |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
1072 } |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
1073 break; |
| 3707 | 1074 case 324: /* RPL_CHANNELMODEIS */ |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1075 handle_mode(gc, word, word_eol, TRUE); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1076 break; |
| 3707 | 1077 case 331: /* RPL_NOTOPIC */ |
| 1078 handle_notopic(gc, text); | |
| 1079 break; | |
| 1080 case 332: /* RPL_TOPIC */ | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1081 handle_topic(gc, text); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1082 break; |
| 3707 | 1083 case 351: /* RPL_VERSION */ |
| 3452 | 1084 handle_version(gc, word, word_eol, n); |
| 1085 break; | |
| 3707 | 1086 case 352: /* RPL_WHOREPLY */ |
| 3708 | 1087 handle_who(gc, word, word_eol, n); |
| 1088 break; | |
| 3707 | 1089 case 353: /* RPL_NAMREPLY */ |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1090 handle_names(gc, word[5], word_eol[6]); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1091 break; |
| 3707 | 1092 case 376: /* RPL_ENDOFMOTD */ |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1093 irc_request_buddy_update(gc); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1094 break; |
| 3707 | 1095 case 382: /* RPL_REHASHING */ |
| 1096 do_error_dialog(_("Rehashing server"), _("IRC Operator"), GAIM_ERROR); | |
| 1097 break; | |
| 1098 case 401: /* ERR_NOSUCHNICK */ | |
| 1099 do_error_dialog(_("No such nick/channel"), _("IRC Error"), GAIM_ERROR); | |
|
2652
65a602693286
[gaim-migrate @ 2665]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2651
diff
changeset
|
1100 break; |
| 3707 | 1101 case 402: /* ERR_NOSUCHSERVER */ |
| 1102 do_error_dialog(_("No such server"), _("IRC Error"), GAIM_ERROR); | |
| 4995 | 1103 break; |
| 1104 case 422: /* ERR_NOMOTD */ | |
| 1105 break; /* drop it - bringing up dialog for NOMOTD is annoying */ | |
| 3707 | 1106 case 431: /* ERR_NONICKNAMEGIVEN */ |
| 1107 do_error_dialog(_("No nickname given"), _("IRC Error"), GAIM_ERROR); | |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
1108 break; |
| 3707 | 1109 case 481: /* ERR_NOPRIVILEGES */ |
| 1110 do_error_dialog(_("You're not an IRC operator!"), _("IRC Error"), GAIM_ERROR); | |
| 1111 break; | |
| 3511 | 1112 case 433: |
| 1113 do_prompt_dialog(_("That nick is already in use. Please enter a new nick"), gc->displayname, gc, irc_change_nick, NULL); | |
| 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, ':'); | |
| 1120 g_snprintf(errmsg, sizeof(errmsg), "IRC Error %d", n); | |
| 1121 if (errmsg) | |
| 3536 | 1122 do_error_dialog(errmsg, errmsg1 ? errmsg1+1 : NULL, GAIM_ERROR); |
| 3452 | 1123 } |
| 1124 break; | |
| 2086 | 1125 } |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1126 } |
| 2086 | 1127 |
| 3751 | 1128 static gboolean |
| 5136 | 1129 is_channel(struct gaim_connection *gc, const char *name) |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1130 { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1131 struct irc_data *id = gc->proto_data; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1132 if (strchr(id->chantypes, *name)) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1133 return TRUE; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1134 return FALSE; |
| 2086 | 1135 } |
| 1136 | |
| 3751 | 1137 static void |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1138 irc_rem_chat_bud(struct gaim_connection *gc, char *nick, struct gaim_conversation *b, char *reason) |
| 2086 | 1139 { |
| 1140 | |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1141 struct gaim_chat *chat; |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1142 |
| 4067 | 1143 if (b) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1144 GList *r; |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1145 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1146 chat = GAIM_CHAT(b); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1147 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1148 r = gaim_chat_get_users(chat); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1149 |
| 4067 | 1150 while (r) { |
| 1151 char *who = r->data; | |
| 1152 if (*who == '@') | |
| 1153 who++; | |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
1154 if (*who == '%') |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
1155 who++; |
| 4067 | 1156 if (*who == '+') |
| 1157 who++; | |
| 4793 | 1158 if (!gaim_utf8_strcasecmp(who, nick)) { |
| 4067 | 1159 char *tmp = g_strdup(r->data); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1160 gaim_chat_remove_user(chat, tmp, reason); |
| 4067 | 1161 g_free(tmp); |
| 1162 break; | |
| 1163 } | |
| 1164 r = r->next; | |
| 4065 | 1165 } |
| 4067 | 1166 } else { |
| 1167 GSList *bcs = gc->buddy_chats; | |
| 1168 while (bcs) { | |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1169 struct gaim_conversation *bc = bcs->data; |
| 4067 | 1170 irc_rem_chat_bud(gc, nick, bc, reason); |
| 1171 bcs = bcs->next; | |
| 1172 } | |
| 2086 | 1173 } |
| 1174 } | |
| 1175 | |
| 3751 | 1176 static void |
| 1177 irc_change_name(struct gaim_connection *gc, char *old, char *new) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1178 { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1179 GSList *bcs = gc->buddy_chats; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1180 char buf[IRC_BUF_LEN]; |
| 2086 | 1181 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1182 while (bcs) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1183 struct gaim_conversation *b = bcs->data; |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1184 struct gaim_chat *chat; |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1185 GList *r; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1186 |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1187 chat = GAIM_CHAT(b); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1188 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1189 r = gaim_chat_get_users(chat); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1190 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1191 while (r) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1192 char *who = r->data; |
|
2292
6625d0755c51
[gaim-migrate @ 2302]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2291
diff
changeset
|
1193 int n = 0; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1194 if (*who == '@') |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1195 buf[n++] = *who++; |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
1196 if (*who == '%') |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
1197 buf[n++] = *who++; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1198 if (*who == '+') |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1199 buf[n++] = *who++; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1200 g_snprintf(buf + n, sizeof(buf) - n, "%s", new); |
|
2312
766603034af8
[gaim-migrate @ 2322]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2310
diff
changeset
|
1201 if (!strcmp(who, old)) { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1202 char *tmp = g_strdup(r->data); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1203 gaim_chat_rename_user(chat, tmp, buf); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1204 r = gaim_chat_get_users(chat); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1205 g_free(tmp); |
|
2725
f3c094e78609
[gaim-migrate @ 2738]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2687
diff
changeset
|
1206 break; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1207 } else |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1208 r = r->next; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1209 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1210 bcs = bcs->next; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1211 } |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1212 } |
| 2086 | 1213 |
| 3751 | 1214 static void |
| 1215 handle_privmsg(struct gaim_connection *gc, char *to, char *nick, char *msg) | |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1216 { |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1217 if (is_channel(gc, to)) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1218 struct gaim_conversation *c = irc_find_chat(gc, to); |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1219 if (!c) |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1220 return; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1221 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
|
1222 nick, 0, msg, time(NULL)); |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1223 } else { |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1224 char *tmp = g_malloc(strlen(nick) + 2); |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1225 g_snprintf(tmp, strlen(nick) + 2, "@%s", nick); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1226 if (gaim_find_conversation(tmp)) |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1227 irc_got_im(gc, tmp, msg, 0, time(NULL)); |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1228 else { |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1229 *tmp = '+'; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1230 if (gaim_find_conversation(tmp)) |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1231 irc_got_im(gc, tmp, msg, 0, time(NULL)); |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1232 else |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1233 irc_got_im(gc, nick, msg, 0, time(NULL)); |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1234 } |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1235 g_free(tmp); |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1236 } |
|
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 |
| 3751 | 1239 static void |
| 1240 dcc_chat_init(struct dcc_chat *data) { | |
| 4249 | 1241 if (g_slist_find(connections, data->gc)) { |
| 4634 | 1242 proxy_connect(data->gc->account, data->ip_address, data->port, dcc_chat_callback, data); |
| 4249 | 1243 } else { |
| 1244 g_free(data); | |
| 1245 } | |
| 3029 | 1246 } |
| 1247 | |
| 3751 | 1248 static void |
| 1249 dcc_chat_cancel(struct dcc_chat *data){ | |
| 4249 | 1250 if (g_slist_find(connections, data->gc) && find_dcc_chat(data->gc, data->nick)) { |
| 3029 | 1251 dcc_chat_list = g_slist_remove(dcc_chat_list, data); |
| 1252 gaim_input_remove (data->inpa); | |
| 1253 close (data->fd); | |
| 1254 } | |
| 1255 g_free(data); | |
| 1256 } | |
| 1257 | |
| 3751 | 1258 static void |
| 1259 irc_convo_closed(struct gaim_connection *gc, char *who) | |
| 3029 | 1260 { |
| 1261 struct dcc_chat *dchat = find_dcc_chat(gc, who); | |
| 1262 if (!dchat) | |
| 1263 return; | |
| 1264 | |
| 3730 | 1265 dcc_chat_cancel(dchat); |
| 3029 | 1266 } |
| 1267 | |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1268 static void |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1269 irc_xfer_init(struct gaim_xfer *xfer) |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1270 { |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1271 struct irc_xfer_data *data = (struct irc_xfer_data *)xfer->data; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1272 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1273 gaim_xfer_start(xfer, -1, data->ip, data->port); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1274 } |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1275 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1276 static void |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1277 irc_xfer_end(struct gaim_xfer *xfer) |
|
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 struct irc_xfer_data *data = (struct irc_xfer_data *)xfer->data; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1280 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1281 data->idata->file_transfers = g_slist_remove(data->idata->file_transfers, |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1282 xfer); |
|
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 g_free(data); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1285 xfer->data = NULL; |
|
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 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1288 static void |
|
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1289 irc_xfer_cancel_send(struct gaim_xfer *xfer) |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1290 { |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1291 struct irc_xfer_data *data = (struct irc_xfer_data *)xfer->data; |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1292 |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1293 data->idata->file_transfers = g_slist_remove(data->idata->file_transfers, |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1294 xfer); |
|
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 g_free(data); |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1297 xfer->data = NULL; |
|
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 |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1300 static void |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1301 irc_xfer_cancel_recv(struct gaim_xfer *xfer) |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1302 { |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1303 struct irc_xfer_data *data = (struct irc_xfer_data *)xfer->data; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1304 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1305 data->idata->file_transfers = g_slist_remove(data->idata->file_transfers, |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1306 xfer); |
|
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 g_free(data); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1309 xfer->data = NULL; |
|
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 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1312 static void |
| 4594 | 1313 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
|
1314 { |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1315 guint32 pos; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1316 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1317 pos = htonl(gaim_xfer_get_bytes_sent(xfer)); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1318 |
|
4552
a2f2a717fdf2
[gaim-migrate @ 4832]
Christian Hammond <chipx86@chipx86.com>
parents:
4514
diff
changeset
|
1319 write(xfer->fd, (char *)&pos, 4); |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1320 } |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1321 |
|
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1322 /* NOTE: This was taken from irssi. Thanks irssi! */ |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1323 |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1324 static gboolean |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1325 is_numeric(const char *str, char end_char) |
|
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 g_return_val_if_fail(str != NULL, FALSE); |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1328 |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1329 if (*str == '\0' || *str == end_char) |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1330 return 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 while (*str != '\0' && *str != end_char) { |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1333 if (*str < '0' || *str > '9') |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1334 return FALSE; |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1335 |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1336 str++; |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1337 } |
|
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 return TRUE; |
|
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 #define get_params_match(params, pos) \ |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1343 (is_numeric(params[pos], '\0') && \ |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1344 is_numeric(params[(pos)+1], '\0') && atol(params[(pos)+1]) < 65536 && \ |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1345 is_numeric(params[(pos)+2], '\0')) |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1346 |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1347 /* Return number of parameters in `params' that belong to file name. |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1348 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
|
1349 adding some extension where there could be more parameters after |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1350 file size. |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1351 |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1352 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
|
1353 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
|
1354 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
|
1355 without any quotes. */ |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1356 static int |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1357 get_file_params_count(char **params, int paramcount) |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1358 { |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1359 int pos, best; |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1360 |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1361 if (*params[0] == '"') { |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1362 /* quoted file name? */ |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1363 for (pos = 0; pos < paramcount - 3; pos++) { |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1364 if (params[pos][strlen(params[pos]) - 1] == '"' && |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1365 get_params_match(params, pos + 1)) { |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1366 |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1367 return pos + 1; |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1368 } |
|
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 } |
|
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 best = paramcount - 3; |
|
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 for (pos = paramcount - 3; pos > 0; pos--) { |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1375 if (get_params_match(params, pos)) |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1376 best = pos; |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1377 } |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1378 |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1379 return best; |
|
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 |
| 3751 | 1382 static void |
| 1383 handle_ctcp(struct gaim_connection *gc, char *to, char *nick, | |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1384 char *msg, char *word[], char *word_eol[]) |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1385 { |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1386 struct irc_data *id = gc->proto_data; |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1387 char buf[IRC_BUF_LEN]; |
| 3735 | 1388 char out[IRC_BUF_LEN]; |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1389 |
| 4793 | 1390 if (!g_ascii_strncasecmp(msg, "VERSION", 7)) { |
| 3735 | 1391 g_snprintf(buf, sizeof(buf), "\001VERSION Gaim " VERSION ": The Penguin Pimpin' " |
| 1392 "Multi-protocol Messaging Client: " WEBSITE "\001"); | |
| 1393 irc_send_notice (gc, nick, buf); | |
| 1394 g_snprintf(out, sizeof(out), ">> CTCP VERSION requested from %s", nick); | |
| 1395 do_error_dialog(out, _("IRC CTCP info"), GAIM_INFO); | |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1396 } |
|
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1397 else if (!g_ascii_strncasecmp(msg, "CLIENTINFO", 10)) { |
| 3735 | 1398 g_snprintf(buf, sizeof(buf), "\001CLIENTINFO USERINFO CLIENTINFO VERSION\001"); |
| 1399 irc_send_notice (gc, nick, buf); | |
| 1400 g_snprintf(out, sizeof(out), ">> CTCP CLIENTINFO requested from %s", nick); | |
| 1401 do_error_dialog(out, _("IRC CTCP info"), GAIM_INFO); | |
| 3707 | 1402 } |
|
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1403 else if (!g_ascii_strncasecmp(msg, "USERINFO", 8)) { |
| 4491 | 1404 g_snprintf(buf, sizeof(buf), "\001USERINFO Alias: %s\001", gc->account->alias); |
| 3735 | 1405 irc_send_notice (gc, nick, buf); |
| 1406 g_snprintf(out, sizeof(out), ">> CTCP USERINFO requested from %s", nick); | |
| 1407 do_error_dialog(out, _("IRC CTCP info"), GAIM_INFO); | |
| 3707 | 1408 } |
|
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1409 else if (!g_ascii_strncasecmp(msg, "ACTION", 6)) { |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1410 char *po = strchr(msg + 6, 1); |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1411 char *tmp; |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1412 if (po) *po = 0; |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1413 tmp = g_strconcat("/me", msg + 6, NULL); |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1414 handle_privmsg(gc, to, nick, tmp); |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1415 g_free(tmp); |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1416 } |
|
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1417 else if (!g_ascii_strncasecmp(msg, "PING", 4)) { |
| 4793 | 1418 g_snprintf(buf, sizeof(buf), "\001%s\001", msg); |
| 3735 | 1419 irc_send_notice (gc, nick, buf); |
| 1420 g_snprintf(out, sizeof(out), ">> CTCP PING requested from %s", nick); | |
| 4793 | 1421 do_error_dialog(out, _("IRC CTCP info"), GAIM_INFO); |
| 3735 | 1422 } |
|
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1423 else if (!g_ascii_strncasecmp(msg, "DCC CHAT", 8)) { |
| 3029 | 1424 char **chat_args = g_strsplit(msg, " ", 5); |
| 1425 char ask[1024]; | |
| 3707 | 1426 struct dcc_chat *dccchat = g_new0(struct dcc_chat, 1); |
| 3029 | 1427 dccchat->gc = gc; |
| 1428 g_snprintf(dccchat->ip_address, sizeof(dccchat->ip_address), chat_args[3]); | |
| 1429 dccchat->port=atoi(chat_args[4]); | |
| 1430 g_snprintf(dccchat->nick, sizeof(dccchat->nick), nick); | |
| 3730 | 1431 g_snprintf(ask, sizeof(ask), _("%s would like to establish a DCC chat"), nick); |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
1432 do_ask_dialog(ask, _("This requires a direct connection to be established between the two computers. Messages sent will not pass through the IRC server"), dccchat, _("Connect"), dcc_chat_init, _("Cancel"), dcc_chat_cancel, my_protocol->handle, FALSE); |
| 3029 | 1433 } |
|
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1434 else if (!g_ascii_strncasecmp(msg, "DCC SEND", 8)) { |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1435 struct gaim_xfer *xfer; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1436 char **send_args; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1437 char *ip, *filename; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1438 struct irc_xfer_data *xfer_data; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1439 size_t size; |
|
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1440 int param_count, file_params, len; |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1441 int port; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1442 |
|
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1443 /* Okay, this is ugly, but should get us past "DCC SEND" */ |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1444 msg = strstr(msg, "DCC SEND"); |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1445 msg = strchr(msg, ' ') + 1; |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1446 msg = strchr(msg, ' ') + 1; |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1447 |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1448 /* SEND <file name> <address> <port> <size> [...] */ |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1449 send_args = g_strsplit(msg, " ", -1); |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1450 |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1451 for (param_count = 0; send_args[param_count] != NULL; param_count++) |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1452 ; |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1453 |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1454 if (param_count < 4) { |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1455 char buf[IRC_BUF_LEN]; |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1456 |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1457 g_snprintf(buf, sizeof(buf), |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1458 _("Received an invalid file send request from %s."), |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1459 nick); |
|
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 do_error_dialog(buf, _("IRC Error"), GAIM_ERROR); |
|
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 return; |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1464 } |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1465 |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1466 file_params = get_file_params_count(send_args, param_count); |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1467 |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1468 /* send_args[paramcount - 1][strlen(send_args[5])-1] = 0; */ |
| 3616 | 1469 |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1470 /* Give these better names. */ |
|
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1471 ip = send_args[file_params]; |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1472 port = atoi(send_args[file_params + 1]); |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1473 size = atoi(send_args[file_params + 2]); |
|
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 send_args[file_params] = NULL; |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1476 |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1477 filename = g_strjoinv(" ", send_args); |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1478 |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1479 g_strfreev(send_args); |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1480 |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1481 len = strlen(filename); |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1482 |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1483 if (len > 1 && *filename == '"' && filename[len - 1] == '"') { |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1484 /* "file name" - MIRC sends filenames with spaces like this */ |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1485 filename[len - 1] = '\0'; |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1486 g_memmove(filename, filename + 1, len); |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1487 } |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1488 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1489 /* Setup the IRC-specific transfer data. */ |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1490 xfer_data = g_malloc0(sizeof(struct irc_xfer_data)); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1491 xfer_data->ip = ip; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1492 xfer_data->port = port; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1493 xfer_data->idata = id; |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1494 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1495 /* Build the file transfer handle. */ |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1496 xfer = gaim_xfer_new(gc->account, GAIM_XFER_RECEIVE, nick); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1497 xfer->data = xfer_data; |
|
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 /* Set the info about the incoming file. */ |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1500 gaim_xfer_set_filename(xfer, filename); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1501 gaim_xfer_set_size(xfer, size); |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1502 |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1503 g_free(filename); |
|
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 /* Setup our I/O op functions. */ |
|
4675
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1506 gaim_xfer_set_init_fnc(xfer, irc_xfer_init); |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1507 gaim_xfer_set_end_fnc(xfer, irc_xfer_end); |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1508 gaim_xfer_set_cancel_send_fnc(xfer, irc_xfer_cancel_send); |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1509 gaim_xfer_set_cancel_recv_fnc(xfer, irc_xfer_cancel_recv); |
|
3145c5c45877
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1510 gaim_xfer_set_ack_fnc(xfer, irc_xfer_ack); |
| 3616 | 1511 |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1512 /* Keep track of this transfer for later. */ |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1513 id->file_transfers = g_slist_append(id->file_transfers, xfer); |
|
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 /* Now perform the request! */ |
|
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1516 gaim_xfer_request(xfer); |
| 3616 | 1517 } |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1518 } |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1519 |
| 3751 | 1520 static gboolean |
| 1521 irc_parse(struct gaim_connection *gc, char *buf) | |
| 2086 | 1522 { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1523 struct irc_data *idata = gc->proto_data; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1524 gchar outbuf[IRC_BUF_LEN]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1525 char *word[PDIWORDS], *word_eol[PDIWORDS]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1526 char pdibuf[522]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1527 char *ex, ip[128], nick[128]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1528 char *cmd; |
| 2086 | 1529 |
| 1530 /* Check for errors */ | |
| 3452 | 1531 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1532 if (*buf != ':') { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1533 if (!strncmp(buf, "NOTICE ", 7)) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1534 buf += 7; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1535 if (!strncmp(buf, "PING ", 5)) { |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1536 int r = FALSE; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1537 g_snprintf(outbuf, sizeof(outbuf), "PONG %s\r\n", buf + 5); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1538 if (irc_write(idata->fd, outbuf, strlen(outbuf)) < 0) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1539 hide_login_progress(gc, _("Unable to write")); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1540 signoff(gc); |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1541 r = TRUE; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1542 } |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1543 return r; |
| 2086 | 1544 } |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1545 /* XXX doesn't handle ERROR */ |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1546 return FALSE; |
| 2086 | 1547 } |
| 1548 | |
|
2782
428bd24c18c6
[gaim-migrate @ 2795]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
1549 if (!idata->online) { |
|
428bd24c18c6
[gaim-migrate @ 2795]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
1550 /* Now lets sign ourselves on */ |
|
428bd24c18c6
[gaim-migrate @ 2795]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
1551 account_online(gc); |
|
428bd24c18c6
[gaim-migrate @ 2795]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
1552 serv_finish_login(gc); |
|
428bd24c18c6
[gaim-migrate @ 2795]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
1553 |
|
428bd24c18c6
[gaim-migrate @ 2795]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
1554 /* 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
|
1555 idata->timer = g_timeout_add(20000, irc_request_buddy_update, gc); |
|
428bd24c18c6
[gaim-migrate @ 2795]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
1556 idata->online = TRUE; |
|
428bd24c18c6
[gaim-migrate @ 2795]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
1557 } |
|
428bd24c18c6
[gaim-migrate @ 2795]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
1558 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1559 buf++; |
| 2086 | 1560 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1561 process_data_init(pdibuf, buf, word, word_eol, FALSE); |
| 2086 | 1562 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1563 if (atoi(word[2])) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1564 if (*word_eol[3]) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1565 process_numeric(gc, word, word_eol); |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1566 return FALSE; |
| 2086 | 1567 } |
| 1568 | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1569 cmd = word[2]; |
| 2086 | 1570 |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1571 ex = strchr(pdibuf, '!'); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1572 if (!ex) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1573 strncpy(ip, pdibuf, sizeof(ip)); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1574 ip[sizeof(ip)-1] = 0; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1575 strncpy(nick, pdibuf, sizeof(nick)); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1576 nick[sizeof(nick)-1] = 0; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1577 } else { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1578 strncpy(ip, ex + 1, sizeof(ip)); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1579 ip[sizeof(ip)-1] = 0; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1580 strncpy(nick, pdibuf, sizeof(nick)); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1581 nick[sizeof(nick)-1] = 0; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1582 if ((ex - pdibuf) < sizeof (nick)) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1583 nick[ex - pdibuf] = 0; /* cut the buffer at the '!' */ |
| 2086 | 1584 } |
| 1585 | |
|
2847
e49bd1479edd
[gaim-migrate @ 2860]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2831
diff
changeset
|
1586 if (!strcmp(cmd, "INVITE")) { |
| 5234 | 1587 GHashTable *components = g_hash_table_new_full(g_str_hash, g_str_equal, |
| 1588 g_free, g_free); | |
| 1589 | |
| 1590 g_hash_table_replace(components, g_strdup("channel"), g_strdup(word[4])); | |
| 1591 | |
| 1592 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
|
1593 } else if (!strcmp(cmd, "JOIN")) { |
| 3751 | 1594 irc_parse_join(gc, nick, word, word_eol); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1595 } else if (!strcmp(cmd, "KICK")) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1596 if (!strcmp(gc->displayname, word[4])) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1597 struct gaim_conversation *c = irc_find_chat(gc, word[3]); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1598 if (!c) |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1599 return FALSE; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1600 gc->buddy_chats = g_slist_remove(gc->buddy_chats, c); |
| 4491 | 1601 gaim_conversation_set_account(c, NULL); |
| 3707 | 1602 g_snprintf(outbuf, sizeof(outbuf), _("You have been kicked from %s: %s"), |
| 1603 word[3], *word_eol[5] == ':' ? word_eol[5] + 1 : word_eol[5]); | |
| 1604 do_error_dialog(outbuf, _("IRC Error"), GAIM_ERROR); | |
|
2820
b917845dad3c
[gaim-migrate @ 2833]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2801
diff
changeset
|
1605 } else { |
|
b917845dad3c
[gaim-migrate @ 2833]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2801
diff
changeset
|
1606 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
|
1607 char *msg = g_strdup_printf(_("Kicked by %s: %s"), nick, reason); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1608 struct gaim_conversation *c = irc_find_chat(gc, word[3]); |
| 4065 | 1609 irc_rem_chat_bud(gc, word[4], c, msg); |
|
2820
b917845dad3c
[gaim-migrate @ 2833]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2801
diff
changeset
|
1610 g_free(msg); |
|
b917845dad3c
[gaim-migrate @ 2833]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2801
diff
changeset
|
1611 } |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1612 } else if (!strcmp(cmd, "KILL")) { /* */ |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1613 } else if (!strcmp(cmd, "MODE")) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1614 handle_mode(gc, word, word_eol, FALSE); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1615 } else if (!strcmp(cmd, "NICK")) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1616 char *new = *word_eol[3] == ':' ? word_eol[3] + 1 : word_eol[3]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1617 if (!strcmp(gc->displayname, nick)) |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1618 g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", new); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1619 irc_change_name(gc, nick, new); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1620 } else if (!strcmp(cmd, "NOTICE")) { |
| 3751 | 1621 irc_parse_notice(gc, nick, ex, word, word_eol); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1622 } else if (!strcmp(cmd, "PART")) { |
| 3751 | 1623 if (!irc_parse_part(gc, nick, cmd, word, word_eol)) |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1624 return FALSE; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1625 } else if (!strcmp(cmd, "PRIVMSG")) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1626 char *to, *msg; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1627 if (!*word[3]) |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1628 return FALSE; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1629 to = word[3]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1630 msg = *word_eol[4] == ':' ? word_eol[4] + 1 : word_eol[4]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1631 if (msg[0] == 1 && msg[strlen (msg) - 1] == 1) { /* ctcp */ |
| 4793 | 1632 if (!g_ascii_strncasecmp(msg + 1, "DCC ", 4)) |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1633 process_data_init(pdibuf, buf, word, word_eol, TRUE); |
|
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1634 handle_ctcp(gc, to, nick, msg + 1, word, word_eol); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1635 } else { |
|
2339
9bda60d2d2e6
[gaim-migrate @ 2352]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2331
diff
changeset
|
1636 handle_privmsg(gc, to, nick, msg); |
| 2086 | 1637 } |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1638 } else if (!strcmp(cmd, "PONG")) { /* */ |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1639 } else if (!strcmp(cmd, "QUIT")) { |
| 4065 | 1640 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
|
1641 } else if (!strcmp(cmd, "TOPIC")) { |
| 3751 | 1642 irc_parse_topic(gc, nick, word, word_eol); |
| 3707 | 1643 } else if (!strcmp(cmd, "WALLOPS")) { /* Don't know if a dialog box is the right way? */ |
| 1644 char *msg = strrchr(word_eol[0], ':'); | |
| 1645 if (msg) | |
| 1646 do_error_dialog(msg+1, _("IRC Operator"), GAIM_ERROR); | |
| 2086 | 1647 } |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1648 |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1649 return FALSE; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1650 } |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1651 |
| 3751 | 1652 /* CTCP by jonas@birme.se */ |
| 1653 static void | |
| 1654 irc_parse_notice(struct gaim_connection *gc, char *nick, char *ex, | |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1655 char *word[], char *word_eol[]) |
| 3751 | 1656 { |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1657 char buf[IRC_BUF_LEN]; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1658 |
| 4793 | 1659 if (!g_ascii_strcasecmp(word[4], ":\001CLIENTINFO")) { |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1660 char *p = g_strrstr(word_eol[5], "\001"); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1661 *p = 0; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1662 g_snprintf(buf, sizeof(buf), "CTCP Answer: %s", word_eol[5]); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1663 do_error_dialog(buf, _("CTCP ClientInfo"), GAIM_INFO); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1664 |
| 4793 | 1665 } else if (!g_ascii_strcasecmp(word[4], ":\001USERINFO")) { |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1666 char *p = g_strrstr(word_eol[5], "\001"); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1667 *p = 0; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1668 g_snprintf(buf, sizeof(buf), "CTCP Answer: %s", word_eol[5]); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1669 do_error_dialog(buf, _("CTCP UserInfo"), GAIM_INFO); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1670 |
| 4793 | 1671 } else if (!g_ascii_strcasecmp(word[4], ":\001VERSION")) { |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1672 char *p = g_strrstr(word_eol[5], "\001"); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1673 *p = 0; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1674 g_snprintf(buf, sizeof(buf), "CTCP Answer: %s", word_eol[5]); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1675 do_error_dialog(buf, _("CTCP Version"), GAIM_INFO); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1676 |
| 4793 | 1677 } else if (!g_ascii_strcasecmp(word[4], ":\001PING")) { |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1678 char *p = g_strrstr(word_eol[5], "\001"); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1679 struct timeval ping_time; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1680 struct timeval now; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1681 gchar **vector; |
| 3751 | 1682 |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1683 if (p) |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1684 *p = 0; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1685 |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1686 vector = g_strsplit(word_eol[5], " ", 2); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1687 |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1688 if (gettimeofday(&now, NULL) == 0 && vector != NULL) { |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1689 if (now.tv_usec - atol(vector[1]) < 0) { |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1690 ping_time.tv_sec = now.tv_sec - atol(vector[0]) - 1; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1691 ping_time.tv_usec = now.tv_usec - atol(vector[1]) + 1000000; |
| 3751 | 1692 |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1693 } else { |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1694 ping_time.tv_sec = now.tv_sec - atol(vector[0]); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1695 ping_time.tv_usec = now.tv_usec - atol(vector[1]); |
|
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 |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1698 g_snprintf(buf, sizeof(buf), |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1699 "CTCP Ping reply from %s: %lu.%.03lu seconds", |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1700 nick, ping_time.tv_sec, (ping_time.tv_usec/1000)); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1701 |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1702 do_error_dialog(buf, _("CTCP Ping"), GAIM_INFO); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1703 g_strfreev(vector); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1704 } |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1705 } else { |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1706 if (*word_eol[4] == ':') word_eol[4]++; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1707 if (ex) |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1708 irc_got_im(gc, nick, word_eol[4], 0, time(NULL)); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1709 } |
| 3751 | 1710 } |
| 1711 | |
| 1712 static void | |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1713 irc_parse_join(struct gaim_connection *gc, char *nick, |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1714 char *word[], char *word_eol[]) |
| 3751 | 1715 { |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1716 char *chan = *word[3] == ':' ? word[3] + 1 : word[3]; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1717 static int id = 1; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1718 struct gaim_conversation *c; |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1719 char *hostmask, *p; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1720 |
| 4793 | 1721 if (!gaim_utf8_strcasecmp(gc->displayname, nick)) { |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1722 serv_got_joined_chat(gc, id++, chan); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1723 } else { |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1724 c = irc_find_chat(gc, chan); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1725 if (c) { |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1726 hostmask = g_strdup(word[1]); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1727 p = strchr(hostmask, '!'); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1728 if (p) { |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1729 char *pend = strchr(p, ' '); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1730 if (pend) { |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1731 *pend = 0; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1732 } |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1733 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1734 gaim_chat_add_user(GAIM_CHAT(c), nick, p + 1); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1735 |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1736 g_free(hostmask); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1737 } |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1738 } |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1739 } |
| 3751 | 1740 } |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1741 |
| 3751 | 1742 static void |
| 1743 irc_parse_topic(struct gaim_connection *gc, char *nick, | |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1744 char *word[], char *word_eol[]) |
| 3751 | 1745 { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1746 struct gaim_conversation *c = irc_find_chat(gc, word[3]); |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1747 char *topic = *word_eol[4] == ':' ? word_eol[4] + 1 : word_eol[4]; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1748 char buf[IRC_BUF_LEN]; |
| 3751 | 1749 |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1750 if (c) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1751 gaim_chat_set_topic(GAIM_CHAT(c), nick, topic); |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1752 g_snprintf(buf, sizeof(buf), |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1753 _("<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
|
1754 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1755 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
|
1756 } |
| 3751 | 1757 } |
| 1758 | |
| 1759 static gboolean | |
| 1760 irc_parse_part(struct gaim_connection *gc, char *nick, char *cmd, | |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1761 char *word[], char *word_eol[]) |
| 3751 | 1762 { |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1763 char *chan = cmd + 5; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1764 struct gaim_conversation *c; |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1765 struct gaim_chat *chat; |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1766 char *reason = word_eol[4]; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1767 GList *r; |
| 3751 | 1768 |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1769 if (*chan == ':') |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1770 chan++; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1771 if (*reason == ':') |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1772 reason++; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1773 if (!(c = irc_find_chat(gc, chan))) |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1774 return FALSE; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1775 if (!strcmp(nick, gc->displayname)) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1776 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
|
1777 return FALSE; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1778 } |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1779 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1780 chat = GAIM_CHAT(c); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1781 |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1782 r = gaim_chat_get_users(GAIM_CHAT(c)); |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1783 |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1784 while (r) { |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1785 char *who = r->data; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1786 if (*who == '@') |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1787 who++; |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
1788 if (*who == '%') |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
1789 who++; |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1790 if (*who == '+') |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1791 who++; |
| 4793 | 1792 if (!gaim_utf8_strcasecmp(who, nick)) { |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1793 char *tmp = g_strdup(r->data); |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1794 gaim_chat_remove_user(chat, tmp, reason); |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1795 g_free(tmp); |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1796 break; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1797 } |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1798 r = r->next; |
|
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1799 } |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1800 return TRUE; |
| 3751 | 1801 } |
| 1802 | |
| 1803 static void | |
|
4201
511c2b63caa4
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1804 irc_callback(gpointer data, gint source, GaimInputCondition condition) |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1805 { |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1806 struct gaim_connection *gc = data; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1807 struct irc_data *idata = gc->proto_data; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1808 int i = 0; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1809 gchar buf[1024]; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1810 gboolean off; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1811 |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1812 i = read(idata->fd, buf, 1024); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1813 if (i <= 0) { |
| 3074 | 1814 hide_login_progress_error(gc, "Read error"); |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1815 signoff(gc); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1816 return; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1817 } |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1818 |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1819 idata->rxqueue = g_realloc(idata->rxqueue, i + idata->rxlen + 1); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1820 memcpy(idata->rxqueue + idata->rxlen, buf, i); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1821 idata->rxlen += i; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1822 idata->rxqueue[idata->rxlen] = 0; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1823 |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1824 while (1) { |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1825 char *d, *e; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1826 int len; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1827 |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1828 if (!idata->rxqueue || ((e = strchr(idata->rxqueue, '\n')) == NULL)) |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1829 return; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1830 |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1831 len = e - idata->rxqueue + 1; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1832 d = g_strndup(idata->rxqueue, len); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1833 g_strchomp(d); |
|
5221
abe4d103e300
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1834 gaim_debug(GAIM_DEBUG_MISC, "irc", "S: %s\n", d); |
| 3707 | 1835 |
| 3708 | 1836 /* REMOVE ME BEFORE SUBMIT! */ |
| 3751 | 1837 /*fprintf(stderr, "IRC S: %s\n", d);*/ |
| 3708 | 1838 |
|
2687
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1839 idata->rxlen -= len; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1840 if (idata->rxlen) { |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1841 char *tmp = g_strdup(e + 1); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1842 g_free(idata->rxqueue); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1843 idata->rxqueue = tmp; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1844 } else { |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1845 g_free(idata->rxqueue); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1846 idata->rxqueue = NULL; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1847 } |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1848 |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1849 off = irc_parse(gc, d); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1850 |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1851 g_free(d); |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1852 |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1853 if (off) |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1854 return; |
|
2d544f48146d
[gaim-migrate @ 2700]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1855 } |
| 2086 | 1856 } |
| 1857 | |
| 3751 | 1858 static void |
| 1859 irc_login_callback(gpointer data, gint source, GaimInputCondition condition) | |
| 2086 | 1860 { |
| 1861 struct gaim_connection *gc = data; | |
| 1862 struct irc_data *idata; | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1863 char hostname[256]; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1864 char buf[IRC_BUF_LEN]; |
| 3751 | 1865 char *test; |
| 1866 GError *err = NULL; | |
| 1867 | |
| 2086 | 1868 if (!g_slist_find(connections, gc)) { |
| 1869 close(source); | |
| 1870 return; | |
| 1871 } | |
| 1872 | |
| 1873 idata = gc->proto_data; | |
| 1874 | |
| 4456 | 1875 if (source < 0) { |
| 2086 | 1876 hide_login_progress(gc, "Write error"); |
| 1877 signoff(gc); | |
| 1878 return; | |
| 1879 } | |
| 4452 | 1880 idata->fd = source; |
| 3751 | 1881 |
| 1882 /* Try a quick conversion to see if the specified encoding is OK */ | |
| 4491 | 1883 test = g_convert("test", strlen("test"), gc->account->proto_opt[USEROPT_CHARSET], |
| 3751 | 1884 "UTF-8", NULL, NULL, &err); |
| 1885 if (err) { | |
|
5221
abe4d103e300
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1886 gaim_debug(GAIM_DEBUG_ERROR, "irc", |
|
abe4d103e300
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1887 "Couldn't initialize %s for IRC charset conversion, using ISO-8859-1\n", |
| 4491 | 1888 gc->account->proto_opt[USEROPT_CHARSET]); |
| 1889 strcpy(gc->account->proto_opt[USEROPT_CHARSET], "ISO-8859-1"); | |
| 3751 | 1890 } |
| 1891 | |
| 4223 | 1892 g_free(test); |
| 1893 | |
|
2574
3526c5581f92
[gaim-migrate @ 2587]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2536
diff
changeset
|
1894 gethostname(hostname, sizeof(hostname) - 1); |
|
3526c5581f92
[gaim-migrate @ 2587]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2536
diff
changeset
|
1895 hostname[sizeof(hostname) - 1] = 0; |
|
3526c5581f92
[gaim-migrate @ 2587]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2536
diff
changeset
|
1896 if (!*hostname) |
|
3526c5581f92
[gaim-migrate @ 2587]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2536
diff
changeset
|
1897 g_snprintf(hostname, sizeof(hostname), "localhost"); |
| 3789 | 1898 |
| 4491 | 1899 if (*gc->account->password) { |
| 1900 g_snprintf(buf, sizeof(buf), "PASS %s\r\n", gc->account->password); | |
| 3789 | 1901 |
| 1902 if (irc_write(idata->fd, buf, strlen(buf)) < 0) { | |
| 1903 hide_login_progress(gc, "Write error"); | |
| 1904 signoff(gc); | |
| 1905 return; | |
| 1906 } | |
| 1907 } | |
| 1908 | |
| 3562 | 1909 g_snprintf(buf, sizeof(buf), "USER %s %s %s :%s\r\n", |
| 4966 | 1910 g_get_user_name(), hostname, |
| 1911 idata->server, | |
| 1912 *gc->account->alias ? gc->account->alias : "gaim"); | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1913 if (irc_write(idata->fd, buf, strlen(buf)) < 0) { |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1914 hide_login_progress(gc, "Write error"); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1915 signoff(gc); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1916 return; |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1917 } |
| 2086 | 1918 |
| 4966 | 1919 g_snprintf(buf, sizeof(buf), "NICK %s\r\n", gc->displayname); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1920 if (irc_write(idata->fd, buf, strlen(buf)) < 0) { |
| 2086 | 1921 hide_login_progress(gc, "Write error"); |
| 1922 signoff(gc); | |
| 1923 return; | |
| 1924 } | |
| 1925 | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1926 gc->inpa = gaim_input_add(idata->fd, GAIM_INPUT_READ, irc_callback, gc); |
| 2086 | 1927 } |
| 1928 | |
| 3751 | 1929 static void |
| 4491 | 1930 irc_login(struct gaim_account *account) |
| 2086 | 1931 { |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1932 char buf[IRC_BUF_LEN]; |
| 4422 | 1933 int rc; |
| 2086 | 1934 |
| 4966 | 1935 struct gaim_connection *gc; |
| 1936 struct irc_data *idata; | |
| 1937 char **parts; | |
| 1938 if(!strrchr(account->username, '@')) { | |
| 1939 char *username = g_strdup(account->username); | |
| 1940 g_snprintf(account->username, sizeof(account->username), "%s@%s", | |
| 1941 username, *account->proto_opt[USEROPT_SERV] ? | |
| 1942 account->proto_opt[USEROPT_SERV] : DEFAULT_SERVER); | |
| 1943 g_free(username); | |
| 1944 strcpy(account->proto_opt[USEROPT_SERV], ""); | |
| 1945 save_prefs(); | |
| 1946 } | |
| 2086 | 1947 |
| 4966 | 1948 gc = new_gaim_conn(account); |
| 1949 idata = gc->proto_data = g_new0(struct irc_data, 1); | |
| 1950 | |
| 1951 parts = g_strsplit(gc->username, "@", 2); | |
| 1952 g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", parts[0]); | |
| 1953 idata->server = g_strdup(parts[1]); | |
| 1954 g_strfreev(parts); | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1955 |
| 4834 | 1956 g_snprintf(buf, sizeof(buf), _("Signon: %s"), gc->username); |
| 2086 | 1957 set_login_progress(gc, 2, buf); |
| 1958 | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1959 idata->chantypes = g_strdup("#&!+"); |
| 3452 | 1960 idata->chanmodes = g_strdup("beI,k,lnt"); |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1961 idata->nickmodes = g_strdup("ohv"); |
|
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1962 idata->str = g_string_new(""); |
| 4422 | 1963 idata->fd = -1; |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1964 |
| 4966 | 1965 rc = proxy_connect(account, idata->server, |
| 4491 | 1966 account->proto_opt[USEROPT_PORT][0] ? |
| 1967 atoi(account->proto_opt[USEROPT_PORT]) : 6667, | |
| 1968 irc_login_callback, gc); | |
| 1969 if (!account->gc || (rc != 0)) { | |
| 2086 | 1970 hide_login_progress(gc, "Unable to create socket"); |
| 1971 signoff(gc); | |
| 1972 return; | |
| 1973 } | |
| 1974 } | |
| 1975 | |
| 3751 | 1976 static void |
| 1977 irc_close(struct gaim_connection *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 |
| 5136 | 2030 set_mode_3(struct gaim_connection *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 |
| 5136 | 2067 set_mode_6(struct gaim_connection *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 |
| 5136 | 2124 set_mode(struct gaim_connection *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 |
| 5136 | 2144 set_chan_mode(struct gaim_connection *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 |
| 5136 | 2156 handle_command(struct gaim_connection *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]) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2206 struct gaim_conversation *c; |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2207 struct gaim_chat *chat; |
|
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]; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2292 struct gaim_conversation *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); |
| 3707 | 2309 do_error_dialog(buf, _("IRC Part"), GAIM_INFO); |
|
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")) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2352 struct gaim_conversation *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")) { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2369 struct gaim_conversation *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 { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2411 struct gaim_conversation *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 |
| 5136 | 2430 send_msg(struct gaim_connection *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 |
| 2453 irc_chat_invite(struct gaim_connection *gc, int idn, const char *message, const char *name) { | |
|
2847
e49bd1479edd
[gaim-migrate @ 2860]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2831
diff
changeset
|
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; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2456 struct gaim_conversation *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 |
| 5136 | 2462 irc_send_im(struct gaim_connection *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 |
| 2471 irc_add_buddy(struct gaim_connection *gc, const char *who) {} | |
| 2472 static void | |
| 2473 irc_remove_buddy(struct gaim_connection *gc, char *who, char *group) {} | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2474 |
| 3751 | 2475 static GList * |
| 2476 irc_chat_info(struct gaim_connection *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 |
| 2495 irc_join_chat(struct gaim_connection *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 |
| 2514 irc_chat_leave(struct gaim_connection *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; |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2517 struct gaim_conversation *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 |
| 2527 irc_chat_send(struct gaim_connection *gc, int id, char *what) | |
|
2289
38e156136896
[gaim-migrate @ 2299]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
2528 { |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2529 struct gaim_conversation *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)), |
|
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2534 gc->displayname, 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 * |
| 2539 irc_away_states(struct gaim_connection *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 |
| 2545 irc_set_away(struct gaim_connection *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 * |
| 2565 irc_list_icon(struct gaim_account *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; | |
|
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2603 struct gaim_conversation *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 |
| 2633 irc_ask_send_file(struct gaim_connection *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 |
|
4514
7521e29658bc
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
2653 irc_file_transfer *find_ift_by_xfer(struct gaim_connection *gc, |
|
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 |
| 2671 irc_file_transfer_data_chunk(struct gaim_connection *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 |
| 2684 irc_file_transfer_cancel (struct gaim_connection *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 |
| 2705 irc_file_transfer_done(struct gaim_connection *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 |
| 2727 irc_file_transfer_out (struct gaim_connection *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 |
| 2755 irc_file_transfer_in(struct gaim_connection *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; | |
| 4634 | 2761 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 |
| 5136 | 2766 irc_ctcp_clientinfo(struct gaim_connection *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 | |
| 5136 | 2775 irc_ctcp_userinfo(struct gaim_connection *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 |
| 5136 | 2784 irc_ctcp_version(struct gaim_connection *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 |
| 5136 | 2793 irc_ctcp_ping(struct gaim_connection *gc, const char *who) |
| 3707 | 2794 { |
| 3735 | 2795 char buf[IRC_BUF_LEN]; |
| 2796 | |
| 3867 | 2797 g_snprintf (buf, sizeof(buf), "\001PING %ld\001", time(NULL)); |
| 3751 | 2798 irc_send_privmsg(gc, who, buf, FALSE); |
| 3735 | 2799 } |
| 2800 | |
| 3751 | 2801 static void |
| 2802 irc_send_notice(struct gaim_connection *gc, char *who, char *what) | |
| 3735 | 2803 { |
| 3751 | 2804 char buf[IRC_BUF_LEN], *intl; |
| 3735 | 2805 struct irc_data *id = gc->proto_data; |
| 3751 | 2806 int len; |
| 2807 | |
| 2808 intl = irc_send_convert(gc, what, 501, &len); | |
| 2809 g_snprintf(buf, sizeof(buf), "NOTICE %s :%s\r\n", who, intl); | |
| 2810 g_free(intl); | |
| 3735 | 2811 irc_write(id->fd, buf, strlen(buf)); |
| 2812 } | |
| 2813 | |
| 3751 | 2814 /* Don't call this guy with fragment = 1 for anything but straight |
| 2815 * up privmsgs. (no CTCP/whatever) It's still dangerous for CTCPs | |
| 2816 * (it might not include the trailing \001), but I think this behavior | |
| 2817 * is generally better than not fragmenting at all on lots of our | |
| 2818 * packets. */ | |
| 2819 /* From RFC2812: | |
| 2820 * IRC messages are always lines of characters terminated with a CR-LF | |
| 2821 * (Carriage Return - Line Feed) pair, and these messages SHALL NOT | |
| 2822 * exceed 512 characters in length, counting all characters including | |
| 2823 * the trailing CR-LF. Thus, there are 510 characters maximum allowed | |
| 2824 * for the command and its parameters. */ | |
| 2825 /* So apparently that includes all the inter-server crap, which is up | |
| 2826 * to NINETY-THREE chars on dancer, which seems to be a pretty liberal | |
| 2827 * ircd. My rough calculation for now is ":<nick>!~<user>@<host> ", | |
| 2828 * where <host> is a max of an (uncalculated) 63 chars. Thanks to | |
| 2829 * trelane and #freenode for giving a hand here. */ | |
| 2830 static void | |
| 5136 | 2831 irc_send_privmsg(struct gaim_connection *gc, const char *who, const char *what, gboolean fragment) |
| 3735 | 2832 { |
| 3751 | 2833 char buf[IRC_BUF_LEN], *intl; |
| 3735 | 2834 struct irc_data *id = gc->proto_data; |
| 3751 | 2835 /* 512 - 12 (for PRIVMSG" "" :""\r\n") - namelen - nicklen - 68 */ |
| 4491 | 2836 int nicklen = (gc->account->alias && strlen(gc->account->alias)) ? strlen(gc->account->alias) : 4; |
| 3751 | 2837 int max = 444 - strlen(who) - strlen(g_get_user_name()) - nicklen; |
| 2838 | |
| 2839 int len; | |
| 2840 | |
| 2841 do { | |
| 2842 /* the \001 on CTCPs may cause a problem here for some | |
| 2843 * charsets, but probably not ones people use for IRC. */ | |
| 2844 intl = irc_send_convert(gc, what, max, &len); | |
| 2845 g_snprintf(buf, sizeof(buf), "PRIVMSG %s :%s\r\n", who, intl); | |
| 2846 g_free(intl); | |
| 2847 irc_write(id->fd, buf, strlen(buf)); | |
| 2848 what += len; | |
| 2849 } while (fragment && strlen(what)); | |
| 3707 | 2850 } |
| 2851 | |
| 3751 | 2852 static void |
| 5136 | 2853 irc_start_chat(struct gaim_connection *gc, const char *who) { |
| 3029 | 2854 struct dcc_chat *chat; |
| 2855 int len; | |
| 2856 struct sockaddr_in addr; | |
| 3735 | 2857 char buf[IRC_BUF_LEN]; |
| 3029 | 2858 |
| 2859 /* Create a socket */ | |
| 2860 chat = g_new0 (struct dcc_chat, 1); | |
| 2861 chat->fd = socket (AF_INET, SOCK_STREAM, 0); | |
| 2862 chat->gc = gc; | |
| 2863 g_snprintf (chat->nick, sizeof (chat->nick), "%s", who); | |
| 2864 if (chat->fd < 0) { | |
| 3730 | 2865 dcc_chat_cancel (chat); |
| 3708 | 2866 return; |
| 3029 | 2867 } |
| 2868 addr.sin_family = AF_INET; | |
| 2869 addr.sin_port = 0; | |
| 2870 addr.sin_addr.s_addr = INADDR_ANY; | |
| 2871 bind (chat->fd, (struct sockaddr *) &addr, sizeof (addr)); | |
| 2872 listen (chat->fd, 1); | |
| 2873 len = sizeof (addr); | |
| 2874 getsockname (chat->fd, (struct sockaddr *) &addr, &len); | |
| 2875 chat->port = ntohs (addr.sin_port); | |
| 2876 getlocalip(chat->ip_address); | |
| 2877 chat->inpa = | |
| 2878 gaim_input_add (chat->fd, GAIM_INPUT_READ, dcc_chat_connected, | |
| 3708 | 2879 chat); |
| 3630 | 2880 g_snprintf (buf, sizeof buf, "\001DCC CHAT chat %s %d\001\n", |
| 3708 | 2881 chat->ip_address, chat->port); |
| 3033 | 2882 irc_send_im (gc, who, buf, -1, 0); |
| 3029 | 2883 } |
| 2884 | |
| 3751 | 2885 static void |
| 5136 | 2886 irc_get_info(struct gaim_connection *gc, const char *who) |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2887 { |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2888 struct irc_data *idata = gc->proto_data; |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2889 char buf[IRC_BUF_LEN]; |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2890 |
|
2633
b740a33875c3
[gaim-migrate @ 2646]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2620
diff
changeset
|
2891 if (*who == '@') |
|
b740a33875c3
[gaim-migrate @ 2646]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2620
diff
changeset
|
2892 who++; |
|
4621
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
2893 if (*who == '%') |
|
69f028a6f357
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
2894 who++; |
|
2633
b740a33875c3
[gaim-migrate @ 2646]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2620
diff
changeset
|
2895 if (*who == '+') |
|
b740a33875c3
[gaim-migrate @ 2646]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2620
diff
changeset
|
2896 who++; |
|
b740a33875c3
[gaim-migrate @ 2646]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2620
diff
changeset
|
2897 |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2898 g_snprintf(buf, sizeof(buf), "WHOIS %s\r\n", who); |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2899 irc_write(idata->fd, buf, strlen(buf)); |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2900 } |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2901 |
| 3751 | 2902 static GList * |
| 5136 | 2903 irc_buddy_menu(struct gaim_connection *gc, const char *who) |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2904 { |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2905 GList *m = NULL; |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2906 struct proto_buddy_menu *pbm; |
|
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 pbm = g_new0(struct proto_buddy_menu, 1); |
| 3029 | 2909 pbm->label = _("DCC Chat"); |
| 2910 pbm->callback = irc_start_chat; | |
| 2911 pbm->gc = gc; | |
| 2912 m = g_list_append(m, pbm); | |
| 3708 | 2913 /* |
| 2914 pbm = g_new0(struct proto_buddy_menu, 1); | |
| 2915 pbm->label = _("DCC Send"); | |
| 2916 pbm->callback = irc_ask_send_file; | |
| 2917 pbm->gc = gc; | |
| 2918 m = g_list_append(m, pbm); | |
| 2919 */ | |
| 3707 | 2920 |
| 2921 pbm = g_new0(struct proto_buddy_menu, 1); | |
| 2922 pbm->label = _("CTCP ClientInfo"); | |
| 2923 pbm->callback = irc_ctcp_clientinfo; | |
| 2924 pbm->gc = gc; | |
| 2925 m = g_list_append(m, pbm); | |
| 2926 | |
| 2927 pbm = g_new0(struct proto_buddy_menu, 1); | |
| 2928 pbm->label = _("CTCP UserInfo"); | |
| 2929 pbm->callback = irc_ctcp_userinfo; | |
| 2930 pbm->gc = gc; | |
| 2931 m = g_list_append(m, pbm); | |
| 2932 | |
| 2933 pbm = g_new0(struct proto_buddy_menu, 1); | |
| 2934 pbm->label = _("CTCP Version"); | |
| 2935 pbm->callback = irc_ctcp_version; | |
| 2936 pbm->gc = gc; | |
| 2937 m = g_list_append(m, pbm); | |
| 2938 | |
| 3735 | 2939 pbm = g_new0(struct proto_buddy_menu, 1); |
| 2940 pbm->label = _("CTCP Ping"); | |
| 2941 pbm->callback = irc_ctcp_ping; | |
| 2942 pbm->gc = gc; | |
| 2943 m = g_list_append(m, pbm); | |
| 2944 | |
|
2619
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2945 return m; |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2946 } |
|
536198196dc6
[gaim-migrate @ 2632]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2617
diff
changeset
|
2947 |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2948 static GaimPluginProtocolInfo prpl_info = |
| 2086 | 2949 { |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2950 GAIM_PROTO_IRC, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2951 OPT_PROTO_CHAT_TOPIC | OPT_PROTO_PASSWORD_OPTIONAL, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2952 NULL, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2953 NULL, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2954 irc_list_icon, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2955 irc_list_emblems, |
|
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 NULL, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2958 irc_away_states, |
|
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 irc_buddy_menu, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2961 irc_chat_info, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2962 irc_login, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2963 irc_close, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2964 irc_send_im, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2965 NULL, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2966 NULL, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2967 irc_get_info, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2968 irc_set_away, |
|
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 NULL, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2971 NULL, |
|
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 irc_add_buddy, |
|
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 irc_remove_buddy, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2978 NULL, |
|
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 NULL, |
|
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 irc_join_chat, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2986 irc_chat_invite, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2987 irc_chat_leave, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2988 NULL, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2989 irc_chat_send, |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2990 NULL, |
|
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 NULL, |
|
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 irc_convo_closed, |
|
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 }; |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3001 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3002 static GaimPluginInfo info = |
|
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 2, /**< api_version */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3005 GAIM_PLUGIN_PROTOCOL, /**< type */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3006 NULL, /**< ui_requirement */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3007 0, /**< flags */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3008 NULL, /**< dependencies */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3009 GAIM_PRIORITY_DEFAULT, /**< priority */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3010 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3011 "prpl-irc", /**< id */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3012 "IRC", /**< name */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3013 VERSION, /**< version */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3014 /** summary */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3015 N_("IRC Protocol Plugin"), |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3016 /** description */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3017 N_("IRC Protocol Plugin"), |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3018 NULL, /**< author */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3019 WEBSITE, /**< homepage */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3020 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3021 NULL, /**< load */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3022 NULL, /**< unload */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3023 NULL, /**< destroy */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3024 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3025 NULL, /**< ui_info */ |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3026 &prpl_info /**< extra_info */ |
|
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 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3029 static void |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3030 __init_plugin(GaimPlugin *plugin) |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3031 { |
| 3572 | 3032 struct proto_user_opt *puo; |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3033 struct proto_user_split *pus; |
| 3572 | 3034 |
| 4966 | 3035 pus = g_new0(struct proto_user_split, 1); |
| 3036 pus->sep = '@'; | |
| 3037 pus->label = g_strdup(_("Server:")); | |
| 3038 pus->def = g_strdup(DEFAULT_SERVER); | |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3039 prpl_info.user_splits = g_list_append(prpl_info.user_splits, pus); |
| 3572 | 3040 |
| 3041 puo = g_new0(struct proto_user_opt, 1); | |
| 4115 | 3042 puo->label = g_strdup(_("Port:")); |
| 3572 | 3043 puo->def = g_strdup("6667"); |
| 3044 puo->pos = USEROPT_PORT; | |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3045 prpl_info.user_opts = g_list_append(prpl_info.user_opts, puo); |
| 3572 | 3046 |
| 3751 | 3047 puo = g_new0(struct proto_user_opt, 1); |
| 4115 | 3048 puo->label = g_strdup(_("Encoding:")); |
| 3751 | 3049 puo->def = g_strdup("ISO-8859-1"); |
| 3050 puo->pos = USEROPT_CHARSET; | |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3051 prpl_info.user_opts = g_list_append(prpl_info.user_opts, puo); |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3052 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3053 my_protocol = plugin; |
| 2086 | 3054 } |
| 3055 | |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3056 GAIM_INIT_PLUGIN(irc, __init_plugin, info); |
