diff options
Diffstat (limited to 'lib/ext/server_name.c')
-rw-r--r-- | lib/ext/server_name.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/lib/ext/server_name.c b/lib/ext/server_name.c index 1454818967..ed79de7d3b 100644 --- a/lib/ext/server_name.c +++ b/lib/ext/server_name.c @@ -517,3 +517,49 @@ _gnutls_server_name_unpack(gnutls_buffer_st * ps, gnutls_free(priv); return ret; } + +unsigned _gnutls_server_name_matches_resumed(gnutls_session_t session) +{ + server_name_ext_st *priv1, *priv2; + int ret; + gnutls_ext_priv_data_t epriv; + + ret = + _gnutls_ext_get_session_data(session, + GNUTLS_EXTENSION_SERVER_NAME, + &epriv); + if (ret < 0) /* no server name in this session */ + priv1 = NULL; + else + priv1 = epriv; + + ret = + _gnutls_ext_get_resumed_session_data(session, + GNUTLS_EXTENSION_SERVER_NAME, + &epriv); + if (ret < 0) /* no server name in extensions */ + priv2 = NULL; + else + priv2 = epriv; + + if (priv1 == NULL || priv2 == NULL) { + if (priv1 == priv2) + return 1; + else + return 0; + } + + if (priv1->server_names_size != priv2->server_names_size) + return 0; + + if (priv1->server_names_size == 0) + return 1; + + if (priv1->server_names[0].name_length != priv2->server_names[0].name_length) + return 0; + + if (memcmp(priv1->server_names[0].name, priv2->server_names[0].name, priv1->server_names[0].name_length) != 0) + return 0; + + return 1; +} |