]> code.citadel.org Git - citadel.git/blobdiff - webcit-ng/server/main.c
Move *.c and *.h into server/ directory.
[citadel.git] / webcit-ng / server / main.c
diff --git a/webcit-ng/server/main.c b/webcit-ng/server/main.c
new file mode 100644 (file)
index 0000000..0313691
--- /dev/null
@@ -0,0 +1,129 @@
+// Main entry point for the program.
+//
+// Copyright (c) 1996-2022 by the citadel.org team
+//
+// This program is open source software.  Use, duplication, or
+// disclosure are subject to the GNU General Public License v3.
+
+#include "webcit.h"            // All other headers are included from this header.
+
+char *ctdl_dir = CTDL_DIR;
+
+// Main entry point for the web server.
+int main(int argc, char **argv) {
+       int webserver_port = WEBSERVER_PORT;
+       char *webserver_interface = WEBSERVER_INTERFACE;
+       int running_as_daemon = 0;
+       int webserver_protocol = WEBSERVER_HTTP;
+       int a;
+       char *pid_file = NULL;
+
+       // Parse command line
+       while ((a = getopt(argc, argv, "u:h:i:p:t:T:B:x:g:dD:G:cfsS:Z:v:")) != EOF)
+               switch (a) {
+               case 'u':
+                       setuid(atoi(optarg));
+                       break;
+               case 'h':
+                       ctdl_dir = strdup(optarg);
+                       break;
+               case 'd':
+                       running_as_daemon = 1;
+                       break;
+               case 'D':
+                       running_as_daemon = 1;
+                       pid_file = strdup(optarg);
+                       break;
+               case 'g':
+                       // FIXME set up the default landing page
+                       break;
+               case 'B':
+               case 't':
+               case 'x':
+               case 'T':
+               case 'v':
+                       // The above options are no longer used, but ignored so old scripts don't break
+                       break;
+               case 'i':
+                       webserver_interface = optarg;
+                       break;
+               case 'p':
+                       webserver_port = atoi(optarg);
+                       break;
+               case 'Z':
+                       // FIXME when gzip is added, disable it if this flag is set
+                       break;
+               case 'f':
+                       //follow_xff = 1;
+                       break;
+               case 'c':
+                       break;
+               case 's':
+                       is_https = 1;
+                       webserver_protocol = WEBSERVER_HTTPS;
+                       break;
+               case 'S':
+                       is_https = 1;
+                       webserver_protocol = WEBSERVER_HTTPS;
+                       //ssl_cipher_list = strdup(optarg);
+                       break;
+               case 'G':
+                       //DumpTemplateI18NStrings = 1;
+                       //I18nDump = NewStrBufPlain(HKEY("int templatestrings(void)\n{\n"));
+                       //I18nDumpFile = optarg;
+                       break;
+               default:
+                       fprintf(stderr, "usage:\nwebcit "
+                               "[-i ip_addr] [-p http_port] "
+                               "[-c] [-f] "
+                               "[-d] [-Z] [-G i18ndumpfile] "
+                               "[-u uid] [-h homedirectory] "
+                               "[-D daemonizepid] [-v] "
+                               "[-g defaultlandingpage] [-B basesize] "
+                               "[-s] [-S cipher_suites]"
+                               "[-h citadel_server_directory]\n"
+                       );
+                       return 1;
+               }
+
+       while (optind < argc) {
+               ctdl_dir = strdup(argv[optind++]);
+       }
+
+       // Start the logger
+       openlog("webcit", (running_as_daemon ? (LOG_PID) : (LOG_PID | LOG_PERROR)), LOG_DAEMON);
+
+       // Tell 'em who's in da house
+       syslog(LOG_NOTICE, "MAKE WEBCIT GREAT AGAIN!");
+       syslog(LOG_NOTICE, "Copyright (C) 1996-2022 by the citadel.org team");
+       syslog(LOG_NOTICE, " ");
+       syslog(LOG_NOTICE, "This program is open source software: you can redistribute it and/or");
+       syslog(LOG_NOTICE, "modify it under the terms of the GNU General Public License, version 3.");
+       syslog(LOG_NOTICE, " ");
+       syslog(LOG_NOTICE, "This program is distributed in the hope that it will be useful,");
+       syslog(LOG_NOTICE, "but WITHOUT ANY WARRANTY; without even the implied warranty of");
+       syslog(LOG_NOTICE, "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the");
+       syslog(LOG_NOTICE, "GNU General Public License for more details.");
+       syslog(LOG_NOTICE, " ");
+
+       // Ensure that we are linked to the correct version of libcitadel
+       if (libcitadel_version_number() < LIBCITADEL_VERSION_NUMBER) {
+               syslog(LOG_INFO, " You are running libcitadel version %d", libcitadel_version_number());
+               syslog(LOG_INFO, "WebCit was compiled against version %d", LIBCITADEL_VERSION_NUMBER);
+               return (1);
+       }
+
+       // Go into the background if we were asked to run as a daemon
+       if (running_as_daemon) {
+               daemon(1, 0);
+               if (pid_file != NULL) {
+                       FILE *pfp = fopen(pid_file, "w");
+                       if (pfp) {
+                               fprintf(pfp, "%d\n", getpid());
+                               fclose(pfp);
+                       }
+               }
+       }
+
+       return webserver(webserver_interface, webserver_port, webserver_protocol);
+}