summaryrefslogtreecommitdiffstats
path: root/packet.c
diff options
context:
space:
mode:
authorBen Lindstrom <mouring@eviladmin.org>2001-04-05 23:20:46 +0000
committerBen Lindstrom <mouring@eviladmin.org>2001-04-05 23:20:46 +0000
commitfb50cdfdb8c33dd4f14471550c7dcab93163efec (patch)
tree9b967bf4d9345a453a471a1734eb3689a1e02c6a /packet.c
parent4f3ae4c55070b1d9d94ff886156eb04418893015 (diff)
- markus@cvs.openbsd.org 2001/04/05 10:39:03
[compress.c compress.h packet.c] reset compress state per direction when rekeying.
Diffstat (limited to 'packet.c')
-rw-r--r--packet.c29
1 files changed, 21 insertions, 8 deletions
diff --git a/packet.c b/packet.c
index 5b5fa08d..d518d0e0 100644
--- a/packet.c
+++ b/packet.c
@@ -37,7 +37,7 @@
*/
#include "includes.h"
-RCSID("$OpenBSD: packet.c,v 1.59 2001/04/04 23:09:18 markus Exp $");
+RCSID("$OpenBSD: packet.c,v 1.60 2001/04/05 10:39:03 markus Exp $");
#include "xmalloc.h"
#include "buffer.h"
@@ -104,6 +104,7 @@ static Buffer incoming_packet;
/* Scratch buffer for packet compression/decompression. */
static Buffer compression_buffer;
+static int compression_buffer_ready = 0;
/* Flag indicating whether packet compression/decompression is enabled. */
static int packet_compression = 0;
@@ -249,7 +250,7 @@ packet_close()
buffer_free(&output);
buffer_free(&outgoing_packet);
buffer_free(&incoming_packet);
- if (packet_compression) {
+ if (compression_buffer_ready) {
buffer_free(&compression_buffer);
buffer_compress_uninit();
}
@@ -277,15 +278,24 @@ packet_get_protocol_flags()
* Level is compression level 1 (fastest) - 9 (slow, best) as in gzip.
*/
-/*** XXXXX todo: kex means re-init */
+void
+packet_init_compression()
+{
+ if (compression_buffer_ready == 1)
+ return;
+ compression_buffer_ready = 1;
+ buffer_init(&compression_buffer);
+}
+
void
packet_start_compression(int level)
{
- if (packet_compression)
+ if (packet_compression && !use_ssh2_packet_format)
fatal("Compression already enabled.");
packet_compression = 1;
- buffer_init(&compression_buffer);
- buffer_compress_init(level);
+ packet_init_compression();
+ buffer_compress_init_send(level);
+ buffer_compress_init_recv();
}
/*
@@ -542,9 +552,12 @@ set_newkeys(int mode)
memset(enc->iv, 0, enc->cipher->block_size);
memset(enc->key, 0, enc->cipher->key_len);
if (comp->type != 0 && comp->enabled == 0) {
+ packet_init_compression();
+ if (mode == MODE_OUT)
+ buffer_compress_init_send(6);
+ else
+ buffer_compress_init_recv();
comp->enabled = 1;
- if (! packet_compression)
- packet_start_compression(6);
}
}