Fri, 20 Oct 2023 01:09:45 -0500
Implement ProtocolFileTransfer
Testing Done:
Ran the unit tests under valgrind.
Bugs closed: PIDGIN-17833
Reviewed at https://reviews.imfreedom.org/r/2643/
|
20147
66f05a854eee
applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
1 | /* purple |
| 8231 | 2 | * |
| 15884 | 3 | * Purple is the legal property of its developers, whose names are too numerous |
| 8231 | 4 | * to list here. Please refer to the COPYRIGHT file distributed with this |
| 5 | * source distribution. | |
| 6 | * | |
| 7 | * This program is free software; you can redistribute it and/or modify | |
| 8 | * it under the terms of the GNU General Public License as published by | |
| 9 | * the Free Software Foundation; either version 2 of the License, or | |
| 10 | * (at your option) any later version. | |
| 11 | * | |
| 12 | * This program is distributed in the hope that it will be useful, | |
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 15 | * GNU General Public License for more details. | |
| 16 | * | |
| 17 | * You should have received a copy of the GNU General Public License | |
| 18 | * 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:
16035
diff
changeset
|
19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
| 8231 | 20 | */ |
|
35487
494f09f7f331
Move section blocks inside inclusion guards -- otherwise g-ir-scanner yells
Ankit Vani <a@nevitus.org>
parents:
35486
diff
changeset
|
21 | |
|
40474
1341be8e3402
Make it so only libpurple can directly include libpurple header files.
Gary Kramlich <grim@reaperworld.com>
parents:
40440
diff
changeset
|
22 | #if !defined(PURPLE_GLOBAL_HEADER_INSIDE) && !defined(PURPLE_COMPILATION) |
|
1341be8e3402
Make it so only libpurple can directly include libpurple header files.
Gary Kramlich <grim@reaperworld.com>
parents:
40440
diff
changeset
|
23 | # error "only <purple.h> may be included directly" |
|
1341be8e3402
Make it so only libpurple can directly include libpurple header files.
Gary Kramlich <grim@reaperworld.com>
parents:
40440
diff
changeset
|
24 | #endif |
|
1341be8e3402
Make it so only libpurple can directly include libpurple header files.
Gary Kramlich <grim@reaperworld.com>
parents:
40440
diff
changeset
|
25 | |
|
39659
e4dfb99b0cef
Fix libpurple header guards using reserved names.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39291
diff
changeset
|
26 | #ifndef PURPLE_NETWORK_H |
|
e4dfb99b0cef
Fix libpurple header guards using reserved names.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39291
diff
changeset
|
27 | #define PURPLE_NETWORK_H |
|
35440
467bb21b82a1
Add section blocks for debug.h to prpl.h
Ankit Vani <a@nevitus.org>
parents:
35397
diff
changeset
|
28 | |
|
32787
7072f190d6ad
Use G_BEGIN/END_DECLS in public libpurple files. This was
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32604
diff
changeset
|
29 | #include <glib.h> |
|
40107
6320c272e8b2
xmpp: Convert unencrypted connections to pure GIO.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39738
diff
changeset
|
30 | #include <gio/gio.h> |
|
32787
7072f190d6ad
Use G_BEGIN/END_DECLS in public libpurple files. This was
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32604
diff
changeset
|
31 | |
|
7072f190d6ad
Use G_BEGIN/END_DECLS in public libpurple files. This was
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32604
diff
changeset
|
32 | G_BEGIN_DECLS |
| 8231 | 33 | |
| 34 | /**************************************************************************/ | |
| 35472 | 35 | /* Network API */ |
| 8231 | 36 | /**************************************************************************/ |
| 37 | ||
| 38 | /** | |
|
35397
31fa3a1aeff5
Move changes from soc.2013.gobjectification.gtkdoc to this branch
Ankit Vani <a@nevitus.org>
parents:
35395
diff
changeset
|
39 | * purple_network_set_public_ip: |
|
31fa3a1aeff5
Move changes from soc.2013.gobjectification.gtkdoc to this branch
Ankit Vani <a@nevitus.org>
parents:
35395
diff
changeset
|
40 | * @ip: The local IP address. |
|
31fa3a1aeff5
Move changes from soc.2013.gobjectification.gtkdoc to this branch
Ankit Vani <a@nevitus.org>
parents:
35395
diff
changeset
|
41 | * |
|
8834
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8250
diff
changeset
|
42 | * Sets the IP address of the local system in preferences. This |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8250
diff
changeset
|
43 | * is the IP address that should be used for incoming connections |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8250
diff
changeset
|
44 | * (file transfer, direct IM, etc.) and should therefore be |
|
0a798e3d2b84
[gaim-migrate @ 9598]
Mark Doliner <markdoliner@pidgin.im>
parents:
8250
diff
changeset
|
45 | * publicly accessible. |
| 8231 | 46 | */ |
| 15884 | 47 | void purple_network_set_public_ip(const char *ip); |
| 8231 | 48 | |
| 49 | /** | |
|
35397
31fa3a1aeff5
Move changes from soc.2013.gobjectification.gtkdoc to this branch
Ankit Vani <a@nevitus.org>
parents:
35395
diff
changeset
|
50 | * purple_network_get_public_ip: |
|
31fa3a1aeff5
Move changes from soc.2013.gobjectification.gtkdoc to this branch
Ankit Vani <a@nevitus.org>
parents:
35395
diff
changeset
|
51 | * |
| 8231 | 52 | * Returns the IP address of the local system set in preferences. |
| 53 | * | |
| 15884 | 54 | * This returns the value set via purple_network_set_public_ip(). |
| 8231 | 55 | * |
|
35393
00f876b129bc
Initial replacements for gtk-doc style comments
Ankit Vani <a@nevitus.org>
parents:
33894
diff
changeset
|
56 | * Returns: The local IP address set in preferences. |
| 8231 | 57 | */ |
| 15884 | 58 | const char *purple_network_get_public_ip(void); |
| 8231 | 59 | |
| 60 | /** | |
|
40663
2453bef0abe7
Cleanup local IP getters
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40659
diff
changeset
|
61 | * purple_network_discover_my_ip: |
| 8231 | 62 | * |
|
40663
2453bef0abe7
Cleanup local IP getters
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40659
diff
changeset
|
63 | * Discovers the IP address that should be used anywhere a public IP addresses |
|
2453bef0abe7
Cleanup local IP getters
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40659
diff
changeset
|
64 | * is needed (listening for an incoming file transfer, etc). |
|
35397
31fa3a1aeff5
Move changes from soc.2013.gobjectification.gtkdoc to this branch
Ankit Vani <a@nevitus.org>
parents:
35395
diff
changeset
|
65 | * |
|
40663
2453bef0abe7
Cleanup local IP getters
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40659
diff
changeset
|
66 | * If the user has manually specified an IP address via preferences, then this |
|
2453bef0abe7
Cleanup local IP getters
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40659
diff
changeset
|
67 | * is used. Otherwise STUN, UPnP, and NAT-PMP will be attempted to discover |
|
2453bef0abe7
Cleanup local IP getters
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40659
diff
changeset
|
68 | * the local IP address depending on what's available. |
| 8231 | 69 | * |
|
40663
2453bef0abe7
Cleanup local IP getters
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40659
diff
changeset
|
70 | * Since: 3.0.0 |
| 8231 | 71 | */ |
|
40663
2453bef0abe7
Cleanup local IP getters
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40659
diff
changeset
|
72 | void purple_network_discover_my_ip(void); |
| 8231 | 73 | |
|
21549
7436059db33b
Don't map the port used for bonjour file transfers externally. This adds a new function that will go away in 3.0.0 when we can modify purple_network_do_listen to take an additional parameter.
Daniel Atallah <datallah@pidgin.im>
parents:
20147
diff
changeset
|
74 | /** |
|
40107
6320c272e8b2
xmpp: Convert unencrypted connections to pure GIO.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39738
diff
changeset
|
75 | * purple_network_get_my_ip_from_gio: |
|
6320c272e8b2
xmpp: Convert unencrypted connections to pure GIO.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39738
diff
changeset
|
76 | * @sockconn: The socket connection to use to help figure out the IP, or %NULL. |
|
6320c272e8b2
xmpp: Convert unencrypted connections to pure GIO.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39738
diff
changeset
|
77 | * |
|
40613
55230eededd8
Clean up a bunch doc issues.
Gary Kramlich <grim@reaperworld.com>
parents:
40543
diff
changeset
|
78 | * Returns the IP address that should be used anywhere a public IP address is |
|
55230eededd8
Clean up a bunch doc issues.
Gary Kramlich <grim@reaperworld.com>
parents:
40543
diff
changeset
|
79 | * needed (listening for an incoming file transfer, etc). |
|
40107
6320c272e8b2
xmpp: Convert unencrypted connections to pure GIO.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39738
diff
changeset
|
80 | * |
|
40613
55230eededd8
Clean up a bunch doc issues.
Gary Kramlich <grim@reaperworld.com>
parents:
40543
diff
changeset
|
81 | * If the user has manually specified an IP address via preferences, then this |
|
40663
2453bef0abe7
Cleanup local IP getters
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40659
diff
changeset
|
82 | * IP is returned. Otherwise STUN, UPnP, NAT-PMP, and finally GIO will be |
|
40613
55230eededd8
Clean up a bunch doc issues.
Gary Kramlich <grim@reaperworld.com>
parents:
40543
diff
changeset
|
83 | * attempted to discover the local IP address depending on what's available. |
|
40107
6320c272e8b2
xmpp: Convert unencrypted connections to pure GIO.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39738
diff
changeset
|
84 | * |
|
6320c272e8b2
xmpp: Convert unencrypted connections to pure GIO.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39738
diff
changeset
|
85 | * Returns: The local IP address to be used. |
|
6320c272e8b2
xmpp: Convert unencrypted connections to pure GIO.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39738
diff
changeset
|
86 | */ |
|
40110
bc2b94f2595a
Make purple_network_get_my_ip_from_gio return non-const.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40107
diff
changeset
|
87 | gchar *purple_network_get_my_ip_from_gio(GSocketConnection *sockconn); |
|
40107
6320c272e8b2
xmpp: Convert unencrypted connections to pure GIO.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39738
diff
changeset
|
88 | |
|
6320c272e8b2
xmpp: Convert unencrypted connections to pure GIO.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39738
diff
changeset
|
89 | /** |
|
35397
31fa3a1aeff5
Move changes from soc.2013.gobjectification.gtkdoc to this branch
Ankit Vani <a@nevitus.org>
parents:
35395
diff
changeset
|
90 | * purple_network_is_available: |
|
31fa3a1aeff5
Move changes from soc.2013.gobjectification.gtkdoc to this branch
Ankit Vani <a@nevitus.org>
parents:
35395
diff
changeset
|
91 | * |
|
24567
edd8e0bb750c
Update the docs for purple_network_is_available(). It doesn't block.
Richard Laager <rlaager@pidgin.im>
parents:
21549
diff
changeset
|
92 | * Detects if there is an available network connection. |
| 14758 | 93 | * |
|
35393
00f876b129bc
Initial replacements for gtk-doc style comments
Ankit Vani <a@nevitus.org>
parents:
33894
diff
changeset
|
94 | * Returns: TRUE if the network is available |
| 14758 | 95 | */ |
| 15884 | 96 | gboolean purple_network_is_available(void); |
| 14758 | 97 | |
| 98 | /** | |
|
35397
31fa3a1aeff5
Move changes from soc.2013.gobjectification.gtkdoc to this branch
Ankit Vani <a@nevitus.org>
parents:
35395
diff
changeset
|
99 | * purple_network_force_online: |
|
31fa3a1aeff5
Move changes from soc.2013.gobjectification.gtkdoc to this branch
Ankit Vani <a@nevitus.org>
parents:
35395
diff
changeset
|
100 | * |
|
35393
00f876b129bc
Initial replacements for gtk-doc style comments
Ankit Vani <a@nevitus.org>
parents:
33894
diff
changeset
|
101 | * Makes purple_network_is_available() always return %TRUE. |
|
24999
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24568
diff
changeset
|
102 | * |
|
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24568
diff
changeset
|
103 | * This is what backs the --force-online command line argument in Pidgin, |
|
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24568
diff
changeset
|
104 | * for example. This is useful for offline testing, especially when |
|
36637
9b0109ae118d
Renamed some prpl stuff to protocol stuff.
Ankit Vani <a@nevitus.org>
parents:
33894
diff
changeset
|
105 | * combined with nullprotocol. |
|
24999
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24568
diff
changeset
|
106 | */ |
|
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24568
diff
changeset
|
107 | void purple_network_force_online(void); |
|
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24568
diff
changeset
|
108 | |
|
84d597b7e7c6
Add a -f/--force-online option to Pidgin which tells libpurple to claim the
Richard Laager <rlaager@pidgin.im>
parents:
24568
diff
changeset
|
109 | /** |
|
35397
31fa3a1aeff5
Move changes from soc.2013.gobjectification.gtkdoc to this branch
Ankit Vani <a@nevitus.org>
parents:
35395
diff
changeset
|
110 | * purple_network_set_stun_server: |
|
31fa3a1aeff5
Move changes from soc.2013.gobjectification.gtkdoc to this branch
Ankit Vani <a@nevitus.org>
parents:
35395
diff
changeset
|
111 | * @stun_server: The host name of the STUN server to set |
|
31fa3a1aeff5
Move changes from soc.2013.gobjectification.gtkdoc to this branch
Ankit Vani <a@nevitus.org>
parents:
35395
diff
changeset
|
112 | * |
|
26261
ffabb135a4b6
Added support to generate relayed candidates (TURN).
Marcus Lundblad <malu@pidgin.im>
parents:
26256
diff
changeset
|
113 | * Update the STUN server IP given the host name |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
24568
diff
changeset
|
114 | * Will result in a DNS query being executed asynchronous |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
24568
diff
changeset
|
115 | */ |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
24568
diff
changeset
|
116 | void purple_network_set_stun_server(const gchar *stun_server); |
|
29987
59b582625aaf
Strip trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents:
29686
diff
changeset
|
117 | |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
24568
diff
changeset
|
118 | /** |
|
35397
31fa3a1aeff5
Move changes from soc.2013.gobjectification.gtkdoc to this branch
Ankit Vani <a@nevitus.org>
parents:
35395
diff
changeset
|
119 | * purple_network_get_stun_ip: |
|
31fa3a1aeff5
Move changes from soc.2013.gobjectification.gtkdoc to this branch
Ankit Vani <a@nevitus.org>
parents:
35395
diff
changeset
|
120 | * |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
24568
diff
changeset
|
121 | * Get the IP address of the STUN server as a string representation |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
24568
diff
changeset
|
122 | * |
|
35393
00f876b129bc
Initial replacements for gtk-doc style comments
Ankit Vani <a@nevitus.org>
parents:
33894
diff
changeset
|
123 | * Returns: the IP address |
|
26256
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
24568
diff
changeset
|
124 | */ |
|
d2673c935184
Run an asynchronous DNS lookup for the STUN server IP (to set as a property
Marcus Lundblad <malu@pidgin.im>
parents:
24568
diff
changeset
|
125 | const gchar *purple_network_get_stun_ip(void); |
|
29987
59b582625aaf
Strip trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents:
29686
diff
changeset
|
126 | |
|
59b582625aaf
Strip trailing whitespace
Mark Doliner <markdoliner@pidgin.im>
parents:
29686
diff
changeset
|
127 | /** |
|
40543
42fd60e3fbe8
Fix a couple GI/doc warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40489
diff
changeset
|
128 | * _purple_network_set_common_socket_flags: |
|
42fd60e3fbe8
Fix a couple GI/doc warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40489
diff
changeset
|
129 | * @fd: The file descriptor for the socket. |
|
42fd60e3fbe8
Fix a couple GI/doc warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40489
diff
changeset
|
130 | * |
|
40474
1341be8e3402
Make it so only libpurple can directly include libpurple header files.
Gary Kramlich <grim@reaperworld.com>
parents:
40440
diff
changeset
|
131 | * Sets most commonly used socket flags: O_NONBLOCK and FD_CLOEXEC. |
|
1341be8e3402
Make it so only libpurple can directly include libpurple header files.
Gary Kramlich <grim@reaperworld.com>
parents:
40440
diff
changeset
|
132 | * |
|
40543
42fd60e3fbe8
Fix a couple GI/doc warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40489
diff
changeset
|
133 | * Returns: %TRUE if succeeded, %FALSE otherwise. |
|
40474
1341be8e3402
Make it so only libpurple can directly include libpurple header files.
Gary Kramlich <grim@reaperworld.com>
parents:
40440
diff
changeset
|
134 | */ |
|
40543
42fd60e3fbe8
Fix a couple GI/doc warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40489
diff
changeset
|
135 | gboolean _purple_network_set_common_socket_flags(int fd); |
|
40474
1341be8e3402
Make it so only libpurple can directly include libpurple header files.
Gary Kramlich <grim@reaperworld.com>
parents:
40440
diff
changeset
|
136 | |
|
1341be8e3402
Make it so only libpurple can directly include libpurple header files.
Gary Kramlich <grim@reaperworld.com>
parents:
40440
diff
changeset
|
137 | /** |
|
35397
31fa3a1aeff5
Move changes from soc.2013.gobjectification.gtkdoc to this branch
Ankit Vani <a@nevitus.org>
parents:
35395
diff
changeset
|
138 | * purple_network_init: |
|
31fa3a1aeff5
Move changes from soc.2013.gobjectification.gtkdoc to this branch
Ankit Vani <a@nevitus.org>
parents:
35395
diff
changeset
|
139 | * |
| 8231 | 140 | * Initializes the network subsystem. |
| 141 | */ | |
| 15884 | 142 | void purple_network_init(void); |
| 8231 | 143 | |
| 14758 | 144 | /** |
|
35397
31fa3a1aeff5
Move changes from soc.2013.gobjectification.gtkdoc to this branch
Ankit Vani <a@nevitus.org>
parents:
35395
diff
changeset
|
145 | * purple_network_uninit: |
|
31fa3a1aeff5
Move changes from soc.2013.gobjectification.gtkdoc to this branch
Ankit Vani <a@nevitus.org>
parents:
35395
diff
changeset
|
146 | * |
| 14758 | 147 | * Shuts down the network subsystem. |
| 148 | */ | |
| 15884 | 149 | void purple_network_uninit(void); |
| 14758 | 150 | |
|
32787
7072f190d6ad
Use G_BEGIN/END_DECLS in public libpurple files. This was
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
32604
diff
changeset
|
151 | G_END_DECLS |
| 8231 | 152 | |
|
39659
e4dfb99b0cef
Fix libpurple header guards using reserved names.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
39291
diff
changeset
|
153 | #endif /* PURPLE_NETWORK_H */ |