diff options
-rw-r--r-- | nDPId-test.c | 6 | ||||
-rw-r--r-- | nDPIsrvd.c | 18 | ||||
-rwxr-xr-x | scripts/make-dist.sh | 3 |
3 files changed, 19 insertions, 8 deletions
diff --git a/nDPId-test.c b/nDPId-test.c index 543ddb91f..38dcd9be7 100644 --- a/nDPId-test.c +++ b/nDPId-test.c @@ -100,13 +100,13 @@ static void * nDPIsrvd_mainloop_thread(void * const arg) THREAD_ERROR_GOTO(arg); } - mock_json_desc = get_unused_remote_descriptor(JSON_SOCK, mock_pipefds[PIPE_nDPIsrvd]); + mock_json_desc = get_unused_remote_descriptor(JSON_SOCK, mock_pipefds[PIPE_nDPIsrvd], NETWORK_BUFFER_MAX_SIZE); if (mock_json_desc == NULL) { THREAD_ERROR_GOTO(arg); } - mock_serv_desc = get_unused_remote_descriptor(SERV_SOCK, mock_servfds[PIPE_WRITE]); + mock_serv_desc = get_unused_remote_descriptor(SERV_SOCK, mock_servfds[PIPE_WRITE], NETWORK_BUFFER_MAX_SIZE / 4); if (mock_serv_desc == NULL) { THREAD_ERROR_GOTO(arg); @@ -150,6 +150,8 @@ static void * nDPIsrvd_mainloop_thread(void * const arg) } error: + drain_cache_blocking(mock_serv_desc); + del_event(epollfd, mock_pipefds[PIPE_nDPIsrvd]); del_event(epollfd, mock_servfds[PIPE_WRITE]); close(mock_pipefds[PIPE_nDPIsrvd]); diff --git a/nDPIsrvd.c b/nDPIsrvd.c index 68f3ffe1f..58fbfae5d 100644 --- a/nDPIsrvd.c +++ b/nDPIsrvd.c @@ -2,6 +2,7 @@ #include <errno.h> #include <fcntl.h> #include <netdb.h> +#include <netinet/tcp.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> @@ -381,7 +382,7 @@ static int create_listen_sockets(void) return 0; } -static struct remote_desc * get_unused_remote_descriptor(enum sock_type type, int remote_fd) +static struct remote_desc * get_unused_remote_descriptor(enum sock_type type, int remote_fd, size_t max_buffer_size) { if (remotes.desc_used == remotes.desc_size) { @@ -394,7 +395,7 @@ static struct remote_desc * get_unused_remote_descriptor(enum sock_type type, in { remotes.desc_used++; utarray_new(remotes.desc[i].buf_cache, &nDPIsrvd_buffer_array_icd); - if (nDPIsrvd_buffer_init(&remotes.desc[i].buf, NETWORK_BUFFER_MAX_SIZE) != 0 || + if (nDPIsrvd_buffer_init(&remotes.desc[i].buf, max_buffer_size) != 0 || remotes.desc[i].buf_cache == NULL) { return NULL; @@ -569,7 +570,7 @@ static struct remote_desc * accept_remote(int server_fd, return NULL; } - struct remote_desc * current = get_unused_remote_descriptor(socktype, client_fd); + struct remote_desc * current = get_unused_remote_descriptor(socktype, client_fd, NETWORK_BUFFER_MAX_SIZE); if (current == NULL) { syslog(LOG_DAEMON | LOG_ERR, "Max number of connections reached: %zu", remotes.desc_used); @@ -625,10 +626,18 @@ static int new_connection(int epollfd, int eventfd) if (setsockopt(current->fd, SOL_SOCKET, SO_RCVBUF, &sockopt, sizeof(sockopt)) < 0) { syslog(LOG_DAEMON | LOG_ERR, "Error setting socket option SO_RCVBUF: %s", strerror(errno)); + return 1; } break; case SERV_SOCK: sock_type = "distributor"; + + if (setsockopt(current->fd, SOL_SOCKET, SO_SNDBUF, &sockopt, sizeof(sockopt)) < 0) + { + syslog(LOG_DAEMON | LOG_ERR, "Error setting socket option SO_SNDBUF: %s", strerror(errno)); + return 1; + } + if (inet_ntop(current->event_serv.peer.sin_family, ¤t->event_serv.peer.sin_addr, ¤t->event_serv.peer_addr[0], @@ -813,14 +822,13 @@ static int handle_incoming_data(int epollfd, struct remote_desc * const current) syslog(LOG_DAEMON, "Buffer capacity threshold (%zu bytes) reached, caching JSON strings.", remotes.desc[i].buf.used); #endif errno = 0; - if (add_out_event(epollfd, remotes.desc[i].fd, &remotes.desc[i]) != 0) + if (add_out_event(epollfd, remotes.desc[i].fd, &remotes.desc[i]) != 0 && errno != EEXIST /* required for nDPId-test */) { syslog(LOG_DAEMON | LOG_ERR, "%s: %s", "Could not add event, disconnecting", strerror(errno)); disconnect_client(epollfd, &remotes.desc[i]); continue; } } - if (add_to_cache(&remotes.desc[i], current->buf.ptr.raw, current->event_json.json_bytes) != 0) { disconnect_client(epollfd, &remotes.desc[i]); diff --git a/scripts/make-dist.sh b/scripts/make-dist.sh index bb2823a90..974bfc5dd 100755 --- a/scripts/make-dist.sh +++ b/scripts/make-dist.sh @@ -19,7 +19,8 @@ fi git submodule update --init ./libnDPI NDPID_GIT_VERSION="$(git describe --tags)" cd ./libnDPI && \ - LIBNDPI_GIT_VERSION="$(git describe --tags)" + LIBNDPI_GIT_VERSION="$(git describe --tags)" && \ + printf '%s\n' "Creating $(realpath ./libnDPI-${LIBNDPI_GIT_VERSION}.tar)" && \ git archive --prefix="nDPId-${NDPID_GIT_VERSION}/libnDPI/" -o "../libnDPI-${LIBNDPI_GIT_VERSION}.tar" HEAD && \ cd .. git archive --prefix="nDPId-${NDPID_GIT_VERSION}/" -o "./nDPId-${NDPID_GIT_VERSION}.tar" HEAD |