diff options
Diffstat (limited to 'src/microhttpd/connection_https.c')
-rw-r--r-- | src/microhttpd/connection_https.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/microhttpd/connection_https.c b/src/microhttpd/connection_https.c index 3d4b0bdb..0060c59a 100644 --- a/src/microhttpd/connection_https.c +++ b/src/microhttpd/connection_https.c | |||
@@ -73,9 +73,28 @@ recv_tls_adapter (struct MHD_Connection *connection, | |||
73 | } | 73 | } |
74 | if (res < 0) | 74 | if (res < 0) |
75 | { | 75 | { |
76 | /* Likely 'GNUTLS_E_INVALID_SESSION' (client communication | ||
77 | disrupted); interpret as a hard error */ | ||
78 | connection->tls_read_ready = false; | 76 | connection->tls_read_ready = false; |
77 | if ( (GNUTLS_E_DECRYPTION_FAILED == res) || | ||
78 | (GNUTLS_E_INVALID_SESSION == res) || | ||
79 | (GNUTLS_E_DECOMPRESSION_FAILED == res) || | ||
80 | (GNUTLS_E_RECEIVED_ILLEGAL_PARAMETER == res) || | ||
81 | (GNUTLS_E_UNSUPPORTED_VERSION_PACKET == res) || | ||
82 | (GNUTLS_E_UNEXPECTED_PACKET_LENGTH == res) || | ||
83 | (GNUTLS_E_UNEXPECTED_PACKET == res) || | ||
84 | (GNUTLS_E_UNEXPECTED_HANDSHAKE_PACKET == res) || | ||
85 | (GNUTLS_E_EXPIRED == res) || | ||
86 | (GNUTLS_E_REHANDSHAKE == res) ) | ||
87 | return MHD_ERR_TLS_; | ||
88 | if ( (GNUTLS_E_PULL_ERROR == res) || | ||
89 | (GNUTLS_E_INTERNAL_ERROR == res) || | ||
90 | (GNUTLS_E_CRYPTODEV_IOCTL_ERROR == res) || | ||
91 | (GNUTLS_E_CRYPTODEV_DEVICE_ERROR == res) ) | ||
92 | return MHD_ERR_PIPE_; | ||
93 | if (GNUTLS_E_PREMATURE_TERMINATION == res) | ||
94 | return MHD_ERR_CONNRESET_; | ||
95 | if (GNUTLS_E_MEMORY_ERROR == res) | ||
96 | return MHD_ERR_NOMEM_; | ||
97 | /* Treat any other error as a hard error. */ | ||
79 | return MHD_ERR_NOTCONN_; | 98 | return MHD_ERR_NOTCONN_; |
80 | } | 99 | } |
81 | 100 | ||