summaryrefslogtreecommitdiff
path: root/project2/cgi/p2webFCgi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'project2/cgi/p2webFCgi.cpp')
-rw-r--r--project2/cgi/p2webFCgi.cpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/project2/cgi/p2webFCgi.cpp b/project2/cgi/p2webFCgi.cpp
new file mode 100644
index 0000000..620c441
--- /dev/null
+++ b/project2/cgi/p2webFCgi.cpp
@@ -0,0 +1,59 @@
+#include <syslog.h>
+#include "cgiCommon.h"
+#include "FCgiIO.h"
+#include "../xmlObjectLoader.h"
+
+time_t lastPeriodic = 0;
+time_t periodicDelay = 600;
+
+static
+void
+p2webPeriodic()
+{
+ time(&lastPeriodic);
+ LoaderBase::onPeriodic();
+}
+
+static
+void
+p2webGoingIdle(int)
+{
+ if (time(NULL) > lastPeriodic + periodicDelay) {
+ p2webPeriodic();
+ }
+ LoaderBase::onIdle();
+}
+
+int
+main(void)
+{
+ if (!FCGX_IsCGI()) {
+ syslog(LOG_NOTICE, "FCGID Startup ($Id$)");
+ FCGX_Request request;
+
+ FCGX_Init();
+ FCGX_InitRequest(&request, 0, 0);
+
+ struct sigaction onAlarm;
+ onAlarm.sa_handler = &p2webGoingIdle;
+ onAlarm.sa_flags = 0;
+ if (sigaction(SIGALRM, &onAlarm, NULL)) {
+ syslog(LOG_WARNING, "Failed to set signal handler");
+ }
+ alarm(60);
+ while (FCGX_Accept_r(&request) == 0) {
+ alarm(0);
+ cgicc::FCgiIO IO(request);
+ cgiServe(&IO, IO);
+ alarm(60);
+ LoaderBase::onIteration();
+ if (time(NULL) > lastPeriodic + periodicDelay) {
+ p2webPeriodic();
+ }
+ }
+ }
+ else {
+ syslog(LOG_ERR, "FCGID not running as a FastCGI program");
+ }
+ return 0;
+}