diff options
author | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2008-11-01 18:01:05 +0300 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2008-11-01 18:01:05 +0300 |
commit | 2aa9c74f1c449da92f6faf870f8cc801a83bb08b (patch) | |
tree | 33f0f941f08583fd0c4c3653cadde8d6ce8426c2 /src/main.h | |
parent | cc5343692b448c27485a24ea7f1b24d714bb82f6 (diff) | |
download | rspamd-2aa9c74f1c449da92f6faf870f8cc801a83bb08b.tar.gz rspamd-2aa9c74f1c449da92f6faf870f8cc801a83bb08b.zip |
* Reorganize structure of source files
* Adopt build system for new structure
--HG--
rename : cfg_file.h => src/cfg_file.h
rename : cfg_file.l => src/cfg_file.l
rename : cfg_file.y => src/cfg_file.y
rename : cfg_utils.c => src/cfg_utils.c
rename : controller.c => src/controller.c
rename : filter.c => src/filter.c
rename : filter.h => src/filter.h
rename : fstring.c => src/fstring.c
rename : fstring.h => src/fstring.h
rename : main.c => src/main.c
rename : main.h => src/main.h
rename : mem_pool.c => src/mem_pool.c
rename : mem_pool.h => src/mem_pool.h
rename : memcached-test.c => src/memcached-test.c
rename : memcached.c => src/memcached.c
rename : memcached.h => src/memcached.h
rename : perl.c => src/perl.c
rename : perl.h => src/perl.h
rename : plugins/regexp.c => src/plugins/regexp.c
rename : plugins/surbl.c => src/plugins/surbl.c
rename : protocol.c => src/protocol.c
rename : protocol.h => src/protocol.h
rename : upstream.c => src/upstream.c
rename : upstream.h => src/upstream.h
rename : url.c => src/url.c
rename : url.h => src/url.h
rename : util.c => src/util.c
rename : util.h => src/util.h
rename : worker.c => src/worker.c
Diffstat (limited to 'src/main.h')
-rw-r--r-- | src/main.h | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/src/main.h b/src/main.h new file mode 100644 index 000000000..efb716ab0 --- /dev/null +++ b/src/main.h @@ -0,0 +1,201 @@ +#ifndef RPOP_MAIN_H +#define RPOP_MAIN_H + +#include "config.h" + +#include <sys/types.h> +#include <sys/socket.h> +#ifndef HAVE_OWN_QUEUE_H +#include <sys/queue.h> +#else +#include "queue.h" +#endif +#include <sys/time.h> + +#include <sys/un.h> +#include <netinet/in.h> +#include <arpa/inet.h> + +#include <signal.h> +#include <event.h> + +#include "fstring.h" +#include "mem_pool.h" +#include "url.h" +#include "memcached.h" +#include "protocol.h" +#include "filter.h" + +#include <glib.h> +#include <gmime/gmime.h> + +/* Default values */ +#define FIXED_CONFIG_FILE "./rspamd.conf" +/* Time in seconds to exit for old worker */ +#define SOFT_SHUTDOWN_TIME 60 +/* Default metric name */ +#define DEFAULT_METRIC "default" + +/* Logging in postfix style */ +#define msg_err g_error +#define msg_warn g_warning +#define msg_info g_message +#define msg_debug g_debug + +/* Process type: main or worker */ +enum process_type { + TYPE_MAIN, + TYPE_WORKER, + TYPE_CONTROLLER, +}; + +/* Filter type */ +enum script_type { + SCRIPT_HEADER, + SCRIPT_MIME, + SCRIPT_URL, + SCRIPT_MESSAGE, +}; + +/* Logic expression */ +struct expression { + enum { EXPR_OPERAND, EXPR_OPERATION } type; + union { + void *operand; + char operation; + } content; + struct expression *next; +}; + +/* Worker process structure */ +struct rspamd_worker { + pid_t pid; + char is_initialized; + char is_dying; + TAILQ_ENTRY (rspamd_worker) next; + struct rspamd_main *srv; + enum process_type type; + struct event sig_ev; + struct event bind_ev; +}; + +struct pidfh; +struct config_file; + +/* Server statistics */ +struct rspamd_stat { + unsigned int messages_scanned; + unsigned int messages_spam; + unsigned int messages_ham; + unsigned int connections_count; + unsigned int control_connections_count; + unsigned int messages_learned; +}; + +/* Struct that determine main server object (for logging purposes) */ +struct rspamd_main { + struct config_file *cfg; + pid_t pid; + /* Pid file structure */ + struct pidfh *pfh; + enum process_type type; + unsigned int ev_initialized; + struct rspamd_stat *stat; + + memory_pool_t *server_pool; + + TAILQ_HEAD (workq, rspamd_worker) workers; +}; + +struct mime_part { + GMimeContentType *type; + GByteArray *content; + TAILQ_ENTRY (mime_part) next; +}; + +struct save_point { + void *entry; + enum script_type type; + unsigned int saved; +}; + +/* Control session */ +struct controller_session { + struct rspamd_worker *worker; + int sock; + /* Access to authorized commands */ + int authorized; + memory_pool_t *session_pool; + struct bufferevent *bev; + struct config_file *cfg; +}; + +/* Worker task structure */ +struct worker_task { + struct rspamd_worker *worker; + enum { + READ_COMMAND, + READ_HEADER, + READ_MESSAGE, + WRITE_REPLY, + WRITE_ERROR, + WAIT_FILTER, + CLOSING_CONNECTION, + } state; + size_t content_length; + enum rspamd_protocol proto; + enum rspamd_command cmd; + int sock; + char *helo; + char *from; + GList *rcpt; + unsigned int nrcpt; + struct in_addr from_addr; + f_str_buf_t *msg; + struct bufferevent *bev; + /* Memcached connection for this task */ + memcached_ctx_t *memc_ctx; + unsigned memc_busy:1; + /* Number of mime parts */ + int parts_count; + /* Message */ + GMimeMessage *message; + /* All parts of message */ + TAILQ_HEAD (mime_partq, mime_part) parts; + /* URLs extracted from message */ + TAILQ_HEAD (uriq, uri) urls; + /* Hash of metric result structures */ + GHashTable *results; + struct config_file *cfg; + /* Save point for filters deferred processing */ + struct save_point save; + /* Saved error message and code */ + char *last_error; + int error_code; + /* Memory pool that is associated with this task */ + memory_pool_t *task_pool; +}; + +struct module_ctx { + int (*header_filter)(struct worker_task *task); + int (*mime_filter)(struct worker_task *task); + int (*message_filter)(struct worker_task *task); + int (*url_filter)(struct worker_task *task); +}; + +struct c_module { + const char *name; + struct module_ctx *ctx; + LIST_ENTRY (c_module) next; +}; + +void start_worker (struct rspamd_worker *worker, int listen_sock); +void start_controller (struct rspamd_worker *worker); + +extern sig_atomic_t do_reopen_log; + +#endif + +/* + * vi:ts=4 + */ |