[glib-networking] gnutls: fix G_TLS_ERROR_EOF handling with gnutls 3.0
- From: Dan Winship <danw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib-networking] gnutls: fix G_TLS_ERROR_EOF handling with gnutls 3.0
- Date: Fri, 16 Sep 2011 17:52:19 +0000 (UTC)
commit 9e2aaacafb45d51cff57dc033f4b5ad5bc1a1762
Author: Dan Winship <danw gnome org>
Date: Fri Sep 16 11:29:29 2011 -0400
gnutls: fix G_TLS_ERROR_EOF handling with gnutls 3.0
gnutls 3.0 has a new error code for "peer closed connection without
sending a Close packet", so add some #ifdefs to do the right thing
with either 2.x or 3.x.
https://bugzilla.gnome.org/show_bug.cgi?id=659233
tls/gnutls/gtlsconnection-gnutls.c | 30 +++++++++++++++++++-----------
1 files changed, 19 insertions(+), 11 deletions(-)
---
diff --git a/tls/gnutls/gtlsconnection-gnutls.c b/tls/gnutls/gtlsconnection-gnutls.c
index c1ede79..0f792bb 100644
--- a/tls/gnutls/gtlsconnection-gnutls.c
+++ b/tls/gnutls/gtlsconnection-gnutls.c
@@ -132,7 +132,10 @@ struct _GTlsConnectionGnutlsPrivate
GError *error;
GCancellable *cancellable;
- gboolean blocking, eof;
+ gboolean blocking;
+#ifndef GNUTLS_E_PREMATURE_TERMINATION
+ gboolean eof;
+#endif
GIOCondition internal_direction;
};
@@ -548,19 +551,22 @@ end_gnutls_io (GTlsConnectionGnutls *gnutls,
gnutls->priv->need_handshake = TRUE;
return status;
}
- else if (status == GNUTLS_E_UNEXPECTED_PACKET_LENGTH)
+ else if (
+#ifdef GNUTLS_E_PREMATURE_TERMINATION
+ status == GNUTLS_E_PREMATURE_TERMINATION
+#else
+ status == GNUTLS_E_UNEXPECTED_PACKET_LENGTH && gnutls->priv->eof
+#endif
+ )
{
- if (gnutls->priv->eof)
+ if (gnutls->priv->require_close_notify)
{
- if (gnutls->priv->require_close_notify)
- {
- g_set_error_literal (error, G_TLS_ERROR, G_TLS_ERROR_EOF,
- _("TLS connection closed unexpectedly"));
- return status;
- }
- else
- return 0;
+ g_set_error_literal (error, G_TLS_ERROR, G_TLS_ERROR_EOF,
+ _("TLS connection closed unexpectedly"));
+ return status;
}
+ else
+ return 0;
}
return status;
@@ -795,8 +801,10 @@ g_tls_connection_gnutls_pull_func (gnutls_transport_ptr_t transport_data,
if (ret < 0)
set_gnutls_error (gnutls, G_IO_IN);
+#ifndef GNUTLS_E_PREMATURE_TERMINATION
else if (ret == 0)
gnutls->priv->eof = TRUE;
+#endif
return ret;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]