--- /dev/null
+#ifndef SERVER_H
+#define SERVER_H
+
+#include <event2/listener.h>
+#include <event2/util.h>
+
+#include <openssl/ssl.h>
+
+#include <lua.h>
+
+#include "common.h"
+#include "connections.h"
+#include "db.h"
+#include "workqueue.h"
+
+struct server {
+ struct event_base *base;
+ struct evdns_base *evdns_base;
+
+ pthread_mutex_t listeners_mutex;
+ struct evconnlistener **listeners;
+ size_t listeners_allocated;
+ size_t listeners_used;
+
+ SSL_CTX *ssl_ctx;
+
+ struct database db;
+
+ /* a collection of all connections */
+ struct connections connections;
+
+ /* worker thread wrangler */
+ struct workqueue workqueue;
+
+ /* server lua context, currently to load and parse config file */
+ lua_State *L;
+};
+
+/* each worker thread gets a reference to the server and its own lua state */
+struct server_worker_context {
+ struct server *server;
+ lua_State *L;
+};
+
+struct server * server_new(void);
+
+int server_init(struct server *s, char *conf_file);
+
+void server_free(struct server *s);
+
+void server_heartbeat_event(evutil_socket_t, short, void *);
+
+int server_refresh_ssl_context(lua_State *, struct server *);
+
+#endif /* SERVER_H */
\ No newline at end of file