src/protocols/irc/irc.c

Sat, 26 Apr 2003 20:30:43 +0000

author
Nathan Walp <nwalp@pidgin.im>
date
Sat, 26 Apr 2003 20:30:43 +0000
changeset 5234
8320a1cb0274
parent 5221
86a1444cc9ac
child 5236
d0667c1c18b2
permissions
-rw-r--r--

[gaim-migrate @ 5604]
Chats in the buddy list!

You can now put chat rooms in your buddy list, and double-click them to join
them, instead of having to do all that typing. I'm eventually gonna add
auto-join support, so that ugly hack involving pouncing can go away.

Someone should make some new artwork so we don't have 2 + icons next to
each other in the menus.

This also has some fixes to let gaim compile again, after the renaming of
the buddy list files.

This also fixes the problem with offline buddies not showing up in the list
sometimes for accounts that didn't log in at startup.

This probably fixes other stuff, but I can't remember any of it off the top
of my head.

I'm going to stop typing and let people play with this now.

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

mercurial