diff options
author | Nikos Mavrogiannopoulos <nmav@redhat.com> | 2016-02-22 15:26:46 +0100 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@redhat.com> | 2016-02-22 15:31:39 +0100 |
commit | 59e256da3681b7a2ba61deef225589d045e07f7f (patch) | |
tree | 1c85a08f3d8e451f39d0f4d098e5868b198df146 /lib | |
parent | 9965ddc075df7033aa2786f921648d330cceb63f (diff) | |
download | gnutls-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.in | 21 | ||||
-rw-r--r-- | lib/libgnutls.map | 1 | ||||
-rw-r--r-- | lib/state.c | 33 |
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; +} |