]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Added gnutls_session_get_flags()
authorNikos Mavrogiannopoulos <nmav@redhat.com>
Mon, 22 Feb 2016 14:26:46 +0000 (15:26 +0100)
committerNikos Mavrogiannopoulos <nmav@redhat.com>
Mon, 22 Feb 2016 14:31:39 +0000 (15:31 +0100)
This function would allow to simplify handling of future
flags which we may want to indicate, and would not require
API additions for new flags.

lib/includes/gnutls/gnutls.h.in
lib/libgnutls.map
lib/state.c

index a87e95f5a8dfc3c875d63853d81faf2e599a9a99..835b7ba792c00397109824e1250d414a3213b66a 100644 (file)
@@ -1,5 +1,6 @@
 /* -*- c -*-
- * Copyright (C) 2000-2012 Free Software Foundation, Inc.
+ * Copyright (C) 2000-2016 Free Software Foundation, Inc.
+ * Copyright (C) 2015-2016 Red Hat, Inc.
  *
  * Author: Nikos Mavrogiannopoulos
  *
@@ -1176,6 +1177,24 @@ int gnutls_safe_renegotiation_status(gnutls_session_t session);
 unsigned gnutls_session_ext_master_secret_status(gnutls_session_t session);
 unsigned gnutls_session_etm_status(gnutls_session_t session);
 
+/**
+ * gnutls_session_flags_t:
+ * @GNUTLS_SFLAGS_SAFE_RENEGOTIATION: Safe renegotiation (RFC5746) was used
+ * @GNUTLS_SFLAGS_EXT_MASTER_SECRET: The extended master secret (RFC7627) extension was used
+ * @GNUTLS_SFLAGS_ETM: The encrypt then MAC (RFC7366) extension was used
+ *
+ * Enumeration of different session parameters.
+ */
+typedef enum {
+       GNUTLS_SFLAGS_SAFE_RENEGOTIATION = 1,
+       GNUTLS_SFLAGS_EXT_MASTER_SECRET = 1<<1,
+       GNUTLS_SFLAGS_ETM = 1<<2,
+       GNUTLS_SFLAGS_HB_LOCAL_SEND = 1<<3,
+       GNUTLS_SFLAGS_HB_PEER_SEND = 1<<4
+} gnutls_session_flags_t;
+
+unsigned gnutls_session_get_flags(gnutls_session_t session);
+
 /**
  * gnutls_supplemental_data_format_type_t:
  * @GNUTLS_SUPPLEMENTAL_UNKNOWN: Unknown data format
index 4caaa59670c1fbf215af394def78dff6b8eef331..b7e6db969bd93bc9c78d080b6a4750c5583cc897 100644 (file)
@@ -1076,6 +1076,7 @@ GNUTLS_3_4
        gnutls_x509_crt_set_subject_alt_othername;
        gnutls_x509_crt_set_issuer_alt_othername;
        gnutls_dh_params_import_dsa;
+       gnutls_session_get_flags;
  local:
        *;
 };
index 93c17dcebe8d31756d93f42acde48d6fa4baf25a..ac04888c321f0b0021df2b21e8b2b8696eea5e20 100644 (file)
@@ -1305,3 +1305,36 @@ gnutls_record_set_state(gnutls_session_t session,
        memcpy(UINT64DATA(record_state->sequence_number), seq_number, 8);
        return 0;
 }
+
+/**
+ * gnutls_session_get_flags:
+ * @session: is a #gnutls_session_t type.
+ *
+ * This function will return a series (ORed) of flags, applicable
+ * for the current session.
+ *
+ * This replaces individual informational functions such as
+ * gnutls_safe_renegotiation_status(), gnutls_session_ext_master_secret_status(),
+ * etc.
+ *
+ * Returns: An ORed sequence of flags (see %gnutls_session_flags_t)
+ *
+ * Since: 3.5.0
+ **/
+unsigned gnutls_session_get_flags(gnutls_session_t session)
+{
+       unsigned flags = 0;
+
+       if (gnutls_safe_renegotiation_status(session))
+               flags |= GNUTLS_SFLAGS_SAFE_RENEGOTIATION;
+       if (gnutls_session_ext_master_secret_status(session))
+               flags |= GNUTLS_SFLAGS_EXT_MASTER_SECRET;
+       if (gnutls_session_etm_status(session))
+               flags |= GNUTLS_SFLAGS_ETM;
+       if (gnutls_heartbeat_allowed(session, GNUTLS_HB_LOCAL_ALLOWED_TO_SEND))
+               flags |= GNUTLS_SFLAGS_HB_LOCAL_SEND;
+       if (gnutls_heartbeat_allowed(session, GNUTLS_HB_PEER_ALLOWED_TO_SEND))
+               flags |= GNUTLS_SFLAGS_HB_PEER_SEND;
+
+       return flags;
+}