diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2007-11-18 20:37:58 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2007-11-18 20:37:58 +0200 |
commit | 7339ff3ea7de5d03321f4f86636fd1705aabba20 (patch) | |
tree | d41c4d13085cb45de315bf17d0c6b7b4c830d797 /lib/gnutls_v2_compat.c | |
parent | 511b53b30adb9dcdf714aa6c3c84dd8a83b5298f (diff) | |
download | gnutls-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.c | 37 |
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 */ |