Пример #1
0
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;
		}
	}

}
Пример #2
0
/* 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;
}