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