Blame gio/gproxyaddress.c

Packit Service d3d246
/* GIO - GLib Input, Output and Streaming Library
Packit Service d3d246
 *
Packit Service d3d246
 * Copyright (C) 2010 Collabora, Ltd.
Packit Service d3d246
 *
Packit Service d3d246
 * This library is free software; you can redistribute it and/or
Packit Service d3d246
 * modify it under the terms of the GNU Lesser General Public
Packit Service d3d246
 * License as published by the Free Software Foundation; either
Packit Service d3d246
 * version 2.1 of the License, or (at your option) any later version.
Packit Service d3d246
 *
Packit Service d3d246
 * This library is distributed in the hope that it will be useful,
Packit Service d3d246
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service d3d246
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service d3d246
 * Lesser General Public License for more details.
Packit Service d3d246
 *
Packit Service d3d246
 * You should have received a copy of the GNU Lesser General
Packit Service d3d246
 * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
Packit Service d3d246
 *
Packit Service d3d246
 * Authors: Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
Packit Service d3d246
 */
Packit Service d3d246
Packit Service d3d246
#include <config.h>
Packit Service d3d246
#include <glib.h>
Packit Service d3d246
#include <string.h>
Packit Service d3d246
Packit Service d3d246
#include <gio/gsocketaddress.h>
Packit Service d3d246
Packit Service d3d246
#include "gproxyaddress.h"
Packit Service d3d246
#include "glibintl.h"
Packit Service d3d246
Packit Service d3d246
/**
Packit Service d3d246
 * SECTION:gproxyaddress
Packit Service d3d246
 * @short_description: An internet address with proxy information
Packit Service d3d246
 * @include: gio/gio.h
Packit Service d3d246
 *
Packit Service d3d246
 * Support for proxied #GInetSocketAddress.
Packit Service d3d246
 */
Packit Service d3d246
Packit Service d3d246
/**
Packit Service d3d246
 * GProxyAddress:
Packit Service d3d246
 *
Packit Service d3d246
 * A #GInetSocketAddress representing a connection via a proxy server
Packit Service d3d246
 *
Packit Service d3d246
 * Since: 2.26
Packit Service d3d246
 **/
Packit Service d3d246
Packit Service d3d246
/**
Packit Service d3d246
 * GProxyAddressClass:
Packit Service d3d246
 *
Packit Service d3d246
 * Class structure for #GProxyAddress.
Packit Service d3d246
 *
Packit Service d3d246
 * Since: 2.26
Packit Service d3d246
 **/
Packit Service d3d246
Packit Service d3d246
enum
Packit Service d3d246
{
Packit Service d3d246
  PROP_0,
Packit Service d3d246
  PROP_PROTOCOL,
Packit Service d3d246
  PROP_DESTINATION_PROTOCOL,
Packit Service d3d246
  PROP_DESTINATION_HOSTNAME,
Packit Service d3d246
  PROP_DESTINATION_PORT,
Packit Service d3d246
  PROP_USERNAME,
Packit Service d3d246
  PROP_PASSWORD,
Packit Service d3d246
  PROP_URI
Packit Service d3d246
};
Packit Service d3d246
Packit Service d3d246
struct _GProxyAddressPrivate
Packit Service d3d246
{
Packit Service d3d246
  gchar 	 *uri;
Packit Service d3d246
  gchar 	 *protocol;
Packit Service d3d246
  gchar		 *username;
Packit Service d3d246
  gchar		 *password;
Packit Service d3d246
  gchar 	 *dest_protocol;
Packit Service d3d246
  gchar 	 *dest_hostname;
Packit Service d3d246
  guint16 	  dest_port;
Packit Service d3d246
};
Packit Service d3d246
Packit Service d3d246
G_DEFINE_TYPE_WITH_PRIVATE (GProxyAddress, g_proxy_address, G_TYPE_INET_SOCKET_ADDRESS)
Packit Service d3d246
Packit Service d3d246
static void
Packit Service d3d246
g_proxy_address_finalize (GObject *object)
Packit Service d3d246
{
Packit Service d3d246
  GProxyAddress *proxy = G_PROXY_ADDRESS (object);
Packit Service d3d246
Packit Service d3d246
  g_free (proxy->priv->uri);
Packit Service d3d246
  g_free (proxy->priv->protocol);
Packit Service d3d246
  g_free (proxy->priv->username);
Packit Service d3d246
  g_free (proxy->priv->password);
Packit Service d3d246
  g_free (proxy->priv->dest_hostname);
Packit Service d3d246
  g_free (proxy->priv->dest_protocol);
Packit Service d3d246
Packit Service d3d246
  G_OBJECT_CLASS (g_proxy_address_parent_class)->finalize (object);
Packit Service d3d246
}
Packit Service d3d246
Packit Service d3d246
static void
Packit Service d3d246
g_proxy_address_set_property (GObject      *object,
Packit Service d3d246
			      guint         prop_id,
Packit Service d3d246
			      const GValue *value,
Packit Service d3d246
			      GParamSpec   *pspec)
Packit Service d3d246
{
Packit Service d3d246
  GProxyAddress *proxy = G_PROXY_ADDRESS (object);
Packit Service d3d246
Packit Service d3d246
  switch (prop_id)
Packit Service d3d246
    {
Packit Service d3d246
    case PROP_PROTOCOL:
Packit Service d3d246
      g_free (proxy->priv->protocol);
Packit Service d3d246
      proxy->priv->protocol = g_value_dup_string (value);
Packit Service d3d246
      break;
Packit Service d3d246
Packit Service d3d246
    case PROP_DESTINATION_PROTOCOL:
Packit Service d3d246
      g_free (proxy->priv->dest_protocol);
Packit Service d3d246
      proxy->priv->dest_protocol = g_value_dup_string (value);
Packit Service d3d246
      break;
Packit Service d3d246
Packit Service d3d246
    case PROP_DESTINATION_HOSTNAME:
Packit Service d3d246
      g_free (proxy->priv->dest_hostname);
Packit Service d3d246
      proxy->priv->dest_hostname = g_value_dup_string (value);
Packit Service d3d246
      break;
Packit Service d3d246
Packit Service d3d246
    case PROP_DESTINATION_PORT:
Packit Service d3d246
      proxy->priv->dest_port = g_value_get_uint (value);
Packit Service d3d246
      break;
Packit Service d3d246
Packit Service d3d246
    case PROP_USERNAME:
Packit Service d3d246
      g_free (proxy->priv->username);
Packit Service d3d246
      proxy->priv->username = g_value_dup_string (value);
Packit Service d3d246
      break;
Packit Service d3d246
Packit Service d3d246
    case PROP_PASSWORD:
Packit Service d3d246
      g_free (proxy->priv->password);
Packit Service d3d246
      proxy->priv->password = g_value_dup_string (value);
Packit Service d3d246
      break;
Packit Service d3d246
Packit Service d3d246
    case PROP_URI:
Packit Service d3d246
      g_free (proxy->priv->uri);
Packit Service d3d246
      proxy->priv->uri = g_value_dup_string (value);
Packit Service d3d246
      break;
Packit Service d3d246
Packit Service d3d246
    default:
Packit Service d3d246
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Packit Service d3d246
    }
Packit Service d3d246
}
Packit Service d3d246
Packit Service d3d246
static void
Packit Service d3d246
g_proxy_address_get_property (GObject    *object,
Packit Service d3d246
			      guint       prop_id,
Packit Service d3d246
			      GValue     *value,
Packit Service d3d246
			      GParamSpec *pspec)
Packit Service d3d246
{
Packit Service d3d246
  GProxyAddress *proxy = G_PROXY_ADDRESS (object);
Packit Service d3d246
Packit Service d3d246
  switch (prop_id)
Packit Service d3d246
    {
Packit Service d3d246
      case PROP_PROTOCOL:
Packit Service d3d246
	g_value_set_string (value, proxy->priv->protocol);
Packit Service d3d246
	break;
Packit Service d3d246
Packit Service d3d246
      case PROP_DESTINATION_PROTOCOL:
Packit Service d3d246
	g_value_set_string (value, proxy->priv->dest_protocol);
Packit Service d3d246
	break;
Packit Service d3d246
Packit Service d3d246
      case PROP_DESTINATION_HOSTNAME:
Packit Service d3d246
	g_value_set_string (value, proxy->priv->dest_hostname);
Packit Service d3d246
	break;
Packit Service d3d246
Packit Service d3d246
      case PROP_DESTINATION_PORT:
Packit Service d3d246
	g_value_set_uint (value, proxy->priv->dest_port);
Packit Service d3d246
	break;
Packit Service d3d246
Packit Service d3d246
      case PROP_USERNAME:
Packit Service d3d246
	g_value_set_string (value, proxy->priv->username);
Packit Service d3d246
	break;
Packit Service d3d246
Packit Service d3d246
      case PROP_PASSWORD:
Packit Service d3d246
	g_value_set_string (value, proxy->priv->password);
Packit Service d3d246
	break;
Packit Service d3d246
Packit Service d3d246
      case PROP_URI:
Packit Service d3d246
	g_value_set_string (value, proxy->priv->uri);
Packit Service d3d246
	break;
Packit Service d3d246
Packit Service d3d246
      default:
Packit Service d3d246
	G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Packit Service d3d246
    }
Packit Service d3d246
}
Packit Service d3d246
Packit Service d3d246
static void
Packit Service d3d246
g_proxy_address_class_init (GProxyAddressClass *klass)
Packit Service d3d246
{
Packit Service d3d246
  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
Packit Service d3d246
Packit Service d3d246
  gobject_class->finalize = g_proxy_address_finalize;
Packit Service d3d246
  gobject_class->set_property = g_proxy_address_set_property;
Packit Service d3d246
  gobject_class->get_property = g_proxy_address_get_property;
Packit Service d3d246
Packit Service d3d246
  g_object_class_install_property (gobject_class,
Packit Service d3d246
				   PROP_PROTOCOL,
Packit Service d3d246
				   g_param_spec_string ("protocol",
Packit Service d3d246
						       P_("Protocol"),
Packit Service d3d246
						       P_("The proxy protocol"),
Packit Service d3d246
						       NULL,
Packit Service d3d246
						       G_PARAM_READWRITE |
Packit Service d3d246
						       G_PARAM_CONSTRUCT_ONLY |
Packit Service d3d246
						       G_PARAM_STATIC_STRINGS));
Packit Service d3d246
Packit Service d3d246
  g_object_class_install_property (gobject_class,
Packit Service d3d246
				   PROP_USERNAME,
Packit Service d3d246
				   g_param_spec_string ("username",
Packit Service d3d246
						       P_("Username"),
Packit Service d3d246
						       P_("The proxy username"),
Packit Service d3d246
						       NULL,
Packit Service d3d246
						       G_PARAM_READWRITE |
Packit Service d3d246
						       G_PARAM_CONSTRUCT_ONLY |
Packit Service d3d246
						       G_PARAM_STATIC_STRINGS));
Packit Service d3d246
Packit Service d3d246
  g_object_class_install_property (gobject_class,
Packit Service d3d246
				   PROP_PASSWORD,
Packit Service d3d246
				   g_param_spec_string ("password",
Packit Service d3d246
						       P_("Password"),
Packit Service d3d246
						       P_("The proxy password"),
Packit Service d3d246
						       NULL,
Packit Service d3d246
						       G_PARAM_READWRITE |
Packit Service d3d246
						       G_PARAM_CONSTRUCT_ONLY |
Packit Service d3d246
						       G_PARAM_STATIC_STRINGS));
Packit Service d3d246
Packit Service d3d246
  /**
Packit Service d3d246
   * GProxyAddress:destination-protocol:
Packit Service d3d246
   *
Packit Service d3d246
   * The protocol being spoke to the destination host, or %NULL if
Packit Service d3d246
   * the #GProxyAddress doesn't know.
Packit Service d3d246
   *
Packit Service d3d246
   * Since: 2.34
Packit Service d3d246
   */
Packit Service d3d246
  g_object_class_install_property (gobject_class,
Packit Service d3d246
				   PROP_DESTINATION_PROTOCOL,
Packit Service d3d246
				   g_param_spec_string ("destination-protocol",
Packit Service d3d246
						       P_("Destionation Protocol"),
Packit Service d3d246
						       P_("The proxy destination protocol"),
Packit Service d3d246
						       NULL,
Packit Service d3d246
						       G_PARAM_READWRITE |
Packit Service d3d246
						       G_PARAM_CONSTRUCT_ONLY |
Packit Service d3d246
						       G_PARAM_STATIC_STRINGS));
Packit Service d3d246
Packit Service d3d246
  g_object_class_install_property (gobject_class,
Packit Service d3d246
				   PROP_DESTINATION_HOSTNAME,
Packit Service d3d246
				   g_param_spec_string ("destination-hostname",
Packit Service d3d246
						       P_("Destination Hostname"),
Packit Service d3d246
						       P_("The proxy destination hostname"),
Packit Service d3d246
						       NULL,
Packit Service d3d246
						       G_PARAM_READWRITE |
Packit Service d3d246
						       G_PARAM_CONSTRUCT_ONLY |
Packit Service d3d246
						       G_PARAM_STATIC_STRINGS));
Packit Service d3d246
Packit Service d3d246
  g_object_class_install_property (gobject_class,
Packit Service d3d246
				   PROP_DESTINATION_PORT,
Packit Service d3d246
				   g_param_spec_uint ("destination-port",
Packit Service d3d246
						      P_("Destination Port"),
Packit Service d3d246
						      P_("The proxy destination port"),
Packit Service d3d246
						      0, 65535, 0,
Packit Service d3d246
						      G_PARAM_READWRITE |
Packit Service d3d246
						      G_PARAM_CONSTRUCT_ONLY |
Packit Service d3d246
						      G_PARAM_STATIC_STRINGS));
Packit Service d3d246
Packit Service d3d246
  /**
Packit Service d3d246
   * GProxyAddress:uri:
Packit Service d3d246
   *
Packit Service d3d246
   * The URI string that the proxy was constructed from (or %NULL
Packit Service d3d246
   * if the creator didn't specify this).
Packit Service d3d246
   *
Packit Service d3d246
   * Since: 2.34
Packit Service d3d246
   */
Packit Service d3d246
  g_object_class_install_property (gobject_class,
Packit Service d3d246
				   PROP_URI,
Packit Service d3d246
				   g_param_spec_string ("uri",
Packit Service d3d246
							P_("URI"),
Packit Service d3d246
							P_("The proxy’s URI"),
Packit Service d3d246
							NULL,
Packit Service d3d246
							G_PARAM_READWRITE |
Packit Service d3d246
							G_PARAM_CONSTRUCT_ONLY |
Packit Service d3d246
							G_PARAM_STATIC_STRINGS));
Packit Service d3d246
}
Packit Service d3d246
Packit Service d3d246
static void
Packit Service d3d246
g_proxy_address_init (GProxyAddress *proxy)
Packit Service d3d246
{
Packit Service d3d246
  proxy->priv = g_proxy_address_get_instance_private (proxy);
Packit Service d3d246
  proxy->priv->protocol = NULL;
Packit Service d3d246
  proxy->priv->username = NULL;
Packit Service d3d246
  proxy->priv->password = NULL;
Packit Service d3d246
  proxy->priv->dest_hostname = NULL;
Packit Service d3d246
  proxy->priv->dest_port = 0;
Packit Service d3d246
}
Packit Service d3d246
Packit Service d3d246
/**
Packit Service d3d246
 * g_proxy_address_new:
Packit Service d3d246
 * @inetaddr: The proxy server #GInetAddress.
Packit Service d3d246
 * @port: The proxy server port.
Packit Service d3d246
 * @protocol: The proxy protocol to support, in lower case (e.g. socks, http).
Packit Service d3d246
 * @dest_hostname: The destination hostname the proxy should tunnel to.
Packit Service d3d246
 * @dest_port: The destination port to tunnel to.
Packit Service d3d246
 * @username: (nullable): The username to authenticate to the proxy server
Packit Service d3d246
 *     (or %NULL).
Packit Service d3d246
 * @password: (nullable): The password to authenticate to the proxy server
Packit Service d3d246
 *     (or %NULL).
Packit Service d3d246
 *
Packit Service d3d246
 * Creates a new #GProxyAddress for @inetaddr with @protocol that should
Packit Service d3d246
 * tunnel through @dest_hostname and @dest_port.
Packit Service d3d246
 *
Packit Service d3d246
 * (Note that this method doesn't set the #GProxyAddress:uri or
Packit Service d3d246
 * #GProxyAddress:destination-protocol fields; use g_object_new()
Packit Service d3d246
 * directly if you want to set those.)
Packit Service d3d246
 *
Packit Service d3d246
 * Returns: a new #GProxyAddress
Packit Service d3d246
 *
Packit Service d3d246
 * Since: 2.26
Packit Service d3d246
 */
Packit Service d3d246
GSocketAddress *
Packit Service d3d246
g_proxy_address_new (GInetAddress  *inetaddr,
Packit Service d3d246
		     guint16        port,
Packit Service d3d246
		     const gchar   *protocol,
Packit Service d3d246
		     const gchar   *dest_hostname,
Packit Service d3d246
		     guint16        dest_port,
Packit Service d3d246
		     const gchar   *username,
Packit Service d3d246
		     const gchar   *password)
Packit Service d3d246
{
Packit Service d3d246
  return g_object_new (G_TYPE_PROXY_ADDRESS,
Packit Service d3d246
		       "address", inetaddr,
Packit Service d3d246
		       "port", port,
Packit Service d3d246
		       "protocol", protocol,
Packit Service d3d246
		       "destination-hostname", dest_hostname,
Packit Service d3d246
		       "destination-port", dest_port,
Packit Service d3d246
		       "username", username,
Packit Service d3d246
		       "password", password,
Packit Service d3d246
		       NULL);
Packit Service d3d246
}
Packit Service d3d246
Packit Service d3d246
Packit Service d3d246
/**
Packit Service d3d246
 * g_proxy_address_get_protocol:
Packit Service d3d246
 * @proxy: a #GProxyAddress
Packit Service d3d246
 *
Packit Service d3d246
 * Gets @proxy's protocol. eg, "socks" or "http"
Packit Service d3d246
 *
Packit Service d3d246
 * Returns: the @proxy's protocol
Packit Service d3d246
 *
Packit Service d3d246
 * Since: 2.26
Packit Service d3d246
 */
Packit Service d3d246
const gchar *
Packit Service d3d246
g_proxy_address_get_protocol (GProxyAddress *proxy)
Packit Service d3d246
{
Packit Service d3d246
  return proxy->priv->protocol;
Packit Service d3d246
}
Packit Service d3d246
Packit Service d3d246
/**
Packit Service d3d246
 * g_proxy_address_get_destination_protocol:
Packit Service d3d246
 * @proxy: a #GProxyAddress
Packit Service d3d246
 *
Packit Service d3d246
 * Gets the protocol that is being spoken to the destination
Packit Service d3d246
 * server; eg, "http" or "ftp".
Packit Service d3d246
 *
Packit Service d3d246
 * Returns: the @proxy's destination protocol
Packit Service d3d246
 *
Packit Service d3d246
 * Since: 2.34
Packit Service d3d246
 */
Packit Service d3d246
const gchar *
Packit Service d3d246
g_proxy_address_get_destination_protocol (GProxyAddress *proxy)
Packit Service d3d246
{
Packit Service d3d246
  return proxy->priv->dest_protocol;
Packit Service d3d246
}
Packit Service d3d246
Packit Service d3d246
/**
Packit Service d3d246
 * g_proxy_address_get_destination_hostname:
Packit Service d3d246
 * @proxy: a #GProxyAddress
Packit Service d3d246
 *
Packit Service d3d246
 * Gets @proxy's destination hostname; that is, the name of the host
Packit Service d3d246
 * that will be connected to via the proxy, not the name of the proxy
Packit Service d3d246
 * itself.
Packit Service d3d246
 *
Packit Service d3d246
 * Returns: the @proxy's destination hostname
Packit Service d3d246
 *
Packit Service d3d246
 * Since: 2.26
Packit Service d3d246
 */
Packit Service d3d246
const gchar *
Packit Service d3d246
g_proxy_address_get_destination_hostname (GProxyAddress *proxy)
Packit Service d3d246
{
Packit Service d3d246
  return proxy->priv->dest_hostname;
Packit Service d3d246
}
Packit Service d3d246
Packit Service d3d246
/**
Packit Service d3d246
 * g_proxy_address_get_destination_port:
Packit Service d3d246
 * @proxy: a #GProxyAddress
Packit Service d3d246
 *
Packit Service d3d246
 * Gets @proxy's destination port; that is, the port on the
Packit Service d3d246
 * destination host that will be connected to via the proxy, not the
Packit Service d3d246
 * port number of the proxy itself.
Packit Service d3d246
 *
Packit Service d3d246
 * Returns: the @proxy's destination port
Packit Service d3d246
 *
Packit Service d3d246
 * Since: 2.26
Packit Service d3d246
 */
Packit Service d3d246
guint16
Packit Service d3d246
g_proxy_address_get_destination_port (GProxyAddress *proxy)
Packit Service d3d246
{
Packit Service d3d246
  return proxy->priv->dest_port;
Packit Service d3d246
}
Packit Service d3d246
Packit Service d3d246
/**
Packit Service d3d246
 * g_proxy_address_get_username:
Packit Service d3d246
 * @proxy: a #GProxyAddress
Packit Service d3d246
 *
Packit Service d3d246
 * Gets @proxy's username.
Packit Service d3d246
 *
Packit Service d3d246
 * Returns: the @proxy's username
Packit Service d3d246
 *
Packit Service d3d246
 * Since: 2.26
Packit Service d3d246
 */
Packit Service d3d246
const gchar *
Packit Service d3d246
g_proxy_address_get_username (GProxyAddress *proxy)
Packit Service d3d246
{
Packit Service d3d246
  return proxy->priv->username;
Packit Service d3d246
}
Packit Service d3d246
Packit Service d3d246
/**
Packit Service d3d246
 * g_proxy_address_get_password:
Packit Service d3d246
 * @proxy: a #GProxyAddress
Packit Service d3d246
 *
Packit Service d3d246
 * Gets @proxy's password.
Packit Service d3d246
 *
Packit Service d3d246
 * Returns: the @proxy's password
Packit Service d3d246
 *
Packit Service d3d246
 * Since: 2.26
Packit Service d3d246
 */
Packit Service d3d246
const gchar *
Packit Service d3d246
g_proxy_address_get_password (GProxyAddress *proxy)
Packit Service d3d246
{
Packit Service d3d246
  return proxy->priv->password;
Packit Service d3d246
}
Packit Service d3d246
Packit Service d3d246
Packit Service d3d246
/**
Packit Service d3d246
 * g_proxy_address_get_uri:
Packit Service d3d246
 * @proxy: a #GProxyAddress
Packit Service d3d246
 *
Packit Service d3d246
 * Gets the proxy URI that @proxy was constructed from.
Packit Service d3d246
 *
Packit Service d3d246
 * Returns: the @proxy's URI, or %NULL if unknown
Packit Service d3d246
 *
Packit Service d3d246
 * Since: 2.34
Packit Service d3d246
 */
Packit Service d3d246
const gchar *
Packit Service d3d246
g_proxy_address_get_uri (GProxyAddress *proxy)
Packit Service d3d246
{
Packit Service d3d246
  return proxy->priv->uri;
Packit Service d3d246
}