diff options
author | Carlos Garcia Campos <cgarcia@igalia.com> | 2020-09-30 11:40:58 +0200 |
---|---|---|
committer | Patrick Griffis <tingping@tingping.se> | 2020-10-05 20:28:27 +0000 |
commit | 99e633f74e82b557326c17169a7d654712519001 (patch) | |
tree | 1001f529d0556bb15656d0cd5ca72413e10c704b | |
parent | e8f9ea8549ef8129a2eb7450edc644bbf8efda58 (diff) | |
download | libsoup-99e633f74e82b557326c17169a7d654712519001.tar.gz |
session: make soup_session_steal_connection static
And remove the stealing tests since it's internal api already covered by
websockets tests.
-rw-r--r-- | libsoup/soup-session-private.h | 3 | ||||
-rw-r--r-- | libsoup/soup-session.c | 5 | ||||
-rw-r--r-- | tests/misc-test.c | 184 |
3 files changed, 2 insertions, 190 deletions
diff --git a/libsoup/soup-session-private.h b/libsoup/soup-session-private.h index 023cd6cb..3272301b 100644 --- a/libsoup/soup-session-private.h +++ b/libsoup/soup-session-private.h @@ -15,9 +15,6 @@ G_BEGIN_DECLS SoupMessageQueue *soup_session_get_queue (SoupSession *session); -GIOStream * soup_session_steal_connection (SoupSession *session, - SoupMessage *msg); - G_END_DECLS diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c index d801f6f8..1ae7aba2 100644 --- a/libsoup/soup-session.c +++ b/libsoup/soup-session.c @@ -3995,9 +3995,8 @@ steal_connection (SoupSession *session, * connection). No guarantees are made about what kind of #GIOStream * is returned. * - * Since: 2.50 - **/ -GIOStream * + */ +static GIOStream * soup_session_steal_connection (SoupSession *session, SoupMessage *msg) { diff --git a/tests/misc-test.c b/tests/misc-test.c index 9a51c353..759c2abf 100644 --- a/tests/misc-test.c +++ b/tests/misc-test.c @@ -954,188 +954,6 @@ do_pause_cancel_test (void) g_source_remove (timeout_id); } -static gboolean -run_echo_server (gpointer user_data) -{ - GIOStream *stream = user_data; - GInputStream *istream; - GDataInputStream *distream; - GOutputStream *ostream; - char *str, *caps; - gssize n; - GError *error = NULL; - - istream = g_io_stream_get_input_stream (stream); - distream = G_DATA_INPUT_STREAM (g_data_input_stream_new (istream)); - ostream = g_io_stream_get_output_stream (stream); - - /* Echo until the client disconnects */ - while (TRUE) { - str = g_data_input_stream_read_line (distream, NULL, NULL, &error); - g_assert_no_error (error); - if (!str) - break; - - caps = g_ascii_strup (str, -1); - n = g_output_stream_write (ostream, caps, strlen (caps), NULL, &error); - g_assert_no_error (error); - g_assert_cmpint (n, ==, strlen (caps)); - n = g_output_stream_write (ostream, "\n", 1, NULL, &error); - g_assert_no_error (error); - g_assert_cmpint (n, ==, 1); - g_free (caps); - g_free (str); - } - - g_object_unref (distream); - - g_io_stream_close (stream, NULL, &error); - g_assert_no_error (error); - g_object_unref (stream); - - return FALSE; -} - -static void -steal_after_upgrade (SoupMessage *msg, gpointer user_data) -{ - SoupClientContext *context = user_data; - GIOStream *stream; - GSource *source; - - /* This should not ever be seen. */ - soup_message_set_status (msg, SOUP_STATUS_INTERNAL_SERVER_ERROR); - - stream = soup_client_context_steal_connection (context); - - source = g_idle_source_new (); - g_source_set_callback (source, run_echo_server, stream, NULL); - g_source_attach (source, g_main_context_get_thread_default ()); - g_source_unref (source); -} - -static void -upgrade_server_callback (SoupServer *server, SoupMessage *msg, - const char *path, GHashTable *query, - SoupClientContext *context, gpointer data) -{ - if (msg->method != SOUP_METHOD_GET) { - soup_message_set_status (msg, SOUP_STATUS_NOT_IMPLEMENTED); - return; - } - - soup_message_set_status (msg, SOUP_STATUS_SWITCHING_PROTOCOLS); - soup_message_headers_append (msg->request_headers, "Upgrade", "ECHO"); - soup_message_headers_append (msg->request_headers, "Connection", "upgrade"); - - g_signal_connect (msg, "wrote-informational", - G_CALLBACK (steal_after_upgrade), context); -} - -static void -callback_not_reached (SoupMessage *msg, - gpointer user_data) -{ - g_assert_not_reached (); -} - -static void -switching_protocols (SoupMessage *msg, gpointer user_data) -{ - GIOStream **out_iostream = user_data; - SoupSession *session = g_object_get_data (G_OBJECT (msg), "SoupSession"); - - *out_iostream = soup_session_steal_connection (session, msg); -} - -static void -do_stealing_test (gconstpointer data) -{ - gboolean sync = GPOINTER_TO_INT (data); - SoupServer *server; - SoupURI *uri; - SoupSession *session; - SoupMessage *msg; - GIOStream *iostream; - GInputStream *istream; - GDataInputStream *distream; - GOutputStream *ostream; - int i; - gssize n; - char *str, *caps; - GError *error = NULL; - static const char *strings[] = { "one", "two", "three", "four", "five" }; - - server = soup_test_server_new (SOUP_TEST_SERVER_IN_THREAD); - uri = soup_test_server_get_uri (server, SOUP_URI_SCHEME_HTTP, "127.0.0.1"); - soup_server_add_handler (server, NULL, upgrade_server_callback, NULL, NULL); - - session = soup_test_session_new (SOUP_TYPE_SESSION, NULL); - msg = soup_message_new_from_uri ("GET", uri); - soup_message_headers_append (msg->request_headers, "Upgrade", "echo"); - soup_message_headers_append (msg->request_headers, "Connection", "upgrade"); - g_object_set_data (G_OBJECT (msg), "SoupSession", session); - - soup_message_add_status_code_handler (msg, "got-informational", - SOUP_STATUS_SWITCHING_PROTOCOLS, - G_CALLBACK (switching_protocols), &iostream); - - iostream = NULL; - - if (sync) { - soup_test_session_send_message (session, msg); - soup_test_assert_message_status (msg, SOUP_STATUS_SWITCHING_PROTOCOLS); - } else { - g_signal_connect (msg, "finished", - G_CALLBACK (callback_not_reached), NULL); - soup_session_send_async (session, msg, NULL, NULL, NULL); - while (iostream == NULL) - g_main_context_iteration (NULL, TRUE); - } - - g_assert (iostream != NULL); - - g_object_unref (msg); - soup_test_session_abort_unref (session); - soup_uri_free (uri); - - /* Now iostream connects to a (capitalizing) echo server */ - - istream = g_io_stream_get_input_stream (iostream); - distream = G_DATA_INPUT_STREAM (g_data_input_stream_new (istream)); - ostream = g_io_stream_get_output_stream (iostream); - - for (i = 0; i < G_N_ELEMENTS (strings); i++) { - n = g_output_stream_write (ostream, strings[i], strlen (strings[i]), - NULL, &error); - g_assert_no_error (error); - g_assert_cmpint (n, ==, strlen (strings[i])); - n = g_output_stream_write (ostream, "\n", 1, NULL, &error); - g_assert_no_error (error); - g_assert_cmpint (n, ==, 1); - } - - for (i = 0; i < G_N_ELEMENTS (strings); i++) { - str = g_data_input_stream_read_line (distream, NULL, NULL, &error); - g_assert_no_error (error); - caps = g_ascii_strup (strings[i], -1); - g_assert_cmpstr (caps, ==, str); - g_free (caps); - g_free (str); - } - - g_object_unref (distream); - - g_io_stream_close (iostream, NULL, &error); - g_assert_no_error (error); - g_object_unref (iostream); - - /* We can't do this until the end because it's in another thread, and - * soup_test_server_quit_unref() will wait for that thread to exit. - */ - soup_test_server_quit_unref (server); -} - int main (int argc, char **argv) { @@ -1177,8 +995,6 @@ main (int argc, char **argv) g_test_add_func ("/misc/aliases", do_aliases_test); g_test_add_func ("/misc/pause-abort", do_pause_abort_test); g_test_add_func ("/misc/pause-cancel", do_pause_cancel_test); - g_test_add_data_func ("/misc/stealing/async", GINT_TO_POINTER (FALSE), do_stealing_test); - g_test_add_data_func ("/misc/stealing/sync", GINT_TO_POINTER (TRUE), do_stealing_test); ret = g_test_run (); |