From: Nikos Mavrogiannopoulos Date: Mon, 22 Feb 2016 14:26:46 +0000 (+0100) Subject: Added gnutls_session_get_flags() X-Git-Tag: gnutls_3_5_0~325 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=59e256da3681b7a2ba61deef225589d045e07f7f;p=thirdparty%2Fgnutls.git 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. --- 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 * @@ -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 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; +}