## GProxy GProxy — Interface for proxy handling |

## Synopsis

                        GProxy;
    #define             G_PROXY_EXTENSION_POINT_NAME
    GIOStream *         g_proxy_connect                     (GProxy *proxy,
                                                             GIOStream *connection,
                                                             GProxyAddress *proxy_address,
                                                             GCancellable *cancellable,
                                                             GError **error);
    void                g_proxy_connect_async               (GProxy *proxy,
                                                             GIOStream *connection,
                                                             GProxyAddress *proxy_address,
                                                             GCancellable *cancellable,
                                                             GAsyncReadyCallback callback,
                                                             gpointer user_data);
    GIOStream *         g_proxy_connect_finish              (GProxy *proxy,
                                                             GAsyncResult *result,
                                                             GError **error);
    GProxy *            g_proxy_get_default_for_protocol    (const gchar *protocol);
    gboolean            g_proxy_supports_hostname           (GProxy *proxy);

## Object Hierarchy

      GInterface
       +----GProxy

## Prerequisites

GProxy requires GObject.

## Description

A GProxy handles connecting to a remote host via a given type of proxy server. It is implemented by the 'gio-proxy' extension point. The extensions are named after their proxy protocol name. As an example, a SOCKS5 proxy implementation can be retrieved with the name 'socks5' using the function `g_io_extension_point_get_extension_by_name()`.

## Details

### GProxy

    typedef struct _GProxy GProxy;

Interface that handles proxy connection and payload.

Since 2.26

### G_PROXY_EXTENSION_POINT_NAME

    #define G_PROXY_EXTENSION_POINT_NAME "gio-proxy"

Extension point for proxy functionality. See Extending GIO.

Since 2.26

### g_proxy_connect ()

    GIOStream *         g_proxy_connect                     (GProxy *proxy,
                                                             GIOStream *connection,
                                                             GProxyAddress *proxy_address,
                                                             GCancellable *cancellable,
                                                             GError **error);

Given `connection` to communicate with a proxy (eg, a GSocketConnection that is connected to the proxy server), this does the necessary handshake to connect to `proxy_address`, and if required, wraps the GIOStream to handle proxy payload.

`proxy` : | a GProxy
`connection` : | a GIOStream
`proxy_address` : | a GProxyAddress
`cancellable` : | a GCancellable
`error` : | return GError
Returns : | a GIOStream that will replace `connection`. This might be the same as `connection`, in which case a reference will be added.

Since 2.26

### g_proxy_connect_async ()

    void                g_proxy_connect_async               (GProxy *proxy,
                                                             GIOStream *connection,
                                                             GProxyAddress *proxy_address,
                                                             GCancellable *cancellable,
                                                             GAsyncReadyCallback callback,
                                                             gpointer user_data);

Asynchronous version of `g_proxy_connect()`.

`proxy` : | a GProxy
`connection` : | a GIOStream
`proxy_address` : | a GProxyAddress
`cancellable` : | a GCancellable
`callback` : | a GAsyncReadyCallback
`user_data` : | callback data

Since 2.26

### g_proxy_connect_finish ()

    GIOStream *         g_proxy_connect_finish              (GProxy *proxy,
                                                             GAsyncResult *result,
                                                             GError **error);

See `g_proxy_connect()`.

`proxy` : | a GProxy
`result` : | a GAsyncRetult
`error` : | return GError
Returns : | a GIOStream.

Since 2.26

### g_proxy_get_default_for_protocol ()

    GProxy *            g_proxy_get_default_for_protocol    (const gchar *protocol);

Lookup "gio-proxy" extension point for a proxy implementation that supports specified protocol.

`protocol` : | the proxy protocol name (e.g. http, socks, etc)
Returns : | return a GProxy or NULL if protocol is not supported.

Since 2.26

### g_proxy_supports_hostname ()

    gboolean            g_proxy_supports_hostname           (GProxy *proxy);

Some proxy protocols expect to be passed a hostname, which they will resolve to an IP address themselves. Others, like SOCKS4, do not allow this. This function will return `FALSE` if `proxy` is implementing such a protocol. When `FALSE` is returned, the caller should resolve the destination hostname first, and then pass a GProxyAddress containing the stringified IP address to `g_proxy_connect()` or `g_proxy_connect_async()`.

`proxy` : | a GProxy
Returns : | `TRUE` if hostname resolution is supported.

Since 2.26