aboutsummaryrefslogtreecommitdiffstats
path: root/src/protocol.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>2009-10-02 17:09:38 +0400
committerVsevolod Stakhov <vsevolod@rambler-co.ru>2009-10-02 17:09:38 +0400
commitf3ad9c6f1e91c9912dbe730fdec350b5fc908672 (patch)
tree005e5568431db09becaa9b67a33dfc11f80bba7f /src/protocol.c
parente6a1d22de250c10992b484635fd95a03f197f779 (diff)
downloadrspamd-f3ad9c6f1e91c9912dbe730fdec350b5fc908672.tar.gz
rspamd-f3ad9c6f1e91c9912dbe730fdec350b5fc908672.zip
* Retab, no functional changes
Diffstat (limited to 'src/protocol.c')
-rw-r--r--src/protocol.c559
1 files changed, 275 insertions, 284 deletions
diff --git a/src/protocol.c b/src/protocol.c
index d6fe07cca..a902cb505 100644
--- a/src/protocol.c
+++ b/src/protocol.c
@@ -55,7 +55,7 @@
#define MSG_CMD_SKIP "skip"
/*
* Return a confirmation that spamd is alive
- */
+ */
#define MSG_CMD_PING "ping"
/*
* Process this message as described above and return modified message
@@ -84,13 +84,13 @@
#define USER_HEADER "User"
#define DELIVER_TO_HEADER "Deliver-To"
-static GList *custom_commands = NULL;
+static GList *custom_commands = NULL;
-static char *
-separate_command (f_str_t *in, char c)
+static char *
+separate_command (f_str_t * in, char c)
{
- int r = 0;
- char *p = in->begin, *b;
+ int r = 0;
+ char *p = in->begin, *b;
b = p;
while (r < in->len) {
@@ -100,19 +100,19 @@ separate_command (f_str_t *in, char c)
in->len -= r + 1;
return b;
}
- p ++;
- r ++;
+ p++;
+ r++;
}
return NULL;
}
static int
-parse_command (struct worker_task *task, f_str_t *line)
+parse_command (struct worker_task *task, f_str_t * line)
{
- char *token;
- struct custom_command *cmd;
- GList *cur;
+ char *token;
+ struct custom_command *cmd;
+ GList *cur;
token = separate_command (line, ' ');
if (line == NULL || token == NULL) {
@@ -121,82 +121,82 @@ parse_command (struct worker_task *task, f_str_t *line)
}
switch (token[0]) {
- case 'c':
- case 'C':
- /* check */
- if (g_ascii_strcasecmp (token + 1, MSG_CMD_CHECK + 1) == 0) {
- task->cmd = CMD_CHECK;
- }
- else {
- msg_debug ("parse_command: bad command: %s", token);
- return -1;
- }
- break;
- case 's':
- case 'S':
- /* symbols, skip */
- if (g_ascii_strcasecmp (token + 1, MSG_CMD_SYMBOLS + 1) == 0) {
- task->cmd = CMD_SYMBOLS;
- }
- else if (g_ascii_strcasecmp (token + 1, MSG_CMD_SKIP + 1) == 0) {
- task->cmd = CMD_SKIP;
- }
- else {
- msg_debug ("parse_command: bad command: %s", token);
- return -1;
- }
- break;
- case 'p':
- case 'P':
- /* ping, process */
- if (g_ascii_strcasecmp (token + 1, MSG_CMD_PING + 1) == 0) {
- task->cmd = CMD_PING;
- }
- else if (g_ascii_strcasecmp (token + 1, MSG_CMD_PROCESS + 1) == 0) {
- task->cmd = CMD_PROCESS;
- }
- else {
- msg_debug ("parse_command: bad command: %s", token);
- return -1;
- }
- break;
- case 'r':
- case 'R':
- /* report, report_ifspam */
- if (g_ascii_strcasecmp (token + 1, MSG_CMD_REPORT + 1) == 0) {
- task->cmd = CMD_REPORT;
- }
- else if (g_ascii_strcasecmp (token + 1, MSG_CMD_REPORT_IFSPAM + 1) == 0) {
- task->cmd = CMD_REPORT_IFSPAM;
- }
- else {
- msg_debug ("parse_command: bad command: %s", token);
- return -1;
- }
- break;
- default:
- cur = custom_commands;
- while (cur) {
- cmd = cur->data;
- if (g_ascii_strcasecmp (token, cmd->name) == 0) {
- task->cmd = CMD_OTHER;
- task->custom_cmd = cmd;
- break;
- }
- cur = g_list_next (cur);
+ case 'c':
+ case 'C':
+ /* check */
+ if (g_ascii_strcasecmp (token + 1, MSG_CMD_CHECK + 1) == 0) {
+ task->cmd = CMD_CHECK;
+ }
+ else {
+ msg_debug ("parse_command: bad command: %s", token);
+ return -1;
+ }
+ break;
+ case 's':
+ case 'S':
+ /* symbols, skip */
+ if (g_ascii_strcasecmp (token + 1, MSG_CMD_SYMBOLS + 1) == 0) {
+ task->cmd = CMD_SYMBOLS;
+ }
+ else if (g_ascii_strcasecmp (token + 1, MSG_CMD_SKIP + 1) == 0) {
+ task->cmd = CMD_SKIP;
+ }
+ else {
+ msg_debug ("parse_command: bad command: %s", token);
+ return -1;
+ }
+ break;
+ case 'p':
+ case 'P':
+ /* ping, process */
+ if (g_ascii_strcasecmp (token + 1, MSG_CMD_PING + 1) == 0) {
+ task->cmd = CMD_PING;
+ }
+ else if (g_ascii_strcasecmp (token + 1, MSG_CMD_PROCESS + 1) == 0) {
+ task->cmd = CMD_PROCESS;
+ }
+ else {
+ msg_debug ("parse_command: bad command: %s", token);
+ return -1;
+ }
+ break;
+ case 'r':
+ case 'R':
+ /* report, report_ifspam */
+ if (g_ascii_strcasecmp (token + 1, MSG_CMD_REPORT + 1) == 0) {
+ task->cmd = CMD_REPORT;
+ }
+ else if (g_ascii_strcasecmp (token + 1, MSG_CMD_REPORT_IFSPAM + 1) == 0) {
+ task->cmd = CMD_REPORT_IFSPAM;
+ }
+ else {
+ msg_debug ("parse_command: bad command: %s", token);
+ return -1;
+ }
+ break;
+ default:
+ cur = custom_commands;
+ while (cur) {
+ cmd = cur->data;
+ if (g_ascii_strcasecmp (token, cmd->name) == 0) {
+ task->cmd = CMD_OTHER;
+ task->custom_cmd = cmd;
+ break;
}
+ cur = g_list_next (cur);
+ }
- if (cur == NULL) {
- msg_debug ("parse_command: bad command: %s", token);
- return -1;
- }
- break;
+ if (cur == NULL) {
+ msg_debug ("parse_command: bad command: %s", token);
+ return -1;
+ }
+ break;
}
if (strncasecmp (line->begin, RSPAMC_GREETING, sizeof (RSPAMC_GREETING) - 1) == 0) {
task->proto = RSPAMC_PROTO;
}
- else if (strncasecmp (line->begin, SPAMC_GREETING, sizeof (SPAMC_GREETING) -1) == 0) {
+ else if (strncasecmp (line->begin, SPAMC_GREETING, sizeof (SPAMC_GREETING) - 1) == 0) {
task->proto = SPAMC_PROTO;
}
else {
@@ -207,10 +207,10 @@ parse_command (struct worker_task *task, f_str_t *line)
}
static int
-parse_header (struct worker_task *task, f_str_t *line)
+parse_header (struct worker_task *task, f_str_t * line)
{
- char *headern, *err, *tmp;
-
+ char *headern, *err, *tmp;
+
/* Check end of headers */
if (line->len == 0) {
msg_debug ("parse_header: got empty line, assume it as end of headers");
@@ -219,7 +219,7 @@ parse_header (struct worker_task *task, f_str_t *line)
}
else {
if (task->content_length > 0) {
- rspamd_set_dispatcher_policy (task->dispatcher, BUFFER_CHARACTER, task->content_length);
+ rspamd_set_dispatcher_policy (task->dispatcher, BUFFER_CHARACTER, task->content_length);
task->state = READ_MESSAGE;
}
else {
@@ -242,152 +242,152 @@ parse_header (struct worker_task *task, f_str_t *line)
fstrstrip (line);
switch (headern[0]) {
- case 'c':
- case 'C':
- /* content-length */
- if (strncasecmp (headern, CONTENT_LENGTH_HEADER, sizeof (CONTENT_LENGTH_HEADER) - 1) == 0) {
- if (task->content_length == 0) {
- tmp = memory_pool_fstrdup (task->task_pool, line);
- task->content_length = strtoul (tmp, &err, 10);
- msg_debug ("parse_header: read Content-Length header, value: %lu", (unsigned long int)task->content_length);
- }
- }
- else {
- msg_info ("parse_header: wrong header: %s", headern);
- return -1;
- }
- break;
- case 'd':
- case 'D':
- /* Deliver-To */
- if (strncasecmp (headern, DELIVER_TO_HEADER, sizeof (DELIVER_TO_HEADER) - 1) == 0) {
- task->deliver_to = memory_pool_fstrdup (task->task_pool, line);
- msg_debug ("parse_header: read deliver-to header, value: %s", task->deliver_to);
- }
- else {
- msg_info ("parse_header: wrong header: %s", headern);
- return -1;
- }
- break;
- case 'h':
- case 'H':
- /* helo */
- if (strncasecmp (headern, HELO_HEADER, sizeof (HELO_HEADER) - 1) == 0) {
- task->helo = memory_pool_fstrdup (task->task_pool, line);
- msg_debug ("parse_header: read helo header, value: %s", task->helo);
- }
- else {
- msg_info ("parse_header: wrong header: %s", headern);
- return -1;
- }
- break;
- case 'f':
- case 'F':
- /* from */
- if (strncasecmp (headern, FROM_HEADER, sizeof (FROM_HEADER) - 1) == 0) {
- task->from = memory_pool_fstrdup (task->task_pool, line);
- msg_debug ("parse_header: read from header, value: %s", task->from);
- }
- else {
- msg_info ("parse_header: wrong header: %s", headern);
- return -1;
- }
- break;
- case 'q':
- case 'Q':
- /* Queue id */
- if (strncasecmp (headern, QUEUE_ID_HEADER, sizeof (QUEUE_ID_HEADER) - 1) == 0) {
- task->queue_id = memory_pool_fstrdup (task->task_pool, line);
- msg_debug ("parse_header: read queue_id header, value: %s", task->queue_id);
- }
- else {
- msg_info ("parse_header: wrong header: %s", headern);
- return -1;
- }
- break;
- case 'r':
- case 'R':
- /* rcpt */
- if (strncasecmp (headern, RCPT_HEADER, sizeof (RCPT_HEADER) - 1) == 0) {
- tmp = memory_pool_fstrdup (task->task_pool, line);
- task->rcpt = g_list_prepend (task->rcpt, tmp);
- msg_debug ("parse_header: read rcpt header, value: %s", tmp);
- }
- else if (strncasecmp (headern, NRCPT_HEADER, sizeof (NRCPT_HEADER) - 1) == 0) {
- tmp = memory_pool_fstrdup (task->task_pool, line);
- task->nrcpt = strtoul (tmp, &err, 10);
- msg_debug ("parse_header: read rcpt header, value: %d", (int)task->nrcpt);
- }
- else {
- msg_info ("parse_header: wrong header: %s", headern);
- return -1;
- }
- break;
- case 'i':
- case 'I':
- /* ip_addr */
- if (strncasecmp (headern, IP_ADDR_HEADER, sizeof (IP_ADDR_HEADER) - 1) == 0) {
+ case 'c':
+ case 'C':
+ /* content-length */
+ if (strncasecmp (headern, CONTENT_LENGTH_HEADER, sizeof (CONTENT_LENGTH_HEADER) - 1) == 0) {
+ if (task->content_length == 0) {
tmp = memory_pool_fstrdup (task->task_pool, line);
- if (!inet_aton (tmp, &task->from_addr)) {
- msg_info ("parse_header: bad ip header: '%s'", tmp);
- return -1;
- }
- msg_debug ("parse_header: read IP header, value: %s", tmp);
- }
- else {
- msg_info ("parse_header: wrong header: %s", headern);
- return -1;
- }
- break;
- case 'u':
- case 'U':
- if (strncasecmp (headern, USER_HEADER, sizeof (USER_HEADER) - 1) == 0) {
- /* XXX: use this header somehow */
- task->user = memory_pool_fstrdup (task->task_pool, line);
+ task->content_length = strtoul (tmp, &err, 10);
+ msg_debug ("parse_header: read Content-Length header, value: %lu", (unsigned long int)task->content_length);
}
- else {
+ }
+ else {
+ msg_info ("parse_header: wrong header: %s", headern);
+ return -1;
+ }
+ break;
+ case 'd':
+ case 'D':
+ /* Deliver-To */
+ if (strncasecmp (headern, DELIVER_TO_HEADER, sizeof (DELIVER_TO_HEADER) - 1) == 0) {
+ task->deliver_to = memory_pool_fstrdup (task->task_pool, line);
+ msg_debug ("parse_header: read deliver-to header, value: %s", task->deliver_to);
+ }
+ else {
+ msg_info ("parse_header: wrong header: %s", headern);
+ return -1;
+ }
+ break;
+ case 'h':
+ case 'H':
+ /* helo */
+ if (strncasecmp (headern, HELO_HEADER, sizeof (HELO_HEADER) - 1) == 0) {
+ task->helo = memory_pool_fstrdup (task->task_pool, line);
+ msg_debug ("parse_header: read helo header, value: %s", task->helo);
+ }
+ else {
+ msg_info ("parse_header: wrong header: %s", headern);
+ return -1;
+ }
+ break;
+ case 'f':
+ case 'F':
+ /* from */
+ if (strncasecmp (headern, FROM_HEADER, sizeof (FROM_HEADER) - 1) == 0) {
+ task->from = memory_pool_fstrdup (task->task_pool, line);
+ msg_debug ("parse_header: read from header, value: %s", task->from);
+ }
+ else {
+ msg_info ("parse_header: wrong header: %s", headern);
+ return -1;
+ }
+ break;
+ case 'q':
+ case 'Q':
+ /* Queue id */
+ if (strncasecmp (headern, QUEUE_ID_HEADER, sizeof (QUEUE_ID_HEADER) - 1) == 0) {
+ task->queue_id = memory_pool_fstrdup (task->task_pool, line);
+ msg_debug ("parse_header: read queue_id header, value: %s", task->queue_id);
+ }
+ else {
+ msg_info ("parse_header: wrong header: %s", headern);
+ return -1;
+ }
+ break;
+ case 'r':
+ case 'R':
+ /* rcpt */
+ if (strncasecmp (headern, RCPT_HEADER, sizeof (RCPT_HEADER) - 1) == 0) {
+ tmp = memory_pool_fstrdup (task->task_pool, line);
+ task->rcpt = g_list_prepend (task->rcpt, tmp);
+ msg_debug ("parse_header: read rcpt header, value: %s", tmp);
+ }
+ else if (strncasecmp (headern, NRCPT_HEADER, sizeof (NRCPT_HEADER) - 1) == 0) {
+ tmp = memory_pool_fstrdup (task->task_pool, line);
+ task->nrcpt = strtoul (tmp, &err, 10);
+ msg_debug ("parse_header: read rcpt header, value: %d", (int)task->nrcpt);
+ }
+ else {
+ msg_info ("parse_header: wrong header: %s", headern);
+ return -1;
+ }
+ break;
+ case 'i':
+ case 'I':
+ /* ip_addr */
+ if (strncasecmp (headern, IP_ADDR_HEADER, sizeof (IP_ADDR_HEADER) - 1) == 0) {
+ tmp = memory_pool_fstrdup (task->task_pool, line);
+ if (!inet_aton (tmp, &task->from_addr)) {
+ msg_info ("parse_header: bad ip header: '%s'", tmp);
return -1;
}
- break;
- default:
+ msg_debug ("parse_header: read IP header, value: %s", tmp);
+ }
+ else {
msg_info ("parse_header: wrong header: %s", headern);
return -1;
+ }
+ break;
+ case 'u':
+ case 'U':
+ if (strncasecmp (headern, USER_HEADER, sizeof (USER_HEADER) - 1) == 0) {
+ /* XXX: use this header somehow */
+ task->user = memory_pool_fstrdup (task->task_pool, line);
+ }
+ else {
+ return -1;
+ }
+ break;
+ default:
+ msg_info ("parse_header: wrong header: %s", headern);
+ return -1;
}
return 0;
}
int
-read_rspamd_input_line (struct worker_task *task, f_str_t *line)
+read_rspamd_input_line (struct worker_task *task, f_str_t * line)
{
switch (task->state) {
- case READ_COMMAND:
- return parse_command (task, line);
- break;
- case READ_HEADER:
- return parse_header (task, line);
- break;
- default:
- return -1;
+ case READ_COMMAND:
+ return parse_command (task, line);
+ break;
+ case READ_HEADER:
+ return parse_header (task, line);
+ break;
+ default:
+ return -1;
}
return -1;
}
struct metric_callback_data {
- struct worker_task *task;
- char *log_buf;
- int log_offset;
- int log_size;
+ struct worker_task *task;
+ char *log_buf;
+ int log_offset;
+ int log_size;
};
static void
show_url_header (struct worker_task *task)
{
- int r = 0;
- char outbuf[OUTBUFSIZ], c;
- struct uri *url;
- GList *cur;
- f_str_t host;
+ int r = 0;
+ char outbuf[OUTBUFSIZ], c;
+ struct uri *url;
+ GList *cur;
+ f_str_t host;
r = snprintf (outbuf, sizeof (outbuf), "Urls: ");
cur = task->urls;
@@ -402,7 +402,9 @@ show_url_header (struct worker_task *task)
}
/* Do header folding */
if (host.len + r >= OUTBUFSIZ - 3) {
- outbuf[r ++] = '\r'; outbuf[r ++] = '\n'; outbuf[r] = ' ';
+ outbuf[r++] = '\r';
+ outbuf[r++] = '\n';
+ outbuf[r] = ' ';
rspamd_dispatcher_write (task->dispatcher, outbuf, r, TRUE, FALSE);
r = 0;
}
@@ -429,12 +431,12 @@ show_url_header (struct worker_task *task)
static void
metric_symbols_callback (gpointer key, gpointer value, void *user_data)
{
- struct metric_callback_data *cd = (struct metric_callback_data *)user_data;
- struct worker_task *task = cd->task;
- int r = 0;
- char outbuf[OUTBUFSIZ];
- struct symbol *s = (struct symbol *)value;
- GList *cur;
+ struct metric_callback_data *cd = (struct metric_callback_data *)user_data;
+ struct worker_task *task = cd->task;
+ int r = 0;
+ char outbuf[OUTBUFSIZ];
+ struct symbol *s = (struct symbol *)value;
+ GList *cur;
if (s->options) {
r = snprintf (outbuf, OUTBUFSIZ, "Symbol: %s; ", (char *)key);
@@ -457,8 +459,7 @@ metric_symbols_callback (gpointer key, gpointer value, void *user_data)
else {
r = snprintf (outbuf, OUTBUFSIZ, "Symbol: %s" CRLF, (char *)key);
}
- cd->log_offset += snprintf (cd->log_buf + cd->log_offset, cd->log_size - cd->log_offset,
- "%s,", (char *)key);
+ cd->log_offset += snprintf (cd->log_buf + cd->log_offset, cd->log_size - cd->log_offset, "%s,", (char *)key);
rspamd_dispatcher_write (task->dispatcher, outbuf, r, FALSE, FALSE);
}
@@ -466,9 +467,9 @@ metric_symbols_callback (gpointer key, gpointer value, void *user_data)
static void
show_metric_symbols (struct metric_result *metric_res, struct metric_callback_data *cd)
{
- int r = 0;
- GList *symbols, *cur;
- char outbuf[OUTBUFSIZ];
+ int r = 0;
+ GList *symbols, *cur;
+ char outbuf[OUTBUFSIZ];
if (cd->task->proto == SPAMC_PROTO) {
symbols = g_hash_table_get_keys (metric_res->symbols);
@@ -497,15 +498,15 @@ show_metric_symbols (struct metric_result *metric_res, struct metric_callback_da
static void
show_metric_result (gpointer metric_name, gpointer metric_value, void *user_data)
{
- struct metric_callback_data *cd = (struct metric_callback_data *)user_data;
- struct worker_task *task = cd->task;
- int r;
- char outbuf[OUTBUFSIZ];
- struct metric_result *metric_res = (struct metric_result *)metric_value;
- struct metric *m;
- int is_spam = 0;
- double ms;
-
+ struct metric_callback_data *cd = (struct metric_callback_data *)user_data;
+ struct worker_task *task = cd->task;
+ int r;
+ char outbuf[OUTBUFSIZ];
+ struct metric_result *metric_res = (struct metric_result *)metric_value;
+ struct metric *m;
+ int is_spam = 0;
+ double ms;
+
if (metric_name == NULL || metric_value == NULL) {
m = g_hash_table_lookup (task->cfg->metrics, "default");
@@ -513,15 +514,12 @@ show_metric_result (gpointer metric_name, gpointer metric_value, void *user_data
ms = m->required_score;
}
if (task->proto == SPAMC_PROTO) {
- r = snprintf (outbuf, sizeof (outbuf), "Spam: False ; 0 / %.2f" CRLF,
- m != NULL ? ms : 0);
+ r = snprintf (outbuf, sizeof (outbuf), "Spam: False ; 0 / %.2f" CRLF, m != NULL ? ms : 0);
}
else {
- r = snprintf (outbuf, sizeof (outbuf), "Metric: default; False; 0 / %.2f" CRLF,
- m != NULL ? ms : 0);
+ r = snprintf (outbuf, sizeof (outbuf), "Metric: default; False; 0 / %.2f" CRLF, m != NULL ? ms : 0);
}
- cd->log_offset += snprintf (cd->log_buf + cd->log_offset, cd->log_size - cd->log_offset,
- "(%s: F: [0/%.2f] [", "default", m != NULL ? ms : 0);
+ cd->log_offset += snprintf (cd->log_buf + cd->log_offset, cd->log_size - cd->log_offset, "(%s: F: [0/%.2f] [", "default", m != NULL ? ms : 0);
}
else {
if (!check_metric_settings (task, metric_res->metric, &ms)) {
@@ -531,16 +529,12 @@ show_metric_result (gpointer metric_name, gpointer metric_value, void *user_data
is_spam = 1;
}
if (task->proto == SPAMC_PROTO) {
- r = snprintf (outbuf, sizeof (outbuf), "Spam: %s ; %.2f / %.2f" CRLF,
- (is_spam) ? "True" : "False", metric_res->score, ms);
+ r = snprintf (outbuf, sizeof (outbuf), "Spam: %s ; %.2f / %.2f" CRLF, (is_spam) ? "True" : "False", metric_res->score, ms);
}
else {
- r = snprintf (outbuf, sizeof (outbuf), "Metric: %s; %s; %.2f / %.2f" CRLF, (char *)metric_name,
- (is_spam) ? "True" : "False", metric_res->score, ms);
+ r = snprintf (outbuf, sizeof (outbuf), "Metric: %s; %s; %.2f / %.2f" CRLF, (char *)metric_name, (is_spam) ? "True" : "False", metric_res->score, ms);
}
- cd->log_offset += snprintf (cd->log_buf + cd->log_offset, cd->log_size - cd->log_offset,
- "(%s: %s: [%.2f/%.2f] [", (char *)metric_name, is_spam ? "T" : "F",
- metric_res->score, ms);
+ cd->log_offset += snprintf (cd->log_buf + cd->log_offset, cd->log_size - cd->log_offset, "(%s: %s: [%.2f/%.2f] [", (char *)metric_name, is_spam ? "T" : "F", metric_res->score, ms);
}
if (task->cmd == CMD_PROCESS) {
#ifndef GMIME24
@@ -557,16 +551,16 @@ show_metric_result (gpointer metric_name, gpointer metric_value, void *user_data
}
}
cd->log_offset += snprintf (cd->log_buf + cd->log_offset, cd->log_size - cd->log_offset, "]), len: %ld, time: %sms",
- (long int)task->msg->len, calculate_check_time (&task->ts, task->cfg->clock_res));
+ (long int)task->msg->len, calculate_check_time (&task->ts, task->cfg->clock_res));
}
static int
write_check_reply (struct worker_task *task)
{
- int r;
- char outbuf[OUTBUFSIZ], logbuf[OUTBUFSIZ];
- struct metric_result *metric_res;
- struct metric_callback_data cd;
+ int r;
+ char outbuf[OUTBUFSIZ], logbuf[OUTBUFSIZ];
+ struct metric_result *metric_res;
+ struct metric_callback_data cd;
r = snprintf (outbuf, sizeof (outbuf), "%s 0 %s" CRLF, (task->proto == SPAMC_PROTO) ? SPAMD_REPLY_BANNER : RSPAMD_REPLY_BANNER, "OK");
rspamd_dispatcher_write (task->dispatcher, outbuf, r, TRUE, FALSE);
@@ -584,7 +578,7 @@ write_check_reply (struct worker_task *task)
show_metric_result (NULL, NULL, (void *)&cd);
}
else {
- show_metric_result ((gpointer)"default", (gpointer)metric_res, (void *)&cd);
+ show_metric_result ((gpointer) "default", (gpointer) metric_res, (void *)&cd);
}
}
else {
@@ -595,7 +589,7 @@ write_check_reply (struct worker_task *task)
show_metric_result (NULL, NULL, (void *)&cd);
}
else {
- show_metric_result ((gpointer)"default", (gpointer)metric_res, (void *)&cd);
+ show_metric_result ((gpointer) "default", (gpointer) metric_res, (void *)&cd);
}
g_hash_table_remove (task->results, "default");
@@ -613,14 +607,13 @@ write_check_reply (struct worker_task *task)
static int
write_process_reply (struct worker_task *task)
{
- int r;
- char *outmsg;
- char outbuf[OUTBUFSIZ], logbuf[OUTBUFSIZ];
- struct metric_result *metric_res;
- struct metric_callback_data cd;
+ int r;
+ char *outmsg;
+ char outbuf[OUTBUFSIZ], logbuf[OUTBUFSIZ];
+ struct metric_result *metric_res;
+ struct metric_callback_data cd;
- r = snprintf (outbuf, sizeof (outbuf), "%s 0 %s" CRLF "Content-Length: %zd" CRLF CRLF,
- (task->proto == SPAMC_PROTO) ? SPAMD_REPLY_BANNER : RSPAMD_REPLY_BANNER, "OK", task->msg->len);
+ r = snprintf (outbuf, sizeof (outbuf), "%s 0 %s" CRLF "Content-Length: %zd" CRLF CRLF, (task->proto == SPAMC_PROTO) ? SPAMD_REPLY_BANNER : RSPAMD_REPLY_BANNER, "OK", task->msg->len);
cd.task = task;
cd.log_buf = logbuf;
@@ -635,7 +628,7 @@ write_process_reply (struct worker_task *task)
show_metric_result (NULL, NULL, (void *)&cd);
}
else {
- show_metric_result ((gpointer)"default", (gpointer)metric_res, (void *)&cd);
+ show_metric_result ((gpointer) "default", (gpointer) metric_res, (void *)&cd);
}
}
else {
@@ -646,7 +639,7 @@ write_process_reply (struct worker_task *task)
show_metric_result (NULL, NULL, (void *)&cd);
}
else {
- show_metric_result ((gpointer)"default", (gpointer)metric_res, (void *)&cd);
+ show_metric_result ((gpointer) "default", (gpointer) metric_res, (void *)&cd);
}
g_hash_table_remove (task->results, "default");
@@ -661,7 +654,7 @@ write_process_reply (struct worker_task *task)
rspamd_dispatcher_write (task->dispatcher, outbuf, r, TRUE, FALSE);
rspamd_dispatcher_write (task->dispatcher, outmsg, strlen (outmsg), FALSE, TRUE);
- memory_pool_add_destructor (task->task_pool, (pool_destruct_func)g_free, outmsg);
+ memory_pool_add_destructor (task->task_pool, (pool_destruct_func) g_free, outmsg);
return 0;
}
@@ -669,8 +662,8 @@ write_process_reply (struct worker_task *task)
int
write_reply (struct worker_task *task)
{
- int r;
- char outbuf[OUTBUFSIZ];
+ int r;
+ char outbuf[OUTBUFSIZ];
msg_debug ("write_reply: writing reply to client");
if (task->error_code != 0) {
@@ -680,8 +673,7 @@ write_reply (struct worker_task *task)
msg_debug ("write_reply: writing error: %s", outbuf);
}
else {
- r = snprintf (outbuf, sizeof (outbuf), "%s %d %s" CRLF "%s: %s" CRLF CRLF, RSPAMD_REPLY_BANNER, task->error_code,
- SPAMD_ERROR, ERROR_HEADER, task->last_error);
+ r = snprintf (outbuf, sizeof (outbuf), "%s %d %s" CRLF "%s: %s" CRLF CRLF, RSPAMD_REPLY_BANNER, task->error_code, SPAMD_ERROR, ERROR_HEADER, task->last_error);
msg_debug ("write_reply: writing error: %s", outbuf);
}
/* Write to bufferevent error message */
@@ -689,36 +681,35 @@ write_reply (struct worker_task *task)
}
else {
switch (task->cmd) {
- case CMD_REPORT_IFSPAM:
- case CMD_REPORT:
- case CMD_CHECK:
- case CMD_SYMBOLS:
- return write_check_reply (task);
- break;
- case CMD_PROCESS:
- return write_process_reply (task);
- break;
- case CMD_SKIP:
- r = snprintf (outbuf, sizeof (outbuf), "%s 0 %s" CRLF, (task->proto == SPAMC_PROTO) ? SPAMD_REPLY_BANNER : RSPAMD_REPLY_BANNER,
- SPAMD_OK);
- rspamd_dispatcher_write (task->dispatcher, outbuf, r, FALSE, FALSE);
- break;
- case CMD_PING:
- r = snprintf (outbuf, sizeof (outbuf), "%s 0 PONG" CRLF, (task->proto == SPAMC_PROTO) ? SPAMD_REPLY_BANNER : RSPAMD_REPLY_BANNER);
- rspamd_dispatcher_write (task->dispatcher, outbuf, r, FALSE, FALSE);
- break;
- case CMD_OTHER:
- return task->custom_cmd->func (task);
+ case CMD_REPORT_IFSPAM:
+ case CMD_REPORT:
+ case CMD_CHECK:
+ case CMD_SYMBOLS:
+ return write_check_reply (task);
+ break;
+ case CMD_PROCESS:
+ return write_process_reply (task);
+ break;
+ case CMD_SKIP:
+ r = snprintf (outbuf, sizeof (outbuf), "%s 0 %s" CRLF, (task->proto == SPAMC_PROTO) ? SPAMD_REPLY_BANNER : RSPAMD_REPLY_BANNER, SPAMD_OK);
+ rspamd_dispatcher_write (task->dispatcher, outbuf, r, FALSE, FALSE);
+ break;
+ case CMD_PING:
+ r = snprintf (outbuf, sizeof (outbuf), "%s 0 PONG" CRLF, (task->proto == SPAMC_PROTO) ? SPAMD_REPLY_BANNER : RSPAMD_REPLY_BANNER);
+ rspamd_dispatcher_write (task->dispatcher, outbuf, r, FALSE, FALSE);
+ break;
+ case CMD_OTHER:
+ return task->custom_cmd->func (task);
}
}
return 0;
}
-void
+void
register_protocol_command (const char *name, protocol_reply_func func)
{
- struct custom_command *cmd;
+ struct custom_command *cmd;
cmd = g_malloc (sizeof (struct custom_command));
cmd->name = name;