diff --git a/Makefile b/Makefile index d7d7846..8e12526 100644 --- a/Makefile +++ b/Makefile @@ -40,8 +40,8 @@ bin/%.o: src/%.c bin/lib/%.o: src/lib/%.c $(CC) -c -o $@ $(CFLAGS) $< -bin/sesimos: bin/server.o bin/client.o bin/logger.o \ - bin/lib/cache.o bin/lib/compress.o bin/lib/config.o bin/lib/fastcgi.o bin/lib/geoip.o \ +bin/sesimos: bin/server.o bin/client.o bin/logger.o bin/cache_handler.o \ + bin/lib/compress.o bin/lib/config.o bin/lib/fastcgi.o bin/lib/geoip.o \ bin/lib/http.o bin/lib/http_static.o bin/lib/proxy.o bin/lib/sock.o bin/lib/uri.o \ bin/lib/utils.o bin/lib/websocket.o $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) @@ -56,7 +56,7 @@ bin/client.o: src/client.h src/defs.h src/server.h src/lib/utils.h src/lib/confi bin/logger.o: src/logger.h -bin/lib/cache.o: src/cache_handler.h src/lib/utils.h src/lib/uri.h src/lib/compress.h src/logger.h +bin/cache_handler.o: src/cache_handler.h src/lib/utils.h src/lib/uri.h src/lib/compress.h src/logger.h bin/lib/compress.o: src/lib/compress.h diff --git a/src/client.c b/src/client.c index 300a0e1..5c1f777 100644 --- a/src/client.c +++ b/src/client.c @@ -716,10 +716,11 @@ int client_request_handler(client_ctx_t *cctx, sock *client, unsigned long clien return 0; } -int client_connection_handler(client_ctx_t *ctx, sock *client, unsigned long client_num, const char *restrict log_conn_prefix, const char *restrict log_client_prefix) { +int client_connection_handler(client_ctx_t *ctx, unsigned long client_num, const char *restrict log_conn_prefix, const char *restrict log_client_prefix) { struct timespec begin, end; int ret; char buf[1024]; + sock *client = &ctx->socket; clock_gettime(CLOCK_MONOTONIC, &begin); @@ -748,7 +749,6 @@ int client_connection_handler(client_ctx_t *ctx, sock *client, unsigned long cli } ctx->cc[0] = 0; - ctx->geoip[0] = 0; geoip_lookup_country(&client->addr.sock, ctx->cc); info("Connection accepted from %s %s%s%s[%s]", ctx->addr, ctx->host[0] != 0 ? "(" : "", @@ -802,11 +802,9 @@ int client_connection_handler(client_ctx_t *ctx, sock *client, unsigned long cli return 0; } -void *client_handler(sock *client) { +void *client_handler(client_ctx_t *ctx) { struct sockaddr_in6 *server_addr; struct sockaddr_storage server_addr_storage; - - client_ctx_t ctx; char log_client_prefix[256], log_conn_prefix[512]; logger_set_name("client"); @@ -814,33 +812,33 @@ void *client_handler(sock *client) { //signal(SIGINT, client_terminate); //signal(SIGTERM, client_terminate); - inet_ntop(client->addr.ipv6.sin6_family, &client->addr.ipv6.sin6_addr, ctx._c_addr, sizeof(ctx._c_addr)); - if (strncmp(ctx._c_addr, "::ffff:", 7) == 0) { - ctx.addr = ctx._c_addr + 7; + inet_ntop(ctx->socket.addr.ipv6.sin6_family, &ctx->socket.addr.ipv6.sin6_addr, ctx->_c_addr, sizeof(ctx->_c_addr)); + if (strncmp(ctx->_c_addr, "::ffff:", 7) == 0) { + ctx->addr = ctx->_c_addr + 7; } else { - ctx.addr = ctx._c_addr; + ctx->addr = ctx->_c_addr; } socklen_t len = sizeof(server_addr_storage); - getsockname(client->socket, (struct sockaddr *) &server_addr_storage, &len); + getsockname(ctx->socket.socket, (struct sockaddr *) &server_addr_storage, &len); server_addr = (struct sockaddr_in6 *) &server_addr_storage; - inet_ntop(server_addr->sin6_family, (void *) &server_addr->sin6_addr, ctx._s_addr, sizeof(ctx._s_addr)); - if (strncmp(ctx._s_addr, "::ffff:", 7) == 0) { - ctx.s_addr = ctx._s_addr + 7; + inet_ntop(server_addr->sin6_family, (void *) &server_addr->sin6_addr, ctx->_s_addr, sizeof(ctx->_s_addr)); + if (strncmp(ctx->_s_addr, "::ffff:", 7) == 0) { + ctx->s_addr = ctx->_s_addr + 7; } else { - ctx.s_addr = ctx._s_addr; + ctx->s_addr = ctx->_s_addr; } - sprintf(log_client_prefix, "[%s%4i%s]%s[%*s][%5i]%s", (int) client->enc ? HTTPS_STR : HTTP_STR, - ntohs(server_addr->sin6_port), CLR_STR, color_table[0], INET6_ADDRSTRLEN, ctx.addr, - ntohs(client->addr.ipv6.sin6_port), CLR_STR); + sprintf(log_client_prefix, "[%s%4i%s]%s[%*s][%5i]%s", (int) ctx->socket.enc ? HTTPS_STR : HTTP_STR, + ntohs(server_addr->sin6_port), CLR_STR, color_table[0], INET6_ADDRSTRLEN, ctx->addr, + ntohs(ctx->socket.addr.ipv6.sin6_port), CLR_STR); - sprintf(log_conn_prefix, "[%*s]%s", INET6_ADDRSTRLEN, ctx.s_addr, log_client_prefix); + sprintf(log_conn_prefix, "[%*s]%s", INET6_ADDRSTRLEN, ctx->s_addr, log_client_prefix); logger_set_prefix(log_conn_prefix); info("Started thread"); - client_connection_handler(&ctx, client, 0, log_conn_prefix, log_client_prefix); + client_connection_handler(ctx, 0, log_conn_prefix, log_client_prefix); return NULL; } diff --git a/src/client.h b/src/client.h index e155d6b..aade7bb 100644 --- a/src/client.h +++ b/src/client.h @@ -11,24 +11,23 @@ #include "lib/config.h" #include "lib/sock.h" -#include "lib/geoip.h" #include typedef struct { + sock socket; char *addr; char *s_addr; unsigned char s_keep_alive:1; unsigned char c_keep_alive:1; char cc[3]; char host[256]; - char geoip[GEOIP_MAX_JSON_SIZE + 1]; char _c_addr[INET6_ADDRSTRLEN + 1]; char _s_addr[INET6_ADDRSTRLEN + 1]; } client_ctx_t; host_config_t *get_host_config(const char *host); -void *client_handler(sock *client); +void *client_handler(client_ctx_t *client); #endif //SESIMOS_CLIENT_H diff --git a/src/lib/fastcgi.c b/src/lib/fastcgi.c index 79701b9..918fe38 100644 --- a/src/lib/fastcgi.c +++ b/src/lib/fastcgi.c @@ -156,9 +156,9 @@ int fastcgi_init(fastcgi_conn *conn, int mode, unsigned int client_num, unsigned param_ptr = fastcgi_add_param(param_ptr, "CONTENT_LENGTH", content_length != NULL ? content_length : ""); const char *content_type = http_get_header_field(&req->hdr, "Content-Type"); param_ptr = fastcgi_add_param(param_ptr, "CONTENT_TYPE", content_type != NULL ? content_type : ""); - if (conn->ctx->geoip[0] != 0) { - param_ptr = fastcgi_add_param(param_ptr, "REMOTE_INFO", conn->ctx->geoip); - } + //if (conn->ctx->geoip[0] != 0) { + // param_ptr = fastcgi_add_param(param_ptr, "REMOTE_INFO", conn->ctx->geoip); + //} for (int i = 0; i < req->hdr.field_num; i++) { const http_field *f = &req->hdr.fields[i]; diff --git a/src/server.c b/src/server.c index fd8bbdb..4adc712 100644 --- a/src/server.c +++ b/src/server.c @@ -13,10 +13,8 @@ #include "cache_handler.h" #include "lib/config.h" -#include "lib/sock.h" #include "lib/proxy.h" #include "lib/geoip.h" -#include "lib/utils.h" #include #include @@ -38,14 +36,14 @@ volatile sig_atomic_t alive = 1; const char *config_file; static int sockets[NUM_SOCKETS]; -static sock clients[MAX_CHILDREN]; static pthread_t children[MAX_CHILDREN]; static SSL_CTX *contexts[CONFIG_MAX_CERT_CONFIG]; +static client_ctx_t clients[MAX_CLIENTS]; + static int clean() { remove("/var/sesimos/server/cache"); rmdir("/var/sesimos/server/"); - return 0; } @@ -271,7 +269,8 @@ int main(int argc, char *const argv[]) { for (j = 0; j < MAX_CHILDREN; j++) { if (children[j] == 0) break; } - sock *client = &clients[j]; + client_ctx_t *client_ctx = &clients[j]; + sock *client = &client_ctx->socket; client->ctx = contexts[0]; socklen_t addr_len = sizeof(client->addr); diff --git a/src/server.h b/src/server.h index f92be1c..79d491b 100644 --- a/src/server.h +++ b/src/server.h @@ -20,6 +20,7 @@ #define CLIENT_TIMEOUT 3600 #define SERVER_TIMEOUT_INIT 4 #define SERVER_TIMEOUT 3600 +#define MAX_CLIENTS 4096 #define CNX_HANDLER_WORKERS 8 #define REQ_HANDLER_WORKERS 16