diff options
author | Andreas Frisch <afrisch@make.tv> | 2018-03-29 13:33:10 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2018-11-07 23:29:45 +0200 |
commit | 472976f21d960876a1dae85364a58af029b71b9d (patch) | |
tree | 11ca870700a3a2c30ef1d24429180e5bfd5f03a5 | |
parent | 47565aa310148744e4eb32ba0cfbfec861e8e7ae (diff) | |
download | gstreamer-plugins-bad-472976f21d960876a1dae85364a58af029b71b9d.tar.gz |
dtls: Properly display all errors/warnings from ERR queue
Print out all errors from the OpenSSL error queue instead of just
looking at the topmost error. Using the callback interface also removes
the need for formatting using a buffer on the stack.
-rw-r--r-- | ext/dtls/gstdtlsagent.c | 14 | ||||
-rw-r--r-- | ext/dtls/gstdtlsconnection.c | 27 |
2 files changed, 32 insertions, 9 deletions
diff --git a/ext/dtls/gstdtlsagent.c b/ext/dtls/gstdtlsagent.c index 55500f95b..2b059c19b 100644 --- a/ext/dtls/gstdtlsagent.c +++ b/ext/dtls/gstdtlsagent.c @@ -168,6 +168,14 @@ gst_dtls_agent_class_init (GstDtlsAgentClass * klass) _gst_dtls_init_openssl (); } +static int +ssl_warn_cb (const char *str, size_t len, void *u) +{ + GstDtlsAgent *self = u; + GST_WARNING_OBJECT (self, "ssl error: %s", str); + return 0; +} + static void gst_dtls_agent_init (GstDtlsAgent * self) { @@ -182,12 +190,10 @@ gst_dtls_agent_init (GstDtlsAgent * self) priv->ssl_context = SSL_CTX_new (DTLSv1_method ()); #endif if (ERR_peek_error () || !priv->ssl_context) { - char buf[512]; - priv->ssl_context = NULL; - GST_WARNING_OBJECT (self, "Error creating SSL Context: %s", - ERR_error_string (ERR_get_error (), buf)); + GST_WARNING_OBJECT (self, "Error creating SSL Context"); + ERR_print_errors_cb (ssl_warn_cb, self); g_return_if_reached (); } diff --git a/ext/dtls/gstdtlsconnection.c b/ext/dtls/gstdtlsconnection.c index e444fd661..382dca215 100644 --- a/ext/dtls/gstdtlsconnection.c +++ b/ext/dtls/gstdtlsconnection.c @@ -708,11 +708,26 @@ beach: self->priv->keys_exported = TRUE; } +static int +ssl_warn_cb (const char *str, size_t len, void *u) +{ + GstDtlsConnection *self = u; + GST_WARNING_OBJECT (self, "ssl error: %s", str); + return 0; +} + +static int +ssl_err_cb (const char *str, size_t len, void *u) +{ + GstDtlsConnection *self = u; + GST_ERROR_OBJECT (self, "ssl error: %s", str); + return 0; +} + static void openssl_poll (GstDtlsConnection * self) { int ret; - char buf[512]; int error; log_state (self, "poll: before handshake"); @@ -749,9 +764,9 @@ openssl_poll (GstDtlsConnection * self) GST_WARNING_OBJECT (self, "no error, handshake should be done"); break; case SSL_ERROR_SSL: - GST_LOG_OBJECT (self, "SSL error %d: %s", error, - ERR_error_string (ERR_get_error (), buf)); - break; + GST_ERROR_OBJECT (self, "SSL error"); + ERR_print_errors_cb (ssl_err_cb, self); + return; case SSL_ERROR_WANT_READ: GST_LOG_OBJECT (self, "SSL wants read"); break; @@ -759,12 +774,14 @@ openssl_poll (GstDtlsConnection * self) GST_LOG_OBJECT (self, "SSL wants write"); break; case SSL_ERROR_SYSCALL:{ - GST_LOG_OBJECT (self, "SSL syscall (error) : %lu", ERR_get_error ()); + GST_LOG_OBJECT (self, "SSL syscall error"); break; } default: GST_WARNING_OBJECT (self, "Unknown SSL error: %d, ret: %d", error, ret); } + + ERR_print_errors_cb (ssl_warn_cb, self); } static int |