1 /* GIO - GLib Input, Output and Streaming Library
3 * Copyright (C) 2010 Collabora, Ltd.
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General
16 * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
18 * Authors: Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
25 #include <gio/gsocketaddress.h>
27 #include "gproxyaddress.h"
31 * SECTION:gproxyaddress
32 * @short_description: An internet address with proxy information
35 * Support for proxied #GInetSocketAddress.
41 * A #GInetSocketAddress representing a connection via a proxy server
50 PROP_DESTINATION_PROTOCOL,
51 PROP_DESTINATION_HOSTNAME,
52 PROP_DESTINATION_PORT,
58 struct _GProxyAddressPrivate
69 G_DEFINE_TYPE_WITH_PRIVATE (GProxyAddress, g_proxy_address, G_TYPE_INET_SOCKET_ADDRESS)
72 g_proxy_address_finalize (GObject *object)
74 GProxyAddress *proxy = G_PROXY_ADDRESS (object);
76 g_free (proxy->priv->uri);
77 g_free (proxy->priv->protocol);
78 g_free (proxy->priv->username);
79 g_free (proxy->priv->password);
80 g_free (proxy->priv->dest_hostname);
81 g_free (proxy->priv->dest_protocol);
83 G_OBJECT_CLASS (g_proxy_address_parent_class)->finalize (object);
87 g_proxy_address_set_property (GObject *object,
92 GProxyAddress *proxy = G_PROXY_ADDRESS (object);
97 g_free (proxy->priv->protocol);
98 proxy->priv->protocol = g_value_dup_string (value);
101 case PROP_DESTINATION_PROTOCOL:
102 g_free (proxy->priv->dest_protocol);
103 proxy->priv->dest_protocol = g_value_dup_string (value);
106 case PROP_DESTINATION_HOSTNAME:
107 g_free (proxy->priv->dest_hostname);
108 proxy->priv->dest_hostname = g_value_dup_string (value);
111 case PROP_DESTINATION_PORT:
112 proxy->priv->dest_port = g_value_get_uint (value);
116 g_free (proxy->priv->username);
117 proxy->priv->username = g_value_dup_string (value);
121 g_free (proxy->priv->password);
122 proxy->priv->password = g_value_dup_string (value);
126 g_free (proxy->priv->uri);
127 proxy->priv->uri = g_value_dup_string (value);
131 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
136 g_proxy_address_get_property (GObject *object,
141 GProxyAddress *proxy = G_PROXY_ADDRESS (object);
146 g_value_set_string (value, proxy->priv->protocol);
149 case PROP_DESTINATION_PROTOCOL:
150 g_value_set_string (value, proxy->priv->dest_protocol);
153 case PROP_DESTINATION_HOSTNAME:
154 g_value_set_string (value, proxy->priv->dest_hostname);
157 case PROP_DESTINATION_PORT:
158 g_value_set_uint (value, proxy->priv->dest_port);
162 g_value_set_string (value, proxy->priv->username);
166 g_value_set_string (value, proxy->priv->password);
170 g_value_set_string (value, proxy->priv->uri);
174 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
179 g_proxy_address_class_init (GProxyAddressClass *klass)
181 GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
183 gobject_class->finalize = g_proxy_address_finalize;
184 gobject_class->set_property = g_proxy_address_set_property;
185 gobject_class->get_property = g_proxy_address_get_property;
187 g_object_class_install_property (gobject_class,
189 g_param_spec_string ("protocol",
191 P_("The proxy protocol"),
194 G_PARAM_CONSTRUCT_ONLY |
195 G_PARAM_STATIC_STRINGS));
197 g_object_class_install_property (gobject_class,
199 g_param_spec_string ("username",
201 P_("The proxy username"),
204 G_PARAM_CONSTRUCT_ONLY |
205 G_PARAM_STATIC_STRINGS));
207 g_object_class_install_property (gobject_class,
209 g_param_spec_string ("password",
211 P_("The proxy password"),
214 G_PARAM_CONSTRUCT_ONLY |
215 G_PARAM_STATIC_STRINGS));
218 * GProxyAddress:destination-protocol:
220 * The protocol being spoke to the destination host, or %NULL if
221 * the #GProxyAddress doesn't know.
225 g_object_class_install_property (gobject_class,
226 PROP_DESTINATION_PROTOCOL,
227 g_param_spec_string ("destination-protocol",
228 P_("Destionation Protocol"),
229 P_("The proxy destination protocol"),
232 G_PARAM_CONSTRUCT_ONLY |
233 G_PARAM_STATIC_STRINGS));
235 g_object_class_install_property (gobject_class,
236 PROP_DESTINATION_HOSTNAME,
237 g_param_spec_string ("destination-hostname",
238 P_("Destination Hostname"),
239 P_("The proxy destination hostname"),
242 G_PARAM_CONSTRUCT_ONLY |
243 G_PARAM_STATIC_STRINGS));
245 g_object_class_install_property (gobject_class,
246 PROP_DESTINATION_PORT,
247 g_param_spec_uint ("destination-port",
248 P_("Destination Port"),
249 P_("The proxy destination port"),
252 G_PARAM_CONSTRUCT_ONLY |
253 G_PARAM_STATIC_STRINGS));
258 * The URI string that the proxy was constructed from (or %NULL
259 * if the creator didn't specify this).
263 g_object_class_install_property (gobject_class,
265 g_param_spec_string ("uri",
267 P_("The proxy's URI"),
270 G_PARAM_CONSTRUCT_ONLY |
271 G_PARAM_STATIC_STRINGS));
275 g_proxy_address_init (GProxyAddress *proxy)
277 proxy->priv = g_proxy_address_get_instance_private (proxy);
278 proxy->priv->protocol = NULL;
279 proxy->priv->username = NULL;
280 proxy->priv->password = NULL;
281 proxy->priv->dest_hostname = NULL;
282 proxy->priv->dest_port = 0;
286 * g_proxy_address_new:
287 * @inetaddr: The proxy server #GInetAddress.
288 * @port: The proxy server port.
289 * @protocol: The proxy protocol to support, in lower case (e.g. socks, http).
290 * @dest_hostname: The destination hostname the proxy should tunnel to.
291 * @dest_port: The destination port to tunnel to.
292 * @username: (allow-none): The username to authenticate to the proxy server
294 * @password: (allow-none): The password to authenticate to the proxy server
297 * Creates a new #GProxyAddress for @inetaddr with @protocol that should
298 * tunnel through @dest_hostname and @dest_port.
300 * (Note that this method doesn't set the #GProxyAddress:uri or
301 * #GProxyAddress:destination-protocol fields; use g_object_new()
302 * directly if you want to set those.)
304 * Returns: a new #GProxyAddress
309 g_proxy_address_new (GInetAddress *inetaddr,
311 const gchar *protocol,
312 const gchar *dest_hostname,
314 const gchar *username,
315 const gchar *password)
317 return g_object_new (G_TYPE_PROXY_ADDRESS,
320 "protocol", protocol,
321 "destination-hostname", dest_hostname,
322 "destination-port", dest_port,
323 "username", username,
324 "password", password,
330 * g_proxy_address_get_protocol:
331 * @proxy: a #GProxyAddress
333 * Gets @proxy's protocol. eg, "socks" or "http"
335 * Returns: the @proxy's protocol
340 g_proxy_address_get_protocol (GProxyAddress *proxy)
342 return proxy->priv->protocol;
346 * g_proxy_address_get_destination_protocol:
347 * @proxy: a #GProxyAddress
349 * Gets the protocol that is being spoken to the destination
350 * server; eg, "http" or "ftp".
352 * Returns: the @proxy's destination protocol
357 g_proxy_address_get_destination_protocol (GProxyAddress *proxy)
359 return proxy->priv->dest_protocol;
363 * g_proxy_address_get_destination_hostname:
364 * @proxy: a #GProxyAddress
366 * Gets @proxy's destination hostname; that is, the name of the host
367 * that will be connected to via the proxy, not the name of the proxy
370 * Returns: the @proxy's destination hostname
375 g_proxy_address_get_destination_hostname (GProxyAddress *proxy)
377 return proxy->priv->dest_hostname;
381 * g_proxy_address_get_destination_port:
382 * @proxy: a #GProxyAddress
384 * Gets @proxy's destination port; that is, the port on the
385 * destination host that will be connected to via the proxy, not the
386 * port number of the proxy itself.
388 * Returns: the @proxy's destination port
393 g_proxy_address_get_destination_port (GProxyAddress *proxy)
395 return proxy->priv->dest_port;
399 * g_proxy_address_get_username:
400 * @proxy: a #GProxyAddress
402 * Gets @proxy's username.
404 * Returns: the @proxy's username
409 g_proxy_address_get_username (GProxyAddress *proxy)
411 return proxy->priv->username;
415 * g_proxy_address_get_password:
416 * @proxy: a #GProxyAddress
418 * Gets @proxy's password.
420 * Returns: the @proxy's password
425 g_proxy_address_get_password (GProxyAddress *proxy)
427 return proxy->priv->password;
432 * g_proxy_address_get_uri:
433 * @proxy: a #GProxyAddress
435 * Gets the proxy URI that @proxy was constructed from.
437 * Returns: the @proxy's URI, or %NULL if unknown
442 g_proxy_address_get_uri (GProxyAddress *proxy)
444 return proxy->priv->uri;