summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@redhat.com>2016-02-22 15:26:46 +0100
committerNikos Mavrogiannopoulos <nmav@redhat.com>2016-02-22 15:31:39 +0100
commit59e256da3681b7a2ba61deef225589d045e07f7f (patch)
tree1c85a08f3d8e451f39d0f4d098e5868b198df146 /lib
parent9965ddc075df7033aa2786f921648d330cceb63f (diff)
downloadgnutls-59e256da3681b7a2ba61deef225589d045e07f7f.tar.gz
Added gnutls_session_get_flags()
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.
Diffstat (limited to 'lib')
-rw-r--r--lib/includes/gnutls/gnutls.h.in21
-rw-r--r--lib/libgnutls.map1
-rw-r--r--lib/state.c33
3 files changed, 54 insertions, 1 deletions
diff --git a/lib/includes/gnutls/gnutls.h.in b/lib/includes/gnutls/gnutls.h.in
index a87e95f5a8..835b7ba792 100644
--- a/lib/includes/gnutls/gnutls.h.in
+++ b/lib/includes/gnutls/gnutls.h.in
@@ -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
*
@@ -1177,6 +1178,24 @@ 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
*
diff --git a/lib/libgnutls.map b/lib/libgnutls.map
index 4caaa59670..b7e6db969b 100644
--- a/lib/libgnutls.map
+++ b/lib/libgnutls.map
@@ -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:
*;
};
diff --git a/lib/state.c b/lib/state.c
index 93c17dcebe..ac04888c32 100644
--- a/lib/state.c
+++ b/lib/state.c
@@ -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;
+}