aboutsummaryrefslogtreecommitdiff
path: root/src/server.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/server.c
parent0f3bd99c40594c46b5b4bb0603085ec9cc111e0e (diff)
downloadnetcosm-33e3462fb86a715e6f71e387233e36c7be255038.zip
netcosm-33e3462fb86a715e6f71e387233e36c7be255038.tar.gz
netcosm-33e3462fb86a715e6f71e387233e36c7be255038.tar.bz2
netcosm-33e3462fb86a715e6f71e387233e36c7be255038.tar.xz
refactor
Diffstat (limited to 'src/server.c')
-rw-r--r--src/server.c47
1 files changed, 26 insertions, 21 deletions
diff --git a/src/server.c b/src/server.c
index 8e2c4a1..c680b37 100644
--- a/src/server.c
+++ b/src/server.c
@@ -141,7 +141,7 @@ void req_send_clientinfo(unsigned char *data, size_t datalen,
"LOGGED IN AS ADMIN",
"ACCESS DENIED",
};
- if(sender->user)
+ if(child->user)
len = snprintf(buf, sizeof(buf), "Client %s PID %d [%s] USER %s\n",
inet_ntoa(child->addr), child->pid, state[child->state], child->user);
else
@@ -189,7 +189,7 @@ static const struct child_request {
void (*finalize)(struct child_data *sender);
} requests[] = {
- { REQ_BCASTMSG, true, CHILD_ALL_BUT_SENDER, req_pass_msg, NULL },
+ { REQ_BCASTMSG, true, CHILD_ALL, req_pass_msg, NULL },
{ REQ_LISTCLIENTS, false, CHILD_ALL, req_send_clientinfo, req_signal_sender },
{ REQ_CHANGESTATE, true, CHILD_SENDER, req_change_state, NULL },
{ REQ_CHANGEUSER, true, CHILD_SENDER, req_change_user, NULL },
@@ -292,6 +292,29 @@ finish:
req->finalize(sender);
}
+void init_signals(void)
+{
+ struct sigaction sa;
+
+ sa.sa_sigaction = sigchld_handler; // reap all dead processes
+ sigemptyset(&sa.sa_mask);
+ sa.sa_flags = SA_RESTART | SA_SIGINFO;
+ if (sigaction(SIGCHLD, &sa, NULL) < 0)
+ error("sigaction");
+
+ sa.sa_handler = sigint_handler;
+ sa.sa_flags = SA_RESTART;
+ if(sigaction(SIGINT, &sa, NULL) < 0)
+ error("sigaction");
+ if(sigaction(SIGTERM, &sa, NULL) < 0)
+ error("sigaction");
+
+ sa.sa_sigaction = sigusr1_handler;
+ sa.sa_flags = SA_RESTART | SA_SIGINFO;
+ if(sigaction(SIGUSR1, &sa, NULL) < 0)
+ error("sigaction");
+}
+
int main(int argc, char *argv[])
{
if(argc != 2)
@@ -325,25 +348,7 @@ int main(int argc, char *argv[])
/* set up signal handlers for SIGCHLD, SIGUSR1, and SIGINT */
/* SIGUSR1 is used for broadcast signalling */
- struct sigaction sa;
-
- sa.sa_sigaction = sigchld_handler; // reap all dead processes
- sigemptyset(&sa.sa_mask);
- sa.sa_flags = SA_RESTART | SA_SIGINFO;
- if (sigaction(SIGCHLD, &sa, NULL) < 0)
- error("sigaction");
-
- sa.sa_handler = sigint_handler;
- sa.sa_flags = SA_RESTART;
- if(sigaction(SIGINT, &sa, NULL) < 0)
- error("sigaction");
- if(sigaction(SIGTERM, &sa, NULL) < 0)
- error("sigaction");
-
- sa.sa_sigaction = sigusr1_handler;
- sa.sa_flags = SA_RESTART | SA_SIGINFO;
- if(sigaction(SIGUSR1, &sa, NULL) < 0)
- error("sigaction");
+ init_signals();
if(access(USERFILE, F_OK) < 0)
first_run_setup();