summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Kosse <tim.kosse@filezilla-project.org>2016-01-15 14:45:42 +0100
committerNikos Mavrogiannopoulos <nmav@redhat.com>2016-05-30 14:06:50 +0200
commit9ea294cb89d60a4393e9266ee0364d4cf0daa5c7 (patch)
treeae9ba84470242d107e4615e3f4b7ba97092f9a1d
parent1eb8b3dcc6c790db88889d67dc23f65aa75341d2 (diff)
downloadgnutls-9ea294cb89d60a4393e9266ee0364d4cf0daa5c7.tar.gz
Reset extensions_sent_size only at start of handshake
That is, do not reset it when completing it so that we can use the negotiated extensions even after the handshake is complete. Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
-rw-r--r--lib/extensions.c5
-rw-r--r--lib/handshake.c1
-rw-r--r--lib/state.c4
3 files changed, 6 insertions, 4 deletions
diff --git a/lib/extensions.c b/lib/extensions.c
index 185fd14c73..905baf8328 100644
--- a/lib/extensions.c
+++ b/lib/extensions.c
@@ -157,8 +157,9 @@ const char *gnutls_ext_get_name(unsigned int ext)
return NULL;
}
-/* Checks if the extension we just received is one of the
- * requested ones. Otherwise it's a fatal error.
+/* Checks if the extension @type provided has been requested
+ * by us (in client side). In that case it returns zero,
+ * otherwise a negative error value.
*/
int
_gnutls_extension_list_check(gnutls_session_t session, uint16_t type)
diff --git a/lib/handshake.c b/lib/handshake.c
index 965698e3ca..7dccae6030 100644
--- a/lib/handshake.c
+++ b/lib/handshake.c
@@ -2563,6 +2563,7 @@ int gnutls_handshake(gnutls_session_t session)
if (session->internals.priorities.protocol.algorithms == 0)
return gnutls_assert_val(GNUTLS_E_NO_PRIORITIES_WERE_SET);
+ session->internals.extensions_sent_size = 0;
session->internals.handshake_in_progress = 1;
session->internals.vc_status = -1;
gettime(&session->internals.handshake_start_time);
diff --git a/lib/state.c b/lib/state.c
index 6527695067..f96f43319b 100644
--- a/lib/state.c
+++ b/lib/state.c
@@ -274,8 +274,6 @@ inline static void deinit_internal_params(gnutls_session_t session)
*/
static void _gnutls_handshake_internal_state_init(gnutls_session_t session)
{
- session->internals.extensions_sent_size = 0;
-
/* by default no selected certificate */
session->internals.adv_version_major = 0;
session->internals.adv_version_minor = 0;
@@ -392,6 +390,8 @@ int gnutls_init(gnutls_session_t * session, unsigned int flags)
_gnutls_handshake_internal_state_init(*session);
+ (*session)->internals.extensions_sent_size = 0;
+
/* emulate old gnutls behavior for old applications that do not use the priority_*
* functions.
*/