aboutsummaryrefslogtreecommitdiffstats
path: root/src/libserver
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2016-06-10 16:38:29 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2016-06-10 16:38:29 +0100
commit5bbd698d9649a09e1992caef99b1482c62a5a54f (patch)
tree3c9032073c44c175b3009e99a30408c1693defe0 /src/libserver
parentde6e99a081384da39d119e15375febf0028cea9d (diff)
downloadrspamd-5bbd698d9649a09e1992caef99b1482c62a5a54f.tar.gz
rspamd-5bbd698d9649a09e1992caef99b1482c62a5a54f.zip
[Rework] Finish rework for the rest of places that use HTTP
Diffstat (limited to 'src/libserver')
-rw-r--r--src/libserver/protocol.c24
-rw-r--r--src/libserver/rspamd_control.c15
-rw-r--r--src/libserver/worker_util.c17
3 files changed, 36 insertions, 20 deletions
diff --git a/src/libserver/protocol.c b/src/libserver/protocol.c
index a48de05dc..becaca01b 100644
--- a/src/libserver/protocol.c
+++ b/src/libserver/protocol.c
@@ -21,6 +21,7 @@
#include "message.h"
#include "utlist.h"
#include "http.h"
+#include "http_private.h"
#include "email_addr.h"
#include "worker_private.h"
#include "cryptobox.h"
@@ -270,11 +271,10 @@ rspamd_protocol_handle_headers (struct rspamd_task *task,
rspamd_fstring_t *hn, *hv;
rspamd_ftok_t *hn_tok, *hv_tok, srch;
gboolean fl, has_ip = FALSE;
- struct rspamd_http_header *h;
+ struct rspamd_http_header *h, *htmp;
struct rspamd_email_address *addr;
- LL_FOREACH (msg->headers, h)
- {
+ HASH_ITER (hh, msg->headers, h, htmp) {
hn = rspamd_fstring_new_init (h->name->begin, h->name->len);
hv = rspamd_fstring_new_init (h->value->begin, h->value->len);
hn_tok = rspamd_ftok_map (hn);
@@ -1017,6 +1017,7 @@ rspamd_protocol_http_reply (struct rspamd_http_message *msg,
const struct rspamd_re_cache_stat *restat;
gpointer h, v;
ucl_object_t *top = NULL;
+ rspamd_fstring_t *reply;
gint action;
/* Write custom headers */
@@ -1050,21 +1051,22 @@ rspamd_protocol_http_reply (struct rspamd_http_message *msg,
restat->bytes_scanned);
}
- msg->body = rspamd_fstring_sized_new (1000);
+ reply = rspamd_fstring_sized_new (1000);
if (msg->method < HTTP_SYMBOLS && !RSPAMD_TASK_IS_SPAMC (task)) {
- rspamd_ucl_emit_fstring (top, UCL_EMIT_JSON_COMPACT, &msg->body);
+ rspamd_ucl_emit_fstring (top, UCL_EMIT_JSON_COMPACT, &reply);
}
else {
if (RSPAMD_TASK_IS_SPAMC (task)) {
- rspamd_ucl_tospamc_output (top, &msg->body);
+ rspamd_ucl_tospamc_output (top, &reply);
}
else {
- rspamd_ucl_torspamc_output (top, &msg->body);
+ rspamd_ucl_torspamc_output (top, &reply);
}
}
ucl_object_unref (top);
+ rspamd_http_message_set_body_from_fstring_steal (msg, reply);
if (!(task->flags & RSPAMD_TASK_FLAG_NO_STAT)) {
/* Update stat for default metric */
@@ -1187,6 +1189,7 @@ rspamd_protocol_write_reply (struct rspamd_task *task)
struct rspamd_http_message *msg;
const gchar *ctype = "application/json";
struct rspamd_abstract_worker_ctx *actx;
+ rspamd_fstring_t *reply;
msg = rspamd_http_new_message (HTTP_RESPONSE);
@@ -1218,9 +1221,10 @@ rspamd_protocol_write_reply (struct rspamd_task *task)
ucl_object_insert_key (top,
ucl_object_fromstring (g_quark_to_string (task->err->domain)),
"error_domain", 0, false);
- msg->body = rspamd_fstring_sized_new (256);
- rspamd_ucl_emit_fstring (top, UCL_EMIT_JSON_COMPACT, &msg->body);
+ reply = rspamd_fstring_sized_new (256);
+ rspamd_ucl_emit_fstring (top, UCL_EMIT_JSON_COMPACT, &reply);
ucl_object_unref (top);
+ rspamd_http_message_set_body_from_fstring_steal (msg, reply);
}
else {
msg->status = rspamd_fstring_new_init ("OK", 2);
@@ -1243,7 +1247,7 @@ rspamd_protocol_write_reply (struct rspamd_task *task)
}
break;
case CMD_PING:
- msg->body = rspamd_fstring_new_init ("pong" CRLF, 6);
+ rspamd_http_message_set_body (msg, "pong" CRLF, 6);
ctype = "text/plain";
break;
case CMD_OTHER:
diff --git a/src/libserver/rspamd_control.c b/src/libserver/rspamd_control.c
index 8c0a150e2..a925c0bb1 100644
--- a/src/libserver/rspamd_control.c
+++ b/src/libserver/rspamd_control.c
@@ -16,7 +16,8 @@
#include "config.h"
#include "rspamd.h"
#include "rspamd_control.h"
-#include "http.h"
+#include "libutil/http.h"
+#include "libutil/http_private.h"
#include "unix-std.h"
#include "utlist.h"
@@ -107,6 +108,7 @@ rspamd_control_send_error (struct rspamd_control_session *session,
gint code, const gchar *error_msg, ...)
{
struct rspamd_http_message *msg;
+ rspamd_fstring_t *reply;
va_list args;
msg = rspamd_http_new_message (HTTP_RESPONSE);
@@ -118,8 +120,9 @@ rspamd_control_send_error (struct rspamd_control_session *session,
msg->date = time (NULL);
msg->code = code;
- msg->body = rspamd_fstring_new ();
- rspamd_printf_fstring (&msg->body, "{\"error\":\"%V\"}", msg->status);
+ reply = rspamd_fstring_sized_new (msg->status->len + 16);
+ rspamd_printf_fstring (&reply, "{\"error\":\"%V\"}", msg->status);
+ rspamd_http_message_set_body_from_fstring_steal (msg, reply);
rspamd_http_connection_reset (session->conn);
rspamd_http_connection_write_message (session->conn,
msg,
@@ -136,13 +139,15 @@ rspamd_control_send_ucl (struct rspamd_control_session *session,
ucl_object_t *obj)
{
struct rspamd_http_message *msg;
+ rspamd_fstring_t *reply;
msg = rspamd_http_new_message (HTTP_RESPONSE);
msg->date = time (NULL);
msg->code = 200;
msg->status = rspamd_fstring_new_init ("OK", 2);
- msg->body = rspamd_fstring_sized_new (BUFSIZ);
- rspamd_ucl_emit_fstring (obj, UCL_EMIT_JSON_COMPACT, &msg->body);
+ reply = rspamd_fstring_sized_new (BUFSIZ);
+ rspamd_ucl_emit_fstring (obj, UCL_EMIT_JSON_COMPACT, &reply);
+ rspamd_http_message_set_body_from_fstring_steal (msg, reply);
rspamd_http_connection_reset (session->conn);
rspamd_http_connection_write_message (session->conn,
msg,
diff --git a/src/libserver/worker_util.c b/src/libserver/worker_util.c
index bf596a343..9924671cf 100644
--- a/src/libserver/worker_util.c
+++ b/src/libserver/worker_util.c
@@ -24,6 +24,7 @@
#include "rspamd_control.h"
#include "libutil/map.h"
#include "libutil/map_private.h"
+#include "libutil/http_private.h"
#ifdef WITH_GPERF_TOOLS
#include <gperftools/profiler.h>
@@ -352,6 +353,7 @@ rspamd_controller_send_error (struct rspamd_http_connection_entry *entry,
{
struct rspamd_http_message *msg;
va_list args;
+ rspamd_fstring_t *reply;
msg = rspamd_http_new_message (HTTP_RESPONSE);
@@ -362,8 +364,9 @@ rspamd_controller_send_error (struct rspamd_http_connection_entry *entry,
msg->date = time (NULL);
msg->code = code;
- msg->body = rspamd_fstring_new ();
- rspamd_printf_fstring (&msg->body, "{\"error\":\"%V\"}", msg->status);
+ reply = rspamd_fstring_sized_new (msg->status->len + 16);
+ rspamd_printf_fstring (&reply, "{\"error\":\"%V\"}", msg->status);
+ rspamd_http_message_set_body_from_fstring_steal (msg, reply);
rspamd_http_connection_reset (entry->conn);
rspamd_http_connection_write_message (entry->conn,
msg,
@@ -381,12 +384,14 @@ rspamd_controller_send_string (struct rspamd_http_connection_entry *entry,
const gchar *str)
{
struct rspamd_http_message *msg;
+ rspamd_fstring_t *reply;
msg = rspamd_http_new_message (HTTP_RESPONSE);
msg->date = time (NULL);
msg->code = 200;
msg->status = rspamd_fstring_new_init ("OK", 2);
- msg->body = rspamd_fstring_new_init (str, strlen (str));
+ reply = rspamd_fstring_new_init (str, strlen (str));
+ rspamd_http_message_set_body_from_fstring_steal (msg, reply);
rspamd_http_connection_reset (entry->conn);
rspamd_http_connection_write_message (entry->conn,
msg,
@@ -404,13 +409,15 @@ rspamd_controller_send_ucl (struct rspamd_http_connection_entry *entry,
ucl_object_t *obj)
{
struct rspamd_http_message *msg;
+ rspamd_fstring_t *reply;
msg = rspamd_http_new_message (HTTP_RESPONSE);
msg->date = time (NULL);
msg->code = 200;
msg->status = rspamd_fstring_new_init ("OK", 2);
- msg->body = rspamd_fstring_sized_new (BUFSIZ);
- rspamd_ucl_emit_fstring (obj, UCL_EMIT_JSON_COMPACT, &msg->body);
+ reply = rspamd_fstring_sized_new (BUFSIZ);
+ rspamd_ucl_emit_fstring (obj, UCL_EMIT_JSON_COMPACT, &reply);
+ rspamd_http_message_set_body_from_fstring_steal (msg, reply);
rspamd_http_connection_reset (entry->conn);
rspamd_http_connection_write_message (entry->conn,
msg,