소스 검색

Fix issues with scanning messages via controller.

tags/0.7.0
Vsevolod Stakhov 10 년 전
부모
커밋
e7507e024d
4개의 변경된 파일26개의 추가작업 그리고 11개의 파일을 삭제
  1. 15
    8
      src/controller.c
  2. 3
    3
      src/libmime/protocol.c
  3. 7
    0
      src/libmime/protocol.h
  4. 1
    0
      src/libserver/task.c

+ 15
- 8
src/controller.c 파일 보기



if (!learn_task_spam (session->cl, task, session->is_spam, &err)) { if (!learn_task_spam (session->cl, task, session->is_spam, &err)) {
rspamd_controller_send_error (conn_ent, 500 + err->code, err->message); rspamd_controller_send_error (conn_ent, 500 + err->code, err->message);
rspamd_http_connection_unref (conn_ent->conn);
return TRUE; return TRUE;
} }
/* Successful learn */ /* Successful learn */
rspamd_controller_send_string (conn_ent, "{\"success\":true}"); rspamd_controller_send_string (conn_ent, "{\"success\":true}");
rspamd_http_connection_unref (conn_ent->conn);


return TRUE; return TRUE;
} }
{ {
struct rspamd_task *task = ud; struct rspamd_task *task = ud;
struct rspamd_http_connection_entry *conn_ent; struct rspamd_http_connection_entry *conn_ent;
struct rspamd_http_message *msg;


conn_ent = task->fin_arg; conn_ent = task->fin_arg;
task->http_conn = conn_ent->conn;
rspamd_protocol_write_reply (task);
msg = rspamd_http_new_message (HTTP_RESPONSE);
msg->date = time (NULL);
msg->code = 200;
rspamd_protocol_http_reply (msg, task);
rspamd_http_connection_reset (conn_ent->conn);
rspamd_http_connection_write_message (conn_ent->conn, msg, NULL,
"application/json", conn_ent, conn_ent->conn->fd, conn_ent->rt->ptv,
conn_ent->rt->ev_base);
conn_ent->is_reply = TRUE; conn_ent->is_reply = TRUE;
rspamd_http_connection_unref (conn_ent->conn);


return TRUE; return TRUE;
} }
} }


task = rspamd_task_new (session->ctx->worker); task = rspamd_task_new (session->ctx->worker);
task->ev_base = session->ctx->ev_base;
task->msg = msg->body; task->msg = msg->body;


task->resolver = ctx->resolver; task->resolver = ctx->resolver;
task->ev_base = ctx->ev_base; task->ev_base = ctx->ev_base;


rspamd_http_connection_ref (conn_ent->conn);
task->s = new_async_session (session->pool, rspamd_controller_learn_fin_task, NULL, task->s = new_async_session (session->pool, rspamd_controller_learn_fin_task, NULL,
rspamd_task_free_hard, task); rspamd_task_free_hard, task);
task->s->wanna_die = TRUE; task->s->wanna_die = TRUE;
task->fin_arg = conn_ent; task->fin_arg = conn_ent;
task->http_conn = rspamd_http_connection_ref (conn_ent->conn);;
task->sock = conn_ent->conn->fd;



if (!rspamd_task_process (task, msg, NULL, FALSE)) { if (!rspamd_task_process (task, msg, NULL, FALSE)) {
msg_warn ("filters cannot be processed for %s", task->message_id); msg_warn ("filters cannot be processed for %s", task->message_id);
task->resolver = ctx->resolver; task->resolver = ctx->resolver;
task->ev_base = ctx->ev_base; task->ev_base = ctx->ev_base;


rspamd_http_connection_ref (conn_ent->conn);
task->s = new_async_session (session->pool, rspamd_controller_check_fin_task, NULL, task->s = new_async_session (session->pool, rspamd_controller_check_fin_task, NULL,
rspamd_task_free_hard, task); rspamd_task_free_hard, task);
task->s->wanna_die = TRUE; task->s->wanna_die = TRUE;
task->fin_arg = conn_ent; task->fin_arg = conn_ent;
task->http_conn = rspamd_http_connection_ref (conn_ent->conn);
task->sock = conn_ent->conn->fd;


if (!rspamd_task_process (task, msg, NULL, FALSE)) { if (!rspamd_task_process (task, msg, NULL, FALSE)) {
msg_warn ("filters cannot be processed for %s", task->message_id); msg_warn ("filters cannot be processed for %s", task->message_id);

+ 3
- 3
src/libmime/protocol.c 파일 보기

g_string_append_printf (out, "Message-ID: %s\r\n", task->message_id); g_string_append_printf (out, "Message-ID: %s\r\n", task->message_id);
} }


static void
write_check_reply (struct rspamd_http_message *msg, struct rspamd_task *task)
void
rspamd_protocol_http_reply (struct rspamd_http_message *msg, struct rspamd_task *task)
{ {
GString *logbuf; GString *logbuf;
struct metric_result *metric_res; struct metric_result *metric_res;
case CMD_SYMBOLS: case CMD_SYMBOLS:
case CMD_PROCESS: case CMD_PROCESS:
case CMD_SKIP: case CMD_SKIP:
write_check_reply (msg, task);
rspamd_protocol_http_reply (msg, task);
break; break;
case CMD_PING: case CMD_PING:
msg->body = g_string_new ("pong"); msg->body = g_string_new ("pong");

+ 7
- 0
src/libmime/protocol.h 파일 보기

*/ */
gboolean rspamd_protocol_handle_request (struct rspamd_task *task, struct rspamd_http_message *msg); gboolean rspamd_protocol_handle_request (struct rspamd_task *task, struct rspamd_http_message *msg);


/**
* Write task results to http message
* @param msg
* @param task
*/
void rspamd_protocol_http_reply (struct rspamd_http_message *msg, struct rspamd_task *task);

/** /**
* Write reply for specified task command * Write reply for specified task command
* @param task task object * @param task task object

+ 1
- 0
src/libserver/task.c 파일 보기

new_task->urls); new_task->urls);
new_task->sock = -1; new_task->sock = -1;
new_task->is_mime = TRUE; new_task->is_mime = TRUE;
new_task->is_json = TRUE;
new_task->pre_result.action = METRIC_ACTION_NOACTION; new_task->pre_result.action = METRIC_ACTION_NOACTION;


new_task->message_id = new_task->queue_id = "undef"; new_task->message_id = new_task->queue_id = "undef";

Loading…
취소
저장