diff options
author | nicm <nicm> | 2020-05-16 15:45:29 +0000 |
---|---|---|
committer | nicm <nicm> | 2020-05-16 15:45:29 +0000 |
commit | cf9baddd6f844e8a26f1e7c59ba1c9eb3358571f (patch) | |
tree | e5297040b1538b4f41d786c1329b391880a36b76 /server-client.c | |
parent | 469eda7e44fe6d502c976ebc34bbd97e6c6ed3e5 (diff) | |
download | rtmux-cf9baddd6f844e8a26f1e7c59ba1c9eb3358571f.tar.gz rtmux-cf9baddd6f844e8a26f1e7c59ba1c9eb3358571f.tar.bz2 rtmux-cf9baddd6f844e8a26f1e7c59ba1c9eb3358571f.zip |
Change the existing client flags for control mode to apply for any
client, use the same mechanism for the read-only flag and add an
ignore-size flag.
refresh-client -F has become -f (-F stays for backwards compatibility)
and attach-session and switch-client now have -f flags also. A new
format "client_flags" lists the flags and is shown by list-clients by
default.
This separates the read-only flag from "ignore size" behaviour (new
ignore-size) flag - both behaviours are useful in different
circumstances.
attach -r and switchc -r remain and set or toggle both flags together.
Diffstat (limited to 'server-client.c')
-rw-r--r-- | server-client.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/server-client.c b/server-client.c index a45e9812..86b7a1b8 100644 --- a/server-client.c +++ b/server-client.c @@ -2253,3 +2253,61 @@ server_client_get_cwd(struct client *c, struct session *s) return (home); return ("/"); } + +/* Set client flags. */ +void +server_client_set_flags(struct client *c, const char *flags) +{ + char *s, *copy, *next; + int flag, not; + + s = copy = xstrdup (flags); + while ((next = strsep(&s, ",")) != NULL) { + not = (*next == '!'); + if (not) + next++; + + if (strcmp(next, "no-output") == 0) + flag = CLIENT_CONTROL_NOOUTPUT; + else if (strcmp(next, "read-only") == 0) + flag = CLIENT_READONLY; + else if (strcmp(next, "ignore-size") == 0) + flag = CLIENT_IGNORESIZE; + else + continue; + + log_debug("client %s set flag %s", c->name, next); + if (not) + c->flags &= ~flag; + else + c->flags |= flag; + } + free(copy); + +} + +/*Get client flags. This is only flags useful to show to users. */ +const char * +server_client_get_flags(struct client *c) +{ + static char s[256]; + + *s = '\0'; + if (c->flags & CLIENT_ATTACHED) + strlcat(s, "attached,", sizeof s); + if (c->flags & CLIENT_CONTROL) + strlcat(s, "control-mode,", sizeof s); + if (c->flags & CLIENT_IGNORESIZE) + strlcat(s, "ignore-size,", sizeof s); + if (c->flags & CLIENT_CONTROL_NOOUTPUT) + strlcat(s, "no-output,", sizeof s); + if (c->flags & CLIENT_READONLY) + strlcat(s, "read-only,", sizeof s); + if (c->flags & CLIENT_SUSPENDED) + strlcat(s, "suspended,", sizeof s); + if (c->flags & CLIENT_UTF8) + strlcat(s, "UTF-8,", sizeof s); + if (*s != '\0') + s[strlen(s) - 1] = '\0'; + return (s); +} |