static void _gnutls_ext_unset_resumed_session_data(gnutls_session_t session, uint16_t type) { gnutls_ext_deinit_data_func deinit; extension_priv_data_t data; int ret, i; deinit = _gnutls_ext_func_deinit(type); ret = _gnutls_ext_get_resumed_session_data(session, type, &data); if (ret >= 0 && deinit != NULL) { deinit(data); } for (i = 0; i < MAX_EXT_TYPES; i++) { if (session->internals.resumed_extension_int_data[i]. type == type) { session->internals.resumed_extension_int_data[i]. set = 0; return; } } }
/* returns a positive number if we send the extension data, (0) if we do not want to send it, and a negative number on failure. */ static int session_ticket_send_params(gnutls_session_t session, gnutls_buffer_st * extdata) { session_ticket_ext_st *priv = NULL; extension_priv_data_t epriv; int ret; ret = _gnutls_ext_get_session_data(session, GNUTLS_EXTENSION_SESSION_TICKET, &epriv); if (ret >= 0) priv = epriv; if (priv == NULL || !priv->session_ticket_enable) return 0; if (session->security_parameters.entity == GNUTLS_SERVER) { if (priv && priv->session_ticket_renew) { return GNUTLS_E_INT_RET_0; } } else { ret = _gnutls_ext_get_resumed_session_data(session, GNUTLS_EXTENSION_SESSION_TICKET, &epriv); if (ret >= 0) priv = epriv; /* no previous data. Just advertize it */ if (ret < 0) return GNUTLS_E_INT_RET_0; /* previous data had session tickets disabled. Don't advertize. Ignore. */ if (!priv->session_ticket_enable) return 0; if (priv->session_ticket_len > 0) { ret = _gnutls_buffer_append_data(extdata, priv-> session_ticket, priv-> session_ticket_len); if (ret < 0) return gnutls_assert_val(ret); return priv->session_ticket_len; } } return 0; }