version 1.34, 2020/04/13 10:59:58 |
version 1.35, 2020/04/13 20:51:57 |
|
|
|
|
.source = { 's', CMD_FIND_SESSION, CMD_FIND_CANFAIL }, |
.source = { 's', CMD_FIND_SESSION, CMD_FIND_CANFAIL }, |
|
|
.flags = CMD_READONLY, |
.flags = CMD_READONLY|CMD_CLIENT_TFLAG, |
.exec = cmd_detach_client_exec |
.exec = cmd_detach_client_exec |
}; |
}; |
|
|
|
|
.args = { "t:", 0, 0 }, |
.args = { "t:", 0, 0 }, |
.usage = CMD_TARGET_CLIENT_USAGE, |
.usage = CMD_TARGET_CLIENT_USAGE, |
|
|
.flags = 0, |
.flags = CMD_CLIENT_TFLAG, |
.exec = cmd_detach_client_exec |
.exec = cmd_detach_client_exec |
}; |
}; |
|
|
|
|
{ |
{ |
struct args *args = cmd_get_args(self); |
struct args *args = cmd_get_args(self); |
struct cmd_find_state *source = cmdq_get_source(item); |
struct cmd_find_state *source = cmdq_get_source(item); |
struct client *c, *cloop; |
struct client *tc = cmdq_get_target_client(item), *loop; |
struct session *s; |
struct session *s; |
enum msgtype msgtype; |
enum msgtype msgtype; |
const char *cmd = args_get(args, 'E'); |
const char *cmd = args_get(args, 'E'); |
|
|
if ((c = cmd_find_client(item, args_get(args, 't'), 0)) == NULL) |
|
return (CMD_RETURN_ERROR); |
|
|
|
if (cmd_get_entry(self) == &cmd_suspend_client_entry) { |
if (cmd_get_entry(self) == &cmd_suspend_client_entry) { |
server_client_suspend(c); |
server_client_suspend(tc); |
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
} |
} |
|
|
|
|
s = source->s; |
s = source->s; |
if (s == NULL) |
if (s == NULL) |
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
TAILQ_FOREACH(cloop, &clients, entry) { |
TAILQ_FOREACH(loop, &clients, entry) { |
if (cloop->session == s) { |
if (loop->session == s) { |
if (cmd != NULL) |
if (cmd != NULL) |
server_client_exec(cloop, cmd); |
server_client_exec(loop, cmd); |
else |
else |
server_client_detach(cloop, msgtype); |
server_client_detach(loop, msgtype); |
} |
} |
} |
} |
return (CMD_RETURN_STOP); |
return (CMD_RETURN_STOP); |
} |
} |
|
|
if (args_has(args, 'a')) { |
if (args_has(args, 'a')) { |
TAILQ_FOREACH(cloop, &clients, entry) { |
TAILQ_FOREACH(loop, &clients, entry) { |
if (cloop->session != NULL && cloop != c) { |
if (loop->session != NULL && loop != tc) { |
if (cmd != NULL) |
if (cmd != NULL) |
server_client_exec(cloop, cmd); |
server_client_exec(loop, cmd); |
else |
else |
server_client_detach(cloop, msgtype); |
server_client_detach(loop, msgtype); |
} |
} |
} |
} |
return (CMD_RETURN_NORMAL); |
return (CMD_RETURN_NORMAL); |
} |
} |
|
|
if (cmd != NULL) |
if (cmd != NULL) |
server_client_exec(c, cmd); |
server_client_exec(tc, cmd); |
else |
else |
server_client_detach(c, msgtype); |
server_client_detach(tc, msgtype); |
return (CMD_RETURN_STOP); |
return (CMD_RETURN_STOP); |
} |
} |