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

Quick refactor of tmate-slave.c

This commit is contained in:
Nicolas Viennot 2013-06-10 22:42:16 -04:00
parent 0f1159aa30
commit 3b4e6bb9cc
4 changed files with 84 additions and 74 deletions

View File

@ -181,6 +181,7 @@ dist_tmate_slave_SOURCES = \
tmate-ssh-client-pty.c \
tmate-ssh-client.c \
tmate-ssh-server.c \
tmux-bare.c \
tty-acs.c \
tty-keys.c \
tty-term.c \

View File

@ -1,58 +1,8 @@
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include "tmate.h"
struct event_base *ev_base;
struct options global_options; /* server options */
struct options global_s_options; /* session options */
struct options global_w_options; /* window options */
struct environ global_environ;
struct event_base *ev_base;
char *cfg_file;
char *shell_cmd;
int debug_level;
time_t start_time;
char socket_path[MAXPATHLEN];
int login_shell;
char *environ_path;
pid_t environ_pid = -1;
int environ_session_id = -1;
void
setblocking(int fd, int state)
{
int mode;
if ((mode = fcntl(fd, F_GETFL)) != -1) {
if (!state)
mode |= O_NONBLOCK;
else
mode &= ~O_NONBLOCK;
fcntl(fd, F_SETFL, mode);
}
}
const char*
get_full_path(const char *wd, const char *path)
{
static char newpath[MAXPATHLEN];
char oldpath[MAXPATHLEN];
if (getcwd(oldpath, sizeof oldpath) == NULL)
return (NULL);
if (chdir(wd) != 0)
return (NULL);
if (realpath(path, newpath) != 0)
return (NULL);
chdir(oldpath);
return (newpath);
}
static void usage(void)
{
fprintf(stderr, "usage: tmate-slave [-p PORT]\n");
@ -92,8 +42,6 @@ struct tmate_encoder *tmate_encoder;
void tmate_spawn_slave_server(struct tmate_ssh_client *client)
{
int quiet = 0;
int flags = IDENTIFY_UTF8 | IDENTIFY_256COLOURS;
struct tmate_encoder encoder;
struct tmate_decoder decoder;
@ -107,25 +55,7 @@ void tmate_spawn_slave_server(struct tmate_ssh_client *client)
tmate_ssh_client_init(client, &encoder, &decoder);
environ_init(&global_environ);
options_init(&global_options, NULL);
options_table_populate_tree(server_options_table, &global_options);
options_set_number(&global_options, "quiet", quiet);
options_init(&global_s_options, NULL);
options_table_populate_tree(session_options_table, &global_s_options);
options_init(&global_w_options, NULL);
options_table_populate_tree(window_options_table, &global_w_options);
if (flags & IDENTIFY_UTF8) {
options_set_number(&global_s_options, "status-utf8", 1);
options_set_number(&global_s_options, "mouse-utf8", 1);
options_set_number(&global_w_options, "utf8", 1);
}
server_start(0, NULL);
tmux_server_init(IDENTIFY_UTF8 | IDENTIFY_256COLOURS);
/* never reached */
}
@ -148,9 +78,6 @@ void tmate_spawn_slave_client(struct tmate_ssh_client *ssh_client)
if (openpty(&client->pty, &slave_pty, NULL, NULL, NULL) < 0)
tmate_fatal("Cannot allocate pty");
/* setsid(); */
/* ioctl(slave_pty, TIOCSCTTY, NULL); */
dup2(slave_pty, STDIN_FILENO);
dup2(slave_pty, STDOUT_FILENO);
stderr = stdout;

View File

@ -110,4 +110,8 @@ extern void tmate_spawn_slave_client(struct tmate_ssh_client *client);
/* tmate-debug.c */
extern void tmate_print_trace(void);
/* tmux-bare.c */
extern void tmux_server_init(int flags);
#endif

78
tmux-bare.c Normal file
View File

@ -0,0 +1,78 @@
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include "tmux.h"
#include "tmate.h"
struct event_base *ev_base;
struct options global_options; /* server options */
struct options global_s_options; /* session options */
struct options global_w_options; /* window options */
struct environ global_environ;
char *cfg_file;
char *shell_cmd;
int debug_level;
time_t start_time;
char socket_path[MAXPATHLEN];
int login_shell;
char *environ_path;
pid_t environ_pid = -1;
int environ_session_id = -1;
void
setblocking(int fd, int state)
{
int mode;
if ((mode = fcntl(fd, F_GETFL)) != -1) {
if (!state)
mode |= O_NONBLOCK;
else
mode &= ~O_NONBLOCK;
fcntl(fd, F_SETFL, mode);
}
}
const char*
get_full_path(const char *wd, const char *path)
{
static char newpath[MAXPATHLEN];
char oldpath[MAXPATHLEN];
if (getcwd(oldpath, sizeof oldpath) == NULL)
return (NULL);
if (chdir(wd) != 0)
return (NULL);
if (realpath(path, newpath) != 0)
return (NULL);
chdir(oldpath);
return (newpath);
}
void tmux_server_init(int flags)
{
int quiet = 0;
environ_init(&global_environ);
options_init(&global_options, NULL);
options_table_populate_tree(server_options_table, &global_options);
options_set_number(&global_options, "quiet", quiet);
options_init(&global_s_options, NULL);
options_table_populate_tree(session_options_table, &global_s_options);
options_init(&global_w_options, NULL);
options_table_populate_tree(window_options_table, &global_w_options);
if (flags & IDENTIFY_UTF8) {
options_set_number(&global_s_options, "status-utf8", 1);
options_set_number(&global_s_options, "mouse-utf8", 1);
options_set_number(&global_w_options, "utf8", 1);
}
server_start(0, NULL);
}