diff options
| -rw-r--r-- | libsoup/soup-session.c | 154 | ||||
| -rw-r--r-- | libsoup/soup-session.h | 18 | ||||
| -rw-r--r-- | tests/connection-test.c | 183 |
3 files changed, 0 insertions, 355 deletions
diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c index 9c7b6660..2e83d4a5 100644 --- a/libsoup/soup-session.c +++ b/libsoup/soup-session.c @@ -4748,157 +4748,3 @@ soup_session_websocket_connect_finish (SoupSession *session, return g_task_propagate_pointer (G_TASK (result), error); } - -/** - * SoupSessionConnectProgressCallback: - * @session: the #SoupSession - * @event: a #GSocketClientEvent - * @connection: the current state of the network connection - * @user_data: the data passed to soup_session_connect_async(). - * - * Prototype for the progress callback passed to soup_session_connect_async(). - * - * Since: 2.62 - */ - -typedef struct { - SoupMessageQueueItem *item; - SoupSessionConnectProgressCallback progress_callback; - gpointer user_data; -} ConnectAsyncData; - -static ConnectAsyncData * -connect_async_data_new (SoupMessageQueueItem *item, - SoupSessionConnectProgressCallback progress_callback, - gpointer user_data) -{ - ConnectAsyncData *data; - - soup_message_queue_item_ref (item); - - data = g_slice_new (ConnectAsyncData); - data->item = item; - data->progress_callback = progress_callback; - data->user_data = user_data; - - return data; -} - -static void -connect_async_data_free (ConnectAsyncData *data) -{ - soup_message_queue_item_unref (data->item); - - g_slice_free (ConnectAsyncData, data); -} - -static void -connect_async_message_network_event (SoupMessage *msg, - GSocketClientEvent event, - GIOStream *connection, - GTask *task) -{ - ConnectAsyncData *data = g_task_get_task_data (task); - - if (data->progress_callback) - data->progress_callback (data->item->session, event, connection, data->user_data); -} - -static void -connect_async_message_finished (SoupMessage *msg, - GTask *task) -{ - ConnectAsyncData *data = g_task_get_task_data (task); - SoupMessageQueueItem *item = data->item; - - if (!item->conn || item->error) { - g_task_return_error (task, g_error_copy (item->error)); - } else { - g_task_return_pointer (task, - steal_connection (item->session, item), - g_object_unref); - } - g_object_unref (task); -} - -/** - * soup_session_connect_async: - * @session: a #SoupSession - * @uri: a #SoupURI to connect to - * @cancellable: a #GCancellable - * @progress_callback: (allow-none) (scope async): a #SoupSessionConnectProgressCallback which - * will be called for every network event that occurs during the connection. - * @callback: (allow-none) (scope async): the callback to invoke when the operation finishes - * @user_data: data for @progress_callback and @callback - * - * Start a connection to @uri. The operation can be monitored by providing a @progress_callback - * and finishes when the connection is done or an error ocurred. - * - * Call soup_session_connect_finish() to get the #GIOStream to communicate with the server. - * - * Since: 2.62 - */ -void -soup_session_connect_async (SoupSession *session, - SoupURI *uri, - GCancellable *cancellable, - SoupSessionConnectProgressCallback progress_callback, - GAsyncReadyCallback callback, - gpointer user_data) -{ - SoupSessionPrivate *priv; - SoupMessage *msg; - SoupMessageQueueItem *item; - ConnectAsyncData *data; - GTask *task; - - g_return_if_fail (SOUP_IS_SESSION (session)); - g_return_if_fail (!SOUP_IS_SESSION_SYNC (session)); - priv = soup_session_get_instance_private (session); - g_return_if_fail (priv->use_thread_context); - g_return_if_fail (uri != NULL); - - task = g_task_new (session, cancellable, callback, user_data); - - msg = soup_message_new_from_uri (SOUP_METHOD_HEAD, uri); - soup_message_set_flags (msg, SOUP_MESSAGE_NEW_CONNECTION); - g_signal_connect_object (msg, "finished", - G_CALLBACK (connect_async_message_finished), - task, 0); - if (progress_callback) { - g_signal_connect_object (msg, "network-event", - G_CALLBACK (connect_async_message_network_event), - task, 0); - } - - item = soup_session_append_queue_item (session, msg, TRUE, FALSE, NULL, NULL); - item->connect_only = TRUE; - data = connect_async_data_new (item, progress_callback, user_data); - g_task_set_task_data (task, data, (GDestroyNotify) connect_async_data_free); - soup_session_kick_queue (session); - soup_message_queue_item_unref (item); - g_object_unref (msg); -} - -/** - * soup_session_connect_finish: - * @session: a #SoupSession - * @result: the #GAsyncResult passed to your callback - * @error: return location for a #GError, or %NULL - * - * Gets the #GIOStream created for the connection to communicate with the server. - * - * Return value: (transfer full): a new #GIOStream, or %NULL on error. - * - * Since: 2.62 - */ -GIOStream * -soup_session_connect_finish (SoupSession *session, - GAsyncResult *result, - GError **error) -{ - g_return_val_if_fail (SOUP_IS_SESSION (session), NULL); - g_return_val_if_fail (g_task_is_valid (result, session), NULL); - - return g_task_propagate_pointer (G_TASK (result), error); -} diff --git a/libsoup/soup-session.h b/libsoup/soup-session.h index dc2e22a6..d8e5ce9e 100644 --- a/libsoup/soup-session.h +++ b/libsoup/soup-session.h @@ -224,24 +224,6 @@ SoupWebsocketConnection *soup_session_websocket_connect_finish (SoupSession GAsyncResult *result, GError **error); -typedef void (*SoupSessionConnectProgressCallback) (SoupSession *session, - GSocketClientEvent event, - GIOStream *connection, - gpointer user_data); - -SOUP_AVAILABLE_IN_2_62 -void soup_session_connect_async (SoupSession *session, - SoupURI *uri, - GCancellable *cancellable, - SoupSessionConnectProgressCallback progress_callback, - GAsyncReadyCallback callback, - gpointer user_data); - -SOUP_AVAILABLE_IN_2_62 -GIOStream *soup_session_connect_finish (SoupSession *session, - GAsyncResult *result, - GError **error); - G_END_DECLS #endif /* __SOUP_SESSION_H__ */ diff --git a/tests/connection-test.c b/tests/connection-test.c index 9b451176..dea95fd7 100644 --- a/tests/connection-test.c +++ b/tests/connection-test.c @@ -1007,188 +1007,6 @@ do_connection_event_test (void) soup_test_session_abort_unref (session); } -typedef struct { - GMainLoop *loop; - GIOStream *stream; - GError *error; - const char *events; -} ConnectTestData; - -static void -connect_progress (SoupSession *session, GSocketClientEvent event, GIOStream *connection, ConnectTestData *data) -{ - soup_test_assert (*data->events == event_abbrevs[event], - "Unexpected event: %s (expected %s)", - event_names[event], - event_name_from_abbrev (*data->events)); - data->events = data->events + 1; -} - -static void -connect_finished (SoupSession *session, GAsyncResult *result, ConnectTestData *data) -{ - data->stream = soup_session_connect_finish (session, result, &data->error); - g_main_loop_quit (data->loop); -} - -static void -do_one_connection_connect_test (SoupSession *session, SoupURI *uri, const char *response, const char *events) -{ - ConnectTestData data = { NULL, NULL, NULL, events }; - static const char *request = "GET / HTTP/1.1\r\nHost: localhost\r\n\r\n"; - gsize bytes = 0; - char buffer[128]; - - data.loop = g_main_loop_new (NULL, FALSE); - soup_session_connect_async (session, uri, NULL, - (SoupSessionConnectProgressCallback)connect_progress, - (GAsyncReadyCallback)connect_finished, - &data); - g_main_loop_run (data.loop); - - g_assert (G_IS_IO_STREAM (data.stream)); - g_assert_no_error (data.error); - g_assert (g_output_stream_write_all (g_io_stream_get_output_stream (data.stream), - request, strlen (request), &bytes, NULL, NULL)); - g_assert (g_input_stream_read_all (g_io_stream_get_input_stream (data.stream), - buffer, sizeof (buffer), &bytes, NULL, NULL)); - buffer[strlen (response)] = '\0'; - g_assert_cmpstr (buffer, ==, response); - - while (*data.events) { - soup_test_assert (!*data.events, - "Expected %s", - event_name_from_abbrev (*data.events)); - data.events++; - } - - g_object_unref (data.stream); - g_main_loop_unref (data.loop); -} - -static void -do_one_connection_connect_fail_test (SoupSession *session, SoupURI *uri, GQuark domain, gint code, const char *events) -{ - ConnectTestData data = { NULL, NULL, NULL, events }; - - data.loop = g_main_loop_new (NULL, FALSE); - soup_session_connect_async (session, uri, NULL, - (SoupSessionConnectProgressCallback)connect_progress, - (GAsyncReadyCallback)connect_finished, - &data); - g_main_loop_run (data.loop); - g_main_loop_unref (data.loop); - - g_assert (!data.stream); - g_assert_error (data.error, domain, code); - g_clear_error (&data.error); - - while (*data.events) { - soup_test_assert (!*data.events, - "Expected %s", - event_name_from_abbrev (*data.events)); - data.events++; - } -} - -static void -do_connection_connect_test (void) -{ - SoupSession *session; - SoupURI *http_uri; - SoupURI *https_uri = NULL; - SoupURI *ws_uri; - SoupURI *wss_uri = NULL; - SoupURI *file_uri; - SoupURI *wrong_http_uri; - GProxyResolver *resolver; - - SOUP_TEST_SKIP_IF_NO_APACHE; - - session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC, - SOUP_SESSION_USE_THREAD_CONTEXT, TRUE, - NULL); - - debug_printf (1, " http\n"); - http_uri = soup_uri_new (HTTP_SERVER); - do_one_connection_connect_test (session, http_uri, - "HTTP/1.1 200 OK", "rRcCx"); - - if (tls_available) { - debug_printf (1, " https\n"); - https_uri = soup_uri_new (HTTPS_SERVER); - do_one_connection_connect_test (session, https_uri, - "HTTP/1.1 200 OK", "rRcCtTx"); - } else - debug_printf (1, " https -- SKIPPING\n"); - - debug_printf (1, " ws\n"); - ws_uri = soup_uri_new (HTTP_SERVER); - ws_uri->scheme = SOUP_URI_SCHEME_WS; - do_one_connection_connect_test (session, ws_uri, - "HTTP/1.1 200 OK", "rRcCx"); - - if (tls_available) { - debug_printf (1, " wss\n"); - wss_uri = soup_uri_new (HTTPS_SERVER); - do_one_connection_connect_test (session, wss_uri, - "HTTP/1.1 200 OK", "rRcCtTx"); - } else - debug_printf (1, " wss -- SKIPPING\n"); - - debug_printf (1, " file\n"); - file_uri = soup_uri_new ("file:///foo/bar"); - do_one_connection_connect_fail_test (session, file_uri, - G_RESOLVER_ERROR, G_RESOLVER_ERROR_NOT_FOUND, - "r"); - - debug_printf (1, " wrong http (invalid port)\n"); - wrong_http_uri = soup_uri_new (HTTP_SERVER); - wrong_http_uri->port = 1234; - do_one_connection_connect_fail_test (session, wrong_http_uri, - G_IO_ERROR, G_IO_ERROR_CONNECTION_REFUSED, - "rRcr"); /* FIXME: why r again? GLib bug? */ - - resolver = g_simple_proxy_resolver_new (HTTP_PROXY, NULL); - g_object_set (G_OBJECT (session), - SOUP_SESSION_PROXY_RESOLVER, resolver, - NULL); - g_object_unref (resolver); - - debug_printf (1, " http with proxy\n"); - do_one_connection_connect_test (session, http_uri, - "HTTP/1.1 403 Forbidden", "rRcCx"); - - if (tls_available) { - debug_printf (1, " https with proxy\n"); - do_one_connection_connect_test (session, https_uri, - "HTTP/1.1 200 OK", "rRcCpPtTx"); - } else - debug_printf (1, " https with proxy -- SKIPPING\n"); - - debug_printf (1, " ws with proxy\n"); - do_one_connection_connect_test (session, ws_uri, - "HTTP/1.1 403 Forbidden", "rRcCx"); - - if (tls_available) { - debug_printf (1, " wss with proxy\n"); - do_one_connection_connect_test (session, wss_uri, - "HTTP/1.1 200 OK", "rRcCpPtTx"); - } else - debug_printf (1, " wss with proxy -- SKIPPING\n"); - - soup_uri_free (http_uri); - if (https_uri) - soup_uri_free (https_uri); - soup_uri_free (ws_uri); - if (wss_uri) - soup_uri_free (wss_uri); - soup_uri_free (file_uri); - soup_uri_free (wrong_http_uri); - - soup_test_session_abort_unref (session); -} - int main (int argc, char **argv) { @@ -1210,7 +1028,6 @@ main (int argc, char **argv) g_test_add_func ("/connection/non-idempotent", do_non_idempotent_connection_test); g_test_add_func ("/connection/state", do_connection_state_test); g_test_add_func ("/connection/event", do_connection_event_test); - g_test_add_func ("/connection/connect", do_connection_connect_test); ret = g_test_run (); |
