]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
gnutls_session_set_id() was added
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 19 May 2013 08:16:03 +0000 (10:16 +0200)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 19 May 2013 08:30:14 +0000 (10:30 +0200)
NEWS
lib/gnutls_handshake.c
lib/gnutls_session.c
lib/gnutls_ui.c
lib/includes/gnutls/gnutls.h.in
lib/libgnutls.map

diff --git a/NEWS b/NEWS
index 02d318f26ad3de1f03de40e27ef39ebab31e05ca..1ccd989e8838ab899385fc08c536e40cd021068c 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -8,7 +8,7 @@ See the end for copying conditions.
 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)
index 4c96acfeab7ec1ea90ee9053cc8025cb6a05365e..f24abfaa5d66ba351362403d014f9873cabed0aa 100644 (file)
@@ -1580,7 +1580,7 @@ _gnutls_client_check_if_resuming (gnutls_session_t session,
                          _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,
@@ -1872,7 +1872,8 @@ _gnutls_send_client_hello (gnutls_session_t session, int again)
       /* 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;
index 5955c053b5c717a2e66a87218367aeddcb825b26..f7d81134730335bef784559ee264a3f1e8d2336c 100644 (file)
@@ -221,6 +221,8 @@ gnutls_session_set_data (gnutls_session_t session,
       gnutls_assert ();
       return ret;
     }
+    
+  session->internals.resumption_requested = 1;
 
   return 0;
 }
index c103e4ca8715184ec498946a9f3135cd36b3ce58..0c5ce193bad9c3ccf71b10ea466f05cb0e0a7fde 100644 (file)
@@ -869,3 +869,35 @@ gnutls_session_get_desc (gnutls_session_t session)
             
     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;
+}
index 5cb6f7ea84e3d26334602abad3a9ddb84fa813ab..1d3769799ed2d569825b1a6c372d4cdf860c4643 100644 (file)
@@ -1122,6 +1122,9 @@ gnutls_ecc_curve_t gnutls_ecc_curve_get(gnutls_session_t session);
                              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);
index f2eb6bbb9f97d0fddf8e8a14c875c81a42b0ecb1..3a32de6f1f55c0346bae566e8f377d642d92c707 100644 (file)
@@ -910,6 +910,7 @@ GNUTLS_3_1_0 {
        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 {