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
|
do
|
||||||
event_loop(EVLOOP_ONCE);
|
event_loop(EVLOOP_ONCE);
|
||||||
while (!tp->exit && (loopcb == NULL || !loopcb ()));
|
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);
|
log_debug("%s loop exit", tp->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -368,6 +368,18 @@ static void tmate_fin(__unused struct tmate_session *session,
|
|||||||
request_server_termination();
|
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,
|
void tmate_dispatch_daemon_message(struct tmate_session *session,
|
||||||
struct tmate_unpacker *uk)
|
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_WRITE_COPY_MODE, tmate_write_copy_mode);
|
||||||
dispatch(TMATE_OUT_FIN, tmate_fin);
|
dispatch(TMATE_OUT_FIN, tmate_fin);
|
||||||
dispatch(TMATE_OUT_READY, tmate_ready);
|
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);
|
default: tmate_fatal("Bad message type: %d", cmd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@ enum tmate_control_in_msg_types {
|
|||||||
TMATE_CTL_PANE_KEYS,
|
TMATE_CTL_PANE_KEYS,
|
||||||
TMATE_CTL_RESIZE,
|
TMATE_CTL_RESIZE,
|
||||||
TMATE_CTL_EXEC_RESPONSE,
|
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_PANE_KEYS, int: pane_id, string: keys]
|
||||||
[TMATE_CTL_RESIZE, int: sx, int: sy] // sx == -1: no clients
|
[TMATE_CTL_RESIZE, int: sx, int: sy] // sx == -1: no clients
|
||||||
[TMATE_CTL_EXEC_RESPONSE, int: exit_code, string: message]
|
[TMATE_CTL_EXEC_RESPONSE, int: exit_code, string: message]
|
||||||
|
[TMATE_CTL_RENAME_SESSION, string: stoken, string: stoken_ro]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
enum tmate_daemon_out_msg_types {
|
enum tmate_daemon_out_msg_types {
|
||||||
@ -54,6 +56,8 @@ enum tmate_daemon_out_msg_types {
|
|||||||
TMATE_OUT_WRITE_COPY_MODE,
|
TMATE_OUT_WRITE_COPY_MODE,
|
||||||
TMATE_OUT_FIN,
|
TMATE_OUT_FIN,
|
||||||
TMATE_OUT_READY,
|
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);
|
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,
|
static void tmate_dispatch_proxy_message(struct tmate_session *session,
|
||||||
struct tmate_unpacker *uk)
|
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_PANE_KEYS, ctl_pane_keys);
|
||||||
dispatch(TMATE_CTL_RESIZE, ctl_resize);
|
dispatch(TMATE_CTL_RESIZE, ctl_resize);
|
||||||
dispatch(TMATE_CTL_EXEC_RESPONSE, ctl_ssh_exec_response);
|
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);
|
default: tmate_warn("Bad proxy message type: %d", cmd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -215,8 +215,8 @@ static char *get_random_token(void)
|
|||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_session_token(struct tmate_session *session,
|
void set_session_token(struct tmate_session *session,
|
||||||
const char *token)
|
const char *token)
|
||||||
{
|
{
|
||||||
char *path;
|
char *path;
|
||||||
session->session_token = xstrdup(token);
|
session->session_token = xstrdup(token);
|
||||||
|
@ -116,7 +116,6 @@ static int auth_pubkey_cb(__unused ssh_session session,
|
|||||||
switch (signature_state) {
|
switch (signature_state) {
|
||||||
case SSH_PUBLICKEY_STATE_VALID:
|
case SSH_PUBLICKEY_STATE_VALID:
|
||||||
client->username = xstrdup(user);
|
client->username = xstrdup(user);
|
||||||
|
|
||||||
if (ssh_pki_export_pubkey_base64(pubkey, &client->pubkey) != SSH_OK)
|
if (ssh_pki_export_pubkey_base64(pubkey, &client->pubkey) != SSH_OK)
|
||||||
tmate_fatal("error getting public key");
|
tmate_fatal("error getting public key");
|
||||||
return SSH_AUTH_SUCCESS;
|
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 long tmate_get_random_long(void);
|
||||||
extern void request_server_termination(void);
|
extern void request_server_termination(void);
|
||||||
extern void tmate_spawn_slave(struct tmate_session *session);
|
extern void tmate_spawn_slave(struct tmate_session *session);
|
||||||
|
extern void set_session_token(struct tmate_session *session, const char *token);
|
||||||
|
|
||||||
/* tmate-proxy.c */
|
/* tmate-proxy.c */
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user