summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Kiagiadakis <gkiagia@tolabaki.gr>2016-07-09 11:00:19 +0300
committerGeorge Kiagiadakis <gkiagia@tolabaki.gr>2016-07-09 11:00:19 +0300
commit3e95511674daf34b3af087042bde1ec665457360 (patch)
tree94d1032638fca43c66ed6ce769b7fed570c88629
parentac4b6037dcba865dae03e3808173135402cdfd09 (diff)
parentd07359343e76d1745d18f276eec90ab5056917b0 (diff)
Merge branch 'gabble-0.18'
-rw-r--r--configure.ac14
-rw-r--r--docs/reference/wocky-docs.sgml1
-rw-r--r--examples/dump-certificates.c1
-rw-r--r--examples/receive-messages.c1
-rw-r--r--examples/register.c2
-rw-r--r--examples/send-message.c1
-rw-r--r--examples/unregister.c2
-rw-r--r--tests/Makefile.am5
-rw-r--r--tests/certs/ca-0-crl.pem21
-rw-r--r--tests/wocky-connector-test.c12
-rw-r--r--tests/wocky-dummy-xmpp-server.c2
-rw-r--r--tests/wocky-http-proxy-test.c15
-rw-r--r--tests/wocky-test-connector-server.c16
-rw-r--r--tests/wocky-test-helper.c1
-rw-r--r--wocky/Makefile.am10
-rw-r--r--wocky/wocky-connector.c58
-rw-r--r--wocky/wocky-http-proxy.c430
-rw-r--r--wocky/wocky-http-proxy.h46
18 files changed, 65 insertions, 573 deletions
diff --git a/configure.ac b/configure.ac
index fc2ef86..779e90c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -119,22 +119,14 @@ AC_C_BIGENDIAN
dnl Check for Glib
PKG_CHECK_MODULES(GLIB,
- [glib-2.0 >= 2.32, gobject-2.0 >= 2.32, gthread-2.0 >= 2.32, gio-2.0 >= 2.32])
+ [glib-2.0 >= 2.44, gobject-2.0 >= 2.44, gthread-2.0 >= 2.44, gio-2.0 >= 2.44])
-AC_DEFINE([GLIB_VERSION_MIN_REQUIRED], [GLIB_VERSION_2_32], [Ignore post 2.32 deprecations])
-AC_DEFINE([GLIB_VERSION_MAX_ALLOWED], [GLIB_VERSION_2_32], [Prevent post 2.32 APIs])
+AC_DEFINE([GLIB_VERSION_MIN_REQUIRED], [GLIB_VERSION_2_44], [Ignore post 2.44 deprecations])
+AC_DEFINE([GLIB_VERSION_MAX_ALLOWED], [GLIB_VERSION_2_44], [Prevent post 2.44 APIs])
AC_SUBST(GLIB_CFLAGS)
AC_SUBST(GLIB_LIBS)
-dnl Check GIO proxy support
-PKG_CHECK_EXISTS([gio-2.0 >= 2.25.15],
- [HAVE_GIO_PROXY=yes
- AC_DEFINE(HAVE_GIO_PROXY, [1], [Defined if GIO supports proxy])],
- [HAVE_GIO_PROXY=no])
-AM_CONDITIONAL(HAVE_GIO_PROXY, [test "x${HAVE_GIO_PROXY}" = "xyes"])
-
-
dnl Choose an SSL/TLS backend (default gnutls)
AC_ARG_WITH([tls],
AC_HELP_STRING([--with-tls=BACKEND],
diff --git a/docs/reference/wocky-docs.sgml b/docs/reference/wocky-docs.sgml
index 922e096..69daa83 100644
--- a/docs/reference/wocky-docs.sgml
+++ b/docs/reference/wocky-docs.sgml
@@ -26,7 +26,6 @@
<xi:include href="xml/wocky-enumtypes.xml"/>
<xi:include href="xml/wocky.xml"/>
<xi:include href="xml/wocky-heartbeat-source.xml"/>
- <xi:include href="xml/wocky-http-proxy.xml"/>
<xi:include href="xml/wocky-disco-identity.xml"/>
<xi:include href="xml/wocky-jabber-auth.xml"/>
<xi:include href="xml/wocky-jabber-auth-digest.xml"/>
diff --git a/examples/dump-certificates.c b/examples/dump-certificates.c
index f0c045a..c5dcc14 100644
--- a/examples/dump-certificates.c
+++ b/examples/dump-certificates.c
@@ -150,7 +150,6 @@ main (int argc,
gchar* server = NULL;
guint port = 5222;
- g_type_init ();
wocky_init ();
if (!(argc == 2 || argc == 4))
diff --git a/examples/receive-messages.c b/examples/receive-messages.c
index 1d6e392..81ce4e5 100644
--- a/examples/receive-messages.c
+++ b/examples/receive-messages.c
@@ -189,7 +189,6 @@ main (int argc,
WockyTLSHandler *tls_handler = NULL;
WockyConnector *connector;
- g_type_init ();
wocky_init ();
context = g_option_context_new ("<jid> <password> - signs in as <jid> and prints incoming messages");
diff --git a/examples/register.c b/examples/register.c
index b745898..a5c3c07 100644
--- a/examples/register.c
+++ b/examples/register.c
@@ -50,8 +50,6 @@ main (int argc,
gchar *email = NULL;
WockyConnector *wcon = NULL;
- g_type_init ();
-
if ((argc < 4) || (argc > 5))
{
printf ("Usage: %s <jid> <password> <email> [host]\n", argv[0]);
diff --git a/examples/send-message.c b/examples/send-message.c
index 96800c1..c4476c6 100644
--- a/examples/send-message.c
+++ b/examples/send-message.c
@@ -125,7 +125,6 @@ main (int argc,
WockyTLSHandler *tls_handler = NULL;
WockyConnector *connector;
- g_type_init ();
wocky_init ();
context = g_option_context_new ("<jid> <password> <receipient> <message> - signs in as <jid> and sends <message> to <recipient>");
diff --git a/examples/unregister.c b/examples/unregister.c
index c6da4bd..e29ce41 100644
--- a/examples/unregister.c
+++ b/examples/unregister.c
@@ -47,8 +47,6 @@ main (int argc,
gchar *pass = NULL;
WockyConnector *wcon = NULL;
- g_type_init ();
-
if ((argc < 3) || (argc > 4))
{
printf ("Usage: %s <jid> <password> [host]\n", argv[0]);
diff --git a/tests/Makefile.am b/tests/Makefile.am
index d51e8c2..2f9bc58 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -71,6 +71,7 @@ TEST_PROGS = \
wocky-xmpp-node-test \
wocky-xmpp-reader-test \
wocky-xmpp-readwrite-test \
+ wocky-http-proxy-test \
$(NULL)
noinst_PROGRAMS =
@@ -80,10 +81,6 @@ if HAVE_LIBSASL2
noinst_PROGRAMS += wocky-dummy-xmpp-server
endif
-if HAVE_GIO_PROXY
- TEST_PROGS += wocky-http-proxy-test
-endif
-
wocky_bare_contact_test_SOURCES = \
wocky-test-helper.c wocky-test-helper.h \
wocky-test-stream.c wocky-test-stream.h \
diff --git a/tests/certs/ca-0-crl.pem b/tests/certs/ca-0-crl.pem
index 2867f95..ca22774 100644
--- a/tests/certs/ca-0-crl.pem
+++ b/tests/certs/ca-0-crl.pem
@@ -1,14 +1,13 @@
-----BEGIN X509 CRL-----
-MIICDTCB9gIBATANBgkqhkiG9w0BAQsFADBsMQswCQYDVQQGEwJVSzESMBAGA1UE
+MIICBzCB8AIBATANBgkqhkiG9w0BAQsFADBsMQswCQYDVQQGEwJVSzESMBAGA1UE
ChMJQ29sbGFib3JhMRkwFwYDVQQLExBXb2NreSBUZXN0IFN1aXRlMREwDwYDVQQI
-EwhDb25mdXNlZDEbMBkGA1UEAxMSV29ja3kgWE1QUCBMaWJyYXJ5GA8yMDE2MDEx
-MjA1NDYzN1oYDzIwMTcwMTExMDU0NjM3WjAWMBQCAQsYDzIwMTYwMTEyMDU0NjM3
-WqA6MDgwHwYDVR0jBBgwFoAUSTAmCIya1mnNi8DMDlwCjkofpowwFQYDVR0UBA4C
-DFaUkz0c3DJPdC61CDANBgkqhkiG9w0BAQsFAAOCAQEAJ2KNH3iBLUtgbDHPAc55
-b2O0UG2Mrqpza1PfeFil1yNbBkTL00HbvqZ2mnY0m+tS//nIlz27n3xPgl/6f5TK
-HVwTXSluAumQPVbUQyZlTTBT1B4yvwQvd5D9m3I8p2Rk4BA5hDdBKDD+jdnPrELI
-FPjPMJiFY9yPRHglkBF3N1Y+7HUPugDGMiwrU8nDpAeZY/W/zz3FWKgzUORWuH3V
-XEvK0I5vtT5Ms2gbmPat0Clv8Hl6BQh2oD5L+82EQOe/xuloDg5fZYLCJbJgeSIG
-ONkVQ3P2k0uHsSN676MJ844N8bfyij9OpcWzK2EiKV7kb+PYtQprMR6EOy1zOG3/
-Pg==
+EwhDb25mdXNlZDEbMBkGA1UEAxMSV29ja3kgWE1QUCBMaWJyYXJ5Fw0xNjA3MDkw
+NzQ2MDVaFw0yMTA3MDgwNzQ2MDVaMBQwEgIBCxcNMTYwNzA5MDc0NjA1WqA6MDgw
+HwYDVR0jBBgwFoAUSTAmCIya1mnNi8DMDlwCjkofpowwFQYDVR0UBA4CDFeAq70t
+sGE/P6rkCDANBgkqhkiG9w0BAQsFAAOCAQEAWObLL6v2KJh8h6ZMCn2uVDre0avT
+SWtqokxDU1xVeWT5hj0AHCrOCS8hXLgTxclYYONrVcG0l5oxIKkf2Smo+syT0dXS
+3N7p7fsgxrom5eQiP8wJM2n5iOC/QYX8IpTshZOPzoELxc4RvuLfThCdF73EpVHy
+RkdbyiK4CsLdpT8Vptk3vaLO3w/UdIfSLAOq5Oicw7SNQ9WdFoCA9gmuGLePDO63
+gJ2pbvKuGM7qZWOa5eBHFNX12aZoeVr1NbJU53CYT0POkYTsLBEHPRP4YTX9W2Ik
+w7H546f3mOnYKKGa4SToN+TwiuevwHoXWuAdUKLR/wl9GPrUUR0f/7HYYA==
-----END X509 CRL-----
diff --git a/tests/wocky-connector-test.c b/tests/wocky-connector-test.c
index e2622b4..a1b2b12 100644
--- a/tests/wocky-connector-test.c
+++ b/tests/wocky-connector-test.c
@@ -3366,6 +3366,13 @@ test_server_teardown_cb (GObject *source,
g_main_loop_quit (loop);
}
+static gboolean
+test_server_idle_quit_loop_cb (GMainLoop *loop)
+{
+ g_main_loop_quit (loop);
+ return G_SOURCE_REMOVE;
+}
+
static void
test_server_teardown (test_t *test,
ServerParameters *srv)
@@ -3385,6 +3392,11 @@ test_server_teardown (test_t *test,
test_connector_server_get_used_mech (srv->server));
}
+ /* let the server dispatch any pending events before
+ * forcing it to tear down */
+ g_idle_add ((GSourceFunc) test_server_idle_quit_loop_cb, loop);
+ g_main_loop_run (loop);
+
/* Run until server is down */
test_connector_server_teardown (srv->server,
test_server_teardown_cb, loop);
diff --git a/tests/wocky-dummy-xmpp-server.c b/tests/wocky-dummy-xmpp-server.c
index 01d9a63..4bbc24a 100644
--- a/tests/wocky-dummy-xmpp-server.c
+++ b/tests/wocky-dummy-xmpp-server.c
@@ -83,8 +83,6 @@ main (int argc,
memset (&server, 0, sizeof (server));
- g_type_init ();
-
loop = g_main_loop_new (NULL, FALSE);
server.sin_family = AF_INET;
diff --git a/tests/wocky-http-proxy-test.c b/tests/wocky-http-proxy-test.c
index ce9a854..24de3c5 100644
--- a/tests/wocky-http-proxy-test.c
+++ b/tests/wocky-http-proxy-test.c
@@ -9,13 +9,6 @@
#include <wocky/wocky.h>
-/* WockyHttpProxy isn't public API, so we need to be a bit sneaky to get the
- * header.
- */
-#define WOCKY_COMPILATION
-#include <wocky/wocky-http-proxy.h>
-#undef WOCKY_COMPILATION
-
typedef enum
{
DOMAIN_NONE = 0,
@@ -164,7 +157,6 @@ test_http_proxy_instantiation (void)
proxy = g_proxy_get_default_for_protocol ("http");
g_assert (G_IS_PROXY (proxy));
- g_assert (WOCKY_IS_HTTP_PROXY (proxy));
g_object_unref (proxy);
}
@@ -226,6 +218,11 @@ server_thread (gpointer user_data)
while (*received_cred == ' ')
received_cred++;
+ g_assert (str_has_prefix_case (received_cred, "Basic"));
+ received_cred += 5;
+ while (*received_cred == ' ')
+ received_cred++;
+
g_assert_cmpstr (base64_cred, ==, received_cred);
g_free (base64_cred);
}
@@ -377,8 +374,6 @@ int main (int argc,
test_init (argc, argv);
- _wocky_http_proxy_get_type ();
-
g_test_add_func ("/http-proxy/instantiation",
test_http_proxy_instantiation);
diff --git a/tests/wocky-test-connector-server.c b/tests/wocky-test-connector-server.c
index 919fa86..acf9a88 100644
--- a/tests/wocky-test-connector-server.c
+++ b/tests/wocky-test-connector-server.c
@@ -1382,12 +1382,16 @@ force_closed_cb (GObject *source,
gpointer user_data)
{
TestConnectorServer *self = TEST_CONNECTOR_SERVER (user_data);
+ GError *error = NULL;
+ gboolean success;
DEBUG ("Connection force closed");
- g_assert (wocky_xmpp_connection_force_close_finish (
+ success = wocky_xmpp_connection_force_close_finish (
WOCKY_XMPP_CONNECTION (source),
- result, NULL));
+ result, &error);
+ g_assert_no_error (error);
+ g_assert (success);
server_dec_outstanding (self);
}
@@ -1398,9 +1402,13 @@ see_other_host_cb (GObject *source,
gpointer user_data)
{
TestConnectorServer *self = user_data;
+ GError *error = NULL;
+ gboolean success;
- g_assert (wocky_xmpp_connection_send_stanza_finish (self->priv->conn,
- result, NULL));
+ success = wocky_xmpp_connection_send_stanza_finish (self->priv->conn,
+ result, &error);
+ g_assert_no_error (error);
+ g_assert (success);
if (server_dec_outstanding (self))
return;
diff --git a/tests/wocky-test-helper.c b/tests/wocky-test-helper.c
index f7148e5..86af79b 100644
--- a/tests/wocky-test-helper.c
+++ b/tests/wocky-test-helper.c
@@ -296,7 +296,6 @@ test_init (int argc,
{
g_test_init (&argc, &argv, NULL);
g_test_bug_base ("http://bugs.freedesktop.org/show_bug.cgi?id=");
- g_type_init ();
wocky_init ();
}
diff --git a/wocky/Makefile.am b/wocky/Makefile.am
index 1917a58..9871311 100644
--- a/wocky/Makefile.am
+++ b/wocky/Makefile.am
@@ -46,10 +46,6 @@ OPENSSL_SRC = \
GNUTLS_SRC = wocky-tls.c
-PROXY_SRC = \
- wocky-http-proxy.h \
- wocky-http-proxy.c
-
handwritten_headers = \
wocky.h \
wocky-auth-handler.h \
@@ -189,12 +185,6 @@ else
EXTRA_DIST += $(OPENSSL_SRC)
endif
-if HAVE_GIO_PROXY
- handwritten_sources += $(PROXY_SRC)
-else
- EXTRA_DIST += $(PROXY_SRC)
-endif
-
libwocky_la_SOURCES = $(handwritten_sources) $(built_sources) \
$(handwritten_headers) $(built_headers)
diff --git a/wocky/wocky-connector.c b/wocky/wocky-connector.c
index 89f4369..f3bb3c8 100644
--- a/wocky/wocky-connector.c
+++ b/wocky/wocky-connector.c
@@ -101,7 +101,6 @@
#define WOCKY_DEBUG_FLAG WOCKY_DEBUG_CONNECTOR
#include "wocky-debug-internal.h"
-#include "wocky-http-proxy.h"
#include "wocky-sasl-auth.h"
#include "wocky-tls-handler.h"
#include "wocky-tls-connector.h"
@@ -580,11 +579,6 @@ wocky_connector_class_init (WockyConnectorClass *klass)
oclass->dispose = wocky_connector_dispose;
oclass->finalize = wocky_connector_finalize;
-#if HAVE_GIO_PROXY
- /* Ensure that HTTP Proxy extension is registered */
- _wocky_http_proxy_get_type ();
-#endif
-
/**
* WockyConnector:plaintext-auth-allowed:
*
@@ -837,37 +831,29 @@ connect_to_host_async (WockyConnector *connector,
guint default_port)
{
WockyConnectorPrivate *priv = connector->priv;
+ const gchar *uri_format = "%s://%s";
+ gchar *uri;
-#if HAVE_GIO_PROXY
- {
- const gchar *uri_format = "%s://%s";
- gchar *uri;
-
- /* If host_and_port is an ipv6 address we must ensure it has [] around it */
- if (host_and_port[0] != '[')
- {
- const gchar *p;
-
- /* if host_and_port contains 2 ':' chars, it must be an ipv6 address */
- p = g_strstr_len (host_and_port, -1, ":");
- if (p != NULL)
- p = g_strstr_len (p + 1, -1, ":");
- if (p != NULL)
- uri_format = "%s://[%s]";
- }
-
- /* Legacy SSL mode is just like doing HTTPS, so let's trigger HTTPS
- * proxy setting if any */
- uri = g_strdup_printf (uri_format,
- priv->legacy_ssl ? "https" : "xmpp-client", host_and_port);
- g_socket_client_connect_to_uri_async (priv->client,
- uri, default_port, NULL, tcp_host_connected, connector);
- g_free (uri);
- }
-#else
- g_socket_client_connect_to_host_async (priv->client,
- host_and_port, default_port, NULL, tcp_host_connected, connector);
-#endif
+ /* If host_and_port is an ipv6 address we must ensure it has [] around it */
+ if (host_and_port[0] != '[')
+ {
+ const gchar *p;
+
+ /* if host_and_port contains 2 ':' chars, it must be an ipv6 address */
+ p = g_strstr_len (host_and_port, -1, ":");
+ if (p != NULL)
+ p = g_strstr_len (p + 1, -1, ":");
+ if (p != NULL)
+ uri_format = "%s://[%s]";
+ }
+
+ /* Legacy SSL mode is just like doing HTTPS, so let's trigger HTTPS
+ * proxy setting if any */
+ uri = g_strdup_printf (uri_format,
+ priv->legacy_ssl ? "https" : "xmpp-client", host_and_port);
+ g_socket_client_connect_to_uri_async (priv->client,
+ uri, default_port, NULL, tcp_host_connected, connector);
+ g_free (uri);
}
static void
diff --git a/wocky/wocky-http-proxy.c b/wocky/wocky-http-proxy.c
deleted file mode 100644
index b79b6ad..0000000
--- a/wocky/wocky-http-proxy.c
+++ /dev/null
@@ -1,430 +0,0 @@
- /* wocky-http-proxy.c: Source for WockyHttpProxy
- *
- * Copyright (C) 2010 Collabora, Ltd.
- * @author Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config.h"
-
-#include "wocky-http-proxy.h"
-
-#include <string.h>
-#include <stdlib.h>
-
-
-struct _WockyHttpProxy
-{
- GObject parent;
-};
-
-struct _WockyHttpProxyClass
-{
- GObjectClass parent_class;
-};
-
-static void wocky_http_proxy_iface_init (GProxyInterface *proxy_iface);
-
-#define wocky_http_proxy_get_type _wocky_http_proxy_get_type
-G_DEFINE_TYPE_WITH_CODE (WockyHttpProxy, wocky_http_proxy, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (G_TYPE_PROXY,
- wocky_http_proxy_iface_init)
- g_io_extension_point_set_required_type (
- g_io_extension_point_register (G_PROXY_EXTENSION_POINT_NAME),
- G_TYPE_PROXY);
- g_io_extension_point_implement (G_PROXY_EXTENSION_POINT_NAME,
- g_define_type_id, "http", 0))
-
-static void
-wocky_http_proxy_init (WockyHttpProxy *proxy)
-{
-}
-
-#define HTTP_END_MARKER "\r\n\r\n"
-
-static gchar *
-create_request (GProxyAddress *proxy_address, gboolean *has_cred)
-{
- const gchar *hostname;
- gint port;
- const gchar *username;
- const gchar *password;
- GString *request;
- gchar *ascii_hostname;
-
- if (has_cred)
- *has_cred = FALSE;
-
- hostname = g_proxy_address_get_destination_hostname (proxy_address);
- port = g_proxy_address_get_destination_port (proxy_address);
- username = g_proxy_address_get_username (proxy_address);
- password = g_proxy_address_get_password (proxy_address);
-
- request = g_string_new (NULL);
-
- ascii_hostname = g_hostname_to_ascii (hostname);
- g_string_append_printf (request,
- "CONNECT %s:%i HTTP/1.0\r\n"
- "Host: %s:%i\r\n"
- "Proxy-Connection: keep-alive\r\n"
- "User-Agent: GLib/%i.%i\r\n",
- ascii_hostname, port,
- ascii_hostname, port,
- GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION);
- g_free (ascii_hostname);
-
- if (username != NULL && password != NULL)
- {
- gchar *cred;
- gchar *base64_cred;
-
- if (has_cred)
- *has_cred = TRUE;
-
- cred = g_strdup_printf ("%s:%s", username, password);
- base64_cred = g_base64_encode ((guchar *) cred, strlen (cred));
- g_free (cred);
- g_string_append_printf (request,
- "Proxy-Authorization: %s\r\n",
- base64_cred);
- g_free (base64_cred);
- }
-
- g_string_append (request, "\r\n");
-
- return g_string_free (request, FALSE);
-}
-
-static gboolean
-check_reply (const gchar *buffer, gboolean has_cred, GError **error)
-{
- gint err_code;
- const gchar *ptr = buffer + 7;
-
- if (strncmp (buffer, "HTTP/1.", 7) != 0
- || (*ptr != '0' && *ptr != '1'))
- {
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_PROXY_FAILED,
- "Bad HTTP proxy reply");
- return FALSE;
- }
-
- ptr++;
- while (*ptr == ' ') ptr++;
-
- err_code = atoi (ptr);
-
- if (err_code < 200 || err_code >= 300)
- {
- const gchar *msg_start;
- gchar *msg;
-
- while (g_ascii_isdigit (*ptr))
- ptr++;
-
- while (*ptr == ' ')
- ptr++;
-
- msg_start = ptr;
-
- ptr = strchr (msg_start, '\r');
-
- if (ptr == NULL)
- ptr = strchr (msg_start, '\0');
-
- msg = g_strndup (msg_start, ptr - msg_start);
-
- if (err_code == 407)
- {
- if (has_cred)
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_PROXY_AUTH_FAILED,
- "HTTP proxy authentication failed");
- else
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_PROXY_NEED_AUTH,
- "HTTP proxy authentication required");
- }
- else if (msg[0] == '\0')
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_PROXY_FAILED,
- "Connection failed due to broken HTTP reply");
- else
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_PROXY_FAILED,
- "HTTP proxy connection failed: %i %s",
- err_code, msg);
-
- g_free (msg);
- return FALSE;
- }
-
- return TRUE;
-}
-
-static GIOStream *
-wocky_http_proxy_connect (GProxy *proxy,
- GIOStream *io_stream,
- GProxyAddress *proxy_address,
- GCancellable *cancellable,
- GError **error)
-{
- GInputStream *in;
- GOutputStream *out;
- GDataInputStream *data_in;
- gchar *buffer;
- gboolean has_cred;
-
- in = g_io_stream_get_input_stream (io_stream);
- out = g_io_stream_get_output_stream (io_stream);
-
- data_in = g_data_input_stream_new (in);
- g_filter_input_stream_set_close_base_stream (G_FILTER_INPUT_STREAM (data_in),
- FALSE);
-
- buffer = create_request (proxy_address, &has_cred);
-
- if (!g_output_stream_write_all (out, buffer, strlen (buffer), NULL,
- cancellable, error))
- goto error;
-
- g_free (buffer);
- buffer = g_data_input_stream_read_until (data_in, HTTP_END_MARKER, NULL,
- cancellable, error);
- g_object_unref (data_in);
- data_in = NULL;
-
- if (buffer == NULL)
- {
- if (error && (*error == NULL))
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_PROXY_FAILED,
- "HTTP proxy server closed connection unexpectedly.");
- goto error;
- }
-
- if (!check_reply (buffer, has_cred, error))
- goto error;
-
- g_free (buffer);
-
- return g_object_ref (io_stream);
-
-error:
- if (data_in != NULL)
- g_object_unref (data_in);
-
- g_free (buffer);
- return NULL;
-}
-
-
-typedef struct
-{
- GSimpleAsyncResult *simple;
- GIOStream *io_stream;
- gchar *buffer;
- gssize length;
- gssize offset;
- GDataInputStream *data_in;
- gboolean has_cred;
- GCancellable *cancellable;
-} ConnectAsyncData;
-
-static void request_write_cb (GObject *source,
- GAsyncResult *res,
- gpointer user_data);
-static void reply_read_cb (GObject *source,
- GAsyncResult *res,
- gpointer user_data);
-
-static void
-free_connect_data (ConnectAsyncData *data)
-{
- if (data->io_stream != NULL)
- g_object_unref (data->io_stream);
-
- g_free (data->buffer);
-
- if (data->data_in != NULL)
- g_object_unref (data->data_in);
-
- if (data->cancellable != NULL)
- g_object_unref (data->cancellable);
-
- g_slice_free (ConnectAsyncData, data);
-}
-
-static void
-complete_async_from_error (ConnectAsyncData *data, GError *error)
-{
- GSimpleAsyncResult *simple = data->simple;
-
- if (error == NULL)
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_PROXY_FAILED,
- "HTTP proxy server closed connection unexpectedly.");
-
- g_simple_async_result_set_from_error (data->simple, error);
- g_error_free (error);
- g_simple_async_result_set_op_res_gpointer (simple, NULL, NULL);
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
-}
-
-static void
-do_write (GAsyncReadyCallback callback, ConnectAsyncData *data)
-{
- GOutputStream *out;
- out = g_io_stream_get_output_stream (data->io_stream);
- g_output_stream_write_async (out,
- data->buffer + data->offset,
- data->length - data->offset,
- G_PRIORITY_DEFAULT, data->cancellable,
- callback, data);
-}
-
-static void
-wocky_http_proxy_connect_async (GProxy *proxy,
- GIOStream *io_stream,
- GProxyAddress *proxy_address,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *simple;
- ConnectAsyncData *data;
- GInputStream *in;
-
- simple = g_simple_async_result_new (G_OBJECT (proxy),
- callback, user_data,
- wocky_http_proxy_connect_async);
-
- data = g_slice_new0 (ConnectAsyncData);
-
- data->simple = simple;
- data->io_stream = g_object_ref (io_stream);
-
- if (cancellable != NULL)
- data->cancellable = g_object_ref (cancellable);
-
- in = g_io_stream_get_input_stream (io_stream);
-
- data->data_in = g_data_input_stream_new (in);
- g_filter_input_stream_set_close_base_stream (G_FILTER_INPUT_STREAM (data->data_in),
- FALSE);
-
- g_simple_async_result_set_op_res_gpointer (simple, data,
- (GDestroyNotify) free_connect_data);
-
- data->buffer = create_request (proxy_address, &data->has_cred);
- data->length = strlen (data->buffer);
- data->offset = 0;
-
- do_write (request_write_cb, data);
-}
-
-static void
-request_write_cb (GObject *source,
- GAsyncResult *res,
- gpointer user_data)
-{
- GError *error = NULL;
- ConnectAsyncData *data = user_data;
- gssize written;
-
- written = g_output_stream_write_finish (G_OUTPUT_STREAM (source),
- res, &error);
- if (written < 0)
- {
- complete_async_from_error (data, error);
- return;
- }
-
- data->offset += written;
-
- if (data->offset == data->length)
- {
- g_free (data->buffer);
- data->buffer = NULL;
-
- g_data_input_stream_read_until_async (data->data_in,
- HTTP_END_MARKER,
- G_PRIORITY_DEFAULT,
- data->cancellable,
- reply_read_cb, data);
-
- }
- else
- {
- do_write (request_write_cb, data);
- }
-}
-
-static void
-reply_read_cb (GObject *source,
- GAsyncResult *res,
- gpointer user_data)
-{
- GError *error = NULL;
- ConnectAsyncData *data = user_data;
-
- data->buffer = g_data_input_stream_read_until_finish (data->data_in,
- res, NULL, &error);
-
- if (data->buffer == NULL)
- {
- complete_async_from_error (data, error);
- return;
- }
-
- if (!check_reply (data->buffer, data->has_cred, &error))
- {
- complete_async_from_error (data, error);
- return;
- }
-
- g_simple_async_result_complete (data->simple);
- g_object_unref (data->simple);
-}
-
-static GIOStream *
-wocky_http_proxy_connect_finish (GProxy *proxy,
- GAsyncResult *result,
- GError **error)
-{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
- ConnectAsyncData *data = g_simple_async_result_get_op_res_gpointer (simple);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
-
- return g_object_ref (data->io_stream);
-}
-
-static gboolean
-wocky_http_proxy_supports_hostname (GProxy *proxy)
-{
- return TRUE;
-}
-
-static void
-wocky_http_proxy_class_init (WockyHttpProxyClass *class)
-{
-}
-
-static void
-wocky_http_proxy_iface_init (GProxyInterface *proxy_iface)
-{
- proxy_iface->connect = wocky_http_proxy_connect;
- proxy_iface->connect_async = wocky_http_proxy_connect_async;
- proxy_iface->connect_finish = wocky_http_proxy_connect_finish;
- proxy_iface->supports_hostname = wocky_http_proxy_supports_hostname;
-}
diff --git a/wocky/wocky-http-proxy.h b/wocky/wocky-http-proxy.h
deleted file mode 100644
index b9f9485..0000000
--- a/wocky/wocky-http-proxy.h
+++ /dev/null
@@ -1,46 +0,0 @@
- /* wocky-http-proxy.h: Header for WockyHttpProxy
- *
- * Copyright (C) 2010 Collabora, Ltd.
- * @author Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
- *
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#if !defined (WOCKY_COMPILATION)
-# error "This is an internal header."
-#endif
-
-#ifndef _WOCKY_HTTP_PROXY_H_
-#define _WOCKY_HTTP_PROXY_H_
-
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-#define WOCKY_TYPE_HTTP_PROXY (_wocky_http_proxy_get_type ())
-#define WOCKY_HTTP_PROXY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), WOCKY_TYPE_HTTP_PROXY, WockyHttpProxy))
-#define WOCKY_HTTP_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), WOCKY_TYPE_HTTP_PROXY, WockyHttpProxyClass))
-#define WOCKY_IS_HTTP_PROXY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), WOCKY_TYPE_HTTP_PROXY))
-#define WOCKY_IS_HTTP_PROXY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), WOCKY_TYPE_HTTP_PROXY))
-#define WOCKY_HTTP_PROXY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), WOCKY_TYPE_HTTP_PROXY, WockyHttpProxyClass))
-
-typedef struct _WockyHttpProxy WockyHttpProxy;
-typedef struct _WockyHttpProxyClass WockyHttpProxyClass;
-
-GType _wocky_http_proxy_get_type (void);
-
-G_END_DECLS
-
-#endif /* _WOCKY_HTTP_PROXY_H_ */