1
0
mirror of https://github.com/tmate-io/tmate-ssh-server.git synced 2020-11-18 19:53:51 -08:00

reconnection wip

This commit is contained in:
Nicolas Viennot 2016-03-26 19:00:48 -04:00
parent 75c1caa708
commit c181b35615
7 changed files with 40 additions and 3 deletions

6
proc.c
View File

@ -225,6 +225,12 @@ proc_loop(struct tmuxproc *tp, int (*loopcb)(void))
do
event_loop(EVLOOP_ONCE);
while (!tp->exit && (loopcb == NULL || !loopcb ()));
#ifdef TMATE_SLAVE
/* flush data on sockets */
event_loop(EVLOOP_ONCE | EVLOOP_NONBLOCK);
#endif
log_debug("%s loop exit", tp->name);
}

View File

@ -368,6 +368,18 @@ static void tmate_fin(__unused struct tmate_session *session,
request_server_termination();
}
static void tmate_reconnect(__unused struct tmate_session *session,
__unused struct tmate_unpacker *uk)
{
/* Used by the proxy */
}
static void tmate_snapshot(__unused struct tmate_session *session,
__unused struct tmate_unpacker *uk)
{
/* TODO copy info back */
}
void tmate_dispatch_daemon_message(struct tmate_session *session,
struct tmate_unpacker *uk)
{
@ -384,6 +396,8 @@ void tmate_dispatch_daemon_message(struct tmate_session *session,
dispatch(TMATE_OUT_WRITE_COPY_MODE, tmate_write_copy_mode);
dispatch(TMATE_OUT_FIN, tmate_fin);
dispatch(TMATE_OUT_READY, tmate_ready);
dispatch(TMATE_OUT_RECONNECT, tmate_reconnect);
dispatch(TMATE_OUT_SNAPSHOT, tmate_snapshot);
default: tmate_fatal("Bad message type: %d", cmd);
}
}

View File

@ -33,6 +33,7 @@ enum tmate_control_in_msg_types {
TMATE_CTL_PANE_KEYS,
TMATE_CTL_RESIZE,
TMATE_CTL_EXEC_RESPONSE,
TMATE_CTL_RENAME_SESSION,
};
/*
@ -41,6 +42,7 @@ enum tmate_control_in_msg_types {
[TMATE_CTL_PANE_KEYS, int: pane_id, string: keys]
[TMATE_CTL_RESIZE, int: sx, int: sy] // sx == -1: no clients
[TMATE_CTL_EXEC_RESPONSE, int: exit_code, string: message]
[TMATE_CTL_RENAME_SESSION, string: stoken, string: stoken_ro]
*/
enum tmate_daemon_out_msg_types {
@ -54,6 +56,8 @@ enum tmate_daemon_out_msg_types {
TMATE_OUT_WRITE_COPY_MODE,
TMATE_OUT_FIN,
TMATE_OUT_READY,
TMATE_OUT_RECONNECT,
TMATE_OUT_SNAPSHOT,
};
/*

View File

@ -158,6 +158,18 @@ static void ctl_ssh_exec_response(struct tmate_session *session,
free(message);
}
static void ctl_rename_session(struct tmate_session *session,
struct tmate_unpacker *uk)
{
char *stoken = unpack_string(uk);
char *stoken_ro = unpack_string(uk);
set_session_token(session, stoken);
free(stoken);
free(stoken_ro);
}
static void tmate_dispatch_proxy_message(struct tmate_session *session,
struct tmate_unpacker *uk)
{
@ -169,6 +181,7 @@ static void tmate_dispatch_proxy_message(struct tmate_session *session,
dispatch(TMATE_CTL_PANE_KEYS, ctl_pane_keys);
dispatch(TMATE_CTL_RESIZE, ctl_resize);
dispatch(TMATE_CTL_EXEC_RESPONSE, ctl_ssh_exec_response);
dispatch(TMATE_CTL_RENAME_SESSION, ctl_rename_session);
default: tmate_warn("Bad proxy message type: %d", cmd);
}
}

View File

@ -215,7 +215,7 @@ static char *get_random_token(void)
return token;
}
static void set_session_token(struct tmate_session *session,
void set_session_token(struct tmate_session *session,
const char *token)
{
char *path;

View File

@ -116,7 +116,6 @@ static int auth_pubkey_cb(__unused ssh_session session,
switch (signature_state) {
case SSH_PUBLICKEY_STATE_VALID:
client->username = xstrdup(user);
if (ssh_pki_export_pubkey_base64(pubkey, &client->pubkey) != SSH_OK)
tmate_fatal("error getting public key");
return SSH_AUTH_SUCCESS;

View File

@ -251,6 +251,7 @@ extern void tmate_get_random_bytes(void *buffer, ssize_t len);
extern long tmate_get_random_long(void);
extern void request_server_termination(void);
extern void tmate_spawn_slave(struct tmate_session *session);
extern void set_session_token(struct tmate_session *session, const char *token);
/* tmate-proxy.c */