Sat, 26 Apr 2003 20:30:43 +0000
[gaim-migrate @ 5604]
Chats in the buddy list!
You can now put chat rooms in your buddy list, and double-click them to join
them, instead of having to do all that typing. I'm eventually gonna add
auto-join support, so that ugly hack involving pouncing can go away.
Someone should make some new artwork so we don't have 2 + icons next to
each other in the menus.
This also has some fixes to let gaim compile again, after the renaming of
the buddy list files.
This also fixes the problem with offline buddies not showing up in the list
sometimes for accounts that didn't log in at startup.
This probably fixes other stuff, but I can't remember any of it off the top
of my head.
I'm going to stop typing and let people play with this now.
| 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
b277150bb9b3
[gaim-migrate @ 2300]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2289
diff
changeset
|
6 | * |
|
b277150bb9b3
[gaim-migrate @ 2300]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2289
diff
changeset
|
7 | * A large portion of this was copied more or less directly from X-Chat, |
|
b277150bb9b3
[gaim-migrate @ 2300]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
bab8b7e309db
[gaim-migrate @ 2100]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
fb2ae2f5edd3
[gaim-migrate @ 4639]
Herman Bloggs <herman@bluedigits.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
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
62 | static GaimPlugin *my_protocol = NULL; |
|
4249
62583b5d3663
[gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents:
4245
diff
changeset
|
63 | |
| 3630 | 64 | /* for win32 compatability */ |
| 65 | G_MODULE_IMPORT GSList *connections; | |
| 66 | ||
|
4422
d7d5938502f0
[gaim-migrate @ 4695]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4416
diff
changeset
|
67 | #ifndef INET6_ADDRSTRLEN |
|
d7d5938502f0
[gaim-migrate @ 4695]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4416
diff
changeset
|
68 | #define INET6_ADDRSTRLEN 46 |
|
d7d5938502f0
[gaim-migrate @ 4695]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4416
diff
changeset
|
69 | #endif |
|
d7d5938502f0
[gaim-migrate @ 4695]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4416
diff
changeset
|
70 | |
| 3751 | 71 | /* Datastructs */ |
| 3029 | 72 | struct dcc_chat |
| 73 | { | |
| 74 | struct gaim_connection *gc; | |
|
4422
d7d5938502f0
[gaim-migrate @ 4695]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4416
diff
changeset
|
75 | char ip_address[INET6_ADDRSTRLEN]; |
| 3029 | 76 | int port; |
| 77 | int fd; | |
| 78 | int inpa; | |
| 79 | char nick[80]; | |
| 80 | }; | |
| 81 | ||
|
4514
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
82 | struct irc_xfer_data |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
83 | { |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
84 | char *ip; |
| 3708 | 85 | int port; |
|
4514
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
86 | |
|
40e3588a280f
[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
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
92 | gboolean online; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
93 | guint32 timer; |
| 2086 | 94 | |
| 4966 | 95 | char *server; |
| 96 | ||
|
2687
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
97 | char *rxqueue; |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
98 | int rxlen; |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
99 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
100 | GString *str; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
101 | int bc; |
| 2086 | 102 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
103 | char *chantypes; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
104 | char *chanmodes; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
105 | char *nickmodes; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
106 | gboolean six_modes; |
|
2619
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
107 | |
|
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
108 | gboolean in_whois; |
|
2829
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
109 | gboolean in_list; |
|
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
163 | { |
|
5221
86a1444cc9ac
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
164 | gaim_debug(GAIM_DEBUG_MISC, "irc", "C: %s", data); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
165 | return write(fd, data, len); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
166 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
86a1444cc9ac
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
178 | gaim_debug(GAIM_DEBUG_ERROR, "irc", "Charset conversion error\n"); |
|
86a1444cc9ac
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
179 | gaim_debug(GAIM_DEBUG_ERROR, "irc", |
|
86a1444cc9ac
[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
86a1444cc9ac
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
200 | gaim_debug(GAIM_DEBUG_ERROR, "irc", |
|
86a1444cc9ac
[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
cf899ee07d1d
[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
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
210 | { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
211 | GSList *bcs = gc->buddy_chats; |
| 2086 | 212 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
213 | while (bcs) { |
|
4359
cf899ee07d1d
[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
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
216 | return b; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
217 | bcs = bcs->next; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
218 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
219 | return NULL; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
220 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
221 | |
| 3751 | 222 | static void |
| 223 | process_data_init(char *buf, char *cmd, char *word[], char *eol[], gboolean quotes) | |
|
2205
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2171
diff
changeset
|
224 | { |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
225 | int wordcount = 2; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
226 | gboolean space = FALSE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
227 | gboolean quote = FALSE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
228 | int j = 0; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
229 | |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
230 | word[1] = cmd; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
231 | eol[1] = buf; |
|
2205
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2171
diff
changeset
|
232 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
233 | while (TRUE) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
234 | switch (*cmd) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
235 | case 0: |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
236 | buf[j] = 0; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
237 | for (j = wordcount; j < PDIWORDS; j++) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
238 | word[j] = "\000\000"; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
239 | eol[j] = "\000\000"; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
240 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
241 | return; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
242 | case '"': |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
243 | if (!quotes) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
244 | space = FALSE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
245 | buf[j++] = *cmd; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
246 | break; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
247 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
248 | quote = !quote; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
249 | break; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
250 | case ' ': |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
251 | if (quote) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
252 | space = FALSE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
253 | buf[j++] = *cmd; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
254 | break; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
255 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
256 | if (space) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
257 | break; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
258 | buf[j++] = 0; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
259 | word[wordcount] = &buf[j]; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
260 | eol[wordcount++] = cmd + 1; |
|
2294
dd10228630d3
[gaim-migrate @ 2304]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2293
diff
changeset
|
261 | if (wordcount == PDIWORDS - 1) { |
|
dd10228630d3
[gaim-migrate @ 2304]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2293
diff
changeset
|
262 | buf[j] = 0; |
|
dd10228630d3
[gaim-migrate @ 2304]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2293
diff
changeset
|
263 | return; |
|
dd10228630d3
[gaim-migrate @ 2304]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2293
diff
changeset
|
264 | } |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
265 | space = TRUE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
266 | break; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
267 | default: |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
268 | space = FALSE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
269 | buf[j++] = *cmd; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
270 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
271 | cmd++; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
272 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
273 | } |
|
2205
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2171
diff
changeset
|
274 | |
| 3751 | 275 | static void |
| 276 | handle_005(struct gaim_connection *gc, char *word[], char *word_eol[]) | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
277 | { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
278 | int w = 4; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
279 | struct irc_data *id = gc->proto_data; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
280 | |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
281 | while (w < PDIWORDS && *word[w]) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
282 | if (!strncmp(word[w], "MODES=", 5)) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
283 | if (atoi(word[w] + 6) >= 6) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
284 | id->six_modes = TRUE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
285 | } else if (!strncmp(word[w], "CHANTYPES=", 10)) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
286 | g_free(id->chantypes); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
287 | id->chantypes = g_strdup(word[w] + 10); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
288 | } else if (!strncmp(word[w], "CHANMODES=", 10)) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
289 | g_free(id->chanmodes); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
290 | id->chanmodes = g_strdup(word[w] + 10); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
291 | } else if (!strncmp(word[w], "PREFIX=", 7)) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
292 | char *pre = strchr(word[w] + 7, ')'); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
293 | if (pre) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
294 | *pre = 0; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
295 | g_free(id->nickmodes); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
296 | id->nickmodes = g_strdup(word[w] + 8); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
297 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
298 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
299 | w++; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
300 | } |
|
2205
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2171
diff
changeset
|
301 | } |
|
68c42ce8eba6
[gaim-migrate @ 2215]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2171
diff
changeset
|
302 | |
|
4221
fb23a9c3334c
[gaim-migrate @ 4465]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4201
diff
changeset
|
303 | static const char *irc_colors[] = { |
|
fb23a9c3334c
[gaim-migrate @ 4465]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4201
diff
changeset
|
304 | "#000000", "#ffffff", "#000066", "#006600", |
|
fb23a9c3334c
[gaim-migrate @ 4465]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4201
diff
changeset
|
305 | "#ff0000", "#660000", "#660066", "#666600", |
|
fb23a9c3334c
[gaim-migrate @ 4465]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4201
diff
changeset
|
306 | "#cccc00", "#33cc33", "#00acac", "#00ccac", |
|
fb23a9c3334c
[gaim-migrate @ 4465]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4201
diff
changeset
|
307 | "#0000ff", "#cc00cc", "#666666", "#00ccac" |
|
fb23a9c3334c
[gaim-migrate @ 4465]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4201
diff
changeset
|
308 | }; |
|
fb23a9c3334c
[gaim-migrate @ 4465]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4201
diff
changeset
|
309 | |
|
fb23a9c3334c
[gaim-migrate @ 4465]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4201
diff
changeset
|
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
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
371 | GString /* oo la la */ *str = g_string_new(""); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
372 | char *cur = msg, *end = msg; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
373 | gboolean bold = FALSE, underline = FALSE, fg = FALSE, bg = FALSE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
374 | int fore, back; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
375 | while (*end) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
400 | if (isdigit(*end)) { |
| 3708 | 401 | back *= 10; |
| 402 | back += *end++ - '0'; | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
403 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
404 | } |
| 3708 | 405 | } |
| 406 | if (fore == -1) { | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
407 | if (fg) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
408 | str = g_string_append(str, "</FONT>"); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
409 | if (bg) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
458 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
459 | end++; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
460 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
461 | if (*cur) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
462 | str = g_string_append(str, cur); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
463 | return str; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
468 | { |
| 3751 | 469 | char *utf8 = irc_recv_convert(gc, what); |
| 470 | GString *str = decode_html(utf8); | |
|
2856
046ed5e89321
[gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2847
diff
changeset
|
471 | serv_got_im(gc, who, str->str, flags, t, -1); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
472 | g_string_free(str, TRUE); |
| 3751 | 473 | g_free(utf8); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
474 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
486 | struct gaim_conversation *convo; |
|
5221
86a1444cc9ac
[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
86a1444cc9ac
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
496 | gaim_debug(GAIM_DEBUG_INFO, "irc", |
|
86a1444cc9ac
[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
bf88170ba269
[gaim-migrate @ 4751]
Christian Hammond <chipx86@chipx86.com>
parents:
4456
diff
changeset
|
506 | chat->nick); |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
507 | gaim_conversation_write(convo, NULL, buf, -1, WFLAG_SYSTEM, |
|
cf899ee07d1d
[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
40e3588a280f
[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
40e3588a280f
[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
cf899ee07d1d
[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
cf899ee07d1d
[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
cf899ee07d1d
[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
fb23a9c3334c
[gaim-migrate @ 4465]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4201
diff
changeset
|
556 | _("DCC Chat with %s established"), |
| 3029 | 557 | chat->nick); |
|
4359
cf899ee07d1d
[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
86a1444cc9ac
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
559 | gaim_debug(GAIM_DEBUG_INFO, "irc", |
|
86a1444cc9ac
[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
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
568 | { |
| 3751 | 569 | char *utf8 = irc_recv_convert(gc, msg); |
| 570 | GString *str = decode_html(utf8); | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
571 | serv_got_chat_in(gc, id, who, whisper, str->str, t); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
572 | g_string_free(str, TRUE); |
| 3751 | 573 | g_free(utf8); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
574 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
575 | |
| 3751 | 576 | static void |
| 577 | handle_list(struct gaim_connection *gc, char *list) | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
578 | { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
579 | struct irc_data *id = gc->proto_data; |
| 4793 | 580 | char *tmp; |
| 4785 | 581 | GaimBlistNode *gnode, *bnode; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
582 | |
| 4793 | 583 | tmp = g_utf8_strdown(list, -1); |
| 584 | ||
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
585 | id->str = g_string_append_c(id->str, ' '); |
| 4793 | 586 | id->str = g_string_append(id->str, tmp); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
587 | id->bc--; |
| 4793 | 588 | g_free(tmp); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
589 | if (id->bc) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
590 | return; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
615 | g_string_free(id->str, TRUE); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
b0c18ea1dee8
[gaim-migrate @ 2147]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2131
diff
changeset
|
622 | struct gaim_connection *gc = data; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
623 | struct irc_data *id = gc->proto_data; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
624 | char buf[500]; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
625 | int n = g_snprintf(buf, sizeof(buf), "ISON"); |
|
4416
008b56d257e1
[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
b0c18ea1dee8
[gaim-migrate @ 2147]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
008b56d257e1
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
648 | |
|
008b56d257e1
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
649 | found = TRUE; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
650 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
651 | } |
| 2086 | 652 | } |
|
4416
008b56d257e1
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
653 | |
|
008b56d257e1
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
654 | if (found) { |
|
008b56d257e1
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
655 | g_snprintf(buf + n, sizeof(buf) - n, "\r\n"); |
|
008b56d257e1
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
656 | irc_write(id->fd, buf, strlen(buf)); |
|
008b56d257e1
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
657 | id->bc++; |
|
008b56d257e1
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
658 | } |
|
008b56d257e1
[gaim-migrate @ 4689]
Christian Hammond <chipx86@chipx86.com>
parents:
4373
diff
changeset
|
659 | |
|
2131
ef072ae1b2b8
[gaim-migrate @ 2141]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
666 | struct gaim_conversation *c = irc_find_chat(gc, chan); |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
667 | struct gaim_chat *chat; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
668 | char **buf, **tmp; |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
669 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
670 | if (!c) return; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
671 | if (*names == ':') names++; |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
672 | |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
673 | chat = GAIM_CHAT(c); |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
674 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
675 | buf = g_strsplit(names, " ", -1); |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
676 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
677 | for (tmp = buf; *tmp; tmp++) |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
678 | gaim_chat_add_user(chat, *tmp, NULL); |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
679 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
686 | struct gaim_conversation *c; |
|
cf899ee07d1d
[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
cf899ee07d1d
[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
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
692 | |
|
cf899ee07d1d
[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
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
700 | struct gaim_conversation *c; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
701 | char *po = strchr(text, ' '); |
| 2086 | 702 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
703 | if (!po) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
704 | return; |
| 2086 | 705 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
706 | *po = 0; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
707 | po += 2; |
| 2086 | 708 | |
|
2328
e0f0ac1f2833
[gaim-migrate @ 2338]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2312
diff
changeset
|
709 | if ((c = irc_find_chat(gc, text))) { |
|
e0f0ac1f2833
[gaim-migrate @ 2338]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2312
diff
changeset
|
710 | char buf[IRC_BUF_LEN]; |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
711 | gaim_chat_set_topic(GAIM_CHAT(c), NULL, po); |
|
2328
e0f0ac1f2833
[gaim-migrate @ 2338]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2312
diff
changeset
|
712 | g_snprintf(buf, sizeof(buf), _("<B>%s has changed the topic to: %s</B>"), |
| 3708 | 713 | text, po); |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
714 | |
|
cf899ee07d1d
[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
e0f0ac1f2833
[gaim-migrate @ 2338]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
722 | struct irc_data *id = gc->proto_data; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
723 | char *cm = id->chanmodes; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
724 | int type = 0; |
| 2086 | 725 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
726 | if (strchr(id->nickmodes, mode)) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
727 | return TRUE; |
| 2086 | 728 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
729 | while (*cm) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
730 | if (*cm == ',') |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
731 | type++; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
732 | else if (*cm == mode) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
733 | switch (type) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
734 | case 0: |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
735 | case 1: |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
736 | return TRUE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
737 | case 2: |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
738 | if (sign == '+') |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
739 | return TRUE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
740 | case 3: |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
741 | return FALSE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
742 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
743 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
744 | cm++; |
| 2086 | 745 | } |
| 746 | ||
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
747 | return FALSE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
cf899ee07d1d
[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
fb23a9c3334c
[gaim-migrate @ 4465]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4201
diff
changeset
|
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
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
761 | |
|
cf899ee07d1d
[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
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
767 | { |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
768 | struct gaim_conversation *c = irc_find_chat(gc, room); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
769 | GList *r; |
| 2086 | 770 | |
|
4621
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
771 | if (mode != 'o' && mode != 'v' && mode != 'h') |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
772 | return; |
| 2086 | 773 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
774 | if (!c) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
775 | return; |
| 2086 | 776 | |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
777 | r = gaim_chat_get_users(GAIM_CHAT(c)); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
778 | while (r) { |
|
4621
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
779 | gboolean op = FALSE, halfop = FALSE, voice = FALSE; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
780 | char *who = r->data; |
|
4621
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
781 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
782 | if (*who == '@') { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
783 | op = TRUE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
784 | who++; |
| 2086 | 785 | } |
|
4621
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
786 | |
|
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
787 | if (*who == '%') { |
|
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
788 | halfop = TRUE; |
|
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
789 | who++; |
|
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
790 | } |
|
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
791 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
792 | if (*who == '+') { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
793 | voice = TRUE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
794 | who++; |
| 2086 | 795 | } |
|
4621
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
796 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
797 | if (!strcmp(who, nick)) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
798 | char *tmp, buf[IRC_BUF_LEN]; |
|
4621
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
799 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
800 | if (mode == 'o') { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
801 | if (sign == '-') |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
802 | op = FALSE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
803 | else |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
804 | op = TRUE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
805 | } |
|
4621
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
806 | |
|
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
807 | if (mode == 'h') { |
|
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
808 | if (sign == '-') |
|
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
809 | halfop = FALSE; |
|
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
810 | else |
|
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
811 | halfop = TRUE; |
|
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
812 | } |
|
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
813 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
814 | if (mode == 'v') { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
815 | if (sign == '-') |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
816 | voice = FALSE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
817 | else |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
818 | voice = TRUE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
819 | } |
|
4621
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
820 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
821 | tmp = g_strdup(r->data); |
|
4621
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
822 | g_snprintf(buf, sizeof(buf), "%s%s%s", |
|
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
823 | (op ? "@" : (halfop ? "%" : "")), |
|
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
824 | voice ? "+" : "", nick); |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
825 | gaim_chat_rename_user(GAIM_CHAT(c), tmp, buf); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
826 | g_free(tmp); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
827 | return; |
| 2086 | 828 | } |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
829 | r = r->next; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
830 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
835 | { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
836 | struct irc_data *id = gc->proto_data; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
837 | int offset = n324 ? 4 : 3; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
838 | char *chan = word[offset]; |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
839 | struct gaim_conversation *c = irc_find_chat(gc, chan); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
840 | char *modes = word[offset + 1]; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
841 | int len = strlen(word_eol[offset]) - 1; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
842 | char sign = *modes++; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
843 | int arg = 1; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
844 | char *argstr; |
| 3452 | 845 | char *who = word[1]; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
846 | |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
847 | if (!c) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
848 | return; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
849 | |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
850 | if (word_eol[offset][len] == ' ') |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
851 | word_eol[offset][len] = 0; |
| 2086 | 852 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
853 | while (TRUE) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
854 | switch (*modes) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
855 | case 0: |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
856 | return; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
857 | case '+': |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
858 | case '-': |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
859 | sign = *modes; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
860 | break; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
861 | default: |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
862 | if (mode_has_arg(gc, sign, *modes)) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
863 | argstr = word[++arg + offset]; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
864 | else |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
865 | argstr = ""; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
866 | if (strchr(id->nickmodes, *modes)) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
870 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
871 | modes++; |
| 2086 | 872 | } |
| 873 | } | |
|
2167
cbb558585911
[gaim-migrate @ 2177]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
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
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
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: |
| 934 | id->liststr = g_string_append(id->liststr, "<b>User: </b>"); | |
| 935 | break; | |
| 936 | case 312: | |
| 937 | id->liststr = g_string_append(id->liststr, "<b>Server: </b>"); | |
| 938 | break; | |
| 939 | case 313: | |
| 940 | g_snprintf(tmp, sizeof(tmp), "<b>IRC Operator:</b> %s ", word[4]); | |
| 941 | id->liststr = g_string_append(id->liststr, tmp); | |
| 942 | break; | |
| 943 | case 314: | |
| 944 | id->liststr = g_string_append(id->liststr, "<b>User: </b>"); | |
| 945 | g_snprintf(tmp, sizeof(tmp), "<b>%s</b> (%s@%s) %s", | |
| 946 | word[4], word[5], word[6], word_eol[8]); | |
| 947 | id->liststr = g_string_append(id->liststr, tmp); | |
| 948 | return; | |
| 949 | case 317: | |
| 950 | id->liststr = g_string_append(id->liststr, "<b>Idle Time: </b>"); | |
| 951 | break; | |
| 952 | case 319: | |
| 953 | id->liststr = g_string_append(id->liststr, "<b>Channels: </b>"); | |
| 954 | break; | |
|
4509
0e33a763917f
[gaim-migrate @ 4785]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
955 | /* Numeric 320 is used by the freenode irc network for showing |
|
0e33a763917f
[gaim-migrate @ 4785]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
956 | * that a user is identified to services (Jason Straw <misato@wopn.org>)*/ |
|
0e33a763917f
[gaim-migrate @ 4785]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
957 | case 320: |
|
0e33a763917f
[gaim-migrate @ 4785]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
958 | g_snprintf(tmp, sizeof(tmp), "%s is an Identified User", word[4]); |
|
0e33a763917f
[gaim-migrate @ 4785]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
959 | id->liststr = g_string_append(id->liststr, tmp); |
|
0e33a763917f
[gaim-migrate @ 4785]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
960 | return; |
| 3707 | 961 | default: |
| 962 | break; | |
| 2648 | 963 | } |
| 3452 | 964 | |
|
2651
4b6621749f07
[gaim-migrate @ 2664]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2650
diff
changeset
|
965 | if (word_eol[5][0] == ':') |
|
2829
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
966 | id->liststr = g_string_append(id->liststr, word_eol[5] + 1); |
| 3452 | 967 | /* Nicer idle time output, by jonas@birme.se */ |
| 968 | else if (isdigit(word_eol[5][0])) { | |
| 969 | time_t idle = atol(word_eol[5]); | |
| 970 | time_t signon = atol(strchr(word_eol[5], ' ')); | |
| 971 | ||
| 972 | g_snprintf(tmp, sizeof(tmp), | |
| 973 | "%ld seconds [signon: %s]", (idle / 1000), ctime(&signon)); | |
| 974 | id->liststr = g_string_append(id->liststr, tmp); | |
| 975 | } | |
|
2651
4b6621749f07
[gaim-migrate @ 2664]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2650
diff
changeset
|
976 | else |
|
2829
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
977 | id->liststr = g_string_append(id->liststr, word_eol[5]); |
|
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
978 | } |
|
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
979 | |
| 3751 | 980 | static void |
| 981 | handle_roomlist(struct gaim_connection *gc, char *word[], char *word_eol[]) | |
|
2829
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
982 | { |
|
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
983 | struct irc_data *id = gc->proto_data; |
| 2648 | 984 | |
|
2829
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
985 | if (!id->in_list) { |
|
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
986 | id->in_list = TRUE; |
|
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
987 | id->liststr = g_string_new(""); |
|
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
988 | } else { |
|
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
989 | id->liststr = g_string_append(id->liststr, "<BR>"); |
|
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
990 | id->in_list = TRUE; |
|
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
991 | } |
|
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
992 | |
|
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
993 | id->liststr = g_string_append(id->liststr, word_eol[4]); |
| 2648 | 994 | } |
| 995 | ||
| 3751 | 996 | static void |
| 997 | irc_change_nick(void *a, char *b) { | |
| 3511 | 998 | struct gaim_connection *gc = a; |
| 999 | struct irc_data *id = gc->proto_data; | |
| 1000 | char buf[IRC_BUF_LEN]; | |
| 1001 | g_snprintf(buf, sizeof(buf), "NICK %s\r\n", b); | |
| 1002 | irc_write(id->fd, buf, strlen(buf)); | |
| 5150 | 1003 | g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", b); |
| 3511 | 1004 | } |
| 1005 | ||
| 3751 | 1006 | static void |
| 1007 | process_numeric(struct gaim_connection *gc, char *word[], char *word_eol[]) | |
| 2086 | 1008 | { |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1009 | struct irc_data *id = gc->proto_data; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1010 | char *text = word_eol[3]; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1011 | int n = atoi(word[2]); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1012 | |
| 4793 | 1013 | if (!g_ascii_strncasecmp(gc->displayname, text, strlen(gc->displayname))) |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1014 | text += strlen(gc->displayname) + 1; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1015 | if (*text == ':') |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1016 | text++; |
| 2086 | 1017 | |
| 3707 | 1018 | /* RPL_ and ERR_ */ |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1019 | switch (n) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1020 | case 4: |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1021 | if (!strncmp(word[5], "u2.10", 5)) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1022 | id->six_modes = TRUE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1023 | else |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1024 | id->six_modes = FALSE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1025 | break; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1026 | case 5: |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1027 | handle_005(gc, word, word_eol); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1028 | break; |
| 3707 | 1029 | case 301: /* RPL_AWAY */ |
|
2619
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
1030 | if (id->in_whois) { |
|
2829
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1031 | id->liststr = g_string_append(id->liststr, "<BR><b>Away: </b>"); |
|
2651
4b6621749f07
[gaim-migrate @ 2664]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2650
diff
changeset
|
1032 | |
|
4b6621749f07
[gaim-migrate @ 2664]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2650
diff
changeset
|
1033 | if (word_eol[5][0] == ':') |
|
2829
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1034 | id->liststr = g_string_append(id->liststr, word_eol[5] + 1); |
|
2651
4b6621749f07
[gaim-migrate @ 2664]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2650
diff
changeset
|
1035 | else |
|
2829
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1036 | id->liststr = g_string_append(id->liststr, word_eol[5]); |
|
2619
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
1037 | } else |
|
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
1038 | irc_got_im(gc, word[4], word_eol[5], IM_FLAG_AWAY, time(NULL)); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1039 | break; |
| 3707 | 1040 | case 303: /* RPL_ISON */ |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1041 | handle_list(gc, &word_eol[4][1]); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1042 | break; |
| 3707 | 1043 | case 311: /* RPL_WHOISUSER */ |
| 1044 | case 312: /* RPL_WHOISSERVER */ | |
| 1045 | case 313: /* RPL_WHOISOPERATOR */ | |
| 1046 | case 314: /* RPL_WHOWASUSER */ | |
| 1047 | case 317: /* RPL_WHOISIDLE */ | |
| 1048 | case 319: /* RPL_WHOISCHANNELS */ | |
|
4509
0e33a763917f
[gaim-migrate @ 4785]
Christian Hammond <chipx86@chipx86.com>
parents:
4491
diff
changeset
|
1049 | case 320: /* FreeNode Identified */ |
| 2648 | 1050 | handle_whois(gc, word, word_eol, n); |
|
2619
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
1051 | break; |
| 3707 | 1052 | case 322: /* RPL_LIST */ |
|
2829
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1053 | handle_roomlist(gc, word, word_eol); |
|
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1054 | break; |
| 3707 | 1055 | case 315: /* RPL_ENDOFWHO */ |
| 1056 | case 318: /* RPL_ENDOFWHOIS */ | |
| 1057 | case 323: /* RPL_LISTEND */ | |
| 1058 | case 369: /* RPL_ENDOFWHOWAS */ | |
|
2829
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1059 | if ((id->in_whois || id->in_list) && id->liststr) { |
|
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1060 | GString *str = decode_html(id->liststr->str); |
|
2791
26bdc3e83257
[gaim-migrate @ 2804]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2782
diff
changeset
|
1061 | g_show_info_text(gc, NULL, 2, str->str, NULL); |
|
2619
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
1062 | g_string_free(str, TRUE); |
|
2829
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1063 | g_string_free(id->liststr, TRUE); |
|
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1064 | id->liststr = NULL; |
|
2652
850d23f81722
[gaim-migrate @ 2665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2651
diff
changeset
|
1065 | id->in_whois = FALSE; |
|
2829
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
1066 | id->in_list = FALSE; |
|
2619
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
1067 | } |
|
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
1068 | break; |
| 3707 | 1069 | case 324: /* RPL_CHANNELMODEIS */ |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1070 | handle_mode(gc, word, word_eol, TRUE); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1071 | break; |
| 3707 | 1072 | case 331: /* RPL_NOTOPIC */ |
| 1073 | handle_notopic(gc, text); | |
| 1074 | break; | |
| 1075 | case 332: /* RPL_TOPIC */ | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1076 | handle_topic(gc, text); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1077 | break; |
| 3707 | 1078 | case 351: /* RPL_VERSION */ |
| 3452 | 1079 | handle_version(gc, word, word_eol, n); |
| 1080 | break; | |
| 3707 | 1081 | case 352: /* RPL_WHOREPLY */ |
| 3708 | 1082 | handle_who(gc, word, word_eol, n); |
| 1083 | break; | |
| 3707 | 1084 | case 353: /* RPL_NAMREPLY */ |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1085 | handle_names(gc, word[5], word_eol[6]); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1086 | break; |
| 3707 | 1087 | case 376: /* RPL_ENDOFMOTD */ |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1088 | irc_request_buddy_update(gc); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1089 | break; |
| 3707 | 1090 | case 382: /* RPL_REHASHING */ |
| 1091 | do_error_dialog(_("Rehashing server"), _("IRC Operator"), GAIM_ERROR); | |
| 1092 | break; | |
| 1093 | case 401: /* ERR_NOSUCHNICK */ | |
| 1094 | do_error_dialog(_("No such nick/channel"), _("IRC Error"), GAIM_ERROR); | |
|
2652
850d23f81722
[gaim-migrate @ 2665]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2651
diff
changeset
|
1095 | break; |
| 3707 | 1096 | case 402: /* ERR_NOSUCHSERVER */ |
| 1097 | do_error_dialog(_("No such server"), _("IRC Error"), GAIM_ERROR); | |
| 4995 | 1098 | break; |
| 1099 | case 422: /* ERR_NOMOTD */ | |
| 1100 | break; /* drop it - bringing up dialog for NOMOTD is annoying */ | |
| 3707 | 1101 | case 431: /* ERR_NONICKNAMEGIVEN */ |
| 1102 | do_error_dialog(_("No nickname given"), _("IRC Error"), GAIM_ERROR); | |
|
2619
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
1103 | break; |
| 3707 | 1104 | case 481: /* ERR_NOPRIVILEGES */ |
| 1105 | do_error_dialog(_("You're not an IRC operator!"), _("IRC Error"), GAIM_ERROR); | |
| 1106 | break; | |
| 3511 | 1107 | case 433: |
| 1108 | do_prompt_dialog(_("That nick is already in use. Please enter a new nick"), gc->displayname, gc, irc_change_nick, NULL); | |
| 3605 | 1109 | break; |
| 3452 | 1110 | default: |
| 3707 | 1111 | /* Other error messages */ |
| 3452 | 1112 | if (n > 400 && n < 502) { |
| 1113 | char errmsg[IRC_BUF_LEN]; | |
| 1114 | char *errmsg1 = strrchr(text, ':'); | |
| 1115 | g_snprintf(errmsg, sizeof(errmsg), "IRC Error %d", n); | |
| 1116 | if (errmsg) | |
| 3536 | 1117 | do_error_dialog(errmsg, errmsg1 ? errmsg1+1 : NULL, GAIM_ERROR); |
| 3452 | 1118 | } |
| 1119 | break; | |
| 2086 | 1120 | } |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1121 | } |
| 2086 | 1122 | |
| 3751 | 1123 | static gboolean |
| 5136 | 1124 | is_channel(struct gaim_connection *gc, const char *name) |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1125 | { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1126 | struct irc_data *id = gc->proto_data; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1127 | if (strchr(id->chantypes, *name)) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1128 | return TRUE; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1129 | return FALSE; |
| 2086 | 1130 | } |
| 1131 | ||
| 3751 | 1132 | static void |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1133 | irc_rem_chat_bud(struct gaim_connection *gc, char *nick, struct gaim_conversation *b, char *reason) |
| 2086 | 1134 | { |
| 1135 | ||
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1136 | struct gaim_chat *chat; |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1137 | |
| 4067 | 1138 | if (b) { |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1139 | GList *r; |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1140 | |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1141 | chat = GAIM_CHAT(b); |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1142 | |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1143 | r = gaim_chat_get_users(chat); |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1144 | |
| 4067 | 1145 | while (r) { |
| 1146 | char *who = r->data; | |
| 1147 | if (*who == '@') | |
| 1148 | who++; | |
|
4621
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
1149 | if (*who == '%') |
|
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
1150 | who++; |
| 4067 | 1151 | if (*who == '+') |
| 1152 | who++; | |
| 4793 | 1153 | if (!gaim_utf8_strcasecmp(who, nick)) { |
| 4067 | 1154 | char *tmp = g_strdup(r->data); |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1155 | gaim_chat_remove_user(chat, tmp, reason); |
| 4067 | 1156 | g_free(tmp); |
| 1157 | break; | |
| 1158 | } | |
| 1159 | r = r->next; | |
| 4065 | 1160 | } |
| 4067 | 1161 | } else { |
| 1162 | GSList *bcs = gc->buddy_chats; | |
| 1163 | while (bcs) { | |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1164 | struct gaim_conversation *bc = bcs->data; |
| 4067 | 1165 | irc_rem_chat_bud(gc, nick, bc, reason); |
| 1166 | bcs = bcs->next; | |
| 1167 | } | |
| 2086 | 1168 | } |
| 1169 | } | |
| 1170 | ||
| 3751 | 1171 | static void |
| 1172 | irc_change_name(struct gaim_connection *gc, char *old, char *new) | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1173 | { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1174 | GSList *bcs = gc->buddy_chats; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1175 | char buf[IRC_BUF_LEN]; |
| 2086 | 1176 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1177 | while (bcs) { |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1178 | struct gaim_conversation *b = bcs->data; |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1179 | struct gaim_chat *chat; |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1180 | GList *r; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1181 | |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1182 | chat = GAIM_CHAT(b); |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1183 | |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1184 | r = gaim_chat_get_users(chat); |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1185 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1186 | while (r) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1187 | char *who = r->data; |
|
2292
59f96c90f6c4
[gaim-migrate @ 2302]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2291
diff
changeset
|
1188 | int n = 0; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1189 | if (*who == '@') |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1190 | buf[n++] = *who++; |
|
4621
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
1191 | if (*who == '%') |
|
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
1192 | buf[n++] = *who++; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1193 | if (*who == '+') |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1194 | buf[n++] = *who++; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1195 | g_snprintf(buf + n, sizeof(buf) - n, "%s", new); |
|
2312
ab271cb1a539
[gaim-migrate @ 2322]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2310
diff
changeset
|
1196 | if (!strcmp(who, old)) { |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1197 | char *tmp = g_strdup(r->data); |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1198 | gaim_chat_rename_user(chat, tmp, buf); |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1199 | r = gaim_chat_get_users(chat); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1200 | g_free(tmp); |
|
2725
a844d0964552
[gaim-migrate @ 2738]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2687
diff
changeset
|
1201 | break; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1202 | } else |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1203 | r = r->next; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1204 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1205 | bcs = bcs->next; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1206 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1207 | } |
| 2086 | 1208 | |
| 3751 | 1209 | static void |
| 1210 | handle_privmsg(struct gaim_connection *gc, char *to, char *nick, char *msg) | |
|
2339
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1211 | { |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1212 | if (is_channel(gc, to)) { |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1213 | struct gaim_conversation *c = irc_find_chat(gc, to); |
|
2339
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1214 | if (!c) |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1215 | return; |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1216 | irc_got_chat_in(gc, gaim_chat_get_id(GAIM_CHAT(c)), |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1217 | nick, 0, msg, time(NULL)); |
|
2339
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1218 | } else { |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1219 | char *tmp = g_malloc(strlen(nick) + 2); |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1220 | g_snprintf(tmp, strlen(nick) + 2, "@%s", nick); |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1221 | if (gaim_find_conversation(tmp)) |
|
2339
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1222 | irc_got_im(gc, tmp, msg, 0, time(NULL)); |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1223 | else { |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1224 | *tmp = '+'; |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1225 | if (gaim_find_conversation(tmp)) |
|
2339
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1226 | irc_got_im(gc, tmp, msg, 0, time(NULL)); |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1227 | else |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1228 | irc_got_im(gc, nick, msg, 0, time(NULL)); |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1229 | } |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1230 | g_free(tmp); |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1231 | } |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1232 | } |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1233 | |
| 3751 | 1234 | static void |
| 1235 | dcc_chat_init(struct dcc_chat *data) { | |
|
4249
62583b5d3663
[gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents:
4245
diff
changeset
|
1236 | if (g_slist_find(connections, data->gc)) { |
| 4634 | 1237 | proxy_connect(data->gc->account, data->ip_address, data->port, dcc_chat_callback, data); |
|
4249
62583b5d3663
[gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents:
4245
diff
changeset
|
1238 | } else { |
|
62583b5d3663
[gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents:
4245
diff
changeset
|
1239 | g_free(data); |
|
62583b5d3663
[gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents:
4245
diff
changeset
|
1240 | } |
| 3029 | 1241 | } |
| 1242 | ||
| 3751 | 1243 | static void |
| 1244 | dcc_chat_cancel(struct dcc_chat *data){ | |
|
4249
62583b5d3663
[gaim-migrate @ 4499]
Robert McQueen <robot101@debian.org>
parents:
4245
diff
changeset
|
1245 | if (g_slist_find(connections, data->gc) && find_dcc_chat(data->gc, data->nick)) { |
| 3029 | 1246 | dcc_chat_list = g_slist_remove(dcc_chat_list, data); |
| 1247 | gaim_input_remove (data->inpa); | |
| 1248 | close (data->fd); | |
| 1249 | } | |
| 1250 | g_free(data); | |
| 1251 | } | |
| 1252 | ||
| 3751 | 1253 | static void |
| 1254 | irc_convo_closed(struct gaim_connection *gc, char *who) | |
| 3029 | 1255 | { |
| 1256 | struct dcc_chat *dchat = find_dcc_chat(gc, who); | |
| 1257 | if (!dchat) | |
| 1258 | return; | |
| 1259 | ||
| 3730 | 1260 | dcc_chat_cancel(dchat); |
| 3029 | 1261 | } |
| 1262 | ||
|
4514
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1263 | static void |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1264 | irc_xfer_init(struct gaim_xfer *xfer) |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1265 | { |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1266 | struct irc_xfer_data *data = (struct irc_xfer_data *)xfer->data; |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1267 | |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1268 | gaim_xfer_start(xfer, -1, data->ip, data->port); |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1269 | } |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1270 | |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1271 | static void |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1272 | irc_xfer_end(struct gaim_xfer *xfer) |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1273 | { |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1274 | struct irc_xfer_data *data = (struct irc_xfer_data *)xfer->data; |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1275 | |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1276 | data->idata->file_transfers = g_slist_remove(data->idata->file_transfers, |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1277 | xfer); |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1278 | |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1279 | g_free(data); |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1280 | xfer->data = NULL; |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1281 | } |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1282 | |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1283 | static void |
|
4675
8e0a7b537ca2
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1284 | irc_xfer_cancel_send(struct gaim_xfer *xfer) |
|
8e0a7b537ca2
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1285 | { |
|
8e0a7b537ca2
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1286 | struct irc_xfer_data *data = (struct irc_xfer_data *)xfer->data; |
|
8e0a7b537ca2
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1287 | |
|
8e0a7b537ca2
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1288 | data->idata->file_transfers = g_slist_remove(data->idata->file_transfers, |
|
8e0a7b537ca2
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1289 | xfer); |
|
8e0a7b537ca2
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1290 | |
|
8e0a7b537ca2
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1291 | g_free(data); |
|
8e0a7b537ca2
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1292 | xfer->data = NULL; |
|
8e0a7b537ca2
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1293 | } |
|
8e0a7b537ca2
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1294 | |
|
8e0a7b537ca2
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1295 | static void |
|
8e0a7b537ca2
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1296 | irc_xfer_cancel_recv(struct gaim_xfer *xfer) |
|
4514
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1297 | { |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1298 | struct irc_xfer_data *data = (struct irc_xfer_data *)xfer->data; |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1299 | |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1300 | data->idata->file_transfers = g_slist_remove(data->idata->file_transfers, |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1301 | xfer); |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1302 | |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1303 | g_free(data); |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1304 | xfer->data = NULL; |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1305 | } |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1306 | |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1307 | static void |
|
4594
a96954344300
[gaim-migrate @ 4879]
Mark Doliner <markdoliner@pidgin.im>
parents:
4552
diff
changeset
|
1308 | irc_xfer_ack(struct gaim_xfer *xfer, const char *buffer, size_t size) |
|
4514
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1309 | { |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1310 | guint32 pos; |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1311 | |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1312 | pos = htonl(gaim_xfer_get_bytes_sent(xfer)); |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1313 | |
|
4552
ae21ed2da9fb
[gaim-migrate @ 4832]
Christian Hammond <chipx86@chipx86.com>
parents:
4514
diff
changeset
|
1314 | write(xfer->fd, (char *)&pos, 4); |
|
4514
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1315 | } |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1316 | |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1317 | /* NOTE: This was taken from irssi. Thanks irssi! */ |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1318 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1319 | static gboolean |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1320 | is_numeric(const char *str, char end_char) |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1321 | { |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1322 | g_return_val_if_fail(str != NULL, FALSE); |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1323 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1324 | if (*str == '\0' || *str == end_char) |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1325 | return FALSE; |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1326 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1327 | while (*str != '\0' && *str != end_char) { |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1328 | if (*str < '0' || *str > '9') |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1329 | return FALSE; |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1330 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1331 | str++; |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1332 | } |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1333 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1334 | return TRUE; |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1335 | } |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1336 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1337 | #define get_params_match(params, pos) \ |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1338 | (is_numeric(params[pos], '\0') && \ |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1339 | is_numeric(params[(pos)+1], '\0') && atol(params[(pos)+1]) < 65536 && \ |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1340 | is_numeric(params[(pos)+2], '\0')) |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1341 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1342 | /* Return number of parameters in `params' that belong to file name. |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1343 | Normally it's paramcount-3, but I don't think anything forbids of |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1344 | adding some extension where there could be more parameters after |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1345 | file size. |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1346 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1347 | MIRC sends filenames with spaces quoted ("file name"), but I'd rather |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1348 | not trust that entirely either. At least some clients that don't really |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1349 | understand the problem with spaces in file names sends the file name |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1350 | without any quotes. */ |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1351 | static int |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1352 | get_file_params_count(char **params, int paramcount) |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1353 | { |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1354 | int pos, best; |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1355 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1356 | if (*params[0] == '"') { |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1357 | /* quoted file name? */ |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1358 | for (pos = 0; pos < paramcount - 3; pos++) { |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1359 | if (params[pos][strlen(params[pos]) - 1] == '"' && |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1360 | get_params_match(params, pos + 1)) { |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1361 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1362 | return pos + 1; |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1363 | } |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1364 | } |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1365 | } |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1366 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1367 | best = paramcount - 3; |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1368 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1369 | for (pos = paramcount - 3; pos > 0; pos--) { |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1370 | if (get_params_match(params, pos)) |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1371 | best = pos; |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1372 | } |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1373 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1374 | return best; |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1375 | } |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1376 | |
| 3751 | 1377 | static void |
| 1378 | handle_ctcp(struct gaim_connection *gc, char *to, char *nick, | |
|
2339
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1379 | char *msg, char *word[], char *word_eol[]) |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1380 | { |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1381 | struct irc_data *id = gc->proto_data; |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1382 | char buf[IRC_BUF_LEN]; |
| 3735 | 1383 | char out[IRC_BUF_LEN]; |
|
2339
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1384 | |
| 4793 | 1385 | if (!g_ascii_strncasecmp(msg, "VERSION", 7)) { |
| 3735 | 1386 | g_snprintf(buf, sizeof(buf), "\001VERSION Gaim " VERSION ": The Penguin Pimpin' " |
| 1387 | "Multi-protocol Messaging Client: " WEBSITE "\001"); | |
| 1388 | irc_send_notice (gc, nick, buf); | |
| 1389 | g_snprintf(out, sizeof(out), ">> CTCP VERSION requested from %s", nick); | |
| 1390 | do_error_dialog(out, _("IRC CTCP info"), GAIM_INFO); | |
|
2339
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1391 | } |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1392 | else if (!g_ascii_strncasecmp(msg, "CLIENTINFO", 10)) { |
| 3735 | 1393 | g_snprintf(buf, sizeof(buf), "\001CLIENTINFO USERINFO CLIENTINFO VERSION\001"); |
| 1394 | irc_send_notice (gc, nick, buf); | |
| 1395 | g_snprintf(out, sizeof(out), ">> CTCP CLIENTINFO requested from %s", nick); | |
| 1396 | do_error_dialog(out, _("IRC CTCP info"), GAIM_INFO); | |
| 3707 | 1397 | } |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1398 | else if (!g_ascii_strncasecmp(msg, "USERINFO", 8)) { |
| 4491 | 1399 | g_snprintf(buf, sizeof(buf), "\001USERINFO Alias: %s\001", gc->account->alias); |
| 3735 | 1400 | irc_send_notice (gc, nick, buf); |
| 1401 | g_snprintf(out, sizeof(out), ">> CTCP USERINFO requested from %s", nick); | |
| 1402 | do_error_dialog(out, _("IRC CTCP info"), GAIM_INFO); | |
| 3707 | 1403 | } |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1404 | else if (!g_ascii_strncasecmp(msg, "ACTION", 6)) { |
|
2339
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1405 | char *po = strchr(msg + 6, 1); |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1406 | char *tmp; |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1407 | if (po) *po = 0; |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1408 | tmp = g_strconcat("/me", msg + 6, NULL); |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1409 | handle_privmsg(gc, to, nick, tmp); |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1410 | g_free(tmp); |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1411 | } |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1412 | else if (!g_ascii_strncasecmp(msg, "PING", 4)) { |
| 4793 | 1413 | g_snprintf(buf, sizeof(buf), "\001%s\001", msg); |
| 3735 | 1414 | irc_send_notice (gc, nick, buf); |
| 1415 | g_snprintf(out, sizeof(out), ">> CTCP PING requested from %s", nick); | |
| 4793 | 1416 | do_error_dialog(out, _("IRC CTCP info"), GAIM_INFO); |
| 3735 | 1417 | } |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1418 | else if (!g_ascii_strncasecmp(msg, "DCC CHAT", 8)) { |
| 3029 | 1419 | char **chat_args = g_strsplit(msg, " ", 5); |
| 1420 | char ask[1024]; | |
| 3707 | 1421 | struct dcc_chat *dccchat = g_new0(struct dcc_chat, 1); |
| 3029 | 1422 | dccchat->gc = gc; |
| 1423 | g_snprintf(dccchat->ip_address, sizeof(dccchat->ip_address), chat_args[3]); | |
| 1424 | dccchat->port=atoi(chat_args[4]); | |
| 1425 | g_snprintf(dccchat->nick, sizeof(dccchat->nick), nick); | |
| 3730 | 1426 | g_snprintf(ask, sizeof(ask), _("%s would like to establish a DCC chat"), nick); |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
1427 | 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 | 1428 | } |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1429 | else if (!g_ascii_strncasecmp(msg, "DCC SEND", 8)) { |
|
4514
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1430 | struct gaim_xfer *xfer; |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1431 | char **send_args; |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1432 | char *ip, *filename; |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1433 | struct irc_xfer_data *xfer_data; |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1434 | size_t size; |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1435 | int param_count, file_params, len; |
|
4514
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1436 | int port; |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1437 | |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1438 | /* Okay, this is ugly, but should get us past "DCC SEND" */ |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1439 | msg = strstr(msg, "DCC SEND"); |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1440 | msg = strchr(msg, ' ') + 1; |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1441 | msg = strchr(msg, ' ') + 1; |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1442 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1443 | /* SEND <file name> <address> <port> <size> [...] */ |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1444 | send_args = g_strsplit(msg, " ", -1); |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1445 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1446 | for (param_count = 0; send_args[param_count] != NULL; param_count++) |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1447 | ; |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1448 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1449 | if (param_count < 4) { |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1450 | char buf[IRC_BUF_LEN]; |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1451 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1452 | g_snprintf(buf, sizeof(buf), |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1453 | _("Received an invalid file send request from %s."), |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1454 | nick); |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1455 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1456 | do_error_dialog(buf, _("IRC Error"), GAIM_ERROR); |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1457 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1458 | return; |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1459 | } |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1460 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1461 | file_params = get_file_params_count(send_args, param_count); |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1462 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1463 | /* send_args[paramcount - 1][strlen(send_args[5])-1] = 0; */ |
| 3616 | 1464 | |
|
4514
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1465 | /* Give these better names. */ |
|
5211
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1466 | ip = send_args[file_params]; |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1467 | port = atoi(send_args[file_params + 1]); |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1468 | size = atoi(send_args[file_params + 2]); |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1469 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1470 | send_args[file_params] = NULL; |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1471 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1472 | filename = g_strjoinv(" ", send_args); |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1473 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1474 | g_strfreev(send_args); |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1475 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1476 | len = strlen(filename); |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1477 | |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1478 | if (len > 1 && *filename == '"' && filename[len - 1] == '"') { |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1479 | /* "file name" - MIRC sends filenames with spaces like this */ |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1480 | filename[len - 1] = '\0'; |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1481 | g_memmove(filename, filename + 1, len); |
|
94d9756c381f
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
1482 | } |
|
4514
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1483 | |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1484 | /* Setup the IRC-specific transfer data. */ |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1485 | xfer_data = g_malloc0(sizeof(struct irc_xfer_data)); |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1486 | xfer_data->ip = ip; |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1487 | xfer_data->port = port; |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1488 | xfer_data->idata = id; |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1489 | |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1490 | /* Build the file transfer handle. */ |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1491 | xfer = gaim_xfer_new(gc->account, GAIM_XFER_RECEIVE, nick); |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1492 | xfer->data = xfer_data; |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1493 | |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1494 | /* Set the info about the incoming file. */ |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1495 | gaim_xfer_set_filename(xfer, filename); |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1496 | gaim_xfer_set_size(xfer, size); |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1497 | |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1498 | g_free(filename); |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1499 | |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1500 | /* Setup our I/O op functions. */ |
|
4675
8e0a7b537ca2
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1501 | gaim_xfer_set_init_fnc(xfer, irc_xfer_init); |
|
8e0a7b537ca2
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1502 | gaim_xfer_set_end_fnc(xfer, irc_xfer_end); |
|
8e0a7b537ca2
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1503 | gaim_xfer_set_cancel_send_fnc(xfer, irc_xfer_cancel_send); |
|
8e0a7b537ca2
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1504 | gaim_xfer_set_cancel_recv_fnc(xfer, irc_xfer_cancel_recv); |
|
8e0a7b537ca2
[gaim-migrate @ 4986]
Christian Hammond <chipx86@chipx86.com>
parents:
4634
diff
changeset
|
1505 | gaim_xfer_set_ack_fnc(xfer, irc_xfer_ack); |
| 3616 | 1506 | |
|
4514
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1507 | /* Keep track of this transfer for later. */ |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1508 | id->file_transfers = g_slist_append(id->file_transfers, xfer); |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1509 | |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1510 | /* Now perform the request! */ |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1511 | gaim_xfer_request(xfer); |
| 3616 | 1512 | } |
|
2339
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1513 | } |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1514 | |
| 3751 | 1515 | static gboolean |
| 1516 | irc_parse(struct gaim_connection *gc, char *buf) | |
| 2086 | 1517 | { |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1518 | struct irc_data *idata = gc->proto_data; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1519 | gchar outbuf[IRC_BUF_LEN]; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1520 | char *word[PDIWORDS], *word_eol[PDIWORDS]; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1521 | char pdibuf[522]; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1522 | char *ex, ip[128], nick[128]; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1523 | char *cmd; |
| 2086 | 1524 | |
| 1525 | /* Check for errors */ | |
| 3452 | 1526 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1527 | if (*buf != ':') { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1528 | if (!strncmp(buf, "NOTICE ", 7)) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1529 | buf += 7; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1530 | if (!strncmp(buf, "PING ", 5)) { |
|
2687
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1531 | int r = FALSE; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1532 | g_snprintf(outbuf, sizeof(outbuf), "PONG %s\r\n", buf + 5); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1533 | if (irc_write(idata->fd, outbuf, strlen(outbuf)) < 0) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1534 | hide_login_progress(gc, _("Unable to write")); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1535 | signoff(gc); |
|
2687
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1536 | r = TRUE; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1537 | } |
|
2687
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1538 | return r; |
| 2086 | 1539 | } |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1540 | /* XXX doesn't handle ERROR */ |
|
2687
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1541 | return FALSE; |
| 2086 | 1542 | } |
| 1543 | ||
|
2782
6a8b77483bb0
[gaim-migrate @ 2795]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2773
diff
changeset
|
1544 | if (!idata->online) { |
|
6a8b77483bb0
[gaim-migrate @ 2795]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2773
diff
changeset
|
1545 | /* Now lets sign ourselves on */ |
|
6a8b77483bb0
[gaim-migrate @ 2795]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2773
diff
changeset
|
1546 | account_online(gc); |
|
6a8b77483bb0
[gaim-migrate @ 2795]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2773
diff
changeset
|
1547 | serv_finish_login(gc); |
|
6a8b77483bb0
[gaim-migrate @ 2795]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2773
diff
changeset
|
1548 | |
|
6a8b77483bb0
[gaim-migrate @ 2795]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2773
diff
changeset
|
1549 | /* we don't call this now because otherwise some IRC servers might not like us */ |
|
6a8b77483bb0
[gaim-migrate @ 2795]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2773
diff
changeset
|
1550 | idata->timer = g_timeout_add(20000, irc_request_buddy_update, gc); |
|
6a8b77483bb0
[gaim-migrate @ 2795]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2773
diff
changeset
|
1551 | idata->online = TRUE; |
|
6a8b77483bb0
[gaim-migrate @ 2795]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2773
diff
changeset
|
1552 | } |
|
6a8b77483bb0
[gaim-migrate @ 2795]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2773
diff
changeset
|
1553 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1554 | buf++; |
| 2086 | 1555 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1556 | process_data_init(pdibuf, buf, word, word_eol, FALSE); |
| 2086 | 1557 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1558 | if (atoi(word[2])) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1559 | if (*word_eol[3]) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1560 | process_numeric(gc, word, word_eol); |
|
2687
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1561 | return FALSE; |
| 2086 | 1562 | } |
| 1563 | ||
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1564 | cmd = word[2]; |
| 2086 | 1565 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1566 | ex = strchr(pdibuf, '!'); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1567 | if (!ex) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1568 | strncpy(ip, pdibuf, sizeof(ip)); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1569 | ip[sizeof(ip)-1] = 0; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1570 | strncpy(nick, pdibuf, sizeof(nick)); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1571 | nick[sizeof(nick)-1] = 0; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1572 | } else { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1573 | strncpy(ip, ex + 1, sizeof(ip)); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1574 | ip[sizeof(ip)-1] = 0; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1575 | strncpy(nick, pdibuf, sizeof(nick)); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1576 | nick[sizeof(nick)-1] = 0; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1577 | if ((ex - pdibuf) < sizeof (nick)) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1578 | nick[ex - pdibuf] = 0; /* cut the buffer at the '!' */ |
| 2086 | 1579 | } |
| 1580 | ||
| 2847 | 1581 | if (!strcmp(cmd, "INVITE")) { |
| 5234 | 1582 | GHashTable *components = g_hash_table_new_full(g_str_hash, g_str_equal, |
| 1583 | g_free, g_free); | |
| 1584 | ||
| 1585 | g_hash_table_replace(components, g_strdup("channel"), g_strdup(word[4])); | |
| 1586 | ||
| 1587 | serv_got_chat_invite(gc, word[4] + 1, nick, NULL, components); | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1588 | } else if (!strcmp(cmd, "JOIN")) { |
| 3751 | 1589 | irc_parse_join(gc, nick, word, word_eol); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1590 | } else if (!strcmp(cmd, "KICK")) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1591 | if (!strcmp(gc->displayname, word[4])) { |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1592 | struct gaim_conversation *c = irc_find_chat(gc, word[3]); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1593 | if (!c) |
|
2687
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1594 | return FALSE; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1595 | gc->buddy_chats = g_slist_remove(gc->buddy_chats, c); |
| 4491 | 1596 | gaim_conversation_set_account(c, NULL); |
| 3707 | 1597 | g_snprintf(outbuf, sizeof(outbuf), _("You have been kicked from %s: %s"), |
| 1598 | word[3], *word_eol[5] == ':' ? word_eol[5] + 1 : word_eol[5]); | |
| 1599 | do_error_dialog(outbuf, _("IRC Error"), GAIM_ERROR); | |
|
2820
4e07191ca3d0
[gaim-migrate @ 2833]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2801
diff
changeset
|
1600 | } else { |
|
4e07191ca3d0
[gaim-migrate @ 2833]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2801
diff
changeset
|
1601 | char *reason = *word_eol[5] == ':' ? word_eol[5] + 1 : word_eol[5]; |
|
4e07191ca3d0
[gaim-migrate @ 2833]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2801
diff
changeset
|
1602 | char *msg = g_strdup_printf(_("Kicked by %s: %s"), nick, reason); |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1603 | struct gaim_conversation *c = irc_find_chat(gc, word[3]); |
| 4065 | 1604 | irc_rem_chat_bud(gc, word[4], c, msg); |
|
2820
4e07191ca3d0
[gaim-migrate @ 2833]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2801
diff
changeset
|
1605 | g_free(msg); |
|
4e07191ca3d0
[gaim-migrate @ 2833]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2801
diff
changeset
|
1606 | } |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1607 | } else if (!strcmp(cmd, "KILL")) { /* */ |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1608 | } else if (!strcmp(cmd, "MODE")) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1609 | handle_mode(gc, word, word_eol, FALSE); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1610 | } else if (!strcmp(cmd, "NICK")) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1611 | char *new = *word_eol[3] == ':' ? word_eol[3] + 1 : word_eol[3]; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1612 | if (!strcmp(gc->displayname, nick)) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1613 | g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", new); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1614 | irc_change_name(gc, nick, new); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1615 | } else if (!strcmp(cmd, "NOTICE")) { |
| 3751 | 1616 | irc_parse_notice(gc, nick, ex, word, word_eol); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1617 | } else if (!strcmp(cmd, "PART")) { |
| 3751 | 1618 | if (!irc_parse_part(gc, nick, cmd, word, word_eol)) |
|
2687
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1619 | return FALSE; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1620 | } else if (!strcmp(cmd, "PRIVMSG")) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1621 | char *to, *msg; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1622 | if (!*word[3]) |
|
2687
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1623 | return FALSE; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1624 | to = word[3]; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1625 | msg = *word_eol[4] == ':' ? word_eol[4] + 1 : word_eol[4]; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1626 | if (msg[0] == 1 && msg[strlen (msg) - 1] == 1) { /* ctcp */ |
| 4793 | 1627 | if (!g_ascii_strncasecmp(msg + 1, "DCC ", 4)) |
|
2339
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1628 | process_data_init(pdibuf, buf, word, word_eol, TRUE); |
|
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1629 | handle_ctcp(gc, to, nick, msg + 1, word, word_eol); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1630 | } else { |
|
2339
b42203c69d52
[gaim-migrate @ 2352]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2331
diff
changeset
|
1631 | handle_privmsg(gc, to, nick, msg); |
| 2086 | 1632 | } |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1633 | } else if (!strcmp(cmd, "PONG")) { /* */ |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1634 | } else if (!strcmp(cmd, "QUIT")) { |
| 4065 | 1635 | irc_rem_chat_bud(gc, nick, irc_find_chat(gc, word[3]), *word_eol[3] == ':' ? word_eol[3] + 1 : word_eol[3]); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1636 | } else if (!strcmp(cmd, "TOPIC")) { |
| 3751 | 1637 | irc_parse_topic(gc, nick, word, word_eol); |
| 3707 | 1638 | } else if (!strcmp(cmd, "WALLOPS")) { /* Don't know if a dialog box is the right way? */ |
| 1639 | char *msg = strrchr(word_eol[0], ':'); | |
| 1640 | if (msg) | |
| 1641 | do_error_dialog(msg+1, _("IRC Operator"), GAIM_ERROR); | |
| 2086 | 1642 | } |
|
2687
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1643 | |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1644 | return FALSE; |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1645 | } |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1646 | |
| 3751 | 1647 | /* CTCP by jonas@birme.se */ |
| 1648 | static void | |
| 1649 | irc_parse_notice(struct gaim_connection *gc, char *nick, char *ex, | |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1650 | char *word[], char *word_eol[]) |
| 3751 | 1651 | { |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1652 | char buf[IRC_BUF_LEN]; |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1653 | |
| 4793 | 1654 | if (!g_ascii_strcasecmp(word[4], ":\001CLIENTINFO")) { |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1655 | char *p = g_strrstr(word_eol[5], "\001"); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1656 | *p = 0; |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1657 | g_snprintf(buf, sizeof(buf), "CTCP Answer: %s", word_eol[5]); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1658 | do_error_dialog(buf, _("CTCP ClientInfo"), GAIM_INFO); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1659 | |
| 4793 | 1660 | } else if (!g_ascii_strcasecmp(word[4], ":\001USERINFO")) { |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1661 | char *p = g_strrstr(word_eol[5], "\001"); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1662 | *p = 0; |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1663 | g_snprintf(buf, sizeof(buf), "CTCP Answer: %s", word_eol[5]); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1664 | do_error_dialog(buf, _("CTCP UserInfo"), GAIM_INFO); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1665 | |
| 4793 | 1666 | } else if (!g_ascii_strcasecmp(word[4], ":\001VERSION")) { |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1667 | char *p = g_strrstr(word_eol[5], "\001"); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1668 | *p = 0; |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1669 | g_snprintf(buf, sizeof(buf), "CTCP Answer: %s", word_eol[5]); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1670 | do_error_dialog(buf, _("CTCP Version"), GAIM_INFO); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1671 | |
| 4793 | 1672 | } else if (!g_ascii_strcasecmp(word[4], ":\001PING")) { |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1673 | char *p = g_strrstr(word_eol[5], "\001"); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1674 | struct timeval ping_time; |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1675 | struct timeval now; |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1676 | gchar **vector; |
| 3751 | 1677 | |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1678 | if (p) |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1679 | *p = 0; |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1680 | |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1681 | vector = g_strsplit(word_eol[5], " ", 2); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1682 | |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1683 | if (gettimeofday(&now, NULL) == 0 && vector != NULL) { |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1684 | if (now.tv_usec - atol(vector[1]) < 0) { |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1685 | ping_time.tv_sec = now.tv_sec - atol(vector[0]) - 1; |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1686 | ping_time.tv_usec = now.tv_usec - atol(vector[1]) + 1000000; |
| 3751 | 1687 | |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1688 | } else { |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1689 | ping_time.tv_sec = now.tv_sec - atol(vector[0]); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1690 | ping_time.tv_usec = now.tv_usec - atol(vector[1]); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1691 | } |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1692 | |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1693 | g_snprintf(buf, sizeof(buf), |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1694 | "CTCP Ping reply from %s: %lu.%.03lu seconds", |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1695 | nick, ping_time.tv_sec, (ping_time.tv_usec/1000)); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1696 | |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1697 | do_error_dialog(buf, _("CTCP Ping"), GAIM_INFO); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1698 | g_strfreev(vector); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1699 | } |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1700 | } else { |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1701 | if (*word_eol[4] == ':') word_eol[4]++; |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1702 | if (ex) |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1703 | irc_got_im(gc, nick, word_eol[4], 0, time(NULL)); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1704 | } |
| 3751 | 1705 | } |
| 1706 | ||
| 1707 | static void | |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1708 | irc_parse_join(struct gaim_connection *gc, char *nick, |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1709 | char *word[], char *word_eol[]) |
| 3751 | 1710 | { |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1711 | char *chan = *word[3] == ':' ? word[3] + 1 : word[3]; |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1712 | static int id = 1; |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1713 | struct gaim_conversation *c; |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1714 | char *hostmask, *p; |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1715 | |
| 4793 | 1716 | if (!gaim_utf8_strcasecmp(gc->displayname, nick)) { |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1717 | serv_got_joined_chat(gc, id++, chan); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1718 | } else { |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1719 | c = irc_find_chat(gc, chan); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1720 | if (c) { |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1721 | hostmask = g_strdup(word[1]); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1722 | p = strchr(hostmask, '!'); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1723 | if (p) { |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1724 | char *pend = strchr(p, ' '); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1725 | if (pend) { |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1726 | *pend = 0; |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1727 | } |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1728 | |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1729 | gaim_chat_add_user(GAIM_CHAT(c), nick, p + 1); |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1730 | |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1731 | g_free(hostmask); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1732 | } |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1733 | } |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1734 | } |
| 3751 | 1735 | } |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1736 | |
| 3751 | 1737 | static void |
| 1738 | irc_parse_topic(struct gaim_connection *gc, char *nick, | |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1739 | char *word[], char *word_eol[]) |
| 3751 | 1740 | { |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1741 | struct gaim_conversation *c = irc_find_chat(gc, word[3]); |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1742 | char *topic = *word_eol[4] == ':' ? word_eol[4] + 1 : word_eol[4]; |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1743 | char buf[IRC_BUF_LEN]; |
| 3751 | 1744 | |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1745 | if (c) { |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1746 | gaim_chat_set_topic(GAIM_CHAT(c), nick, topic); |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1747 | g_snprintf(buf, sizeof(buf), |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1748 | _("<B>%s has changed the topic to: %s</B>"), nick, topic); |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1749 | |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1750 | gaim_conversation_write(c, NULL, buf, -1, WFLAG_SYSTEM, time(NULL)); |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1751 | } |
| 3751 | 1752 | } |
| 1753 | ||
| 1754 | static gboolean | |
| 1755 | irc_parse_part(struct gaim_connection *gc, char *nick, char *cmd, | |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1756 | char *word[], char *word_eol[]) |
| 3751 | 1757 | { |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1758 | char *chan = cmd + 5; |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1759 | struct gaim_conversation *c; |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1760 | struct gaim_chat *chat; |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1761 | char *reason = word_eol[4]; |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1762 | GList *r; |
| 3751 | 1763 | |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1764 | if (*chan == ':') |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1765 | chan++; |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1766 | if (*reason == ':') |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1767 | reason++; |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1768 | if (!(c = irc_find_chat(gc, chan))) |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1769 | return FALSE; |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1770 | if (!strcmp(nick, gc->displayname)) { |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1771 | serv_got_chat_left(gc, gaim_chat_get_id(GAIM_CHAT(c))); |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1772 | return FALSE; |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1773 | } |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1774 | |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1775 | chat = GAIM_CHAT(c); |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1776 | |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1777 | r = gaim_chat_get_users(GAIM_CHAT(c)); |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1778 | |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1779 | while (r) { |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1780 | char *who = r->data; |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1781 | if (*who == '@') |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1782 | who++; |
|
4621
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
1783 | if (*who == '%') |
|
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
1784 | who++; |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1785 | if (*who == '+') |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1786 | who++; |
| 4793 | 1787 | if (!gaim_utf8_strcasecmp(who, nick)) { |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1788 | char *tmp = g_strdup(r->data); |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1789 | gaim_chat_remove_user(chat, tmp, reason); |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1790 | g_free(tmp); |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1791 | break; |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1792 | } |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1793 | r = r->next; |
|
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1794 | } |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
1795 | return TRUE; |
| 3751 | 1796 | } |
| 1797 | ||
| 1798 | static void | |
|
4201
547da94c5a14
[gaim-migrate @ 4432]
Christian Hammond <chipx86@chipx86.com>
parents:
4115
diff
changeset
|
1799 | irc_callback(gpointer data, gint source, GaimInputCondition condition) |
|
2687
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1800 | { |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1801 | struct gaim_connection *gc = data; |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1802 | struct irc_data *idata = gc->proto_data; |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1803 | int i = 0; |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1804 | gchar buf[1024]; |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1805 | gboolean off; |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1806 | |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1807 | i = read(idata->fd, buf, 1024); |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1808 | if (i <= 0) { |
|
3074
b6510843df8f
[gaim-migrate @ 3088]
Jim Seymour <jseymour@users.sourceforge.net>
parents:
3063
diff
changeset
|
1809 | hide_login_progress_error(gc, "Read error"); |
|
2687
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1810 | signoff(gc); |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1811 | return; |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1812 | } |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1813 | |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1814 | idata->rxqueue = g_realloc(idata->rxqueue, i + idata->rxlen + 1); |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1815 | memcpy(idata->rxqueue + idata->rxlen, buf, i); |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1816 | idata->rxlen += i; |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1817 | idata->rxqueue[idata->rxlen] = 0; |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1818 | |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1819 | while (1) { |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1820 | char *d, *e; |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1821 | int len; |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1822 | |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1823 | if (!idata->rxqueue || ((e = strchr(idata->rxqueue, '\n')) == NULL)) |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1824 | return; |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1825 | |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1826 | len = e - idata->rxqueue + 1; |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1827 | d = g_strndup(idata->rxqueue, len); |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1828 | g_strchomp(d); |
|
5221
86a1444cc9ac
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1829 | gaim_debug(GAIM_DEBUG_MISC, "irc", "S: %s\n", d); |
| 3707 | 1830 | |
| 3708 | 1831 | /* REMOVE ME BEFORE SUBMIT! */ |
| 3751 | 1832 | /*fprintf(stderr, "IRC S: %s\n", d);*/ |
| 3708 | 1833 | |
|
2687
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1834 | idata->rxlen -= len; |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1835 | if (idata->rxlen) { |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1836 | char *tmp = g_strdup(e + 1); |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1837 | g_free(idata->rxqueue); |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1838 | idata->rxqueue = tmp; |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1839 | } else { |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1840 | g_free(idata->rxqueue); |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1841 | idata->rxqueue = NULL; |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1842 | } |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1843 | |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1844 | off = irc_parse(gc, d); |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1845 | |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1846 | g_free(d); |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1847 | |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1848 | if (off) |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1849 | return; |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1850 | } |
| 2086 | 1851 | } |
| 1852 | ||
| 3751 | 1853 | static void |
| 1854 | irc_login_callback(gpointer data, gint source, GaimInputCondition condition) | |
| 2086 | 1855 | { |
| 1856 | struct gaim_connection *gc = data; | |
| 1857 | struct irc_data *idata; | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1858 | char hostname[256]; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1859 | char buf[IRC_BUF_LEN]; |
| 3751 | 1860 | char *test; |
| 1861 | GError *err = NULL; | |
| 1862 | ||
| 2086 | 1863 | if (!g_slist_find(connections, gc)) { |
| 1864 | close(source); | |
| 1865 | return; | |
| 1866 | } | |
| 1867 | ||
| 1868 | idata = gc->proto_data; | |
| 1869 | ||
| 4456 | 1870 | if (source < 0) { |
| 2086 | 1871 | hide_login_progress(gc, "Write error"); |
| 1872 | signoff(gc); | |
| 1873 | return; | |
| 1874 | } | |
| 4452 | 1875 | idata->fd = source; |
| 3751 | 1876 | |
| 1877 | /* Try a quick conversion to see if the specified encoding is OK */ | |
| 4491 | 1878 | test = g_convert("test", strlen("test"), gc->account->proto_opt[USEROPT_CHARSET], |
| 3751 | 1879 | "UTF-8", NULL, NULL, &err); |
| 1880 | if (err) { | |
|
5221
86a1444cc9ac
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1881 | gaim_debug(GAIM_DEBUG_ERROR, "irc", |
|
86a1444cc9ac
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
1882 | "Couldn't initialize %s for IRC charset conversion, using ISO-8859-1\n", |
| 4491 | 1883 | gc->account->proto_opt[USEROPT_CHARSET]); |
| 1884 | strcpy(gc->account->proto_opt[USEROPT_CHARSET], "ISO-8859-1"); | |
| 3751 | 1885 | } |
| 1886 | ||
|
4223
e09b40511084
[gaim-migrate @ 4467]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4221
diff
changeset
|
1887 | g_free(test); |
|
e09b40511084
[gaim-migrate @ 4467]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4221
diff
changeset
|
1888 | |
|
2574
47e3e3c56194
[gaim-migrate @ 2587]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2536
diff
changeset
|
1889 | gethostname(hostname, sizeof(hostname) - 1); |
|
47e3e3c56194
[gaim-migrate @ 2587]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2536
diff
changeset
|
1890 | hostname[sizeof(hostname) - 1] = 0; |
|
47e3e3c56194
[gaim-migrate @ 2587]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2536
diff
changeset
|
1891 | if (!*hostname) |
|
47e3e3c56194
[gaim-migrate @ 2587]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2536
diff
changeset
|
1892 | g_snprintf(hostname, sizeof(hostname), "localhost"); |
|
3789
10d651e63c22
[gaim-migrate @ 3929]
Christian Hammond <chipx86@chipx86.com>
parents:
3751
diff
changeset
|
1893 | |
| 4491 | 1894 | if (*gc->account->password) { |
| 1895 | g_snprintf(buf, sizeof(buf), "PASS %s\r\n", gc->account->password); | |
|
3789
10d651e63c22
[gaim-migrate @ 3929]
Christian Hammond <chipx86@chipx86.com>
parents:
3751
diff
changeset
|
1896 | |
|
10d651e63c22
[gaim-migrate @ 3929]
Christian Hammond <chipx86@chipx86.com>
parents:
3751
diff
changeset
|
1897 | if (irc_write(idata->fd, buf, strlen(buf)) < 0) { |
|
10d651e63c22
[gaim-migrate @ 3929]
Christian Hammond <chipx86@chipx86.com>
parents:
3751
diff
changeset
|
1898 | hide_login_progress(gc, "Write error"); |
|
10d651e63c22
[gaim-migrate @ 3929]
Christian Hammond <chipx86@chipx86.com>
parents:
3751
diff
changeset
|
1899 | signoff(gc); |
|
10d651e63c22
[gaim-migrate @ 3929]
Christian Hammond <chipx86@chipx86.com>
parents:
3751
diff
changeset
|
1900 | return; |
|
10d651e63c22
[gaim-migrate @ 3929]
Christian Hammond <chipx86@chipx86.com>
parents:
3751
diff
changeset
|
1901 | } |
|
10d651e63c22
[gaim-migrate @ 3929]
Christian Hammond <chipx86@chipx86.com>
parents:
3751
diff
changeset
|
1902 | } |
|
10d651e63c22
[gaim-migrate @ 3929]
Christian Hammond <chipx86@chipx86.com>
parents:
3751
diff
changeset
|
1903 | |
| 3562 | 1904 | g_snprintf(buf, sizeof(buf), "USER %s %s %s :%s\r\n", |
| 4966 | 1905 | g_get_user_name(), hostname, |
| 1906 | idata->server, | |
| 1907 | *gc->account->alias ? gc->account->alias : "gaim"); | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1908 | if (irc_write(idata->fd, buf, strlen(buf)) < 0) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1909 | hide_login_progress(gc, "Write error"); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1910 | signoff(gc); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1911 | return; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1912 | } |
| 2086 | 1913 | |
| 4966 | 1914 | g_snprintf(buf, sizeof(buf), "NICK %s\r\n", gc->displayname); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1915 | if (irc_write(idata->fd, buf, strlen(buf)) < 0) { |
| 2086 | 1916 | hide_login_progress(gc, "Write error"); |
| 1917 | signoff(gc); | |
| 1918 | return; | |
| 1919 | } | |
| 1920 | ||
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1921 | gc->inpa = gaim_input_add(idata->fd, GAIM_INPUT_READ, irc_callback, gc); |
| 2086 | 1922 | } |
| 1923 | ||
| 3751 | 1924 | static void |
| 4491 | 1925 | irc_login(struct gaim_account *account) |
| 2086 | 1926 | { |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1927 | char buf[IRC_BUF_LEN]; |
|
4422
d7d5938502f0
[gaim-migrate @ 4695]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4416
diff
changeset
|
1928 | int rc; |
| 2086 | 1929 | |
| 4966 | 1930 | struct gaim_connection *gc; |
| 1931 | struct irc_data *idata; | |
| 1932 | char **parts; | |
| 1933 | if(!strrchr(account->username, '@')) { | |
| 1934 | char *username = g_strdup(account->username); | |
| 1935 | g_snprintf(account->username, sizeof(account->username), "%s@%s", | |
| 1936 | username, *account->proto_opt[USEROPT_SERV] ? | |
| 1937 | account->proto_opt[USEROPT_SERV] : DEFAULT_SERVER); | |
| 1938 | g_free(username); | |
| 1939 | strcpy(account->proto_opt[USEROPT_SERV], ""); | |
| 1940 | save_prefs(); | |
| 1941 | } | |
| 2086 | 1942 | |
| 4966 | 1943 | gc = new_gaim_conn(account); |
| 1944 | idata = gc->proto_data = g_new0(struct irc_data, 1); | |
| 1945 | ||
| 1946 | parts = g_strsplit(gc->username, "@", 2); | |
| 1947 | g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", parts[0]); | |
| 1948 | idata->server = g_strdup(parts[1]); | |
| 1949 | g_strfreev(parts); | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1950 | |
| 4834 | 1951 | g_snprintf(buf, sizeof(buf), _("Signon: %s"), gc->username); |
| 2086 | 1952 | set_login_progress(gc, 2, buf); |
| 1953 | ||
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1954 | idata->chantypes = g_strdup("#&!+"); |
| 3452 | 1955 | idata->chanmodes = g_strdup("beI,k,lnt"); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1956 | idata->nickmodes = g_strdup("ohv"); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1957 | idata->str = g_string_new(""); |
|
4422
d7d5938502f0
[gaim-migrate @ 4695]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4416
diff
changeset
|
1958 | idata->fd = -1; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1959 | |
| 4966 | 1960 | rc = proxy_connect(account, idata->server, |
| 4491 | 1961 | account->proto_opt[USEROPT_PORT][0] ? |
| 1962 | atoi(account->proto_opt[USEROPT_PORT]) : 6667, | |
| 1963 | irc_login_callback, gc); | |
| 1964 | if (!account->gc || (rc != 0)) { | |
| 2086 | 1965 | hide_login_progress(gc, "Unable to create socket"); |
| 1966 | signoff(gc); | |
| 1967 | return; | |
| 1968 | } | |
| 1969 | } | |
| 1970 | ||
| 3751 | 1971 | static void |
| 1972 | irc_close(struct gaim_connection *gc) | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1973 | { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1974 | struct irc_data *idata = (struct irc_data *)gc->proto_data; |
| 3618 | 1975 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1976 | gchar buf[IRC_BUF_LEN]; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1977 | |
| 3452 | 1978 | if (idata->str->len > 0) { |
| 1979 | g_snprintf(buf, sizeof(buf), "QUIT :%s\r\n", idata->str->str); | |
| 1980 | } else { | |
| 1981 | g_snprintf(buf, sizeof(buf), | |
| 1982 | "QUIT :Download Gaim [%s]\r\n", WEBSITE); | |
| 1983 | } | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1984 | irc_write(idata->fd, buf, strlen(buf)); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
1985 | |
|
2687
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1986 | if (idata->rxqueue) |
|
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
1987 | g_free(idata->rxqueue); |
| 3618 | 1988 | |
| 3619 | 1989 | idata->rxqueue = NULL; |
| 1990 | idata->rxlen = 0; | |
| 1991 | ||
| 3618 | 1992 | /* Kill any existing transfers */ |
| 1993 | while (idata->file_transfers) { | |
|
4514
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1994 | struct gaim_xfer *xfer; |
| 3618 | 1995 | |
|
4514
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1996 | xfer = (struct gaim_xfer *)idata->file_transfers->data; |
| 3618 | 1997 | |
|
4514
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1998 | gaim_xfer_end(xfer); |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
1999 | gaim_xfer_destroy(xfer); |
| 3618 | 2000 | |
| 3708 | 2001 | idata->file_transfers = idata->file_transfers->next; |
| 3618 | 2002 | } |
| 3619 | 2003 | idata->file_transfers = NULL; |
| 3618 | 2004 | |
|
2687
664e22f507cf
[gaim-migrate @ 2700]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2681
diff
changeset
|
2005 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2006 | g_free(idata->chantypes); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2007 | g_free(idata->chanmodes); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2008 | g_free(idata->nickmodes); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2009 | |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2010 | g_string_free(idata->str, TRUE); |
|
2829
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
2011 | if (idata->liststr) |
|
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
2012 | g_string_free(idata->liststr, TRUE); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2013 | |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2014 | if (idata->timer) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2015 | g_source_remove(idata->timer); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2016 | |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2017 | if (gc->inpa) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2018 | gaim_input_remove(gc->inpa); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2019 | |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2020 | close(idata->fd); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2021 | g_free(gc->proto_data); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2022 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2023 | |
| 3751 | 2024 | static void |
| 5136 | 2025 | set_mode_3(struct gaim_connection *gc, const char *who, int sign, int mode, |
| 3708 | 2026 | int start, int end, char *word[]) |
| 2086 | 2027 | { |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2028 | struct irc_data *id = gc->proto_data; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2029 | char buf[IRC_BUF_LEN]; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2030 | int left; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2031 | int i = start; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2032 | |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2033 | while (1) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2034 | left = end - i; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2035 | switch (left) { |
| 3708 | 2036 | case 0: |
| 2037 | return; | |
| 2038 | case 1: | |
| 2039 | g_snprintf(buf, sizeof(buf), "MODE %s %c%c %s\r\n", | |
| 2040 | who, sign, mode, word[i]); | |
| 2041 | i += 1; | |
| 2042 | break; | |
| 2043 | case 2: | |
| 2044 | g_snprintf(buf, sizeof(buf), "MODE %s %c%c%c %s %s\r\n", | |
| 2045 | who, sign, mode, mode, word[i], word[i + 1]); | |
| 2046 | i += 2; | |
| 2047 | break; | |
| 2048 | default: | |
| 2049 | g_snprintf(buf, sizeof(buf), "MODE %s %c%c%c%c %s %s %s\r\n", | |
| 2050 | who, sign, mode, mode, mode, | |
| 2051 | word[i], word[i + 1], word[i + 2]); | |
| 2052 | i += 2; | |
| 2053 | break; | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2054 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2055 | irc_write(id->fd, buf, strlen(buf)); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2056 | if (left < 3) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2057 | return; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2058 | } |
| 2086 | 2059 | } |
| 2060 | ||
| 3751 | 2061 | static void |
| 5136 | 2062 | set_mode_6(struct gaim_connection *gc, const char *who, int sign, int mode, |
| 3708 | 2063 | int start, int end, char *word[]) |
| 2086 | 2064 | { |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2065 | struct irc_data *id = gc->proto_data; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2066 | char buf[IRC_BUF_LEN]; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2067 | int left; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2068 | int i = start; |
| 2086 | 2069 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2070 | while (1) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2071 | left = end - i; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2072 | switch (left) { |
| 3708 | 2073 | case 0: |
| 2074 | return; | |
| 2075 | case 1: | |
| 2076 | g_snprintf(buf, sizeof(buf), "MODE %s %c%c %s\r\n", | |
| 2077 | who, sign, mode, word[i]); | |
| 2078 | i += 1; | |
| 2079 | break; | |
| 2080 | case 2: | |
| 2081 | g_snprintf(buf, sizeof(buf), "MODE %s %c%c%c %s %s\r\n", | |
| 2082 | who, sign, mode, mode, word[i], word[i + 1]); | |
| 2083 | i += 2; | |
| 2084 | break; | |
| 2085 | case 3: | |
| 2086 | g_snprintf(buf, sizeof(buf), "MODE %s %c%c%c%c %s %s %s\r\n", | |
| 2087 | who, sign, mode, mode, mode, | |
| 2088 | word[i], word[i + 1], word[i + 2]); | |
| 2089 | i += 3; | |
| 2090 | break; | |
| 2091 | case 4: | |
| 2092 | g_snprintf(buf, sizeof(buf), "MODE %s %c%c%c%c%c %s %s %s %s\r\n", | |
| 2093 | who, sign, mode, mode, mode, mode, | |
| 2094 | word[i], word[i + 1], word[i + 2], word[i + 3]); | |
| 2095 | i += 4; | |
| 2096 | break; | |
| 2097 | case 5: | |
| 2098 | g_snprintf(buf, sizeof(buf), "MODE %s %c%c%c%c%c%c %s %s %s %s %s\r\n", | |
| 2099 | who, sign, mode, mode, mode, mode, mode, | |
| 2100 | word[i], word[i + 1], word[i + 2], | |
| 2101 | word[i + 3], word[i + 4]); | |
| 2102 | i += 5; | |
| 2103 | break; | |
| 2104 | default: | |
| 2105 | g_snprintf(buf, sizeof(buf), "MODE %s %c%c%c%c%c%c%c %s %s %s %s %s %s\r\n", | |
| 2106 | who, sign, mode, mode, mode, mode, mode, mode, | |
| 2107 | word[i], word[i + 1], word[i + 2], | |
| 2108 | word[i + 3], word[i + 4], word[i + 5]); | |
| 2109 | i += 6; | |
| 2110 | break; | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2111 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2112 | irc_write(id->fd, buf, strlen(buf)); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2113 | if (left < 6) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2114 | return; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2115 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2116 | } |
| 2086 | 2117 | |
| 3751 | 2118 | static void |
| 5136 | 2119 | set_mode(struct gaim_connection *gc, const char *who, int sign, int mode, char *word[]) |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2120 | { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2121 | struct irc_data *id = gc->proto_data; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2122 | int i = 2; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2123 | |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2124 | while (1) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2125 | if (!*word[i]) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2126 | if (i == 2) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2127 | return; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2128 | if (id->six_modes) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2129 | set_mode_6(gc, who, sign, mode, 2, i, word); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2130 | else |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2131 | set_mode_3(gc, who, sign, mode, 2, i, word); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2132 | return; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2133 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2134 | i++; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2135 | } |
| 2086 | 2136 | } |
| 2137 | ||
| 3751 | 2138 | static void |
| 5136 | 2139 | set_chan_mode(struct gaim_connection *gc, const char *chan, const char *mode_str) |
| 3452 | 2140 | { |
| 2141 | struct irc_data *id = gc->proto_data; | |
| 2142 | char buf[IRC_BUF_LEN]; | |
| 2143 | ||
| 2144 | if ((mode_str[0] == '-') || (mode_str[0] == '+')) { | |
| 2145 | g_snprintf(buf, sizeof(buf), "MODE %s %s\r\n", chan, mode_str); | |
| 2146 | irc_write(id->fd, buf, strlen(buf)); | |
| 2147 | } | |
| 2148 | } | |
| 2149 | ||
| 3751 | 2150 | static int |
| 5136 | 2151 | handle_command(struct gaim_connection *gc, const char *who, const char *in_what) |
| 2086 | 2152 | { |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2153 | char buf[IRC_BUF_LEN]; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2154 | char pdibuf[IRC_BUF_LEN]; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2155 | char *word[PDIWORDS], *word_eol[PDIWORDS]; |
| 5136 | 2156 | char *tmp = g_strdup(in_what); |
| 3029 | 2157 | GString *str = encode_html(tmp); |
| 3751 | 2158 | char *intl; |
| 2159 | int len; | |
| 3029 | 2160 | struct dcc_chat *dccchat = find_dcc_chat(gc, who); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2161 | struct irc_data *id = gc->proto_data; |
| 5136 | 2162 | char *what = str->str; |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2163 | |
| 3029 | 2164 | g_free(tmp); |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2165 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2166 | if (*what != '/') { |
| 3029 | 2167 | if (dccchat) { |
| 3751 | 2168 | intl = irc_send_convert(gc, what, sizeof(buf), &len); |
| 2169 | g_snprintf(buf, sizeof(buf), "%s\r\n", intl); | |
| 2170 | g_free(intl); | |
| 3029 | 2171 | irc_write(dccchat->fd, buf, strlen(buf)); |
| 2172 | g_string_free(str, TRUE); | |
| 2173 | return 1; | |
| 2174 | } | |
| 3751 | 2175 | irc_send_privmsg (gc, who, what, TRUE); |
| 3029 | 2176 | g_string_free(str, TRUE); |
|
2303
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2302
diff
changeset
|
2177 | return 1; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2178 | } |
| 3029 | 2179 | |
| 3033 | 2180 | process_data_init(pdibuf, what + 1, word, word_eol, TRUE); |
| 2181 | g_string_free(str, FALSE); | |
| 4793 | 2182 | if (!g_ascii_strcasecmp(pdibuf, "ME")) { |
| 3029 | 2183 | if (dccchat) { |
| 3751 | 2184 | intl = irc_send_convert(gc, word_eol[2], sizeof(buf), &len); |
| 2185 | g_snprintf(buf, sizeof(buf), "\001ACTION %s\001\r\n", intl); | |
| 2186 | g_free(intl); | |
| 3029 | 2187 | irc_write(dccchat->fd, buf, strlen(buf)); |
| 3033 | 2188 | g_free(what); |
| 3029 | 2189 | return 1; |
| 2190 | } | |
| 3735 | 2191 | g_snprintf(buf, sizeof(buf), "\001ACTION %s\001", word_eol[2]); |
| 3751 | 2192 | irc_send_privmsg (gc, who, buf, FALSE); |
| 3033 | 2193 | g_free(what); |
|
2304
61fb1cad9850
[gaim-migrate @ 2314]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2303
diff
changeset
|
2194 | return 1; |
| 4793 | 2195 | } else if (!g_ascii_strcasecmp(pdibuf, "INVITE")) { |
| 2847 | 2196 | char buf[IRC_BUF_LEN]; |
| 2197 | g_snprintf(buf, sizeof(buf), "INVITE %s\r\n", word_eol[2]); | |
| 2198 | irc_write(id->fd, buf, strlen(buf)); | |
| 4793 | 2199 | } else if (!g_ascii_strcasecmp(pdibuf, "TOPIC")) { |
| 3033 | 2200 | if (!*word_eol[2]) { |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2201 | struct gaim_conversation *c; |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2202 | struct gaim_chat *chat; |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2203 | |
| 3501 | 2204 | c = irc_find_chat(gc, who); |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2205 | chat = GAIM_CHAT(c); |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2206 | |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2207 | g_snprintf(buf, sizeof(buf), _("Topic for %s is %s"), |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2208 | who, (gaim_chat_get_topic(chat) |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2209 | ? gaim_chat_get_topic(chat) |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2210 | : "(no topic set)")); |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2211 | |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2212 | gaim_conversation_write(c, NULL, buf, -1, |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2213 | WFLAG_SYSTEM | WFLAG_NOLOG, time(NULL)); |
| 3501 | 2214 | } else { |
| 3751 | 2215 | /* This could be too long */ |
| 2216 | intl = irc_send_convert(gc, word_eol[2], sizeof(buf), &len); | |
| 2217 | g_snprintf(buf, sizeof(buf), "TOPIC %s :%s\r\n", who, intl); | |
| 2218 | g_free(intl); | |
| 3501 | 2219 | irc_write(id->fd, buf, strlen(buf)); |
| 3033 | 2220 | } |
| 4793 | 2221 | } else if (!g_ascii_strcasecmp(pdibuf, "NICK")) { |
| 3033 | 2222 | if (!*word_eol[2]) { |
| 2223 | g_free(what); | |
|
2303
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2302
diff
changeset
|
2224 | return -EINVAL; |
| 3033 | 2225 | } |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2226 | g_snprintf(buf, sizeof(buf), "NICK %s\r\n", word_eol[2]); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2227 | irc_write(id->fd, buf, strlen(buf)); |
| 4793 | 2228 | } else if (!g_ascii_strcasecmp(pdibuf, "OP")) { |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2229 | set_mode(gc, who, '+', 'o', word); |
| 4793 | 2230 | } else if (!g_ascii_strcasecmp(pdibuf, "DEOP")) { |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2231 | set_mode(gc, who, '-', 'o', word); |
| 4793 | 2232 | } else if (!g_ascii_strcasecmp(pdibuf, "VOICE")) { |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2233 | set_mode(gc, who, '+', 'v', word); |
| 4793 | 2234 | } else if (!g_ascii_strcasecmp(pdibuf, "DEVOICE")) { |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2235 | set_mode(gc, who, '-', 'v', word); |
| 4793 | 2236 | } else if (!g_ascii_strcasecmp(pdibuf, "MODE")) { |
| 5136 | 2237 | set_chan_mode(gc, who, word_eol[2]); |
| 4793 | 2238 | } else if (!g_ascii_strcasecmp(pdibuf, "QUOTE")) { |
| 3033 | 2239 | if (!*word_eol[2]) { |
| 2240 | g_free(what); | |
|
2303
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2302
diff
changeset
|
2241 | return -EINVAL; |
| 3033 | 2242 | } |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2243 | g_snprintf(buf, sizeof(buf), "%s\r\n", word_eol[2]); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2244 | irc_write(id->fd, buf, strlen(buf)); |
| 4793 | 2245 | } else if (!g_ascii_strcasecmp(pdibuf, "SAY")) { |
| 3033 | 2246 | if (!*word_eol[2]) { |
| 2247 | g_free(what); | |
|
2303
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2302
diff
changeset
|
2248 | return -EINVAL; |
| 3033 | 2249 | } |
| 3751 | 2250 | irc_send_privmsg (gc, who, word_eol[2], TRUE); |
|
2305
9ba346379088
[gaim-migrate @ 2315]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2304
diff
changeset
|
2251 | return 1; |
| 4793 | 2252 | } else if (!g_ascii_strcasecmp(pdibuf, "MSG")) { |
| 3033 | 2253 | if (!*word[2]) { |
| 2254 | g_free(what); | |
|
2303
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2302
diff
changeset
|
2255 | return -EINVAL; |
| 3033 | 2256 | } |
| 2257 | if (!*word_eol[3]) { | |
| 2258 | g_free(what); | |
|
2303
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2302
diff
changeset
|
2259 | return -EINVAL; |
| 3033 | 2260 | } |
| 3751 | 2261 | irc_send_privmsg (gc, word[2], word_eol[3], TRUE); |
| 4793 | 2262 | } else if (!g_ascii_strcasecmp(pdibuf, "KICK")) { |
| 3033 | 2263 | if (!*word[2]) { |
| 2264 | g_free(what); | |
|
2303
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2302
diff
changeset
|
2265 | return -EINVAL; |
| 3033 | 2266 | } |
| 3751 | 2267 | if (*word_eol[3]) { |
| 2268 | intl = irc_send_convert(gc, word_eol[3], sizeof(buf), &len); | |
| 2269 | g_snprintf(buf, sizeof(buf), "KICK %s %s :%s\r\n", who, word[2], intl); | |
| 2270 | g_free(intl); | |
| 2271 | } else | |
|
2298
e9ff54016302
[gaim-migrate @ 2308]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2295
diff
changeset
|
2272 | g_snprintf(buf, sizeof(buf), "KICK %s %s\r\n", who, word[2]); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2273 | irc_write(id->fd, buf, strlen(buf)); |
| 4793 | 2274 | } else if (!g_ascii_strcasecmp(pdibuf, "JOIN") || !g_ascii_strcasecmp(pdibuf, "J")) { |
| 3033 | 2275 | if (!*word[2]) { |
| 2276 | g_free(what); | |
|
2303
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2302
diff
changeset
|
2277 | return -EINVAL; |
| 3033 | 2278 | } |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2279 | if (*word[3]) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2280 | g_snprintf(buf, sizeof(buf), "JOIN %s %s\r\n", word[2], word[3]); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2281 | else |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2282 | g_snprintf(buf, sizeof(buf), "JOIN %s\r\n", word[2]); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2283 | irc_write(id->fd, buf, strlen(buf)); |
| 4793 | 2284 | } else if (!g_ascii_strcasecmp(pdibuf, "PART")) { |
| 5136 | 2285 | const char *chan = *word[2] ? word[2] : who; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2286 | char *reason = word_eol[3]; |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2287 | struct gaim_conversation *c; |
| 3033 | 2288 | if (!is_channel(gc, chan)) { |
| 2289 | g_free(what); | |
|
2303
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2302
diff
changeset
|
2290 | return -EINVAL; |
| 3033 | 2291 | } |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2292 | c = irc_find_chat(gc, chan); |
| 3751 | 2293 | if (*reason) { |
| 2294 | intl = irc_send_convert(gc, reason, sizeof(buf), &len); | |
| 2295 | g_snprintf(buf, sizeof(buf), "PART %s :%s\r\n", chan, intl); | |
| 2296 | g_free(intl); | |
| 2297 | } else | |
| 2298 | g_snprintf(buf, sizeof(buf), "PART %s\r\n", chan); | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2299 | irc_write(id->fd, buf, strlen(buf)); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2300 | if (c) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2301 | gc->buddy_chats = g_slist_remove(gc->buddy_chats, c); |
| 4491 | 2302 | gaim_conversation_set_account(c, NULL); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2303 | g_snprintf(buf, sizeof(buf), _("You have left %s"), chan); |
| 3707 | 2304 | do_error_dialog(buf, _("IRC Part"), GAIM_INFO); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2305 | } |
| 4793 | 2306 | } else if (!g_ascii_strcasecmp(pdibuf, "WHOIS")) { |
|
2619
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
2307 | g_snprintf(buf, sizeof(buf), "WHOIS %s\r\n", word_eol[2]); |
|
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
2308 | irc_write(id->fd, buf, strlen(buf)); |
| 4793 | 2309 | } else if (!g_ascii_strcasecmp(pdibuf, "WHOWAS")) { |
| 3707 | 2310 | g_snprintf(buf, sizeof(buf), "WHOWAS %s\r\n", word_eol[2]); |
| 2311 | irc_write(id->fd, buf, strlen(buf)); | |
| 4793 | 2312 | } else if (!g_ascii_strcasecmp(pdibuf, "LIST")) { |
|
2829
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
2313 | g_snprintf(buf, sizeof(buf), "LIST\r\n"); |
|
7281bc8a7ccd
[gaim-migrate @ 2842]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2820
diff
changeset
|
2314 | irc_write(id->fd, buf, strlen(buf)); |
| 4793 | 2315 | } else if (!g_ascii_strcasecmp(pdibuf, "QUIT")) { |
| 3452 | 2316 | char *reason = word_eol[2]; |
| 2317 | id->str = g_string_insert(id->str, 0, reason); | |
| 2318 | do_quit(); | |
| 4793 | 2319 | } else if (!g_ascii_strcasecmp(pdibuf, "VERSION")) { |
| 3452 | 2320 | g_snprintf(buf, sizeof(buf), "VERSION\r\n"); |
| 2321 | irc_write(id->fd, buf, strlen(buf)); | |
| 4793 | 2322 | } else if (!g_ascii_strcasecmp(pdibuf, "W")) { |
| 3452 | 2323 | g_snprintf(buf, sizeof(buf), "WHO *\r\n"); |
| 2324 | irc_write(id->fd, buf, strlen(buf)); | |
| 4793 | 2325 | } else if (!g_ascii_strcasecmp(pdibuf, "REHASH")) { |
| 3707 | 2326 | g_snprintf(buf, sizeof(buf), "REHASH\r\n"); |
| 4793 | 2327 | irc_write(id->fd, buf, strlen(buf)); |
| 2328 | } else if (!g_ascii_strcasecmp(pdibuf, "RESTART")) { | |
| 3707 | 2329 | g_snprintf(buf, sizeof(buf), "RESTART\r\n"); |
| 2330 | irc_write(id->fd, buf, strlen(buf)); | |
| 4793 | 2331 | } else if (!g_ascii_strcasecmp(pdibuf, "CTCP")) { |
| 2332 | if (!g_ascii_strcasecmp(word[2], "CLIENTINFO")) { | |
| 3707 | 2333 | if (word[3]) |
| 2334 | irc_ctcp_clientinfo(gc, word[3]); | |
| 4793 | 2335 | } else if (!g_ascii_strcasecmp(word[2], "USERINFO")) { |
| 3707 | 2336 | if (word[3]) |
| 2337 | irc_ctcp_userinfo(gc, word[3]); | |
| 4793 | 2338 | } else if (!g_ascii_strcasecmp(word[2], "VERSION")) { |
| 3707 | 2339 | if (word[3]) |
| 2340 | irc_ctcp_version(gc, word[3]); | |
| 4793 | 2341 | |
| 2342 | } else if (!g_ascii_strcasecmp(word[2], "PING")) { | |
| 3735 | 2343 | if (word[3]) |
| 2344 | irc_ctcp_ping(gc, word[3]); | |
| 3707 | 2345 | } |
| 4793 | 2346 | } else if (!g_ascii_strcasecmp(pdibuf, "DCC")) { |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2347 | struct gaim_conversation *c = NULL; |
| 4793 | 2348 | if (!g_ascii_strcasecmp(word[2], "CHAT")) { |
| 3707 | 2349 | if (word[3]) |
| 2350 | irc_start_chat(gc, word[3]); | |
| 2351 | ||
| 2352 | if (is_channel(gc, who)) { | |
| 2353 | c = irc_find_chat(gc, who); | |
| 2354 | } else { | |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2355 | c = gaim_find_conversation(who); |
| 3707 | 2356 | } |
| 2357 | if (c) { | |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2358 | gaim_conversation_write(c, NULL, |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2359 | _("<I>Requesting DCC CHAT</I>"), |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2360 | -1, WFLAG_SYSTEM, time(NULL)); |
| 3707 | 2361 | } |
| 2362 | } | |
| 4793 | 2363 | } else if (!g_ascii_strcasecmp(pdibuf, "HELP")) { |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2364 | struct gaim_conversation *c = NULL; |
|
2301
878412a68d2d
[gaim-migrate @ 2311]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2299
diff
changeset
|
2365 | if (is_channel(gc, who)) { |
|
878412a68d2d
[gaim-migrate @ 2311]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2299
diff
changeset
|
2366 | c = irc_find_chat(gc, who); |
|
878412a68d2d
[gaim-migrate @ 2311]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2299
diff
changeset
|
2367 | } else { |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2368 | c = gaim_find_conversation(who); |
|
2301
878412a68d2d
[gaim-migrate @ 2311]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2299
diff
changeset
|
2369 | } |
| 3033 | 2370 | if (!c) { |
| 2371 | g_free(what); | |
|
2303
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2302
diff
changeset
|
2372 | return -EINVAL; |
| 3033 | 2373 | } |
| 4793 | 2374 | if (!g_ascii_strcasecmp(word[2], "OPER")) { |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2375 | gaim_conversation_write(c, NULL, |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2376 | _("<B>Operator commands:<BR>" |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2377 | "REHASH RESTART</B>"), |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2378 | -1, WFLAG_NOLOG, time(NULL)); |
| 4793 | 2379 | } else if (!g_ascii_strcasecmp(word[2], "CTCP")) { |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2380 | gaim_conversation_write(c, NULL, |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2381 | _("<B>CTCP commands:<BR>" |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2382 | "CLIENTINFO <nick><BR>" |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2383 | "USERINFO <nick><BR>" |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2384 | "VERSION <nick><BR>" |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2385 | "PING <nick></B><BR>"), |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2386 | -1, WFLAG_NOLOG, time(NULL)); |
| 4793 | 2387 | } else if (!g_ascii_strcasecmp(word[2], "DCC")) { |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2388 | gaim_conversation_write(c, NULL, |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2389 | _("<B>DCC commands:<BR>" |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2390 | "CHAT <nick></B>"), |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2391 | -1, WFLAG_NOLOG, time(NULL)); |
| 3707 | 2392 | } else { |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2393 | gaim_conversation_write(c, NULL, |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2394 | _("<B>Currently supported commands:<BR>" |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2395 | "WHOIS INVITE NICK LIST<BR>" |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2396 | "JOIN PART TOPIC KICK<BR>" |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2397 | "OP DEOP VOICE DEVOICE<BR>" |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2398 | "ME MSG QUOTE SAY QUIT<BR>" |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2399 | "MODE VERSION W WHOWAS<BR>" |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2400 | "Type /HELP OPER for operator commands<BR>" |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2401 | "Type /HELP CTCP for CTCP commands<BR>" |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2402 | "Type /HELP DCC for DCC commands"), |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2403 | -1, WFLAG_NOLOG, time(NULL)); |
| 3707 | 2404 | } |
|
2305
9ba346379088
[gaim-migrate @ 2315]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2304
diff
changeset
|
2405 | } else { |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2406 | struct gaim_conversation *c = NULL; |
|
2305
9ba346379088
[gaim-migrate @ 2315]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2304
diff
changeset
|
2407 | if (is_channel(gc, who)) { |
|
9ba346379088
[gaim-migrate @ 2315]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2304
diff
changeset
|
2408 | c = irc_find_chat(gc, who); |
|
9ba346379088
[gaim-migrate @ 2315]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2304
diff
changeset
|
2409 | } else { |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2410 | c = gaim_find_conversation(who); |
|
2305
9ba346379088
[gaim-migrate @ 2315]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2304
diff
changeset
|
2411 | } |
| 3033 | 2412 | if (!c) { |
| 2413 | g_free(what); | |
|
2305
9ba346379088
[gaim-migrate @ 2315]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2304
diff
changeset
|
2414 | return -EINVAL; |
| 3033 | 2415 | } |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2416 | |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2417 | gaim_conversation_write(c, NULL, _("<B>Unknown command</B>"), |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2418 | -1, WFLAG_NOLOG, time(NULL)); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2419 | } |
| 3033 | 2420 | g_free(what); |
|
2303
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2302
diff
changeset
|
2421 | return 0; |
| 2086 | 2422 | } |
| 2423 | ||
| 3751 | 2424 | static int |
| 5136 | 2425 | send_msg(struct gaim_connection *gc, const char *who, const char *what) |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2426 | { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2427 | char *cr = strchr(what, '\n'); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2428 | if (cr) { |
|
2303
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2302
diff
changeset
|
2429 | int ret = 0; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2430 | while (TRUE) { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2431 | if (cr) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2432 | *cr = 0; |
|
2303
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2302
diff
changeset
|
2433 | ret = handle_command(gc, who, what); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2434 | if (!cr) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2435 | break; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2436 | what = cr + 1; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2437 | if (!*what) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2438 | break; |
|
2295
6bb783723153
[gaim-migrate @ 2305]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2294
diff
changeset
|
2439 | *cr = '\n'; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2440 | cr = strchr(what, '\n'); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2441 | } |
|
2303
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2302
diff
changeset
|
2442 | return ret; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2443 | } else |
|
2303
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2302
diff
changeset
|
2444 | return handle_command(gc, who, what); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2445 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2446 | |
| 3751 | 2447 | static void |
| 2448 | irc_chat_invite(struct gaim_connection *gc, int idn, const char *message, const char *name) { | |
| 2847 | 2449 | char buf[IRC_BUF_LEN]; |
| 2450 | struct irc_data *id = gc->proto_data; | |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2451 | struct gaim_conversation *c = gaim_find_chat(gc, idn); |
| 2847 | 2452 | g_snprintf(buf, sizeof(buf), "INVITE %s %s\r\n", name, c->name); |
| 2453 | irc_write(id->fd, buf, strlen(buf)); | |
| 2454 | } | |
| 2455 | ||
| 3751 | 2456 | static int |
| 5136 | 2457 | irc_send_im(struct gaim_connection *gc, const char *who, const char *what, int len, int flags) |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2458 | { |
|
4621
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
2459 | if (*who == '@' || *who == '%' || *who == '+') |
|
2303
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2302
diff
changeset
|
2460 | return send_msg(gc, who + 1, what); |
|
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2302
diff
changeset
|
2461 | return send_msg(gc, who, what); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2462 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2463 | |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2464 | /* IRC doesn't have a buddy list, but we can still figure out who's online with ISON */ |
| 3751 | 2465 | static void |
| 2466 | irc_add_buddy(struct gaim_connection *gc, const char *who) {} | |
| 2467 | static void | |
| 2468 | irc_remove_buddy(struct gaim_connection *gc, char *who, char *group) {} | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2469 | |
| 3751 | 2470 | static GList * |
| 2471 | irc_chat_info(struct gaim_connection *gc) | |
| 2086 | 2472 | { |
|
2170
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
2473 | GList *m = NULL; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2474 | struct proto_chat_entry *pce; |
|
2170
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
2475 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2476 | pce = g_new0(struct proto_chat_entry, 1); |
|
2466
40502d550d98
[gaim-migrate @ 2479]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2459
diff
changeset
|
2477 | pce->label = _("Channel:"); |
| 5234 | 2478 | pce->identifier = "channel"; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2479 | m = g_list_append(m, pce); |
|
2170
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
2480 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2481 | pce = g_new0(struct proto_chat_entry, 1); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2482 | pce->label = _("Password:"); |
| 5234 | 2483 | pce->identifier = "password"; |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2484 | m = g_list_append(m, pce); |
|
2170
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
2485 | |
|
5c93594ff522
[gaim-migrate @ 2180]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2167
diff
changeset
|
2486 | return m; |
| 2086 | 2487 | } |
| 2488 | ||
| 5234 | 2489 | static void |
| 2490 | irc_join_chat(struct gaim_connection *gc, GHashTable *data) | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2491 | { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2492 | struct irc_data *id = gc->proto_data; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2493 | char buf[IRC_BUF_LEN]; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2494 | char *name, *pass; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2495 | |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2496 | if (!data) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2497 | return; |
| 5234 | 2498 | |
| 2499 | name = g_hash_table_lookup(data, "channel"); | |
| 2500 | pass = g_hash_table_lookup(data, "password"); | |
| 2501 | if (pass) { | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2502 | g_snprintf(buf, sizeof(buf), "JOIN %s %s\r\n", name, pass); |
|
2299
5e397ff326c9
[gaim-migrate @ 2309]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2298
diff
changeset
|
2503 | } else |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2504 | g_snprintf(buf, sizeof(buf), "JOIN %s\r\n", name); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2505 | irc_write(id->fd, buf, strlen(buf)); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2506 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2507 | |
| 3751 | 2508 | static void |
| 2509 | irc_chat_leave(struct gaim_connection *gc, int id) | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2510 | { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2511 | struct irc_data *idata = gc->proto_data; |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2512 | struct gaim_conversation *c = gaim_find_chat(gc, id); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2513 | char buf[IRC_BUF_LEN]; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2514 | |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2515 | if (!c) return; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2516 | |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2517 | g_snprintf(buf, sizeof(buf), "PART %s\r\n", c->name); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2518 | irc_write(idata->fd, buf, strlen(buf)); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2519 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2520 | |
| 3751 | 2521 | static int |
| 2522 | irc_chat_send(struct gaim_connection *gc, int id, char *what) | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2523 | { |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2524 | struct gaim_conversation *c = gaim_find_chat(gc, id); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2525 | if (!c) |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2526 | return -EINVAL; |
|
2303
18171aa8cd37
[gaim-migrate @ 2313]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2302
diff
changeset
|
2527 | if (send_msg(gc, c->name, what) > 0) |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2528 | serv_got_chat_in(gc, gaim_chat_get_id(GAIM_CHAT(c)), |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2529 | gc->displayname, 0, what, time(NULL)); |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2530 | return 0; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2531 | } |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2532 | |
| 3751 | 2533 | static GList * |
| 2534 | irc_away_states(struct gaim_connection *gc) | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2535 | { |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2536 | return g_list_append(NULL, GAIM_AWAY_CUSTOM); |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2537 | } |
| 2086 | 2538 | |
| 3751 | 2539 | static void |
| 2540 | irc_set_away(struct gaim_connection *gc, char *state, char *msg) | |
| 2086 | 2541 | { |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2542 | struct irc_data *idata = gc->proto_data; |
|
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2543 | char buf[IRC_BUF_LEN]; |
| 2086 | 2544 | |
|
4111
93b27900416e
[gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents:
4067
diff
changeset
|
2545 | if (gc->away) { |
|
93b27900416e
[gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents:
4067
diff
changeset
|
2546 | g_free(gc->away); |
|
2394
8b1b56d55d75
[gaim-migrate @ 2407]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2393
diff
changeset
|
2547 | gc->away = NULL; |
|
4111
93b27900416e
[gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents:
4067
diff
changeset
|
2548 | } |
|
2393
cfef0212506b
[gaim-migrate @ 2406]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2382
diff
changeset
|
2549 | |
|
cfef0212506b
[gaim-migrate @ 2406]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2382
diff
changeset
|
2550 | if (msg) { |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2551 | g_snprintf(buf, sizeof(buf), "AWAY :%s\r\n", msg); |
|
4111
93b27900416e
[gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents:
4067
diff
changeset
|
2552 | gc->away = g_strdup(msg); |
|
2393
cfef0212506b
[gaim-migrate @ 2406]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2382
diff
changeset
|
2553 | } else |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2554 | g_snprintf(buf, sizeof(buf), "AWAY\r\n"); |
|
4111
93b27900416e
[gaim-migrate @ 4326]
Robert McQueen <robot101@debian.org>
parents:
4067
diff
changeset
|
2555 | |
|
2289
0af7cf95a25d
[gaim-migrate @ 2299]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2273
diff
changeset
|
2556 | irc_write(idata->fd, buf, strlen(buf)); |
| 2086 | 2557 | } |
| 2558 | ||
| 4687 | 2559 | static const char * |
| 2560 | irc_list_icon(struct gaim_account *a, struct buddy *b) | |
| 2086 | 2561 | { |
| 4687 | 2562 | return "irc"; |
| 2086 | 2563 | } |
| 2564 | ||
| 4916 | 2565 | static void irc_list_emblems(struct buddy *b, char **se, char **sw, char **nw, char **ne) |
| 2566 | { | |
| 5068 | 2567 | if (b->present == GAIM_BUDDY_OFFLINE) |
| 4916 | 2568 | *se = "offline"; |
| 2569 | } | |
| 2570 | ||
| 3751 | 2571 | static int |
| 2572 | getlocalip(char *ip) /* Thanks, libfaim */ | |
| 3029 | 2573 | { |
| 2574 | struct hostent *hptr; | |
| 2575 | char localhost[129]; | |
| 2576 | long unsigned add; | |
| 2577 | ||
| 2578 | /* XXX if available, use getaddrinfo() */ | |
| 2579 | /* XXX allow client to specify which IP to use for multihomed boxes */ | |
| 2580 | ||
| 2581 | if (gethostname(localhost, 128) < 0) | |
| 2582 | return -1; | |
| 2583 | ||
| 2584 | if (!(hptr = gethostbyname(localhost))) | |
| 2585 | return -1; | |
| 2586 | ||
| 2587 | memcpy(&add, hptr->h_addr_list[0], 4); | |
| 2588 | add = htonl(add); | |
| 2589 | g_snprintf(ip, 11, "%lu", add); | |
| 2590 | ||
| 2591 | return 0; | |
| 2592 | } | |
| 2593 | ||
| 3751 | 2594 | static void |
| 2595 | dcc_chat_connected(gpointer data, gint source, GdkInputCondition condition) | |
| 3029 | 2596 | { |
| 2597 | struct dcc_chat *chat = data; | |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2598 | struct gaim_conversation *convo; |
| 3029 | 2599 | char buf[128]; |
| 2600 | struct sockaddr_in addr; | |
| 2601 | int addrlen = sizeof (addr); | |
| 2602 | addr.sin_family = AF_INET; | |
| 2603 | addr.sin_port = htons (chat->port); | |
| 2604 | addr.sin_addr.s_addr = INADDR_ANY; | |
| 2605 | chat->fd = accept (chat->fd, (struct sockaddr *) (&addr), &addrlen); | |
| 3707 | 2606 | if (!chat->fd) { |
| 3730 | 2607 | dcc_chat_cancel (chat); |
| 4491 | 2608 | convo = gaim_conversation_new(GAIM_CONV_IM, chat->gc->account, |
|
4476
bf88170ba269
[gaim-migrate @ 4751]
Christian Hammond <chipx86@chipx86.com>
parents:
4456
diff
changeset
|
2609 | chat->nick); |
| 3707 | 2610 | g_snprintf (buf, sizeof buf, _("DCC Chat with %s closed"), |
| 2611 | chat->nick); | |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2612 | gaim_conversation_write(convo, NULL, buf, -1, |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2613 | WFLAG_SYSTEM, time(NULL)); |
| 3707 | 2614 | return; |
| 2615 | } | |
| 3029 | 2616 | chat->inpa = |
| 2617 | gaim_input_add (chat->fd, GAIM_INPUT_READ, dcc_chat_in, chat); | |
| 4491 | 2618 | convo = gaim_conversation_new(GAIM_CONV_IM, chat->gc->account, chat->nick); |
|
4221
fb23a9c3334c
[gaim-migrate @ 4465]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4201
diff
changeset
|
2619 | g_snprintf (buf, sizeof buf, _("DCC Chat with %s established"), |
|
4359
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2620 | chat->nick); |
|
cf899ee07d1d
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4349
diff
changeset
|
2621 | gaim_conversation_write(convo, NULL, buf, -1, WFLAG_SYSTEM, time(NULL)); |
|
5221
86a1444cc9ac
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2622 | gaim_debug(GAIM_DEBUG_INFO, "irc", |
|
86a1444cc9ac
[gaim-migrate @ 5591]
Christian Hammond <chipx86@chipx86.com>
parents:
5211
diff
changeset
|
2623 | "Chat with %s established\n", chat->nick); |
| 3029 | 2624 | dcc_chat_list = g_slist_append (dcc_chat_list, chat); |
| 2625 | } | |
|
3665
d677443aaecd
[gaim-migrate @ 3794]
Herman Bloggs <herman@bluedigits.com>
parents:
3633
diff
changeset
|
2626 | #if 0 |
| 3751 | 2627 | static void |
| 2628 | irc_ask_send_file(struct gaim_connection *gc, char *destsn) { | |
| 3708 | 2629 | struct irc_data *id = (struct irc_data *)gc->proto_data; |
| 2630 | struct irc_file_transfer *ift = g_new0(struct irc_file_transfer, 1); | |
| 2631 | char *localip = (char *)malloc(12); | |
| 3622 | 2632 | |
| 3708 | 2633 | if (getlocalip(localip) == -1) { |
| 2634 | free(localip); | |
| 2635 | return; | |
| 2636 | } | |
| 3616 | 2637 | |
| 3708 | 2638 | ift->type = IFT_SENDFILE_OUT; |
| 2639 | ift->sn = g_strdup(destsn); | |
| 2640 | ift->gc = gc; | |
| 2641 | snprintf(ift->ip, sizeof(ift->ip), "%s", localip); | |
| 2642 | id->file_transfers = g_slist_append(id->file_transfers, ift); | |
| 3622 | 2643 | |
| 3708 | 2644 | ift->xfer = transfer_out_add(gc, ift->sn); |
| 3616 | 2645 | } |
|
4514
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
2646 | |
| 3751 | 2647 | static struct |
|
4514
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
2648 | irc_file_transfer *find_ift_by_xfer(struct gaim_connection *gc, |
|
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
2649 | struct file_transfer *xfer) { |
| 3616 | 2650 | |
| 3708 | 2651 | GSList *g = ((struct irc_data *)gc->proto_data)->file_transfers; |
| 2652 | struct irc_file_transfer *f = NULL; | |
| 3616 | 2653 | |
| 3708 | 2654 | while (g) { |
| 2655 | f = (struct irc_file_transfer *)g->data; | |
| 2656 | if (f->xfer == xfer) | |
| 2657 | break; | |
| 2658 | g = g->next; | |
| 2659 | f = NULL; | |
| 2660 | } | |
| 3616 | 2661 | |
| 3708 | 2662 | return f; |
| 3616 | 2663 | } |
| 2664 | ||
| 3751 | 2665 | static void |
| 2666 | irc_file_transfer_data_chunk(struct gaim_connection *gc, struct file_transfer *xfer, const char *data, int len) { | |
| 3616 | 2667 | struct irc_file_transfer *ift = find_ift_by_xfer(gc, xfer); |
| 2668 | guint32 pos; | |
| 2669 | ||
| 2670 | ift->cur += len; | |
| 2671 | pos = htonl(ift->cur); | |
| 2672 | write(ift->fd, (char *)&pos, 4); | |
| 2673 | ||
| 3623 | 2674 | // FIXME: You should check to verify that they received the data when |
| 2675 | // you are sending a file ... | |
| 3616 | 2676 | } |
| 2677 | ||
| 3751 | 2678 | static void |
| 2679 | irc_file_transfer_cancel (struct gaim_connection *gc, struct file_transfer *xfer) { | |
| 3616 | 2680 | struct irc_data *id = (struct irc_data *)gc->proto_data; |
| 2681 | struct irc_file_transfer *ift = find_ift_by_xfer(gc, xfer); | |
| 2682 | ||
| 2683 | printf("Our shit got canceled, yo!\n"); | |
| 2684 | ||
| 2685 | /* Remove the FT from our list of transfers */ | |
| 2686 | id->file_transfers = g_slist_remove(id->file_transfers, ift); | |
| 2687 | ||
| 2688 | gaim_input_remove(ift->watcher); | |
| 2689 | ||
| 2690 | /* Close our FT because we're done */ | |
| 2691 | close(ift->fd); | |
| 2692 | ||
| 2693 | g_free(ift->sn); | |
| 2694 | g_free(ift->name); | |
| 2695 | ||
| 2696 | g_free(ift); | |
| 2697 | } | |
| 2698 | ||
| 3751 | 2699 | static void |
| 2700 | irc_file_transfer_done(struct gaim_connection *gc, struct file_transfer *xfer) { | |
| 3616 | 2701 | struct irc_data *id = (struct irc_data *)gc->proto_data; |
| 2702 | struct irc_file_transfer *ift = find_ift_by_xfer(gc, xfer); | |
| 2703 | ||
| 2704 | ||
| 2705 | printf("Our shit be done, yo.\n"); | |
| 2706 | ||
| 2707 | /* Remove the FT from our list of transfers */ | |
| 2708 | id->file_transfers = g_slist_remove(id->file_transfers, ift); | |
| 2709 | ||
| 2710 | gaim_input_remove(ift->watcher); | |
| 2711 | ||
| 2712 | /* Close our FT because we're done */ | |
| 2713 | close(ift->fd); | |
| 2714 | ||
| 2715 | g_free(ift->sn); | |
| 2716 | g_free(ift->name); | |
| 2717 | ||
| 2718 | g_free(ift); | |
| 2719 | } | |
| 2720 | ||
| 3751 | 2721 | static void |
| 2722 | irc_file_transfer_out (struct gaim_connection *gc, struct file_transfer *xfer, const char *name, int totfiles, int totsize) { | |
| 3622 | 2723 | struct irc_file_transfer *ift = find_ift_by_xfer(gc, xfer); |
| 2724 | struct sockaddr_in addr; | |
| 2725 | char buf[IRC_BUF_LEN]; | |
| 2726 | int len; | |
| 2727 | ||
| 2728 | ||
| 2729 | ift->fd = socket (AF_INET, SOCK_STREAM, 0); | |
| 2730 | addr.sin_family = AF_INET; | |
| 2731 | addr.sin_port = 0; | |
| 2732 | addr.sin_addr.s_addr = INADDR_ANY; | |
| 2733 | bind (ift->fd, (struct sockaddr *) &addr, sizeof(addr)); | |
| 2734 | listen(ift->fd, 1); | |
| 2735 | ||
| 2736 | len = sizeof(addr); | |
| 2737 | getsockname (ift->fd, (struct sockaddr *) &addr, &len); | |
| 2738 | ||
| 2739 | ift->port = ntohs(addr.sin_port); | |
| 2740 | ||
| 2741 | ift->watcher = gaim_input_add (ift->fd, GAIM_INPUT_READ, dcc_send_callback, ift); | |
| 3633 | 2742 | printf("watcher is %d\n", ift->watcher); |
| 3622 | 2743 | |
| 2744 | snprintf(buf, sizeof(buf), "\001DCC SEND %s %s %d %d\001\n", name, ift->ip, ift->port, totsize); | |
| 2745 | printf("Trying: %s\n", buf); | |
| 2746 | irc_send_im (gc, ift->sn, buf, -1, 0); | |
| 2747 | } | |
| 2748 | ||
| 3751 | 2749 | static void |
| 2750 | irc_file_transfer_in(struct gaim_connection *gc, | |
| 3708 | 2751 | struct file_transfer *xfer, int offset) { |
| 3616 | 2752 | |
| 2753 | struct irc_file_transfer *ift = find_ift_by_xfer(gc, xfer); | |
| 2754 | ||
| 2755 | ift->xfer = xfer; | |
| 4634 | 2756 | proxy_connect(gc->account, ift->ip, ift->port, dcc_recv_callback, ift); |
| 3616 | 2757 | } |
|
4514
40e3588a280f
[gaim-migrate @ 4792]
Christian Hammond <chipx86@chipx86.com>
parents:
4509
diff
changeset
|
2758 | #endif |
| 3616 | 2759 | |
| 3751 | 2760 | static void |
| 5136 | 2761 | irc_ctcp_clientinfo(struct gaim_connection *gc, const char *who) |
| 3751 | 2762 | { |
| 2763 | char buf[IRC_BUF_LEN]; | |
| 2764 | ||
| 2765 | snprintf (buf, sizeof buf, "\001CLIENTINFO\001"); | |
| 2766 | irc_send_privmsg(gc, who, buf, FALSE); | |
| 2767 | } | |
| 2768 | ||
| 2769 | static void | |
| 5136 | 2770 | irc_ctcp_userinfo(struct gaim_connection *gc, const char *who) |
| 3707 | 2771 | { |
| 3735 | 2772 | char buf[IRC_BUF_LEN]; |
| 2773 | ||
| 3751 | 2774 | snprintf (buf, sizeof buf, "\001USERINFO\001"); |
| 2775 | irc_send_privmsg(gc, who, buf, FALSE); | |
| 3707 | 2776 | } |
| 2777 | ||
| 3751 | 2778 | static void |
| 5136 | 2779 | irc_ctcp_version(struct gaim_connection *gc, const char *who) |
| 3707 | 2780 | { |
| 3735 | 2781 | char buf[IRC_BUF_LEN]; |
| 2782 | ||
| 3751 | 2783 | snprintf (buf, sizeof buf, "\001VERSION\001"); |
| 2784 | irc_send_privmsg(gc, who, buf, FALSE); | |
| 3707 | 2785 | } |
| 2786 | ||
| 3751 | 2787 | static void |
| 5136 | 2788 | irc_ctcp_ping(struct gaim_connection *gc, const char *who) |
| 3707 | 2789 | { |
| 3735 | 2790 | char buf[IRC_BUF_LEN]; |
| 2791 | ||
| 3867 | 2792 | g_snprintf (buf, sizeof(buf), "\001PING %ld\001", time(NULL)); |
| 3751 | 2793 | irc_send_privmsg(gc, who, buf, FALSE); |
| 3735 | 2794 | } |
| 2795 | ||
| 3751 | 2796 | static void |
| 2797 | irc_send_notice(struct gaim_connection *gc, char *who, char *what) | |
| 3735 | 2798 | { |
| 3751 | 2799 | char buf[IRC_BUF_LEN], *intl; |
| 3735 | 2800 | struct irc_data *id = gc->proto_data; |
| 3751 | 2801 | int len; |
| 2802 | ||
| 2803 | intl = irc_send_convert(gc, what, 501, &len); | |
| 2804 | g_snprintf(buf, sizeof(buf), "NOTICE %s :%s\r\n", who, intl); | |
| 2805 | g_free(intl); | |
| 3735 | 2806 | irc_write(id->fd, buf, strlen(buf)); |
| 2807 | } | |
| 2808 | ||
| 3751 | 2809 | /* Don't call this guy with fragment = 1 for anything but straight |
| 2810 | * up privmsgs. (no CTCP/whatever) It's still dangerous for CTCPs | |
| 2811 | * (it might not include the trailing \001), but I think this behavior | |
| 2812 | * is generally better than not fragmenting at all on lots of our | |
| 2813 | * packets. */ | |
| 2814 | /* From RFC2812: | |
| 2815 | * IRC messages are always lines of characters terminated with a CR-LF | |
| 2816 | * (Carriage Return - Line Feed) pair, and these messages SHALL NOT | |
| 2817 | * exceed 512 characters in length, counting all characters including | |
| 2818 | * the trailing CR-LF. Thus, there are 510 characters maximum allowed | |
| 2819 | * for the command and its parameters. */ | |
| 2820 | /* So apparently that includes all the inter-server crap, which is up | |
| 2821 | * to NINETY-THREE chars on dancer, which seems to be a pretty liberal | |
| 2822 | * ircd. My rough calculation for now is ":<nick>!~<user>@<host> ", | |
| 2823 | * where <host> is a max of an (uncalculated) 63 chars. Thanks to | |
| 2824 | * trelane and #freenode for giving a hand here. */ | |
| 2825 | static void | |
| 5136 | 2826 | irc_send_privmsg(struct gaim_connection *gc, const char *who, const char *what, gboolean fragment) |
| 3735 | 2827 | { |
| 3751 | 2828 | char buf[IRC_BUF_LEN], *intl; |
| 3735 | 2829 | struct irc_data *id = gc->proto_data; |
| 3751 | 2830 | /* 512 - 12 (for PRIVMSG" "" :""\r\n") - namelen - nicklen - 68 */ |
| 4491 | 2831 | int nicklen = (gc->account->alias && strlen(gc->account->alias)) ? strlen(gc->account->alias) : 4; |
| 3751 | 2832 | int max = 444 - strlen(who) - strlen(g_get_user_name()) - nicklen; |
| 2833 | ||
| 2834 | int len; | |
| 2835 | ||
| 2836 | do { | |
| 2837 | /* the \001 on CTCPs may cause a problem here for some | |
| 2838 | * charsets, but probably not ones people use for IRC. */ | |
| 2839 | intl = irc_send_convert(gc, what, max, &len); | |
| 2840 | g_snprintf(buf, sizeof(buf), "PRIVMSG %s :%s\r\n", who, intl); | |
| 2841 | g_free(intl); | |
| 2842 | irc_write(id->fd, buf, strlen(buf)); | |
| 2843 | what += len; | |
| 2844 | } while (fragment && strlen(what)); | |
| 3707 | 2845 | } |
| 2846 | ||
| 3751 | 2847 | static void |
| 5136 | 2848 | irc_start_chat(struct gaim_connection *gc, const char *who) { |
| 3029 | 2849 | struct dcc_chat *chat; |
| 2850 | int len; | |
| 2851 | struct sockaddr_in addr; | |
| 3735 | 2852 | char buf[IRC_BUF_LEN]; |
| 3029 | 2853 | |
| 2854 | /* Create a socket */ | |
| 2855 | chat = g_new0 (struct dcc_chat, 1); | |
| 2856 | chat->fd = socket (AF_INET, SOCK_STREAM, 0); | |
| 2857 | chat->gc = gc; | |
| 2858 | g_snprintf (chat->nick, sizeof (chat->nick), "%s", who); | |
| 2859 | if (chat->fd < 0) { | |
| 3730 | 2860 | dcc_chat_cancel (chat); |
| 3708 | 2861 | return; |
| 3029 | 2862 | } |
| 2863 | addr.sin_family = AF_INET; | |
| 2864 | addr.sin_port = 0; | |
| 2865 | addr.sin_addr.s_addr = INADDR_ANY; | |
| 2866 | bind (chat->fd, (struct sockaddr *) &addr, sizeof (addr)); | |
| 2867 | listen (chat->fd, 1); | |
| 2868 | len = sizeof (addr); | |
| 2869 | getsockname (chat->fd, (struct sockaddr *) &addr, &len); | |
| 2870 | chat->port = ntohs (addr.sin_port); | |
| 2871 | getlocalip(chat->ip_address); | |
| 2872 | chat->inpa = | |
| 2873 | gaim_input_add (chat->fd, GAIM_INPUT_READ, dcc_chat_connected, | |
| 3708 | 2874 | chat); |
| 3630 | 2875 | g_snprintf (buf, sizeof buf, "\001DCC CHAT chat %s %d\001\n", |
| 3708 | 2876 | chat->ip_address, chat->port); |
| 3033 | 2877 | irc_send_im (gc, who, buf, -1, 0); |
| 3029 | 2878 | } |
| 2879 | ||
| 3751 | 2880 | static void |
| 5136 | 2881 | irc_get_info(struct gaim_connection *gc, const char *who) |
|
2619
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
2882 | { |
|
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
2883 | struct irc_data *idata = gc->proto_data; |
|
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
2884 | char buf[IRC_BUF_LEN]; |
|
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
2885 | |
|
2633
5de3d1d6b41c
[gaim-migrate @ 2646]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2620
diff
changeset
|
2886 | if (*who == '@') |
|
5de3d1d6b41c
[gaim-migrate @ 2646]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2620
diff
changeset
|
2887 | who++; |
|
4621
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
2888 | if (*who == '%') |
|
c1d2f34bf634
[gaim-migrate @ 4912]
Christian Hammond <chipx86@chipx86.com>
parents:
4608
diff
changeset
|
2889 | who++; |
|
2633
5de3d1d6b41c
[gaim-migrate @ 2646]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2620
diff
changeset
|
2890 | if (*who == '+') |
|
5de3d1d6b41c
[gaim-migrate @ 2646]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2620
diff
changeset
|
2891 | who++; |
|
5de3d1d6b41c
[gaim-migrate @ 2646]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2620
diff
changeset
|
2892 | |
|
2619
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
2893 | g_snprintf(buf, sizeof(buf), "WHOIS %s\r\n", who); |
|
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
2894 | irc_write(idata->fd, buf, strlen(buf)); |
|
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
2895 | } |
|
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
2896 | |
| 3751 | 2897 | static GList * |
| 5136 | 2898 | irc_buddy_menu(struct gaim_connection *gc, const char *who) |
|
2619
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
2899 | { |
|
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
2900 | GList *m = NULL; |
|
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
2901 | struct proto_buddy_menu *pbm; |
|
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
2902 | |
|
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
2903 | pbm = g_new0(struct proto_buddy_menu, 1); |
| 3029 | 2904 | pbm->label = _("DCC Chat"); |
| 2905 | pbm->callback = irc_start_chat; | |
| 2906 | pbm->gc = gc; | |
| 2907 | m = g_list_append(m, pbm); | |
| 3708 | 2908 | /* |
| 2909 | pbm = g_new0(struct proto_buddy_menu, 1); | |
| 2910 | pbm->label = _("DCC Send"); | |
| 2911 | pbm->callback = irc_ask_send_file; | |
| 2912 | pbm->gc = gc; | |
| 2913 | m = g_list_append(m, pbm); | |
| 2914 | */ | |
| 3707 | 2915 | |
| 2916 | pbm = g_new0(struct proto_buddy_menu, 1); | |
| 2917 | pbm->label = _("CTCP ClientInfo"); | |
| 2918 | pbm->callback = irc_ctcp_clientinfo; | |
| 2919 | pbm->gc = gc; | |
| 2920 | m = g_list_append(m, pbm); | |
| 2921 | ||
| 2922 | pbm = g_new0(struct proto_buddy_menu, 1); | |
| 2923 | pbm->label = _("CTCP UserInfo"); | |
| 2924 | pbm->callback = irc_ctcp_userinfo; | |
| 2925 | pbm->gc = gc; | |
| 2926 | m = g_list_append(m, pbm); | |
| 2927 | ||
| 2928 | pbm = g_new0(struct proto_buddy_menu, 1); | |
| 2929 | pbm->label = _("CTCP Version"); | |
| 2930 | pbm->callback = irc_ctcp_version; | |
| 2931 | pbm->gc = gc; | |
| 2932 | m = g_list_append(m, pbm); | |
| 2933 | ||
| 3735 | 2934 | pbm = g_new0(struct proto_buddy_menu, 1); |
| 2935 | pbm->label = _("CTCP Ping"); | |
| 2936 | pbm->callback = irc_ctcp_ping; | |
| 2937 | pbm->gc = gc; | |
| 2938 | m = g_list_append(m, pbm); | |
| 2939 | ||
|
2619
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
2940 | return m; |
|
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
2941 | } |
|
5d8a8feb4ad1
[gaim-migrate @ 2632]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2617
diff
changeset
|
2942 | |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2943 | static GaimPluginProtocolInfo prpl_info = |
| 2086 | 2944 | { |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2945 | GAIM_PROTO_IRC, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2946 | OPT_PROTO_CHAT_TOPIC | OPT_PROTO_PASSWORD_OPTIONAL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2947 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2948 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2949 | irc_list_icon, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2950 | irc_list_emblems, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2951 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2952 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2953 | irc_away_states, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2954 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2955 | irc_buddy_menu, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2956 | irc_chat_info, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2957 | irc_login, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2958 | irc_close, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2959 | irc_send_im, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2960 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2961 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2962 | irc_get_info, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2963 | irc_set_away, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2964 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2965 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2966 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2967 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2968 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2969 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2970 | irc_add_buddy, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2971 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2972 | irc_remove_buddy, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2973 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2974 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2975 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2976 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2977 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2978 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2979 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2980 | irc_join_chat, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2981 | irc_chat_invite, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2982 | irc_chat_leave, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2983 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2984 | irc_chat_send, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2985 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2986 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2987 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2988 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2989 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2990 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2991 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2992 | NULL, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2993 | irc_convo_closed, |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2994 | NULL |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2995 | }; |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2996 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2997 | static GaimPluginInfo info = |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2998 | { |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
2999 | 2, /**< api_version */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3000 | GAIM_PLUGIN_PROTOCOL, /**< type */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3001 | NULL, /**< ui_requirement */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3002 | 0, /**< flags */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3003 | NULL, /**< dependencies */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3004 | GAIM_PRIORITY_DEFAULT, /**< priority */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3005 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3006 | "prpl-irc", /**< id */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3007 | "IRC", /**< name */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3008 | VERSION, /**< version */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3009 | /** summary */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3010 | N_("IRC Protocol Plugin"), |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3011 | /** description */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3012 | N_("IRC Protocol Plugin"), |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3013 | NULL, /**< author */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3014 | WEBSITE, /**< homepage */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3015 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3016 | NULL, /**< load */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3017 | NULL, /**< unload */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3018 | NULL, /**< destroy */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3019 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3020 | NULL, /**< ui_info */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3021 | &prpl_info /**< extra_info */ |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3022 | }; |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3023 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3024 | static void |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3025 | __init_plugin(GaimPlugin *plugin) |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3026 | { |
| 3572 | 3027 | struct proto_user_opt *puo; |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3028 | struct proto_user_split *pus; |
| 3572 | 3029 | |
| 4966 | 3030 | pus = g_new0(struct proto_user_split, 1); |
| 3031 | pus->sep = '@'; | |
| 3032 | pus->label = g_strdup(_("Server:")); | |
| 3033 | pus->def = g_strdup(DEFAULT_SERVER); | |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3034 | prpl_info.user_splits = g_list_append(prpl_info.user_splits, pus); |
| 3572 | 3035 | |
| 3036 | puo = g_new0(struct proto_user_opt, 1); | |
|
4115
7a92554f5800
[gaim-migrate @ 4332]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4111
diff
changeset
|
3037 | puo->label = g_strdup(_("Port:")); |
| 3572 | 3038 | puo->def = g_strdup("6667"); |
| 3039 | puo->pos = USEROPT_PORT; | |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3040 | prpl_info.user_opts = g_list_append(prpl_info.user_opts, puo); |
| 3572 | 3041 | |
| 3751 | 3042 | puo = g_new0(struct proto_user_opt, 1); |
|
4115
7a92554f5800
[gaim-migrate @ 4332]
Nicolás Lichtmaier <nico@lichtmaier.com.ar>
parents:
4111
diff
changeset
|
3043 | puo->label = g_strdup(_("Encoding:")); |
| 3751 | 3044 | puo->def = g_strdup("ISO-8859-1"); |
| 3045 | puo->pos = USEROPT_CHARSET; | |
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3046 | prpl_info.user_opts = g_list_append(prpl_info.user_opts, puo); |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3047 | |
|
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3048 | my_protocol = plugin; |
| 2086 | 3049 | } |
| 3050 | ||
|
5205
242b8aa81328
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5150
diff
changeset
|
3051 | GAIM_INIT_PLUGIN(irc, __init_plugin, info); |