libpurple/protocols/irc/dcc_send.c

Thu, 27 May 2021 20:25:24 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 27 May 2021 20:25:24 -0500
branch
release-2.x.y
changeset 40892
c00b451a1dd8
parent 40755
fb2056ce3c58
child 41404
1d02278206d2
permissions
-rw-r--r--

Change the default irc server to libera.chat

This seems to make the most sense for users right now as many many channels have migrated away from freenode with many of them moving to libera.

Testing Done:
Compile only.

Reviewed at https://reviews.imfreedom.org/r/675/

8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1 /**
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
2 * @file dcc_send.c Functions used in sending files with DCC SEND
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
3 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
4 * purple
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
5 *
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
6 * Copyright (C) 2004, Timothy T Ringenbach <omarvo@hotmail.com>
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
7 * Copyright (C) 2003, Robbert Haarman <purple@inglorion.net>
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
8 *
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
12 * (at your option) any later version.
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
13 *
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
17 * GNU General Public License for more details.
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
18 *
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
20 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 15884
diff changeset
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
22 */
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
23
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
24 #include "internal.h"
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
25 #include "irc.h"
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
26 #include "debug.h"
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
27 #include "ft.h"
40755
fb2056ce3c58 Implement mitigation for GHSL-2021-045
Gary Kramlich <grim@reaperworld.com>
parents: 36028
diff changeset
28 #include "glibcompat.h"
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
29 #include "notify.h"
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
30 #include "network.h"
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
31
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
32 /***************************************************************************
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
33 * Functions related to receiving files via DCC SEND
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
34 ***************************************************************************/
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
35
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
36 struct irc_xfer_rx_data {
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
37 gchar *ip;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
38 };
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
39
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
40 static void irc_dccsend_recv_destroy(PurpleXfer *xfer)
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
41 {
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
42 struct irc_xfer_rx_data *xd = xfer->data;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
43
21676
dabfb5216949 Fix #3983 by canceling the file transfer when connecting to the remote host fails.
Daniel Atallah <datallah@pidgin.im>
parents: 21389
diff changeset
44 g_free(xd->ip);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
45 g_free(xd);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
46 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
47
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
48 /*
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
49 * This function is called whenever data is received.
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
50 * It sends the acknowledgement (in the form of a total byte count as an
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
51 * unsigned 4 byte integer in network byte order)
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
52 */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
53 static void irc_dccsend_recv_ack(PurpleXfer *xfer, const guchar *data, size_t size) {
27472
68b65e95f436 Don't send 64-bit DCC application-level acknowledgments on 64-bit systems.
Ethan Blanton <elb@pidgin.im>
parents: 24763
diff changeset
54 guint32 l;
22196
5f46b63e2c0d Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents: 21676
diff changeset
55 size_t result;
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
56
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
57 l = htonl(xfer->bytes_sent);
22196
5f46b63e2c0d Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents: 21676
diff changeset
58 result = write(xfer->fd, &l, sizeof(l));
5f46b63e2c0d Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents: 21676
diff changeset
59 if (result != sizeof(l)) {
22257
dd49963fe3f6 Use g_strerror() instead of strerror() in a few places.
Richard Laager <rlaager@pidgin.im>
parents: 22196
diff changeset
60 purple_debug_error("irc", "unable to send acknowledgement: %s\n", g_strerror(errno));
22196
5f46b63e2c0d Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents: 21676
diff changeset
61 /* TODO: We should probably close the connection here or something. */
5f46b63e2c0d Part of a large patch from o_sukhodolsky to fix some build warnings.
Richard Laager <rlaager@pidgin.im>
parents: 21676
diff changeset
62 }
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
63 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
64
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
65 static void irc_dccsend_recv_init(PurpleXfer *xfer) {
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
66 struct irc_xfer_rx_data *xd = xfer->data;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
67
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
68 purple_xfer_start(xfer, -1, xd->ip, xfer->remote_port);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
69 g_free(xd->ip);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
70 xd->ip = NULL;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
71 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
72
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
73 /* This function makes the necessary arrangements for receiving files */
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
74 void irc_dccsend_recv(struct irc_conn *irc, const char *from, const char *msg) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
75 PurpleXfer *xfer;
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
76 struct irc_xfer_rx_data *xd;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
77 gchar **token;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
78 struct in_addr addr;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
79 GString *filename;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
80 int i = 0;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
81 guint32 nip;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
82
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
83 token = g_strsplit(msg, " ", 0);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
84 if (!token[0] || !token[1] || !token[2]) {
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
85 g_strfreev(token);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
86 return;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
87 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
88
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
89 filename = g_string_new("");
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
90 if (token[0][0] == '"') {
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
91 if (!strchr(&(token[0][1]), '"')) {
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
92 g_string_append(filename, &(token[0][1]));
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
93 for (i = 1; token[i]; i++)
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
94 if (!strchr(token[i], '"')) {
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
95 g_string_append_printf(filename, " %s", token[i]);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
96 } else {
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
97 g_string_append_len(filename, token[i], strlen(token[i]) - 1);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
98 break;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
99 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
100 } else {
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
101 g_string_append_len(filename, &(token[0][1]), strlen(&(token[0][1])) - 1);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
102 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
103 } else {
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
104 g_string_append(filename, token[0]);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
105 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
106
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
107 if (!token[i] || !token[i+1] || !token[i+2]) {
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
108 g_strfreev(token);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
109 g_string_free(filename, TRUE);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
110 return;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
111 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
112 i++;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
113
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
114 xfer = purple_xfer_new(irc->account, PURPLE_XFER_RECEIVE, from);
15345
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 14329
diff changeset
115 if (xfer)
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 14329
diff changeset
116 {
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 14329
diff changeset
117 xd = g_new0(struct irc_xfer_rx_data, 1);
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 14329
diff changeset
118 xfer->data = xd;
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
119
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
120 purple_xfer_set_filename(xfer, filename->str);
15345
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 14329
diff changeset
121 xfer->remote_port = atoi(token[i+1]);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
122
15345
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 14329
diff changeset
123 nip = strtoul(token[i], NULL, 10);
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 14329
diff changeset
124 if (nip) {
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 14329
diff changeset
125 addr.s_addr = htonl(nip);
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 14329
diff changeset
126 xd->ip = g_strdup(inet_ntoa(addr));
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 14329
diff changeset
127 } else {
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 14329
diff changeset
128 xd->ip = g_strdup(token[i]);
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 14329
diff changeset
129 }
21676
dabfb5216949 Fix #3983 by canceling the file transfer when connecting to the remote host fails.
Daniel Atallah <datallah@pidgin.im>
parents: 21389
diff changeset
130 purple_debug(PURPLE_DEBUG_INFO, "irc", "Receiving file (%s) from %s\n",
dabfb5216949 Fix #3983 by canceling the file transfer when connecting to the remote host fails.
Daniel Atallah <datallah@pidgin.im>
parents: 21389
diff changeset
131 filename->str, xd->ip);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
132 purple_xfer_set_size(xfer, token[i+2] ? atoi(token[i+2]) : 0);
31294
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 27635
diff changeset
133
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
134 purple_xfer_set_init_fnc(xfer, irc_dccsend_recv_init);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
135 purple_xfer_set_ack_fnc(xfer, irc_dccsend_recv_ack);
31294
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 27635
diff changeset
136
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
137 purple_xfer_set_end_fnc(xfer, irc_dccsend_recv_destroy);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
138 purple_xfer_set_request_denied_fnc(xfer, irc_dccsend_recv_destroy);
22590
174fe7103cbd some memleak fixes from Andrew Gaul again:
Andrew Gaul <andrew@gaul.org>
parents: 22257
diff changeset
139 purple_xfer_set_cancel_recv_fnc(xfer, irc_dccsend_recv_destroy);
31294
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 27635
diff changeset
140
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
141 purple_xfer_request(xfer);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
142 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
143 g_strfreev(token);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
144 g_string_free(filename, TRUE);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
145 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
146
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
147 /*******************************************************************
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
148 * Functions related to sending files via DCC SEND
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
149 *******************************************************************/
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
150
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
151 struct irc_xfer_send_data {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
152 PurpleNetworkListenData *listen_data;
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
153 gint inpa;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
154 int fd;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
155 guchar *rxqueue;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
156 guint rxlen;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
157 };
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
158
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
159 static void irc_dccsend_send_destroy(PurpleXfer *xfer)
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
160 {
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
161 struct irc_xfer_send_data *xd = xfer->data;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
162
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
163 if (xd == NULL)
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
164 return;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
165
14329
05c3cc0c1f79 [gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
166 if (xd->listen_data != NULL)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
167 purple_network_listen_cancel(xd->listen_data);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
168 if (xd->inpa > 0)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
169 purple_input_remove(xd->inpa);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
170 if (xd->fd != -1)
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
171 close(xd->fd);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
172
21676
dabfb5216949 Fix #3983 by canceling the file transfer when connecting to the remote host fails.
Daniel Atallah <datallah@pidgin.im>
parents: 21389
diff changeset
173 g_free(xd->rxqueue);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
174
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
175 g_free(xd);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
176 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
177
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
178 /* just in case you were wondering, this is why DCC is gay */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
179 static void irc_dccsend_send_read(gpointer data, int source, PurpleInputCondition cond)
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
180 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
181 PurpleXfer *xfer = data;
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
182 struct irc_xfer_send_data *xd = xfer->data;
22591
12cc742a8a5a When Andrew was working on the memleak fixes, he pondered why buffer was
Ka-Hing Cheung <khc@pidgin.im>
parents: 22590
diff changeset
183 char buffer[64];
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
184 int len;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
185
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12909
diff changeset
186 len = read(source, buffer, sizeof(buffer));
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12909
diff changeset
187
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12909
diff changeset
188 if (len < 0 && errno == EAGAIN)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12909
diff changeset
189 return;
13788
019bc2080927 [gaim-migrate @ 16198]
Daniel Atallah <datallah@pidgin.im>
parents: 13201
diff changeset
190 else if (len <= 0) {
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12909
diff changeset
191 /* XXX: Shouldn't this be canceling the transfer? */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
192 purple_input_remove(xd->inpa);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
193 xd->inpa = 0;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
194 return;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
195 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
196
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
197 xd->rxqueue = g_realloc(xd->rxqueue, len + xd->rxlen);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
198 memcpy(xd->rxqueue + xd->rxlen, buffer, len);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
199 xd->rxlen += len;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
200
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
201 while (1) {
11318
13fa1d5134f3 [gaim-migrate @ 13521]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11159
diff changeset
202 size_t acked;
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
203
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
204 if (xd->rxlen < 4)
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
205 break;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
206
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
207 acked = ntohl(*((gint32 *)xd->rxqueue));
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
208
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
209 xd->rxlen -= 4;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
210 if (xd->rxlen) {
40755
fb2056ce3c58 Implement mitigation for GHSL-2021-045
Gary Kramlich <grim@reaperworld.com>
parents: 36028
diff changeset
211 unsigned char *tmp = g_memdup2(xd->rxqueue + 4, xd->rxlen);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
212 g_free(xd->rxqueue);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
213 xd->rxqueue = tmp;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
214 } else {
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
215 g_free(xd->rxqueue);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
216 xd->rxqueue = NULL;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
217 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
218
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
219 if (acked >= purple_xfer_get_size(xfer)) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
220 purple_input_remove(xd->inpa);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
221 xd->inpa = 0;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
222 purple_xfer_set_completed(xfer, TRUE);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
223 purple_xfer_end(xfer);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
224 return;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
225 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
226 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
227 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
228
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
229 static gssize irc_dccsend_send_write(const guchar *buffer, size_t size, PurpleXfer *xfer)
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
230 {
12151
8002bb57756b [gaim-migrate @ 14452]
Richard Laager <rlaager@pidgin.im>
parents: 12143
diff changeset
231 gssize s;
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12909
diff changeset
232 int ret;
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
233
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
234 s = MIN(purple_xfer_get_bytes_remaining(xfer), size);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
235 if (!s)
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
236 return 0;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
237
13201
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12909
diff changeset
238 ret = write(xfer->fd, buffer, s);
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12909
diff changeset
239
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12909
diff changeset
240 if (ret < 0 && errno == EAGAIN)
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12909
diff changeset
241 ret = 0;
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12909
diff changeset
242
8c224ef70efa [gaim-migrate @ 15563]
Daniel Atallah <datallah@pidgin.im>
parents: 12909
diff changeset
243 return ret;
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
244 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
245
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
246 static void irc_dccsend_send_connected(gpointer data, int source, PurpleInputCondition cond) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
247 PurpleXfer *xfer = (PurpleXfer *) data;
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
248 struct irc_xfer_send_data *xd = xfer->data;
36028
fc5300cb3617 Get rid of fair amount of copy-pasta and coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35991
diff changeset
249 int conn;
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
250
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
251 conn = accept(xd->fd, NULL, 0);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
252 if (conn == -1) {
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
253 /* Accepting the connection failed. This could just be related
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
254 * to the nonblocking nature of the listening socket, so we'll
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
255 * just try again next time */
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
256 /* Let's print an error message anyway */
21389
e1dd8142bb87 replace most calls to strerror with calls to g_strerror. strerror will return
Nathan Walp <nwalp@pidgin.im>
parents: 19859
diff changeset
257 purple_debug_warning("irc", "accept: %s\n", g_strerror(errno));
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
258 return;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
259 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
260
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
261 purple_input_remove(xfer->watcher);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
262 xfer->watcher = 0;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
263 close(xd->fd);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
264 xd->fd = -1;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
265
36028
fc5300cb3617 Get rid of fair amount of copy-pasta and coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35991
diff changeset
266 _purple_network_set_common_socket_flags(conn);
24042
098a3f96a0b9 Use non-blocking io for IRC DCC transfers.
Daniel Atallah <datallah@pidgin.im>
parents: 22591
diff changeset
267
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
268 xd->inpa = purple_input_add(conn, PURPLE_INPUT_READ, irc_dccsend_send_read, xfer);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
269 /* Start the transfer */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
270 purple_xfer_start(xfer, conn, NULL, 0);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
271 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
272
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
273 static void
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
274 irc_dccsend_network_listen_cb(int sock, gpointer data)
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
275 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
276 PurpleXfer *xfer = data;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
277 struct irc_xfer_send_data *xd;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
278 PurpleConnection *gc;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
279 struct irc_conn *irc;
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
280 const char *arg[2];
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
281 char *tmp;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
282 struct in_addr addr;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
283 unsigned short int port;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
284
14329
05c3cc0c1f79 [gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
285 xd = xfer->data;
05c3cc0c1f79 [gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
286 xd->listen_data = NULL;
05c3cc0c1f79 [gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
287
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
288 if (purple_xfer_get_status(xfer) == PURPLE_XFER_STATUS_CANCEL_LOCAL
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
289 || purple_xfer_get_status(xfer) == PURPLE_XFER_STATUS_CANCEL_REMOTE) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
290 purple_xfer_unref(xfer);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
291 return;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
292 }
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
293
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
294 xd = xfer->data;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
295 gc = purple_account_get_connection(purple_xfer_get_account(xfer));
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
296 irc = gc->proto_data;
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
297
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
298 purple_xfer_unref(xfer);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
299
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
300 if (sock < 0) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
301 purple_notify_error(gc, NULL, _("File Transfer Failed"),
27635
0cd19038c417 More uniformity among disconnect error messages
Mark Doliner <markdoliner@pidgin.im>
parents: 27472
diff changeset
302 _("Unable to open a listening port."));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
303 purple_xfer_cancel_local(xfer);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
304 return;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
305 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
306
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
307 xd->fd = sock;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
308
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
309 port = purple_network_get_port_from_fd(sock);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
310 purple_debug_misc("irc", "port is %hu\n", port);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
311 /* Monitor the listening socket */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
312 xfer->watcher = purple_input_add(sock, PURPLE_INPUT_READ,
24763
67d9d4c975c0 Replace spaces wth tabs in indentation and tabs with spaces in line continuations.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24042
diff changeset
313 irc_dccsend_send_connected, xfer);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
314
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
315 /* Send the intended recipient the DCC request */
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
316 arg[0] = xfer->who;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
317 inet_aton(purple_network_get_my_ip(irc->fd), &addr);
11656
56f5e598dc6c [gaim-migrate @ 13940]
Richard Laager <rlaager@pidgin.im>
parents: 11318
diff changeset
318 arg[1] = tmp = g_strdup_printf("\001DCC SEND \"%s\" %u %hu %" G_GSIZE_FORMAT "\001",
24763
67d9d4c975c0 Replace spaces wth tabs in indentation and tabs with spaces in line continuations.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24042
diff changeset
319 xfer->filename, ntohl(addr.s_addr),
67d9d4c975c0 Replace spaces wth tabs in indentation and tabs with spaces in line continuations.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 24042
diff changeset
320 port, xfer->size);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
321
10555
2957b2c174da [gaim-migrate @ 11932]
Nathan Walp <nwalp@pidgin.im>
parents: 10388
diff changeset
322 irc_cmd_privmsg(gc->proto_data, "msg", NULL, arg);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
323 g_free(tmp);
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
324 }
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
325
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
326 /*
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
327 * This function is called after the user has selected a file to send.
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
328 */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
329 static void irc_dccsend_send_init(PurpleXfer *xfer) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
330 PurpleConnection *gc = purple_account_get_connection(purple_xfer_get_account(xfer));
14329
05c3cc0c1f79 [gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
331 struct irc_xfer_send_data *xd = xfer->data;
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
332
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
333 xfer->filename = g_path_get_basename(xfer->local_filename);
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
334
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
335 purple_xfer_ref(xfer);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
336
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
337 /* Create a listening socket */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
338 xd->listen_data = purple_network_listen_range(0, 0, SOCK_STREAM,
14329
05c3cc0c1f79 [gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
339 irc_dccsend_network_listen_cb, xfer);
05c3cc0c1f79 [gaim-migrate @ 16949]
Mark Doliner <markdoliner@pidgin.im>
parents: 14254
diff changeset
340 if (xd->listen_data == NULL) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
341 purple_xfer_unref(xfer);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
342 purple_notify_error(gc, NULL, _("File Transfer Failed"),
27635
0cd19038c417 More uniformity among disconnect error messages
Mark Doliner <markdoliner@pidgin.im>
parents: 27472
diff changeset
343 _("Unable to open a listening port."));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
344 purple_xfer_cancel_local(xfer);
12909
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
345 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
346
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
347 }
dfcf4df1dcd7 [gaim-migrate @ 15262]
Daniel Atallah <datallah@pidgin.im>
parents: 12730
diff changeset
348
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
349 PurpleXfer *irc_dccsend_new_xfer(PurpleConnection *gc, const char *who) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
350 PurpleXfer *xfer;
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
351 struct irc_xfer_send_data *xd;
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
352
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
353 /* Build the file transfer handle */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
354 xfer = purple_xfer_new(purple_connection_get_account(gc), PURPLE_XFER_SEND, who);
15345
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 14329
diff changeset
355 if (xfer)
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 14329
diff changeset
356 {
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 14329
diff changeset
357 xd = g_new0(struct irc_xfer_send_data, 1);
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 14329
diff changeset
358 xd->fd = -1;
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 14329
diff changeset
359 xfer->data = xd;
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
360
15345
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 14329
diff changeset
361 /* Setup our I/O op functions */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
362 purple_xfer_set_init_fnc(xfer, irc_dccsend_send_init);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
363 purple_xfer_set_write_fnc(xfer, irc_dccsend_send_write);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
364 purple_xfer_set_end_fnc(xfer, irc_dccsend_send_destroy);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
365 purple_xfer_set_request_denied_fnc(xfer, irc_dccsend_send_destroy);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
366 purple_xfer_set_cancel_send_fnc(xfer, irc_dccsend_send_destroy);
15345
797936e968ff [gaim-migrate @ 18073]
Evan Schoenberg <evands@pidgin.im>
parents: 14329
diff changeset
367 }
12143
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11656
diff changeset
368
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11656
diff changeset
369 return xfer;
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11656
diff changeset
370 }
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11656
diff changeset
371
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11656
diff changeset
372 /**
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
373 * Purple calls this function when the user selects Send File from the
12143
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11656
diff changeset
374 * buddy menu
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
375 * It sets up the PurpleXfer struct and tells Purple to go ahead
12143
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11656
diff changeset
376 */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
377 void irc_dccsend_send_file(PurpleConnection *gc, const char *who, const char *file) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
378 PurpleXfer *xfer = irc_dccsend_new_xfer(gc, who);
12143
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11656
diff changeset
379
09f216663302 [gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents: 11656
diff changeset
380 /* Perform the request */
9466
b6425eab60ca [gaim-migrate @ 10291]
Daniel Atallah <datallah@pidgin.im>
parents: 8838
diff changeset
381 if (file)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
382 purple_xfer_request_accepted(xfer, file);
9466
b6425eab60ca [gaim-migrate @ 10291]
Daniel Atallah <datallah@pidgin.im>
parents: 8838
diff changeset
383 else
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15444
diff changeset
384 purple_xfer_request(xfer);
8351
216d9836e839 [gaim-migrate @ 9075]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
385 }

mercurial