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, write to the
17 * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
18 * Boston, MA 02111-1307, USA.
20 * Authors: Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
27 #include <gio/gsocketaddress.h>
29 #include "gproxyaddress.h"
33 * SECTION:gproxyaddress
34 * @short_description: An internet address with proxy information
37 * Support for proxied #GInetSocketAddress.
43 * A #GInetSocketAddress representing a connection via a proxy server
52 PROP_DESTINATION_PROTOCOL,
53 PROP_DESTINATION_HOSTNAME,
54 PROP_DESTINATION_PORT,
60 struct _GProxyAddressPrivate
71 G_DEFINE_TYPE_WITH_PRIVATE (GProxyAddress, g_proxy_address, G_TYPE_INET_SOCKET_ADDRESS)
74 g_proxy_address_finalize (GObject *object)
76 GProxyAddress *proxy = G_PROXY_ADDRESS (object);
78 g_free (proxy->priv->uri);
79 g_free (proxy->priv->protocol);
80 g_free (proxy->priv->username);
81 g_free (proxy->priv->password);
82 g_free (proxy->priv->dest_hostname);
83 g_free (proxy->priv->dest_protocol);
85 G_OBJECT_CLASS (g_proxy_address_parent_class)->finalize (object);
89 g_proxy_address_set_property (GObject *object,
94 GProxyAddress *proxy = G_PROXY_ADDRESS (object);
99 g_free (proxy->priv->protocol);
100 proxy->priv->protocol = g_value_dup_string (value);
103 case PROP_DESTINATION_PROTOCOL:
104 g_free (proxy->priv->dest_protocol);
105 proxy->priv->dest_protocol = g_value_dup_string (value);
108 case PROP_DESTINATION_HOSTNAME:
109 g_free (proxy->priv->dest_hostname);
110 proxy->priv->dest_hostname = g_value_dup_string (value);
113 case PROP_DESTINATION_PORT:
114 proxy->priv->dest_port = g_value_get_uint (value);
118 g_free (proxy->priv->username);
119 proxy->priv->username = g_value_dup_string (value);
123 g_free (proxy->priv->password);
124 proxy->priv->password = g_value_dup_string (value);
128 g_free (proxy->priv->uri);
129 proxy->priv->uri = g_value_dup_string (value);
133 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
138 g_proxy_address_get_property (GObject *object,
143 GProxyAddress *proxy = G_PROXY_ADDRESS (object);
148 g_value_set_string (value, proxy->priv->protocol);
151 case PROP_DESTINATION_PROTOCOL:
152 g_value_set_string (value, proxy->priv->dest_protocol);
155 case PROP_DESTINATION_HOSTNAME:
156 g_value_set_string (value, proxy->priv->dest_hostname);
159 case PROP_DESTINATION_PORT:
160 g_value_set_uint (value, proxy->priv->dest_port);
164 g_value_set_string (value, proxy->priv->username);
168 g_value_set_string (value, proxy->priv->password);
172 g_value_set_string (value, proxy->priv->uri);
176 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
181 g_proxy_address_class_init (GProxyAddressClass *klass)
183 GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
185 gobject_class->finalize = g_proxy_address_finalize;
186 gobject_class->set_property = g_proxy_address_set_property;
187 gobject_class->get_property = g_proxy_address_get_property;
189 g_object_class_install_property (gobject_class,
191 g_param_spec_string ("protocol",
193 P_("The proxy protocol"),
196 G_PARAM_CONSTRUCT_ONLY |
197 G_PARAM_STATIC_STRINGS));
199 g_object_class_install_property (gobject_class,
201 g_param_spec_string ("username",
203 P_("The proxy username"),
206 G_PARAM_CONSTRUCT_ONLY |
207 G_PARAM_STATIC_STRINGS));
209 g_object_class_install_property (gobject_class,
211 g_param_spec_string ("password",
213 P_("The proxy password"),
216 G_PARAM_CONSTRUCT_ONLY |
217 G_PARAM_STATIC_STRINGS));
220 * GProxyAddress:destination-protocol:
222 * The protocol being spoke to the destination host, or %NULL if
223 * the #GProxyAddress doesn't know.
227 g_object_class_install_property (gobject_class,
228 PROP_DESTINATION_PROTOCOL,
229 g_param_spec_string ("destination-protocol",
230 P_("Destionation Protocol"),
231 P_("The proxy destination protocol"),
234 G_PARAM_CONSTRUCT_ONLY |
235 G_PARAM_STATIC_STRINGS));
237 g_object_class_install_property (gobject_class,
238 PROP_DESTINATION_HOSTNAME,
239 g_param_spec_string ("destination-hostname",
240 P_("Destination Hostname"),
241 P_("The proxy destination hostname"),
244 G_PARAM_CONSTRUCT_ONLY |
245 G_PARAM_STATIC_STRINGS));
247 g_object_class_install_property (gobject_class,
248 PROP_DESTINATION_PORT,
249 g_param_spec_uint ("destination-port",
250 P_("Destination Port"),
251 P_("The proxy destination port"),
254 G_PARAM_CONSTRUCT_ONLY |
255 G_PARAM_STATIC_STRINGS));
260 * The URI string that the proxy was constructed from (or %NULL
261 * if the creator didn't specify this).
265 g_object_class_install_property (gobject_class,
267 g_param_spec_string ("uri",
269 P_("The proxy's URI"),
272 G_PARAM_CONSTRUCT_ONLY |
273 G_PARAM_STATIC_STRINGS));
277 g_proxy_address_init (GProxyAddress *proxy)
279 proxy->priv = g_proxy_address_get_instance_private (proxy);
280 proxy->priv->protocol = NULL;
281 proxy->priv->username = NULL;
282 proxy->priv->password = NULL;
283 proxy->priv->dest_hostname = NULL;
284 proxy->priv->dest_port = 0;
288 * g_proxy_address_new:
289 * @inetaddr: The proxy server #GInetAddress.
290 * @port: The proxy server port.
291 * @protocol: The proxy protocol to support, in lower case (e.g. socks, http).
292 * @dest_hostname: The destination hostname the proxy should tunnel to.
293 * @dest_port: The destination port to tunnel to.
294 * @username: (allow-none): The username to authenticate to the proxy server
296 * @password: (allow-none): The password to authenticate to the proxy server
299 * Creates a new #GProxyAddress for @inetaddr with @protocol that should
300 * tunnel through @dest_hostname and @dest_port.
302 * (Note that this method doesn't set the #GProxyAddress:uri or
303 * #GProxyAddress:destination-protocol fields; use g_object_new()
304 * directly if you want to set those.)
306 * Returns: a new #GProxyAddress
311 g_proxy_address_new (GInetAddress *inetaddr,
313 const gchar *protocol,
314 const gchar *dest_hostname,
316 const gchar *username,
317 const gchar *password)
319 return g_object_new (G_TYPE_PROXY_ADDRESS,
322 "protocol", protocol,
323 "destination-hostname", dest_hostname,
324 "destination-port", dest_port,
325 "username", username,
326 "password", password,
332 * g_proxy_address_get_protocol:
333 * @proxy: a #GProxyAddress
335 * Gets @proxy's protocol. eg, "socks" or "http"
337 * Returns: the @proxy's protocol
342 g_proxy_address_get_protocol (GProxyAddress *proxy)
344 return proxy->priv->protocol;
348 * g_proxy_address_get_destination_protocol:
349 * @proxy: a #GProxyAddress
351 * Gets the protocol that is being spoken to the destination
352 * server; eg, "http" or "ftp".
354 * Returns: the @proxy's destination protocol
359 g_proxy_address_get_destination_protocol (GProxyAddress *proxy)
361 return proxy->priv->dest_protocol;
365 * g_proxy_address_get_destination_hostname:
366 * @proxy: a #GProxyAddress
368 * Gets @proxy's destination hostname; that is, the name of the host
369 * that will be connected to via the proxy, not the name of the proxy
372 * Returns: the @proxy's destination hostname
377 g_proxy_address_get_destination_hostname (GProxyAddress *proxy)
379 return proxy->priv->dest_hostname;
383 * g_proxy_address_get_destination_port:
384 * @proxy: a #GProxyAddress
386 * Gets @proxy's destination port; that is, the port on the
387 * destination host that will be connected to via the proxy, not the
388 * port number of the proxy itself.
390 * Returns: the @proxy's destination port
395 g_proxy_address_get_destination_port (GProxyAddress *proxy)
397 return proxy->priv->dest_port;
401 * g_proxy_address_get_username:
402 * @proxy: a #GProxyAddress
404 * Gets @proxy's username.
406 * Returns: the @proxy's username
411 g_proxy_address_get_username (GProxyAddress *proxy)
413 return proxy->priv->username;
417 * g_proxy_address_get_password:
418 * @proxy: a #GProxyAddress
420 * Gets @proxy's password.
422 * Returns: the @proxy's password
427 g_proxy_address_get_password (GProxyAddress *proxy)
429 return proxy->priv->password;
434 * g_proxy_address_get_uri:
435 * @proxy: a #GProxyAddress
437 * Gets the proxy URI that @proxy was constructed from.
439 * Returns: the @proxy's URI, or %NULL if unknown
444 g_proxy_address_get_uri (GProxyAddress *proxy)
446 return proxy->priv->uri;