summaryrefslogtreecommitdiff
path: root/src/mod_proxy_core_pool.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_proxy_core_pool.c')
-rw-r--r--src/mod_proxy_core_pool.c141
1 files changed, 0 insertions, 141 deletions
diff --git a/src/mod_proxy_core_pool.c b/src/mod_proxy_core_pool.c
deleted file mode 100644
index 65606fa1..00000000
--- a/src/mod_proxy_core_pool.c
+++ /dev/null
@@ -1,141 +0,0 @@
-
-#include <stdlib.h>
-
-#include "array-static.h"
-#include "sys-files.h"
-#include "log.h"
-#include "mod_proxy_core_pool.h"
-
-proxy_connection * proxy_connection_init(void) {
- proxy_connection *con;
-
- con = calloc(1, sizeof(*con));
-
- con->sock = iosocket_init();
-
- con->send = chunkqueue_init();
- con->recv = chunkqueue_init();
-
- return con;
-}
-
-void proxy_connection_free(proxy_connection *con) {
- if (!con) return;
-
- con->address->used--;
-
- iosocket_free(con->sock);
-
- chunkqueue_free(con->send);
- chunkqueue_free(con->recv);
-
- free(con);
-}
-
-proxy_connection_pool *proxy_connection_pool_init(void) {
- proxy_connection_pool *pool;
-
- pool = calloc(1, sizeof(*pool));
-
- /* default: max parallel connections to the backend
- *
- * this should match max-procs if we manage the procs ourself
- */
-
- pool->max_size = 1;
-
- return pool;
-}
-
-void proxy_connection_pool_free(proxy_connection_pool *pool) {
- size_t i;
-
- if (!pool) return;
-
- for (i = 0; i < pool->used; i++) {
- proxy_connection_free(pool->ptr[i]);
- }
-
- if (pool->size) free(pool->ptr);
-
- free(pool);
-}
-
-static void proxy_connection_pool_add_connection(proxy_connection_pool *pool, proxy_connection *c) {
- ARRAY_STATIC_PREPARE_APPEND(pool);
-
- pool->ptr[pool->used++] = c;
-}
-
-/**
- * remove the connection from the pool
- *
- * usually called on conn-shutdown
- */
-int proxy_connection_pool_remove_connection(proxy_connection_pool *pool, proxy_connection *c) {
- size_t i;
-
- if (pool->used == 0) return -1; /* empty */
-
- for (i = 0; i < pool->used; i++) {
- if (pool->ptr[i] == c) {
- break;
- }
- }
-
- if (i == pool->used) return -1; /* not found */
-
- /**
- * move all elements one to the left
- *
- * if the last element is going to be removed, skip the loop
- */
- for (; i < pool->used - 1; i++) {
- pool->ptr[i] = pool->ptr[i + 1];
- }
-
- pool->used--;
-
- return 0;
-}
-
-proxy_connection_pool_t proxy_connection_pool_get_connection(proxy_connection_pool *pool, proxy_address *address, proxy_connection **rcon) {
- proxy_connection *proxy_con = NULL;
- size_t i;
-
- /* search for a idling proxy connection with the given address */
- for (i = 0; i < pool->used; i++) {
- proxy_con = pool->ptr[i];
-
- if (proxy_con->address == address &&
- proxy_con->state == PROXY_CONNECTION_STATE_IDLE) {
- break;
- }
- }
-
- if (i == pool->used) {
- /* no idling connection found
- *
- * check if we can open another connection to this address
- */
-
- if (pool->used == pool->max_size) return PROXY_CONNECTIONPOOL_FULL;
-
- proxy_con = proxy_connection_init();
-
- proxy_con->state = PROXY_CONNECTION_STATE_CONNECTING;
- proxy_con->address = address;
-
- proxy_connection_pool_add_connection(pool, proxy_con);
- } else {
- proxy_con->state = PROXY_CONNECTION_STATE_CONNECTED;
- }
-
- /* inc. the use-counter of the address */
- proxy_con->address->used++;
-
- *rcon = proxy_con;
-
- return PROXY_CONNECTIONPOOL_GOT_CONNECTION;
-}
-