version 1.22, 2009/09/23 06:18:47 |
version 1.23, 2009/09/24 14:17:09 |
|
|
void |
void |
server_lock(void) |
server_lock(void) |
{ |
{ |
struct client *c; |
struct client *c; |
const char *cmd; |
u_int i; |
struct msg_lock_data lockdata; |
|
u_int i; |
|
|
|
for (i = 0; i < ARRAY_LENGTH(&clients); i++) { |
for (i = 0; i < ARRAY_LENGTH(&clients); i++) { |
c = ARRAY_ITEM(&clients, i); |
c = ARRAY_ITEM(&clients, i); |
|
|
continue; |
continue; |
if (c->flags & CLIENT_SUSPENDED) |
if (c->flags & CLIENT_SUSPENDED) |
continue; |
continue; |
|
server_lock_client(c); |
|
} |
|
} |
|
|
cmd = options_get_string(&c->session->options, "lock-command"); |
void |
if (strlcpy(lockdata.cmd, |
server_lock_session(struct session *s) |
cmd, sizeof lockdata.cmd) >= sizeof lockdata.cmd) |
{ |
|
struct client *c; |
|
u_int i; |
|
|
|
for (i = 0; i < ARRAY_LENGTH(&clients); i++) { |
|
c = ARRAY_ITEM(&clients, i); |
|
if (c == NULL || c->session == NULL || c->session != s) |
continue; |
continue; |
|
if (c->flags & CLIENT_SUSPENDED) |
|
continue; |
|
server_lock_client(c); |
|
} |
|
} |
|
|
tty_stop_tty(&c->tty); |
void |
tty_raw(&c->tty, tty_term_string(c->tty.term, TTYC_SMCUP)); |
server_lock_client(struct client *c) |
tty_raw(&c->tty, tty_term_string(c->tty.term, TTYC_CLEAR)); |
{ |
|
const char *cmd; |
|
size_t cmdlen; |
|
struct msg_lock_data lockdata; |
|
|
c->flags |= CLIENT_SUSPENDED; |
cmd = options_get_string(&c->session->options, "lock-command"); |
server_write_client(c, MSG_LOCK, &lockdata, sizeof lockdata); |
cmdlen = strlcpy(lockdata.cmd, cmd, sizeof lockdata.cmd); |
} |
if (cmdlen >= sizeof lockdata.cmd) |
|
return; |
|
|
|
tty_stop_tty(&c->tty); |
|
tty_raw(&c->tty, tty_term_string(c->tty.term, TTYC_SMCUP)); |
|
tty_raw(&c->tty, tty_term_string(c->tty.term, TTYC_CLEAR)); |
|
|
|
c->flags |= CLIENT_SUSPENDED; |
|
server_write_client(c, MSG_LOCK, &lockdata, sizeof lockdata); |
} |
} |
|
|
void |
void |