--- /dev/null
+#ifndef SERVER_H_INCLUDED
+#define SERVER_H_INCLUDED
+
+#include <sys/types.h>
+
+#include "xmlrpc-c/abyss.h"
+
+#include "file.h"
+#include "data.h"
+
+typedef struct _Tsocket Tsocket;
+
+struct _TServer {
+ abyss_bool terminationRequested;
+ /* User wants this server to terminate as soon as possible,
+ in particular before accepting any more connections and without
+ waiting for any.
+ */
+ abyss_bool socketBound;
+ /* The listening socket exists and is bound to a local address
+ (may already be listening as well)
+ */
+ TSocket * listenSocketP;
+ /* Meaningful only when 'socketBound' is true: file descriptor of
+ the listening socket ("listening socket" means socket for listening,
+ not a socket that is listening right now).
+ */
+ abyss_bool weCreatedListenSocket;
+ /* We created the listen socket (whose fd is 'listensock'), as
+ opposed to 1) User supplied it; or 2) there isn't one.
+ */
+ const char * logfilename;
+ abyss_bool logfileisopen;
+ TFile logfile;
+ TMutex logmutex;
+ const char * name;
+ const char * filespath;
+ abyss_bool serverAcceptsConnections;
+ /* We listen for and accept TCP connections for HTTP transactions.
+ (The alternative is the user supplies a TCP-connected socket
+ for each transaction)
+ */
+ uint16_t port;
+ /* Meaningful only when 'socketBound' is false: port number to which
+ we should bind the listening socket
+ */
+ uint32_t keepalivetimeout;
+ uint32_t keepalivemaxconn;
+ uint32_t timeout;
+ /* Maximum time in seconds the server will wait to read a header
+ or a data chunk from the socket.
+ */
+ TList handlers;
+ TList defaultfilenames;
+ void * defaulthandler;
+ abyss_bool advertise;
+ MIMEType * mimeTypeP;
+ /* NULL means to use the global MIMEType object */
+ abyss_bool useSigchld;
+ /* Meaningless if not using forking for threads.
+ TRUE means user will call ServerHandleSigchld to indicate that
+ a SIGCHLD signal was received, and server shall use that as its
+ indication that a child has died. FALSE means server will not
+ be aware of SIGCHLD and will instead poll for existence of PIDs
+ to determine if a child has died.
+ */
+#ifndef WIN32
+ uid_t uid;
+ gid_t gid;
+ TFile pidfile;
+#endif
+};
+
+
+void
+ServerBackgroundProcessComplete(pid_t const pid);
+
+#endif