annotate src/protocols/irc/irc.c @ 5585:f6650bfe4f51

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