summaryrefslogtreecommitdiff
path: root/0.8/src/sign.cpp
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2009-01-27 23:25:11 +0000
committerPaul Buetow <paul@buetow.org>2009-01-27 23:25:11 +0000
commit19f9940dc968afae01b54377ee23ec59069c9646 (patch)
treef3aeb664f44aec07de640bce0326ec1b5e478c51 /0.8/src/sign.cpp
parent1c8047e99b6a7199e447bb5a70438837cc5f7890 (diff)
Diffstat (limited to '0.8/src/sign.cpp')
-rw-r--r--0.8/src/sign.cpp146
1 files changed, 146 insertions, 0 deletions
diff --git a/0.8/src/sign.cpp b/0.8/src/sign.cpp
new file mode 100644
index 0000000..c5bc835
--- /dev/null
+++ b/0.8/src/sign.cpp
@@ -0,0 +1,146 @@
+/*:*
+ *: File: ./src/sign.cpp
+ *:
+ *: yChat; Homepage: ychat.buetow.org; Version 0.9.0-CURRENT
+ *:
+ *: Copyright (C) 2003 Paul C. Buetow, Volker Richter
+ *: Copyright (C) 2004 Paul C. Buetow
+ *: Copyright (C) 2005 EXA Digital Solutions GbR
+ *: Copyright (C) 2006, 2007 Paul C. Buetow
+ *:
+ *: This program is free software; you can redistribute it and/or
+ *: modify it under the terms of the GNU General Public License
+ *: as published by the Free Software Foundation; either version 2
+ *: of the License, or (at your option) any later version.
+ *:
+ *: This program is distributed in the hope that it will be useful,
+ *: but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *: GNU General Public License for more details.
+ *:
+ *: You should have received a copy of the GNU General Public License
+ *: along with this program; if not, write to the Free Software
+ *: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *:*/
+
+#ifndef SIGN_CPP
+#define SIGN_CPP
+
+#include "sign.h"
+
+struct event sign::ev_sigpipe;
+struct event sign::ev_sigusr1;
+struct event sign::ev_sigusr2;
+struct event sign::ev_sighup;
+struct event sign::ev_sigint;
+struct event sign::ev_sigterm;
+#ifdef CTCSEGV
+struct event sign::ev_sigsev;
+#endif
+
+void
+sign::clean_template_cache()
+{
+ wrap::HTML->clear_cache();
+}
+
+//<<*
+void
+sign::reload_dlopen_modules()
+{
+ wrap::MODL->reload_modules();
+}
+//*>>
+
+void
+sign::terminate_received()
+{
+ wrap::GCOL->remove_garbage(); //<<
+ exit(0);
+}
+
+void
+sign::handle_sigpipe(int i_fd, short event, void *p_arg)
+{
+ wrap::system_message(SIGNALR+string("SIGPIPE"));
+}
+
+void
+sign::handle_sigusr1(int i_fd, short event, void *p_arg)
+{
+ wrap::system_message(SIGNALR+string("SIGUSR1"));
+ clean_template_cache();
+}
+
+//<<*
+void
+sign::handle_sigusr2(int i_fd, short event, void *p_arg)
+{
+ wrap::system_message(SIGNALR+string("SIGUSR2"));
+ reload_dlopen_modules();
+}
+//*>>
+
+void
+sign::handle_sighup(int i_fd, short event, void *p_arg)
+{
+ wrap::system_message(SIGNALR+string("SIGHUP"));
+ terminate_received();
+}
+
+void
+sign::handle_sigint(int i_fd, short event, void *p_arg)
+{
+ wrap::system_message(SIGNALR+string("SIGINT"));
+ terminate_received();
+}
+
+void
+sign::handle_sigterm(int i_fd, short event, void *p_arg)
+{
+ wrap::system_message(SIGNALR+string("SIGTERM"));
+ terminate_received();
+}
+
+#ifdef CTCSEGV
+void
+sign::handle_sigsegv(int i_fd, short event, void *p_arg)
+{
+ wrap::system_message(SIGNALR+string("SIGSEGV"));
+}
+#endif
+
+
+void
+sign::init_event_handlers()
+{
+ // Ignore SIGPIPE. otherwise the server will shut down with "Broken pipe" if
+ // a client unexpected disconnects himself from a SOCK_STREAM.
+ signal_set(&ev_sigpipe, SIGPIPE, handle_sigpipe, NULL);
+ signal_add(&ev_sigpipe, NULL);
+
+ signal_set(&ev_sigusr1, SIGUSR1, handle_sigusr1, NULL);
+ signal_add(&ev_sigusr1, NULL);
+
+ //<<*
+ signal_set(&ev_sigusr2, SIGUSR2, handle_sigusr2, NULL);
+ signal_add(&ev_sigusr2, NULL);
+ //*>>
+
+ signal_set(&ev_sighup, SIGHUP, handle_sighup, NULL);
+ signal_add(&ev_sighup, NULL);
+
+ signal_set(&ev_sigint, SIGINT, handle_sigint, NULL);
+ signal_add(&ev_sigint, NULL);
+
+ signal_set(&ev_sigterm, SIGTERM, handle_sigterm, NULL);
+ signal_add(&ev_sigterm, NULL);
+
+#ifdef CTCSEGV
+
+ signal_set(&ev_sigsev, SIGSEGV, handle_sigsev, NULL);
+#endif
+
+}
+
+#endif