diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2001-05-14 09:45:20 +0000 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2001-05-14 09:45:20 +0000 |
commit | 9746d01d3576874253237e6341724657069d6c37 (patch) | |
tree | 79bb7f95a46542d74914d3047a71632727bca88e /lib/gnutls_session.c | |
parent | b530091f8591014f3f111dc3d2139a95d7c1b13d (diff) | |
download | gnutls-9746d01d3576874253237e6341724657069d6c37.tar.gz |
added functions to access authentication data (like username), and
the key exchange algorithm used.
Diffstat (limited to 'lib/gnutls_session.c')
-rw-r--r-- | lib/gnutls_session.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/lib/gnutls_session.c b/lib/gnutls_session.c index 9fe4c92f5d..1d7c01d319 100644 --- a/lib/gnutls_session.c +++ b/lib/gnutls_session.c @@ -27,9 +27,9 @@ * current version later by calling gnutls_set_current_session(). * This function must be called after a successful handshake. */ -int gnutls_get_current_session( GNUTLS_STATE state, void* session, int *session_size) { +int gnutls_get_current_session( GNUTLS_STATE state, opaque* session, int *session_size) { - ( *session_size = sizeof(SecurityParameters)); + *session_size = sizeof(SecurityParameters) + state->gnutls_key->auth_info_size; if (state->gnutls_internals.resumable==RESUME_FALSE) return GNUTLS_E_INVALID_SESSION; /* just return the session size */ @@ -37,7 +37,8 @@ int gnutls_get_current_session( GNUTLS_STATE state, void* session, int *session_ return 0; } memcpy( session, &state->security_parameters, sizeof(SecurityParameters)); - + memcpy( &session[sizeof(SecurityParameters)], state->gnutls_key->auth_info, state->gnutls_key->auth_info_size); + return 0; } @@ -60,14 +61,21 @@ int gnutls_get_current_session_id( GNUTLS_STATE state, void* session, int *sessi * session must be the one returned by get_current_session(); * This function should be called before gnutls_handshake_begin */ -int gnutls_set_current_session( GNUTLS_STATE state, void* session, int session_size) { +int gnutls_set_current_session( GNUTLS_STATE state, opaque* session, int session_size) { +int auth_info_size = session_size = sizeof(SecurityParameters); +time_t timestamp = time(0); - if ( session_size != sizeof(SecurityParameters)) { + if ( session_size < sizeof(SecurityParameters)) { return GNUTLS_E_UNIMPLEMENTED_FEATURE; } - if ( time(0) - ((SecurityParameters*)session)->timestamp <= state->gnutls_internals.expire_time) { + if ( timestamp - ((SecurityParameters*)session)->timestamp <= state->gnutls_internals.expire_time && ((SecurityParameters*)session)->timestamp < timestamp) { memcpy( &state->gnutls_internals.resumed_security_parameters, session, sizeof(SecurityParameters)); + if (auth_info_size > 0) { + state->gnutls_key->auth_info_size = auth_info_size; + state->gnutls_key->auth_info = gnutls_malloc(auth_info_size); + memcpy( state->gnutls_key->auth_info, &session[sizeof(SecurityParameters)], auth_info_size); + } } else { return GNUTLS_E_EXPIRED; } |