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:
parent
75c1caa708
commit
c181b35615
6
proc.c
6
proc.c
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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,
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
1
tmate.h
1
tmate.h
@ -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 */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user