summaryrefslogtreecommitdiffstats
path: root/src/libserver/buffer.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2015-10-06 15:55:24 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2015-10-06 15:55:24 +0100
commitbe1c6fd92d9eadcde3efde589c490fa854f6071b (patch)
treed52cbbe9bd304e95f17de1a8035ef91de2797dc9 /src/libserver/buffer.c
parentaac916db77b6ae58b7c0186d764e97a25482017c (diff)
downloadrspamd-be1c6fd92d9eadcde3efde589c490fa854f6071b.tar.gz
rspamd-be1c6fd92d9eadcde3efde589c490fa854f6071b.zip
Fix buffers code.
Diffstat (limited to 'src/libserver/buffer.c')
-rw-r--r--src/libserver/buffer.c60
1 files changed, 21 insertions, 39 deletions
diff --git a/src/libserver/buffer.c b/src/libserver/buffer.c
index e4268863c..0875de300 100644
--- a/src/libserver/buffer.c
+++ b/src/libserver/buffer.c
@@ -310,14 +310,27 @@ write_buffers (gint fd, rspamd_io_dispatcher_t * d, gboolean is_delayed)
return TRUE;
}
+static struct rspamd_buffer_buf *
+allocate_buffer (rspamd_mempool_t *pool, gsize size)
+{
+ struct rspamd_buffer_buf *b;
+
+ b = rspamd_mempool_alloc_tmp (pool, sizeof (*b));
+ b->begin = rspamd_mempool_alloc_tmp (pool, size);
+ b->size = size;
+ b->len = 0;
+
+ return b;
+}
+
static void
read_buffers (gint fd, rspamd_io_dispatcher_t * d, gboolean skip_read)
{
ssize_t r;
GError *err = NULL;
- rspamd_fstring_t res;
- gchar *c, *b;
- gchar *end;
+ rspamd_ftok_t res;
+ guchar *c, *b;
+ guchar *end;
size_t len;
enum io_policy saved_policy;
@@ -330,10 +343,10 @@ read_buffers (gint fd, rspamd_io_dispatcher_t * d, gboolean skip_read)
d->in_buf =
rspamd_mempool_alloc_tmp (d->pool, sizeof (rspamd_buffer_t));
if (d->policy == BUFFER_LINE || d->policy == BUFFER_ANY) {
- d->in_buf->data = rspamd_fstralloc_tmp (d->pool, d->default_buf_size);
+ d->in_buf->data = allocate_buffer (d->pool, d->default_buf_size);
}
else {
- d->in_buf->data = rspamd_fstralloc_tmp (d->pool, d->nchars + 1);
+ d->in_buf->data = allocate_buffer (d->pool, d->nchars + 1);
}
d->in_buf->pos = d->in_buf->data->begin;
}
@@ -657,7 +670,7 @@ rspamd_set_dispatcher_policy (rspamd_io_dispatcher_t * d,
enum io_policy policy,
size_t nchars)
{
- rspamd_fstring_t *tmp;
+ struct rspamd_buffer_buf *tmp;
gint t;
if (d->policy != policy || nchars != d->nchars) {
@@ -666,7 +679,7 @@ rspamd_set_dispatcher_policy (rspamd_io_dispatcher_t * d,
/* Resize input buffer if needed */
if (policy == BUFFER_CHARACTER && nchars != 0) {
if (d->in_buf && d->in_buf->data->size < nchars) {
- tmp = rspamd_fstralloc_tmp (d->pool, d->nchars + 1);
+ tmp = allocate_buffer (d->pool, d->nchars + 1);
memcpy (tmp->begin, d->in_buf->data->begin,
d->in_buf->data->len);
t = d->in_buf->pos - d->in_buf->data->begin;
@@ -677,7 +690,7 @@ rspamd_set_dispatcher_policy (rspamd_io_dispatcher_t * d,
}
else if (policy == BUFFER_LINE || policy == BUFFER_ANY) {
if (d->in_buf && d->nchars < d->default_buf_size) {
- tmp = rspamd_fstralloc_tmp (d->pool, d->default_buf_size);
+ tmp = allocate_buffer (d->pool, d->default_buf_size);
memcpy (tmp->begin, d->in_buf->data->begin,
d->in_buf->data->len);
t = d->in_buf->pos - d->in_buf->data->begin;
@@ -732,33 +745,6 @@ rspamd_dispatcher_write (rspamd_io_dispatcher_t * d,
}
gboolean
-rspamd_dispatcher_write_string (rspamd_io_dispatcher_t *d,
- GString *str,
- gboolean delayed,
- gboolean free_on_write)
-{
- struct rspamd_out_buffer_s *newbuf;
-
- newbuf = g_slice_alloc (sizeof (struct rspamd_out_buffer_s));
- newbuf->data = str;
- newbuf->allocated = free_on_write;
-
- APPEND_OUT_BUFFER (d, newbuf);
-
- if (!delayed) {
- debug_ip ("plan write event");
- return write_buffers (d->fd, d, FALSE);
- }
- /* Otherwise plan write event */
- event_del (d->ev);
- event_set (d->ev, d->fd, EV_WRITE, dispatcher_cb, (void *)d);
- event_base_set (d->ev_base, d->ev);
- event_add (d->ev, d->tv);
-
- return TRUE;
-}
-
-gboolean
rspamd_dispatcher_sendfile (rspamd_io_dispatcher_t *d, gint fd, size_t len)
{
if (lseek (fd, 0, SEEK_SET) == -1) {
@@ -824,7 +810,3 @@ rspamd_dispacther_cleanup (rspamd_io_dispatcher_t *d)
}
#undef debug_ip
-
-/*
- * vi:ts=4
- */