+ active_state->rekey_limit = bytes;
+}
+
+void
+packet_set_server(void)
+{
+ active_state->server_side = 1;
+}
+
+void
+packet_set_authenticated(void)
+{
+ active_state->after_authentication = 1;
+}
+
+void *
+packet_get_input(void)
+{
+ return (void *)&active_state->input;
+}
+
+void *
+packet_get_output(void)
+{
+ return (void *)&active_state->output;
+}
+
+void *
+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);
+ }
+}
+
+int
+packet_authentication_state(void)
+{
+ return(active_state->after_authentication);