summaryrefslogtreecommitdiff
path: root/lib/gnutls_constate.c
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2002-03-20 12:21:51 +0000
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2002-03-20 12:21:51 +0000
commit9409242790e0363d0c2d779c1897a4fe089739a1 (patch)
tree0a79ee5245d2fbd0941521a0d031e4fa4fc8af99 /lib/gnutls_constate.c
parentc2a598b64f17b05cb0c00f2bbfa5fb88f4d43d08 (diff)
downloadgnutls-9409242790e0363d0c2d779c1897a4fe089739a1.tar.gz
Improved compression support. Corrected several bugs in empty
fragment sending and receiving.
Diffstat (limited to 'lib/gnutls_constate.c')
-rw-r--r--lib/gnutls_constate.c54
1 files changed, 53 insertions, 1 deletions
diff --git a/lib/gnutls_constate.c b/lib/gnutls_constate.c
index cea17c6620..e359ef1c40 100644
--- a/lib/gnutls_constate.c
+++ b/lib/gnutls_constate.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2001 Nikos Mavroyanopoulos
+ * Copyright (C) 2001,2002 Nikos Mavroyanopoulos
*
* This file is part of GNUTLS.
*
@@ -283,6 +283,10 @@ int rc;
gnutls_cipher_deinit(state->connection_state.
read_cipher_state);
+ if (state->connection_state.read_compression_state != NULL)
+ gnutls_comp_deinit(state->connection_state.
+ read_compression_state, 1);
+
mac_size =
_gnutls_mac_get_digest_size(state->security_parameters.
@@ -307,6 +311,17 @@ int rc;
return GNUTLS_E_UNKNOWN_CIPHER;
}
+ state->connection_state.read_compression_state =
+ gnutls_comp_init(state->security_parameters.
+ read_compression_algorithm, 1);
+ if (state->connection_state.read_compression_state ==
+ GNUTLS_COMP_FAILED
+ && state->security_parameters.read_compression_algorithm !=
+ GNUTLS_COMP_NULL) {
+ gnutls_assert();
+ return GNUTLS_E_UNKNOWN_COMPRESSION_ALGORITHM;
+ }
+
/* copy mac secrets from cipherspecs, to connection
* state.
*/
@@ -336,6 +351,18 @@ int rc;
return GNUTLS_E_UNKNOWN_CIPHER;
}
+ state->connection_state.read_compression_state =
+ gnutls_comp_init(state->security_parameters.
+ read_compression_algorithm, 1);
+
+ if (state->connection_state.read_compression_state ==
+ GNUTLS_COMP_FAILED
+ && state->security_parameters.read_compression_algorithm !=
+ GNUTLS_COMP_NULL) {
+ gnutls_assert();
+ return GNUTLS_E_UNKNOWN_COMPRESSION_ALGORITHM;
+ }
+
/* copy mac secret to connection state
*/
@@ -428,6 +455,10 @@ int rc;
gnutls_cipher_deinit(state->connection_state.
write_cipher_state);
+ if (state->connection_state.write_compression_state != NULL)
+ gnutls_comp_deinit(state->connection_state.
+ write_compression_state, 0);
+
mac_size =
_gnutls_mac_get_digest_size(state->security_parameters.
write_mac_algorithm);
@@ -449,6 +480,16 @@ int rc;
return GNUTLS_E_UNKNOWN_CIPHER;
}
+ state->connection_state.write_compression_state =
+ gnutls_comp_init(state->security_parameters.write_compression_algorithm, 0);
+
+ if (state->connection_state.write_compression_state == GNUTLS_COMP_FAILED
+ && state->security_parameters.write_compression_algorithm != GNUTLS_COMP_NULL) {
+ gnutls_assert();
+ return GNUTLS_E_UNKNOWN_COMPRESSION_ALGORITHM;
+ }
+
+
/* copy mac secrets from cipherspecs, to connection
* state.
*/
@@ -477,6 +518,17 @@ int rc;
return GNUTLS_E_UNKNOWN_CIPHER;
}
+ state->connection_state.write_compression_state =
+ gnutls_comp_init(state->security_parameters.write_compression_algorithm, 0);
+
+ if (state->connection_state.write_compression_state ==
+ GNUTLS_COMP_FAILED
+ && state->security_parameters.write_compression_algorithm !=
+ GNUTLS_CIPHER_NULL) {
+ gnutls_assert();
+ return GNUTLS_E_UNKNOWN_COMPRESSION_ALGORITHM;
+ }
+
/* copy mac secret to connection state
*/
if (mac_size > 0) {