summaryrefslogtreecommitdiff
path: root/lib/gnutls_v2_compat.c
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2007-11-18 20:37:58 +0200
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2007-11-18 20:37:58 +0200
commit7339ff3ea7de5d03321f4f86636fd1705aabba20 (patch)
treed41c4d13085cb45de315bf17d0c6b7b4c830d797 /lib/gnutls_v2_compat.c
parent511b53b30adb9dcdf714aa6c3c84dd8a83b5298f (diff)
downloadgnutls-7339ff3ea7de5d03321f4f86636fd1705aabba20.tar.gz
Renegotiate the protocol version after the user_hello_func has been called
Diffstat (limited to 'lib/gnutls_v2_compat.c')
-rw-r--r--lib/gnutls_v2_compat.c37
1 files changed, 13 insertions, 24 deletions
diff --git a/lib/gnutls_v2_compat.c b/lib/gnutls_v2_compat.c
index eed1c812a6..b065a34d0f 100644
--- a/lib/gnutls_v2_compat.c
+++ b/lib/gnutls_v2_compat.c
@@ -96,13 +96,12 @@ _gnutls_read_client_hello_v2 (gnutls_session_t session, opaque * data,
int pos = 0;
int ret = 0;
uint16_t sizeOfSuites;
- gnutls_protocol_t version;
+ gnutls_protocol_t adv_version;
opaque rnd[TLS_RANDOM_SIZE];
int len = datalen;
int err;
uint16_t challenge;
opaque session_id[TLS_MAX_SESSION_ID_SIZE];
- gnutls_protocol_t ver;
/* we only want to get here once - only in client hello */
session->internals.v2_hello = 0;
@@ -115,34 +114,17 @@ _gnutls_read_client_hello_v2 (gnutls_session_t session, opaque * data,
set_adv_version (session, data[pos], data[pos + 1]);
- version = _gnutls_version_get (data[pos], data[pos + 1]);
+ adv_version = _gnutls_version_get (data[pos], data[pos + 1]);
- /* if we do not support that version
- */
- if (_gnutls_version_is_supported (session, version) == 0)
- {
- /* If he requested something we do not support
- * then we send him the highest we support.
- */
- ver = _gnutls_version_max (session);
- if (ver == GNUTLS_VERSION_UNKNOWN)
- {
- /* this check is not really needed.
- */
- gnutls_assert ();
- return GNUTLS_E_UNKNOWN_CIPHER_SUITE;
- }
- }
- else
+ ret = _gnutls_negotiate_version( session, adv_version);
+ if (ret < 0)
{
- ver = version;
+ gnutls_assert ();
+ return ret;
}
- _gnutls_set_current_version (session, ver);
-
pos += 2;
-
/* Read uint16_t cipher_spec_length */
DECR_LEN (len, 2);
sizeOfSuites = _gnutls_read_uint16 (&data[pos]);
@@ -180,6 +162,13 @@ _gnutls_read_client_hello_v2 (gnutls_session_t session, opaque * data,
gnutls_assert();
return ret;
}
+
+ ret = _gnutls_negotiate_version( session, adv_version);
+ if (ret < 0)
+ {
+ gnutls_assert ();
+ return ret;
+ }
}
/* find an appropriate cipher suite */