aboutsummaryrefslogtreecommitdiff
path: root/src/client.c
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2015-12-07 22:19:18 -0500
committerFranklin Wei <git@fwei.tk>2015-12-07 22:19:18 -0500
commit33e3462fb86a715e6f71e387233e36c7be255038 (patch)
tree06560056c0777446288f377b2e125b07368d6f9a /src/client.c
parent0f3bd99c40594c46b5b4bb0603085ec9cc111e0e (diff)
downloadnetcosm-33e3462fb86a715e6f71e387233e36c7be255038.zip
netcosm-33e3462fb86a715e6f71e387233e36c7be255038.tar.gz
netcosm-33e3462fb86a715e6f71e387233e36c7be255038.tar.bz2
netcosm-33e3462fb86a715e6f71e387233e36c7be255038.tar.xz
refactor
Diffstat (limited to 'src/client.c')
-rw-r--r--src/client.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/client.c b/src/client.c
index 4ed944c..4835881 100644
--- a/src/client.c
+++ b/src/client.c
@@ -58,6 +58,8 @@ void all_upper(char *s)
}
}
+volatile sig_atomic_t done_printing;
+
void sigusr2_handler(int s)
{
(void) s;
@@ -65,6 +67,7 @@ void sigusr2_handler(int s)
size_t len = read(from_parent, buf, MSG_MAX);
buf[MSG_MAX] = '\0';
out_raw(buf, len);
+ done_printing = 1;
}
void client_change_state(int state)
@@ -235,12 +238,19 @@ void client_main(int fd, struct sockaddr_in *addr, int total, int to, int from)
auth_list_users();
}
}
- else if(!strcmp(tok, "CLIENTS"))
+ else if(!strcmp(tok, "CLIENT"))
{
- unsigned char cmd_code = REQ_LISTCLIENTS;
- write(to_parent, &cmd_code, sizeof(cmd_code));
- kill(getppid(), SIGUSR1);
- waitpid(-1, NULL, 0);
+ char *what = strtok_r(NULL, WSPACE, &save);
+ all_upper(what);
+ if(!strcmp(what, "LIST"))
+ {
+ done_printing = 0;
+ unsigned char cmd_code = REQ_LISTCLIENTS;
+ write(to_parent, &cmd_code, sizeof(cmd_code));
+ kill(getppid(), SIGUSR1);
+ waitpid(-1, NULL, 0);
+ while(!done_printing);
+ }
}
}