diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2001-11-29 15:29:54 +0000 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2001-11-29 15:29:54 +0000 |
commit | c89ee7ef6caff8f6929702db1859c22c1ec4adc3 (patch) | |
tree | d54067c4bc4ef3e6b8c5e9d1ba72f55ed225ab74 /lib/gnutls_session.c | |
parent | 47580d3bd319cbacab763a9bb0f293e9a79ebed6 (diff) | |
download | gnutls-c89ee7ef6caff8f6929702db1859c22c1ec4adc3.tar.gz |
introduced gnutls_x509pki_get_certificate(). This function returns the
peer's certificate DER encoded. This certificate is also stored in the
resume db.
Diffstat (limited to 'lib/gnutls_session.c')
-rw-r--r-- | lib/gnutls_session.c | 57 |
1 files changed, 19 insertions, 38 deletions
diff --git a/lib/gnutls_session.c b/lib/gnutls_session.c index 8474d59c3d..8e98641e60 100644 --- a/lib/gnutls_session.c +++ b/lib/gnutls_session.c @@ -20,8 +20,9 @@ #include "gnutls_int.h" #include "gnutls_errors.h" #include "debug.h" +#include <gnutls_session_pack.h> -#define SESSION_SIZE sizeof(SecurityParameters) + sizeof(state->gnutls_key->auth_info_size) + state->gnutls_key->auth_info_size +#define SESSION_SIZE _gnutls_session_size( state) /** * gnutls_get_current_session - Returns all session parameters. @@ -38,6 +39,9 @@ **/ int gnutls_get_current_session( GNUTLS_STATE state, opaque* session, int *session_size) { + gnutls_datum psession; + int ret; + if (*session_size < SESSION_SIZE || session==NULL) { *session_size = SESSION_SIZE; session = NULL; /* return with the new session_size value */ @@ -48,10 +52,15 @@ int gnutls_get_current_session( GNUTLS_STATE state, opaque* session, int *sessio if (session==NULL) { return 0; } - memcpy( session, &state->security_parameters, sizeof(SecurityParameters)); - memcpy( &session[sizeof(SecurityParameters)], &state->gnutls_key->auth_info_size, sizeof(state->gnutls_key->auth_info_size)); - memcpy( &session[sizeof(state->gnutls_key->auth_info_size)+sizeof(SecurityParameters)], - state->gnutls_key->auth_info, state->gnutls_key->auth_info_size); + + psession.data = session; + + ret = _gnutls_session_pack( state, &psession); + if (ret< 0) { + gnutls_assert(); + return ret; + } + *session_size = psession.size; return 0; } @@ -97,43 +106,15 @@ int gnutls_get_current_session_id( GNUTLS_STATE state, void* session, int *sessi * performed. **/ int gnutls_set_current_session( GNUTLS_STATE state, opaque* session, int session_size) { - int auth_info_size; - int timestamp = time(0); - SecurityParameters sp; + int ret; + gnutls_datum psession = { session, session_size }; - if ( (session_size - sizeof(SecurityParameters)) - >= sizeof(state->gnutls_key->auth_info_size)) { /* have more data */ - auth_info_size = *((int*)&session[sizeof(SecurityParameters)]); - } else { - auth_info_size = 0; - gnutls_assert(); - return GNUTLS_E_DB_ERROR; - } - if (session_size < sizeof(SecurityParameters)) { + ret = _gnutls_session_unpack( state, &psession); + if (ret < 0) { gnutls_assert(); - return GNUTLS_E_UNIMPLEMENTED_FEATURE; + return ret; } - memcpy( &sp, session, sizeof(SecurityParameters)); - if ( timestamp - sp.timestamp <= state->gnutls_internals.expire_time - && sp.timestamp <= timestamp) { - - memcpy( &state->gnutls_internals.resumed_security_parameters, &sp, sizeof(SecurityParameters)); - if (auth_info_size > 0) { - state->gnutls_key->auth_info = gnutls_malloc(auth_info_size); - if (state->gnutls_key->auth_info==NULL) { - gnutls_assert(); - return GNUTLS_E_MEMORY_ERROR; - } - state->gnutls_key->auth_info_size = auth_info_size; - memcpy( state->gnutls_key->auth_info, &session[sizeof(SecurityParameters)+sizeof(state->gnutls_key->auth_info_size)], auth_info_size); - } else { /* set to null */ - state->gnutls_key->auth_info_size = 0; - state->gnutls_key->auth_info = NULL; - } - } else { - return GNUTLS_E_EXPIRED; - } return 0; } |