[packet.h packet.c]
     packet_bacup_state() and packet_restore_state() will be used to
     temporarily save the current state ren resuming a suspended connection.
     ok markus@
This commit is contained in:
Darren Tucker 2009-07-06 07:11:13 +10:00
parent 821d3dbe36
commit e841eb0654
3 changed files with 60 additions and 3 deletions

View File

@ -1,3 +1,10 @@
- (dtucker) OpenBSD CVS Sync
- andreas@cvs.openbsd.org 2009/06/27 09:29:06
[packet.h packet.c]
packet_bacup_state() and packet_restore_state() will be used to
temporarily save the current state ren resuming a suspended connection.
ok markus@
20090622
- (dtucker) OpenBSD CVS Sync
- dtucker@cvs.openbsd.org 2009/06/22 05:39:28

View File

@ -1,4 +1,4 @@
/* $OpenBSD: packet.c,v 1.165 2009/06/12 20:58:32 andreas Exp $ */
/* $OpenBSD: packet.c,v 1.166 2009/06/27 09:29:06 andreas Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@ -194,7 +194,7 @@ struct session_state {
TAILQ_HEAD(, packet) outgoing;
};
static struct session_state *active_state;
static struct session_state *active_state, *backup_state;
static struct session_state *
alloc_session_state(void)
@ -1887,3 +1887,50 @@ packet_get_newkeys(int mode)
{
return (void *)active_state->newkeys[mode];
}
/*
* Save the state for the real connection, and use a separate state when
* resuming a suspended connection.
*/
void
packet_backup_state(void)
{
struct session_state *tmp;
close(active_state->connection_in);
active_state->connection_in = -1;
close(active_state->connection_out);
active_state->connection_out = -1;
if (backup_state)
tmp = backup_state;
else
tmp = alloc_session_state();
backup_state = active_state;
active_state = tmp;
}
/*
* Swap in the old state when resuming a connecion.
*/
void
packet_restore_state(void)
{
struct session_state *tmp;
void *buf;
u_int len;
tmp = backup_state;
backup_state = active_state;
active_state = tmp;
active_state->connection_in = backup_state->connection_in;
backup_state->connection_in = -1;
active_state->connection_out = backup_state->connection_out;
backup_state->connection_out = -1;
len = buffer_len(&backup_state->input);
if (len > 0) {
buf = buffer_ptr(&backup_state->input);
buffer_append(&active_state->input, buf, len);
buffer_clear(&backup_state->input);
add_recv_bytes(len);
}
}

View File

@ -1,4 +1,4 @@
/* $OpenBSD: packet.h,v 1.51 2009/05/27 06:36:07 andreas Exp $ */
/* $OpenBSD: packet.h,v 1.52 2009/06/27 09:29:06 andreas Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
@ -109,6 +109,9 @@ do { \
int packet_need_rekeying(void);
void packet_set_rekey_limit(u_int32_t);
void packet_backup_state(void);
void packet_restore_state(void);
void *packet_get_input(void);
void *packet_get_output(void);