and patch by Tim Kosse.
** API and ABI modifications:
-No changes since last version.
+gnutls_session_set_id: Added
* Version 3.2.0 (released 2013-05-10)
_gnutls_bin2hex (session_id, session_id_len, buf,
sizeof (buf), NULL));
- if (session_id_len > 0 &&
+ if (session->internals.resumption_requested != 0 && session_id_len > 0 &&
session->internals.resumed_security_parameters.session_id_size ==
session_id_len
&& memcmp (session_id,
/* if we are resuming a session then we set the
* version number to the previously established.
*/
- if (session_id_len == 0)
+ if (session->internals.resumption_requested == 0 &&
+ session->internals.premaster_set == 0)
{
if (rehandshake) /* already negotiated version thus version_max == negotiated version */
hver = session->security_parameters.version;
gnutls_assert ();
return ret;
}
+
+ session->internals.resumption_requested = 1;
return 0;
}
return desc;
}
+
+/**
+ * gnutls_session_set_id:
+ * @session: is a #gnutls_session_t structure.
+ * @sid: the session identifier
+ *
+ * This function sets the session ID to be used in a client hello.
+ * This is a function intended for exceptional uses. Do not use this
+ * function unless you are implementing a custom protocol.
+ *
+ * To set session resumption parameters use gnutls_session_set_data() instead.
+ *
+ * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise
+ * an error code is returned.
+ **/
+int
+gnutls_session_set_id (gnutls_session_t session,
+ const gnutls_datum_t * sid)
+{
+ if (session->security_parameters.entity == GNUTLS_SERVER ||
+ sid->size > TLS_MAX_SESSION_ID_SIZE)
+ return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
+
+ memset (&session->internals.resumed_security_parameters, 0,
+ sizeof (session->internals.resumed_security_parameters));
+
+ session->internals.resumed_security_parameters.session_id_size = sid->size;
+ memcpy(session->internals.resumed_security_parameters.session_id,
+ sid->data, sid->size);
+
+ return 0;
+}
size_t * session_id_size);
int gnutls_session_get_id2 (gnutls_session_t session, gnutls_datum_t *session_id);
+ int gnutls_session_set_id (gnutls_session_t session,
+ const gnutls_datum_t * sid);
+
int gnutls_session_channel_binding (gnutls_session_t session,
gnutls_channel_binding_t cbtype,
gnutls_datum_t * cb);
gnutls_certificate_set_x509_key_file2;
gnutls_alpn_get_selected_protocol;
gnutls_alpn_set_protocols;
+ gnutls_session_set_id;
} GNUTLS_3_0_0;
GNUTLS_PRIVATE {