[glib-networking/enable-openssl-tests: 5/7] openssl: add a method on the bio to wait for the socket to be available
- From: Ignacio Casal Quinteiro <icq src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib-networking/enable-openssl-tests: 5/7] openssl: add a method on the bio to wait for the socket to be available
- Date: Fri, 24 May 2019 10:32:34 +0000 (UTC)
commit 85dd4fadc365380694e9a129ed6fab43f900b6cd
Author: Ignacio Casal Quinteiro <icq gnome org>
Date: Thu May 23 12:40:57 2019 +0200
openssl: add a method on the bio to wait for the socket to be available
tls/openssl/gtlsbio.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
tls/openssl/gtlsbio.h | 4 ++++
2 files changed, 50 insertions(+)
---
diff --git a/tls/openssl/gtlsbio.c b/tls/openssl/gtlsbio.c
index 02ccf21..865afa1 100644
--- a/tls/openssl/gtlsbio.c
+++ b/tls/openssl/gtlsbio.c
@@ -397,3 +397,49 @@ g_tls_bio_set_write_error (BIO *bio,
#endif
gbio->write_error = error;
}
+
+static gboolean
+on_source_ready (GObject *pollable_stream,
+ gpointer user_data)
+{
+ GMainLoop *loop = user_data;
+
+ g_main_loop_quit (loop);
+
+ return G_SOURCE_REMOVE;
+}
+
+void
+g_tls_bio_wait_available (BIO *bio,
+ GIOCondition condition,
+ GCancellable *cancellable)
+{
+ GTlsBio *gbio;
+ GMainLoop *loop;
+ GSource *source;
+
+ g_return_if_fail (bio != NULL);
+
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined (LIBRESSL_VERSION_NUMBER)
+ gbio = (GTlsBio *)bio->ptr;
+#else
+ gbio = BIO_get_data (bio);
+#endif
+
+ loop = g_main_loop_new (NULL, FALSE);
+
+ if (condition & G_IO_IN)
+ source = g_pollable_input_stream_create_source (G_POLLABLE_INPUT_STREAM (g_io_stream_get_input_stream
(gbio->io_stream)),
+ cancellable);
+ else
+ source = g_pollable_output_stream_create_source (G_POLLABLE_OUTPUT_STREAM (g_io_stream_get_output_stream
(gbio->io_stream)),
+ cancellable);
+
+ g_source_set_callback (source, (GSourceFunc)on_source_ready, loop, NULL);
+ g_source_attach (source, NULL);
+
+ g_message ("waiting for IO");
+ g_main_loop_run (loop);
+ g_main_loop_unref (loop);
+ g_message ("after waiting");
+}
diff --git a/tls/openssl/gtlsbio.h b/tls/openssl/gtlsbio.h
index b6812fe..4809c17 100644
--- a/tls/openssl/gtlsbio.h
+++ b/tls/openssl/gtlsbio.h
@@ -51,6 +51,10 @@ void g_tls_bio_set_write_blocking (BIO *bio,
void g_tls_bio_set_write_error (BIO *bio,
GError **error);
+void g_tls_bio_wait_available (BIO *bio,
+ GIOCondition condition,
+ GCancellable *cancellable);
+
G_END_DECLS
#endif /* __G_TLS_BIO_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]