diff options
| author | Paul Buetow <paul@buetow.org> | 2009-01-27 23:25:11 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2009-01-27 23:25:11 +0000 |
| commit | 19f9940dc968afae01b54377ee23ec59069c9646 (patch) | |
| tree | f3aeb664f44aec07de640bce0326ec1b5e478c51 /0.8/src/sign.cpp | |
| parent | 1c8047e99b6a7199e447bb5a70438837cc5f7890 (diff) | |
Diffstat (limited to '0.8/src/sign.cpp')
| -rw-r--r-- | 0.8/src/sign.cpp | 146 |
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 |
