summaryrefslogtreecommitdiffstats
path: root/src/libserver
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2016-10-17 15:34:19 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2016-10-17 15:34:19 +0100
commited77fe58566345ed84bd4db9fc5313c246e5ff99 (patch)
treee9768223cfdc017544a29e4030ff92bb5ddac429 /src/libserver
parent463d6092aabb1b4721833f884d04dbb67570fa0e (diff)
downloadrspamd-ed77fe58566345ed84bd4db9fc5313c246e5ff99.tar.gz
rspamd-ed77fe58566345ed84bd4db9fc5313c246e5ff99.zip
[Rework] More cleanup actions
Diffstat (limited to 'src/libserver')
-rw-r--r--src/libserver/CMakeLists.txt2
-rw-r--r--src/libserver/proxy.c284
-rw-r--r--src/libserver/proxy.h66
3 files changed, 0 insertions, 352 deletions
diff --git a/src/libserver/CMakeLists.txt b/src/libserver/CMakeLists.txt
index 53e59be8a..14f82e482 100644
--- a/src/libserver/CMakeLists.txt
+++ b/src/libserver/CMakeLists.txt
@@ -1,6 +1,5 @@
# Librspamdserver
SET(LIBRSPAMDSERVERSRC
- ${CMAKE_CURRENT_SOURCE_DIR}/buffer.c
${CMAKE_CURRENT_SOURCE_DIR}/cfg_utils.c
${CMAKE_CURRENT_SOURCE_DIR}/cfg_rcl.c
${CMAKE_CURRENT_SOURCE_DIR}/composites.c
@@ -14,7 +13,6 @@ SET(LIBRSPAMDSERVERSRC
${CMAKE_CURRENT_SOURCE_DIR}/html.c
${CMAKE_CURRENT_SOURCE_DIR}/monitored.c
${CMAKE_CURRENT_SOURCE_DIR}/protocol.c
- ${CMAKE_CURRENT_SOURCE_DIR}/proxy.c
${CMAKE_CURRENT_SOURCE_DIR}/redis_pool.c
${CMAKE_CURRENT_SOURCE_DIR}/re_cache.c
${CMAKE_CURRENT_SOURCE_DIR}/roll_history.c
diff --git a/src/libserver/proxy.c b/src/libserver/proxy.c
deleted file mode 100644
index 45c766b00..000000000
--- a/src/libserver/proxy.c
+++ /dev/null
@@ -1,284 +0,0 @@
-/*-
- * Copyright 2016 Vsevolod Stakhov
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include "config.h"
-#include "rspamd.h"
-#include "proxy.h"
-#include "unix-std.h"
-
-static void rspamd_proxy_backend_handler (gint fd, gshort what, gpointer data);
-static void rspamd_proxy_client_handler (gint fd, gshort what, gpointer data);
-
-static inline GQuark
-proxy_error_quark (void)
-{
- return g_quark_from_static_string ("proxy-error");
-}
-
-void
-rspamd_proxy_close (rspamd_proxy_t *proxy)
-{
- if (!proxy->closed) {
- close (proxy->cfd);
- close (proxy->bfd);
-
- event_del (&proxy->client_ev);
- event_del (&proxy->backend_ev);
- proxy->closed = TRUE;
- }
-}
-
-static void
-rspamd_proxy_client_handler (gint fd, gshort what, gpointer data)
-{
- rspamd_proxy_t *proxy = data;
- gint r;
- GError *err = NULL;
-
- if (what == EV_READ) {
- /* Got data from client */
- event_del (&proxy->client_ev);
- r = read (proxy->cfd, proxy->buf, proxy->bufsize);
- if (r > 0) {
- /* Write this buffer to backend */
- proxy->read_len = r;
- proxy->buf_offset = 0;
- event_del (&proxy->backend_ev);
- event_set (&proxy->backend_ev,
- proxy->bfd,
- EV_WRITE,
- rspamd_proxy_backend_handler,
- proxy);
- event_add (&proxy->backend_ev, proxy->tv);
- }
- else {
- /* Error case or zero reply */
- if (r < 0) {
- /* Error case */
- g_set_error (&err,
- proxy_error_quark (), r, "Client read error: %s",
- strerror (errno));
- rspamd_proxy_close (proxy);
- proxy->err_cb (err, proxy->user_data);
- }
- else {
- /* Client closes connection */
- rspamd_proxy_close (proxy);
- proxy->err_cb (NULL, proxy->user_data);
- }
- }
- }
- else if (what == EV_WRITE) {
- /* Can write to client */
- r = write (proxy->cfd,
- proxy->buf + proxy->buf_offset,
- proxy->read_len - proxy->buf_offset);
- if (r > 0) {
- /* We wrote something */
- proxy->buf_offset += r;
- if (proxy->buf_offset == proxy->read_len) {
- /* We wrote everything */
- event_del (&proxy->client_ev);
- event_set (&proxy->client_ev,
- proxy->cfd,
- EV_READ,
- rspamd_proxy_client_handler,
- proxy);
- event_add (&proxy->client_ev, proxy->tv);
- event_del (&proxy->backend_ev);
- event_set (&proxy->backend_ev,
- proxy->bfd,
- EV_READ,
- rspamd_proxy_backend_handler,
- proxy);
- event_add (&proxy->backend_ev, proxy->tv);
- }
- else {
- /* Plan another write event */
- event_add (&proxy->backend_ev, proxy->tv);
- }
- }
- else {
- /* Error case or zero reply */
- if (r < 0) {
- /* Error case */
- g_set_error (&err,
- proxy_error_quark (), r, "Client write error: %s",
- strerror (errno));
- rspamd_proxy_close (proxy);
- proxy->err_cb (err, proxy->user_data);
- }
- else {
- /* Client closes connection */
- rspamd_proxy_close (proxy);
- proxy->err_cb (NULL, proxy->user_data);
- }
- }
- }
- else {
- /* Got timeout */
- g_set_error (&err, proxy_error_quark (), ETIMEDOUT, "Client timeout");
- rspamd_proxy_close (proxy);
- proxy->err_cb (err, proxy->user_data);
- }
-}
-
-static void
-rspamd_proxy_backend_handler (gint fd, gshort what, gpointer data)
-{
- rspamd_proxy_t *proxy = data;
- gint r;
- GError *err = NULL;
-
- if (what == EV_READ) {
- /* Got data from backend */
- event_del (&proxy->backend_ev);
- r = read (proxy->bfd, proxy->buf, proxy->bufsize);
- if (r > 0) {
- /* Write this buffer to client */
- proxy->read_len = r;
- proxy->buf_offset = 0;
- event_del (&proxy->client_ev);
- event_set (&proxy->client_ev,
- proxy->bfd,
- EV_WRITE,
- rspamd_proxy_client_handler,
- proxy);
- event_add (&proxy->client_ev, proxy->tv);
- }
- else {
- /* Error case or zero reply */
- if (r < 0) {
- /* Error case */
- g_set_error (&err,
- proxy_error_quark (), r, "Backend read error: %s",
- strerror (errno));
- rspamd_proxy_close (proxy);
- proxy->err_cb (err, proxy->user_data);
- }
- else {
- /* Client closes connection */
- rspamd_proxy_close (proxy);
- proxy->err_cb (NULL, proxy->user_data);
- }
- }
- }
- else if (what == EV_WRITE) {
- /* Can write to backend */
- r = write (proxy->bfd,
- proxy->buf + proxy->buf_offset,
- proxy->read_len - proxy->buf_offset);
- if (r > 0) {
- /* We wrote something */
- proxy->buf_offset += r;
- if (proxy->buf_offset == proxy->read_len) {
- /* We wrote everything */
- event_del (&proxy->backend_ev);
- event_set (&proxy->backend_ev,
- proxy->bfd,
- EV_READ,
- rspamd_proxy_backend_handler,
- proxy);
- event_add (&proxy->backend_ev, proxy->tv);
- event_del (&proxy->client_ev);
- event_set (&proxy->client_ev,
- proxy->cfd,
- EV_READ,
- rspamd_proxy_client_handler,
- proxy);
- event_add (&proxy->client_ev, proxy->tv);
- }
- else {
- /* Plan another write event */
- event_add (&proxy->backend_ev, proxy->tv);
- }
- }
- else {
- /* Error case or zero reply */
- if (r < 0) {
- /* Error case */
- g_set_error (&err,
- proxy_error_quark (), r, "Backend write error: %s",
- strerror (errno));
- rspamd_proxy_close (proxy);
- proxy->err_cb (err, proxy->user_data);
- }
- else {
- /* Client closes connection */
- rspamd_proxy_close (proxy);
- proxy->err_cb (NULL, proxy->user_data);
- }
- }
- }
- else {
- /* Got timeout */
- g_set_error (&err, proxy_error_quark (), ETIMEDOUT, "Client timeout");
- rspamd_proxy_close (proxy);
- proxy->err_cb (err, proxy->user_data);
- }
-}
-
-/**
- * Create new proxy between cfd and bfd
- * @param cfd client's socket
- * @param bfd backend's socket
- * @param bufsize size of exchange buffer
- * @param err_cb callback for erorrs or completing
- * @param ud user data for callback
- * @return new proxy object
- */
-rspamd_proxy_t *
-rspamd_create_proxy (gint cfd,
- gint bfd,
- rspamd_mempool_t *pool,
- struct event_base *base,
- gsize bufsize,
- struct timeval *tv,
- dispatcher_err_callback_t err_cb,
- gpointer ud)
-{
- rspamd_proxy_t *new;
-
- new = rspamd_mempool_alloc0 (pool, sizeof (rspamd_proxy_t));
-
- new->cfd = dup (cfd);
- new->bfd = dup (bfd);
- new->pool = pool;
- new->base = base;
- new->bufsize = bufsize;
- new->buf = rspamd_mempool_alloc (pool, bufsize);
- new->err_cb = err_cb;
- new->user_data = ud;
- new->tv = tv;
-
- /* Set client's and backend's interfaces to read events */
- event_set (&new->client_ev,
- new->cfd,
- EV_READ,
- rspamd_proxy_client_handler,
- new);
- event_base_set (new->base, &new->client_ev);
- event_add (&new->client_ev, new->tv);
-
- event_set (&new->backend_ev,
- new->bfd,
- EV_READ,
- rspamd_proxy_backend_handler,
- new);
- event_base_set (new->base, &new->backend_ev);
- event_add (&new->backend_ev, new->tv);
-
- return new;
-}
diff --git a/src/libserver/proxy.h b/src/libserver/proxy.h
deleted file mode 100644
index 1ba643527..000000000
--- a/src/libserver/proxy.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*-
- * Copyright 2016 Vsevolod Stakhov
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef PROXY_H_
-#define PROXY_H_
-
-#include "config.h"
-#include "buffer.h"
-#include <event.h>
-
-/**
- * @file proxy.h
- * Direct asynchronous proxy implementation
- */
-
-typedef struct rspamd_proxy_s {
- struct event client_ev; /**< event for client's communication */
- struct event backend_ev; /**< event for backend communication */
- struct event_base *base; /**< base for event operations */
- rspamd_mempool_t *pool; /**< memory pool */
- dispatcher_err_callback_t err_cb; /**< error callback */
- struct event_base *ev_base; /**< event base */
- gint cfd; /**< client's socket */
- gint bfd; /**< backend's socket */
- guint8 *buf; /**< exchange buffer */
- gsize bufsize; /**< buffer size */
- gint read_len; /**< read length */
- gint buf_offset; /**< offset to write */
- gpointer user_data; /**< user's data for callbacks */
- struct timeval *tv; /**< timeout for communications */
- gboolean closed; /**< whether descriptors are closed */
-} rspamd_proxy_t;
-
-/**
- * Create new proxy between cfd and bfd
- * @param cfd client's socket
- * @param bfd backend's socket
- * @param bufsize size of exchange buffer
- * @param err_cb callback for erorrs or completing
- * @param ud user data for callback
- * @return new proxy object
- */
-rspamd_proxy_t * rspamd_create_proxy (gint cfd,
- gint bfd,
- rspamd_mempool_t *pool,
- struct event_base *base,
- gsize bufsize,
- struct timeval *tv,
- dispatcher_err_callback_t err_cb,
- gpointer ud);
-
-void rspamd_proxy_close (rspamd_proxy_t *proxy);
-
-#endif /* PROXY_H_ */