aboutsummaryrefslogtreecommitdiffstats
path: root/src/libtls/tls.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libtls/tls.c')
-rw-r--r--src/libtls/tls.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/libtls/tls.c b/src/libtls/tls.c
index d46ce0084..42f71d753 100644
--- a/src/libtls/tls.c
+++ b/src/libtls/tls.c
@@ -107,6 +107,11 @@ struct private_tls_t {
tls_fragmentation_t *fragmentation;
/**
+ * TLS alert handler
+ */
+ tls_alert_t *alert;
+
+ /**
* TLS crypto helper context
*/
tls_crypto_t *crypto;
@@ -159,6 +164,7 @@ METHOD(tls_t, set_version, bool,
case TLS_1_1:
case TLS_1_2:
this->version = version;
+ this->protection->set_version(this->protection, version);
return TRUE;
case SSL_2_0:
case SSL_3_0:
@@ -196,6 +202,7 @@ METHOD(tls_t, destroy, void,
this->peer->destroy(this->peer);
this->server->destroy(this->server);
DESTROY_IF(this->application);
+ this->alert->destroy(this->alert);
free(this);
}
@@ -239,20 +246,21 @@ tls_t *tls_create(bool is_server, identification_t *server,
);
this->crypto = tls_crypto_create(&this->public);
+ this->alert = tls_alert_create();
if (is_server)
{
this->handshake = &tls_server_create(&this->public, this->crypto,
- this->server, this->peer)->handshake;
+ this->alert, this->server, this->peer)->handshake;
}
else
{
this->handshake = &tls_peer_create(&this->public, this->crypto,
- this->peer, this->server)->handshake;
+ this->alert, this->peer, this->server)->handshake;
}
- this->fragmentation = tls_fragmentation_create(this->handshake,
+ this->fragmentation = tls_fragmentation_create(this->handshake, this->alert,
this->application);
- this->compression = tls_compression_create(this->fragmentation);
- this->protection = tls_protection_create(&this->public, this->compression);
+ this->compression = tls_compression_create(this->fragmentation, this->alert);
+ this->protection = tls_protection_create(this->compression, this->alert);
this->crypto->set_protection(this->crypto, this->protection);
return &this->public;