forked from Green-Sky/tomato
Squashed 'external/toxcore/c-toxcore/' changes from 67badf694..82460b212
82460b212 feat: add ngc events 24b54722a fix: Ensure we have allocators available for the error paths. 48dbcfebc cleanup: Remove redundant `-DSODIUM_EXPORT` from definitions. 0cef46ee9 cleanup: Fix a few more clang-tidy warnings. 0c5b918e9 cleanup: Fix a few more clang-tidy warnings. 4d3c97f49 cleanup: Enforce stricter identifier naming using clang-tidy. a549807df refactor: Add `mem` module to allow tests to override allocators. 6133fb153 chore: Add devcontainer setup for codespaces. 620e07ecd chore: Set a timeout for tests started using Conan c0ec33b16 chore: Migrate Windows CI from Appveyor to Azure DevOps 8ed47f3ef fix incorrect documentation a1e245841 docs: Fix doxygen config and remove some redundant comments. b0f633185 chore: Fix the Android CI job 7469a529b fix: Add missing `#include <array>`. 2b1a6b0d2 add missing ngc constants getter declarations and definitions 2e02d5637 chore: Add missing module dependencies. REVERT: 67badf694 feat: add ngc events git-subtree-dir: external/toxcore/c-toxcore git-subtree-split: 82460b2124216af1ac9d63060de310a682a2fd15
This commit is contained in:
@ -58,6 +58,7 @@ typedef struct TCP_Secure_Connection {
|
||||
|
||||
struct TCP_Server {
|
||||
const Logger *logger;
|
||||
const Memory *mem;
|
||||
const Random *rng;
|
||||
const Network *ns;
|
||||
Onion *onion;
|
||||
@ -117,9 +118,9 @@ static int alloc_new_connections(TCP_Server *tcp_server, uint32_t num)
|
||||
return -1;
|
||||
}
|
||||
|
||||
TCP_Secure_Connection *new_connections = (TCP_Secure_Connection *)realloc(
|
||||
tcp_server->accepted_connection_array,
|
||||
new_size * sizeof(TCP_Secure_Connection));
|
||||
TCP_Secure_Connection *new_connections = (TCP_Secure_Connection *)mem_vrealloc(
|
||||
tcp_server->mem, tcp_server->accepted_connection_array,
|
||||
new_size, sizeof(TCP_Secure_Connection));
|
||||
|
||||
if (new_connections == nullptr) {
|
||||
return -1;
|
||||
@ -138,7 +139,7 @@ non_null()
|
||||
static void wipe_secure_connection(TCP_Secure_Connection *con)
|
||||
{
|
||||
if (con->status != 0) {
|
||||
wipe_priority_list(con->con.priority_queue_start);
|
||||
wipe_priority_list(con->con.mem, con->con.priority_queue_start);
|
||||
crypto_memzero(con, sizeof(TCP_Secure_Connection));
|
||||
}
|
||||
}
|
||||
@ -161,7 +162,7 @@ static void free_accepted_connection_array(TCP_Server *tcp_server)
|
||||
wipe_secure_connection(&tcp_server->accepted_connection_array[i]);
|
||||
}
|
||||
|
||||
free(tcp_server->accepted_connection_array);
|
||||
mem_delete(tcp_server->mem, tcp_server->accepted_connection_array);
|
||||
tcp_server->accepted_connection_array = nullptr;
|
||||
tcp_server->size_accepted_connections = 0;
|
||||
}
|
||||
@ -171,7 +172,7 @@ static void free_accepted_connection_array(TCP_Server *tcp_server)
|
||||
* @retval -1 on failure.
|
||||
*/
|
||||
non_null()
|
||||
static int get_TCP_connection_index(const TCP_Server *tcp_server, const uint8_t *public_key)
|
||||
static int get_tcp_connection_index(const TCP_Server *tcp_server, const uint8_t *public_key)
|
||||
{
|
||||
return bs_list_find(&tcp_server->accepted_key_list, public_key);
|
||||
}
|
||||
@ -188,7 +189,7 @@ static int kill_accepted(TCP_Server *tcp_server, int index);
|
||||
non_null()
|
||||
static int add_accepted(TCP_Server *tcp_server, const Mono_Time *mono_time, TCP_Secure_Connection *con)
|
||||
{
|
||||
int index = get_TCP_connection_index(tcp_server, con->public_key);
|
||||
int index = get_tcp_connection_index(tcp_server, con->public_key);
|
||||
|
||||
if (index != -1) { /* If an old connection to the same public key exists, kill it. */
|
||||
kill_accepted(tcp_server, index);
|
||||
@ -262,7 +263,7 @@ static int del_accepted(TCP_Server *tcp_server, int index)
|
||||
|
||||
/** Kill a TCP_Secure_Connection */
|
||||
non_null()
|
||||
static void kill_TCP_secure_connection(TCP_Secure_Connection *con)
|
||||
static void kill_tcp_secure_connection(TCP_Secure_Connection *con)
|
||||
{
|
||||
kill_sock(con->con.ns, con->con.sock);
|
||||
wipe_secure_connection(con);
|
||||
@ -301,7 +302,7 @@ static int kill_accepted(TCP_Server *tcp_server, int index)
|
||||
* @retval -1 if the connection must be killed.
|
||||
*/
|
||||
non_null()
|
||||
static int handle_TCP_handshake(const Logger *logger, TCP_Secure_Connection *con, const uint8_t *data, uint16_t length,
|
||||
static int handle_tcp_handshake(const Logger *logger, TCP_Secure_Connection *con, const uint8_t *data, uint16_t length,
|
||||
const uint8_t *self_secret_key)
|
||||
{
|
||||
if (length != TCP_CLIENT_HANDSHAKE_SIZE) {
|
||||
@ -369,14 +370,14 @@ non_null()
|
||||
static int read_connection_handshake(const Logger *logger, TCP_Secure_Connection *con, const uint8_t *self_secret_key)
|
||||
{
|
||||
uint8_t data[TCP_CLIENT_HANDSHAKE_SIZE];
|
||||
const int len = read_TCP_packet(logger, con->con.ns, con->con.sock, data, TCP_CLIENT_HANDSHAKE_SIZE, &con->con.ip_port);
|
||||
const int len = read_tcp_packet(logger, con->con.mem, con->con.ns, con->con.sock, data, TCP_CLIENT_HANDSHAKE_SIZE, &con->con.ip_port);
|
||||
|
||||
if (len == -1) {
|
||||
LOGGER_TRACE(logger, "connection handshake is not ready yet");
|
||||
return 0;
|
||||
}
|
||||
|
||||
return handle_TCP_handshake(logger, con, data, len, self_secret_key);
|
||||
return handle_tcp_handshake(logger, con, data, len, self_secret_key);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -393,7 +394,7 @@ static int send_routing_response(const Logger *logger, TCP_Secure_Connection *co
|
||||
data[1] = rpid;
|
||||
memcpy(data + 2, public_key, CRYPTO_PUBLIC_KEY_SIZE);
|
||||
|
||||
return write_packet_TCP_secure_connection(logger, &con->con, data, sizeof(data), true);
|
||||
return write_packet_tcp_secure_connection(logger, &con->con, data, sizeof(data), true);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -405,7 +406,7 @@ non_null()
|
||||
static int send_connect_notification(const Logger *logger, TCP_Secure_Connection *con, uint8_t id)
|
||||
{
|
||||
uint8_t data[2] = {TCP_PACKET_CONNECTION_NOTIFICATION, (uint8_t)(id + NUM_RESERVED_PORTS)};
|
||||
return write_packet_TCP_secure_connection(logger, &con->con, data, sizeof(data), true);
|
||||
return write_packet_tcp_secure_connection(logger, &con->con, data, sizeof(data), true);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -417,7 +418,7 @@ non_null()
|
||||
static int send_disconnect_notification(const Logger *logger, TCP_Secure_Connection *con, uint8_t id)
|
||||
{
|
||||
uint8_t data[2] = {TCP_PACKET_DISCONNECT_NOTIFICATION, (uint8_t)(id + NUM_RESERVED_PORTS)};
|
||||
return write_packet_TCP_secure_connection(logger, &con->con, data, sizeof(data), true);
|
||||
return write_packet_tcp_secure_connection(logger, &con->con, data, sizeof(data), true);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -425,7 +426,7 @@ static int send_disconnect_notification(const Logger *logger, TCP_Secure_Connect
|
||||
* @retval -1 on failure (connection must be killed).
|
||||
*/
|
||||
non_null()
|
||||
static int handle_TCP_routing_req(TCP_Server *tcp_server, uint32_t con_id, const uint8_t *public_key)
|
||||
static int handle_tcp_routing_req(TCP_Server *tcp_server, uint32_t con_id, const uint8_t *public_key)
|
||||
{
|
||||
uint32_t index = -1;
|
||||
TCP_Secure_Connection *con = &tcp_server->accepted_connection_array[con_id];
|
||||
@ -473,7 +474,7 @@ static int handle_TCP_routing_req(TCP_Server *tcp_server, uint32_t con_id, const
|
||||
|
||||
con->connections[index].status = 1;
|
||||
memcpy(con->connections[index].public_key, public_key, CRYPTO_PUBLIC_KEY_SIZE);
|
||||
const int other_index = get_TCP_connection_index(tcp_server, public_key);
|
||||
const int other_index = get_tcp_connection_index(tcp_server, public_key);
|
||||
|
||||
if (other_index != -1) {
|
||||
uint32_t other_id = -1;
|
||||
@ -508,7 +509,7 @@ static int handle_TCP_routing_req(TCP_Server *tcp_server, uint32_t con_id, const
|
||||
* @retval -1 on failure (connection must be killed).
|
||||
*/
|
||||
non_null()
|
||||
static int handle_TCP_oob_send(TCP_Server *tcp_server, uint32_t con_id, const uint8_t *public_key, const uint8_t *data,
|
||||
static int handle_tcp_oob_send(TCP_Server *tcp_server, uint32_t con_id, const uint8_t *public_key, const uint8_t *data,
|
||||
uint16_t length)
|
||||
{
|
||||
if (length == 0 || length > TCP_MAX_OOB_DATA_LENGTH) {
|
||||
@ -517,14 +518,14 @@ static int handle_TCP_oob_send(TCP_Server *tcp_server, uint32_t con_id, const ui
|
||||
|
||||
const TCP_Secure_Connection *con = &tcp_server->accepted_connection_array[con_id];
|
||||
|
||||
const int other_index = get_TCP_connection_index(tcp_server, public_key);
|
||||
const int other_index = get_tcp_connection_index(tcp_server, public_key);
|
||||
|
||||
if (other_index != -1) {
|
||||
VLA(uint8_t, resp_packet, 1 + CRYPTO_PUBLIC_KEY_SIZE + length);
|
||||
resp_packet[0] = TCP_PACKET_OOB_RECV;
|
||||
memcpy(resp_packet + 1, con->public_key, CRYPTO_PUBLIC_KEY_SIZE);
|
||||
memcpy(resp_packet + 1 + CRYPTO_PUBLIC_KEY_SIZE, data, length);
|
||||
write_packet_TCP_secure_connection(tcp_server->logger, &tcp_server->accepted_connection_array[other_index].con,
|
||||
write_packet_tcp_secure_connection(tcp_server->logger, &tcp_server->accepted_connection_array[other_index].con,
|
||||
resp_packet, SIZEOF_VLA(resp_packet), false);
|
||||
}
|
||||
|
||||
@ -612,7 +613,7 @@ static int handle_onion_recv_1(void *object, const IP_Port *dest, const uint8_t
|
||||
memcpy(packet + 1, data, length);
|
||||
packet[0] = TCP_PACKET_ONION_RESPONSE;
|
||||
|
||||
if (write_packet_TCP_secure_connection(tcp_server->logger, &con->con, packet, SIZEOF_VLA(packet), false) != 1) {
|
||||
if (write_packet_tcp_secure_connection(tcp_server->logger, &con->con, packet, SIZEOF_VLA(packet), false) != 1) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -652,7 +653,7 @@ static bool handle_forward_reply_tcp(void *object, const uint8_t *sendback_data,
|
||||
memcpy(packet + 1, data, length);
|
||||
packet[0] = TCP_PACKET_FORWARDING;
|
||||
|
||||
return write_packet_TCP_secure_connection(tcp_server->logger, &con->con, packet, SIZEOF_VLA(packet), false) == 1;
|
||||
return write_packet_tcp_secure_connection(tcp_server->logger, &con->con, packet, SIZEOF_VLA(packet), false) == 1;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -660,7 +661,7 @@ static bool handle_forward_reply_tcp(void *object, const uint8_t *sendback_data,
|
||||
* @retval -1 on failure
|
||||
*/
|
||||
non_null()
|
||||
static int handle_TCP_packet(TCP_Server *tcp_server, uint32_t con_id, const uint8_t *data, uint16_t length)
|
||||
static int handle_tcp_packet(TCP_Server *tcp_server, uint32_t con_id, const uint8_t *data, uint16_t length)
|
||||
{
|
||||
if (length == 0) {
|
||||
return -1;
|
||||
@ -675,7 +676,7 @@ static int handle_TCP_packet(TCP_Server *tcp_server, uint32_t con_id, const uint
|
||||
}
|
||||
|
||||
LOGGER_TRACE(tcp_server->logger, "handling routing request for %d", con_id);
|
||||
return handle_TCP_routing_req(tcp_server, con_id, data + 1);
|
||||
return handle_tcp_routing_req(tcp_server, con_id, data + 1);
|
||||
}
|
||||
|
||||
case TCP_PACKET_CONNECTION_NOTIFICATION: {
|
||||
@ -706,7 +707,7 @@ static int handle_TCP_packet(TCP_Server *tcp_server, uint32_t con_id, const uint
|
||||
uint8_t response[1 + sizeof(uint64_t)];
|
||||
response[0] = TCP_PACKET_PONG;
|
||||
memcpy(response + 1, data + 1, sizeof(uint64_t));
|
||||
write_packet_TCP_secure_connection(tcp_server->logger, &con->con, response, sizeof(response), true);
|
||||
write_packet_tcp_secure_connection(tcp_server->logger, &con->con, response, sizeof(response), true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -738,7 +739,7 @@ static int handle_TCP_packet(TCP_Server *tcp_server, uint32_t con_id, const uint
|
||||
|
||||
LOGGER_TRACE(tcp_server->logger, "handling oob send for %d", con_id);
|
||||
|
||||
return handle_TCP_oob_send(tcp_server, con_id, data + 1, data + 1 + CRYPTO_PUBLIC_KEY_SIZE,
|
||||
return handle_tcp_oob_send(tcp_server, con_id, data + 1, data + 1 + CRYPTO_PUBLIC_KEY_SIZE,
|
||||
length - (1 + CRYPTO_PUBLIC_KEY_SIZE));
|
||||
}
|
||||
|
||||
@ -821,7 +822,7 @@ static int handle_TCP_packet(TCP_Server *tcp_server, uint32_t con_id, const uint
|
||||
VLA(uint8_t, new_data, length);
|
||||
memcpy(new_data, data, length);
|
||||
new_data[0] = other_c_id;
|
||||
const int ret = write_packet_TCP_secure_connection(tcp_server->logger,
|
||||
const int ret = write_packet_tcp_secure_connection(tcp_server->logger,
|
||||
&tcp_server->accepted_connection_array[index].con, new_data, length, false);
|
||||
|
||||
if (ret == -1) {
|
||||
@ -837,20 +838,20 @@ static int handle_TCP_packet(TCP_Server *tcp_server, uint32_t con_id, const uint
|
||||
|
||||
|
||||
non_null()
|
||||
static int confirm_TCP_connection(TCP_Server *tcp_server, const Mono_Time *mono_time, TCP_Secure_Connection *con,
|
||||
static int confirm_tcp_connection(TCP_Server *tcp_server, const Mono_Time *mono_time, TCP_Secure_Connection *con,
|
||||
const uint8_t *data, uint16_t length)
|
||||
{
|
||||
const int index = add_accepted(tcp_server, mono_time, con);
|
||||
|
||||
if (index == -1) {
|
||||
LOGGER_DEBUG(tcp_server->logger, "dropping connection %u: not accepted", (unsigned int)con->identifier);
|
||||
kill_TCP_secure_connection(con);
|
||||
kill_tcp_secure_connection(con);
|
||||
return -1;
|
||||
}
|
||||
|
||||
wipe_secure_connection(con);
|
||||
|
||||
if (handle_TCP_packet(tcp_server, index, data, length) == -1) {
|
||||
if (handle_tcp_packet(tcp_server, index, data, length) == -1) {
|
||||
LOGGER_DEBUG(tcp_server->logger, "dropping connection %u: data packet (len=%d) not handled",
|
||||
(unsigned int)con->identifier, length);
|
||||
kill_accepted(tcp_server, index);
|
||||
@ -887,11 +888,12 @@ static int accept_connection(TCP_Server *tcp_server, Socket sock)
|
||||
|
||||
if (conn->status != TCP_STATUS_NO_STATUS) {
|
||||
LOGGER_DEBUG(tcp_server->logger, "connection %d dropped before accepting", index);
|
||||
kill_TCP_secure_connection(conn);
|
||||
kill_tcp_secure_connection(conn);
|
||||
}
|
||||
|
||||
conn->status = TCP_STATUS_CONNECTED;
|
||||
conn->con.ns = tcp_server->ns;
|
||||
conn->con.mem = tcp_server->mem;
|
||||
conn->con.rng = tcp_server->rng;
|
||||
conn->con.sock = sock;
|
||||
conn->next_packet_length = 0;
|
||||
@ -901,7 +903,7 @@ static int accept_connection(TCP_Server *tcp_server, Socket sock)
|
||||
}
|
||||
|
||||
non_null()
|
||||
static Socket new_listening_TCP_socket(const Logger *logger, const Network *ns, Family family, uint16_t port)
|
||||
static Socket new_listening_tcp_socket(const Logger *logger, const Network *ns, Family family, uint16_t port)
|
||||
{
|
||||
const Socket sock = net_socket(ns, family, TOX_SOCK_STREAM, TOX_PROTO_TCP);
|
||||
|
||||
@ -935,7 +937,7 @@ static Socket new_listening_TCP_socket(const Logger *logger, const Network *ns,
|
||||
return sock;
|
||||
}
|
||||
|
||||
TCP_Server *new_TCP_server(const Logger *logger, const Random *rng, const Network *ns,
|
||||
TCP_Server *new_tcp_server(const Logger *logger, const Memory *mem, const Random *rng, const Network *ns,
|
||||
bool ipv6_enabled, uint16_t num_sockets,
|
||||
const uint16_t *ports, const uint8_t *secret_key, Onion *onion, Forwarding *forwarding)
|
||||
{
|
||||
@ -949,7 +951,7 @@ TCP_Server *new_TCP_server(const Logger *logger, const Random *rng, const Networ
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
TCP_Server *temp = (TCP_Server *)calloc(1, sizeof(TCP_Server));
|
||||
TCP_Server *temp = (TCP_Server *)mem_alloc(mem, sizeof(TCP_Server));
|
||||
|
||||
if (temp == nullptr) {
|
||||
LOGGER_ERROR(logger, "TCP server allocation failed");
|
||||
@ -957,14 +959,15 @@ TCP_Server *new_TCP_server(const Logger *logger, const Random *rng, const Networ
|
||||
}
|
||||
|
||||
temp->logger = logger;
|
||||
temp->mem = mem;
|
||||
temp->ns = ns;
|
||||
temp->rng = rng;
|
||||
|
||||
temp->socks_listening = (Socket *)calloc(num_sockets, sizeof(Socket));
|
||||
temp->socks_listening = (Socket *)mem_valloc(mem, num_sockets, sizeof(Socket));
|
||||
|
||||
if (temp->socks_listening == nullptr) {
|
||||
LOGGER_ERROR(logger, "socket allocation failed");
|
||||
free(temp);
|
||||
mem_delete(mem, temp);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@ -973,8 +976,8 @@ TCP_Server *new_TCP_server(const Logger *logger, const Random *rng, const Networ
|
||||
|
||||
if (temp->efd == -1) {
|
||||
LOGGER_ERROR(logger, "epoll initialisation failed");
|
||||
free(temp->socks_listening);
|
||||
free(temp);
|
||||
mem_delete(mem, temp->socks_listening);
|
||||
mem_delete(mem, temp);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@ -983,7 +986,7 @@ TCP_Server *new_TCP_server(const Logger *logger, const Random *rng, const Networ
|
||||
const Family family = ipv6_enabled ? net_family_ipv6() : net_family_ipv4();
|
||||
|
||||
for (uint32_t i = 0; i < num_sockets; ++i) {
|
||||
const Socket sock = new_listening_TCP_socket(logger, ns, family, ports[i]);
|
||||
const Socket sock = new_listening_tcp_socket(logger, ns, family, ports[i]);
|
||||
|
||||
if (!sock_valid(sock)) {
|
||||
continue;
|
||||
@ -1006,8 +1009,8 @@ TCP_Server *new_TCP_server(const Logger *logger, const Random *rng, const Networ
|
||||
}
|
||||
|
||||
if (temp->num_listening_socks == 0) {
|
||||
free(temp->socks_listening);
|
||||
free(temp);
|
||||
mem_delete(mem, temp->socks_listening);
|
||||
mem_delete(mem, temp);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@ -1031,7 +1034,7 @@ TCP_Server *new_TCP_server(const Logger *logger, const Random *rng, const Networ
|
||||
|
||||
#ifndef TCP_SERVER_USE_EPOLL
|
||||
non_null()
|
||||
static void do_TCP_accept_new(TCP_Server *tcp_server)
|
||||
static void do_tcp_accept_new(TCP_Server *tcp_server)
|
||||
{
|
||||
for (uint32_t sock_idx = 0; sock_idx < tcp_server->num_listening_socks; ++sock_idx) {
|
||||
|
||||
@ -1061,7 +1064,7 @@ static int do_incoming(TCP_Server *tcp_server, uint32_t i)
|
||||
|
||||
if (ret == -1) {
|
||||
LOGGER_TRACE(tcp_server->logger, "incoming connection %d dropped due to failed handshake", i);
|
||||
kill_TCP_secure_connection(conn);
|
||||
kill_tcp_secure_connection(conn);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -1075,7 +1078,7 @@ static int do_incoming(TCP_Server *tcp_server, uint32_t i)
|
||||
|
||||
if (conn_new->status != TCP_STATUS_NO_STATUS) {
|
||||
LOGGER_ERROR(tcp_server->logger, "incoming connection %d would overwrite existing", i);
|
||||
kill_TCP_secure_connection(conn_new);
|
||||
kill_tcp_secure_connection(conn_new);
|
||||
}
|
||||
|
||||
move_secure_connection(conn_new, conn_old);
|
||||
@ -1096,18 +1099,18 @@ static int do_unconfirmed(TCP_Server *tcp_server, const Mono_Time *mono_time, ui
|
||||
LOGGER_TRACE(tcp_server->logger, "handling unconfirmed TCP connection %d", i);
|
||||
|
||||
uint8_t packet[MAX_PACKET_SIZE];
|
||||
const int len = read_packet_TCP_secure_connection(tcp_server->logger, conn->con.ns, conn->con.sock, &conn->next_packet_length, conn->con.shared_key, conn->recv_nonce, packet, sizeof(packet), &conn->con.ip_port);
|
||||
const int len = read_packet_tcp_secure_connection(tcp_server->logger, conn->con.mem, conn->con.ns, conn->con.sock, &conn->next_packet_length, conn->con.shared_key, conn->recv_nonce, packet, sizeof(packet), &conn->con.ip_port);
|
||||
|
||||
if (len == 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (len == -1) {
|
||||
kill_TCP_secure_connection(conn);
|
||||
kill_tcp_secure_connection(conn);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return confirm_TCP_connection(tcp_server, mono_time, conn, packet, len);
|
||||
return confirm_tcp_connection(tcp_server, mono_time, conn, packet, len);
|
||||
}
|
||||
|
||||
non_null()
|
||||
@ -1116,7 +1119,7 @@ static bool tcp_process_secure_packet(TCP_Server *tcp_server, uint32_t i)
|
||||
TCP_Secure_Connection *const conn = &tcp_server->accepted_connection_array[i];
|
||||
|
||||
uint8_t packet[MAX_PACKET_SIZE];
|
||||
const int len = read_packet_TCP_secure_connection(tcp_server->logger, conn->con.ns, conn->con.sock, &conn->next_packet_length, conn->con.shared_key, conn->recv_nonce, packet, sizeof(packet), &conn->con.ip_port);
|
||||
const int len = read_packet_tcp_secure_connection(tcp_server->logger, conn->con.mem, conn->con.ns, conn->con.sock, &conn->next_packet_length, conn->con.shared_key, conn->recv_nonce, packet, sizeof(packet), &conn->con.ip_port);
|
||||
LOGGER_TRACE(tcp_server->logger, "processing packet for %d: %d", i, len);
|
||||
|
||||
if (len == 0) {
|
||||
@ -1128,7 +1131,7 @@ static bool tcp_process_secure_packet(TCP_Server *tcp_server, uint32_t i)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (handle_TCP_packet(tcp_server, i, packet, len) == -1) {
|
||||
if (handle_tcp_packet(tcp_server, i, packet, len) == -1) {
|
||||
LOGGER_TRACE(tcp_server->logger, "dropping connection %d: data packet (len=%d) not handled", i, len);
|
||||
kill_accepted(tcp_server, i);
|
||||
return false;
|
||||
@ -1148,7 +1151,7 @@ static void do_confirmed_recv(TCP_Server *tcp_server, uint32_t i)
|
||||
|
||||
#ifndef TCP_SERVER_USE_EPOLL
|
||||
non_null()
|
||||
static void do_TCP_incoming(TCP_Server *tcp_server)
|
||||
static void do_tcp_incoming(TCP_Server *tcp_server)
|
||||
{
|
||||
for (uint32_t i = 0; i < MAX_INCOMING_CONNECTIONS; ++i) {
|
||||
do_incoming(tcp_server, i);
|
||||
@ -1156,7 +1159,7 @@ static void do_TCP_incoming(TCP_Server *tcp_server)
|
||||
}
|
||||
|
||||
non_null()
|
||||
static void do_TCP_unconfirmed(TCP_Server *tcp_server, const Mono_Time *mono_time)
|
||||
static void do_tcp_unconfirmed(TCP_Server *tcp_server, const Mono_Time *mono_time)
|
||||
{
|
||||
for (uint32_t i = 0; i < MAX_INCOMING_CONNECTIONS; ++i) {
|
||||
do_unconfirmed(tcp_server, mono_time, i);
|
||||
@ -1165,7 +1168,7 @@ static void do_TCP_unconfirmed(TCP_Server *tcp_server, const Mono_Time *mono_tim
|
||||
#endif
|
||||
|
||||
non_null()
|
||||
static void do_TCP_confirmed(TCP_Server *tcp_server, const Mono_Time *mono_time)
|
||||
static void do_tcp_confirmed(TCP_Server *tcp_server, const Mono_Time *mono_time)
|
||||
{
|
||||
#ifdef TCP_SERVER_USE_EPOLL
|
||||
|
||||
@ -1193,7 +1196,7 @@ static void do_TCP_confirmed(TCP_Server *tcp_server, const Mono_Time *mono_time)
|
||||
}
|
||||
|
||||
memcpy(ping + 1, &ping_id, sizeof(uint64_t));
|
||||
const int ret = write_packet_TCP_secure_connection(tcp_server->logger, &conn->con, ping, sizeof(ping), true);
|
||||
const int ret = write_packet_tcp_secure_connection(tcp_server->logger, &conn->con, ping, sizeof(ping), true);
|
||||
|
||||
if (ret == 1) {
|
||||
conn->last_pinged = mono_time_get(mono_time);
|
||||
@ -1245,13 +1248,13 @@ static bool tcp_epoll_process(TCP_Server *tcp_server, const Mono_Time *mono_time
|
||||
|
||||
case TCP_SOCKET_INCOMING: {
|
||||
LOGGER_TRACE(tcp_server->logger, "incoming connection %d dropped", index);
|
||||
kill_TCP_secure_connection(&tcp_server->incoming_connection_queue[index]);
|
||||
kill_tcp_secure_connection(&tcp_server->incoming_connection_queue[index]);
|
||||
break;
|
||||
}
|
||||
|
||||
case TCP_SOCKET_UNCONFIRMED: {
|
||||
LOGGER_TRACE(tcp_server->logger, "unconfirmed connection %d dropped", index);
|
||||
kill_TCP_secure_connection(&tcp_server->unconfirmed_connection_queue[index]);
|
||||
kill_tcp_secure_connection(&tcp_server->unconfirmed_connection_queue[index]);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1294,7 +1297,7 @@ static bool tcp_epoll_process(TCP_Server *tcp_server, const Mono_Time *mono_time
|
||||
|
||||
if (epoll_ctl(tcp_server->efd, EPOLL_CTL_ADD, sock_new.sock, &ev) == -1) {
|
||||
LOGGER_DEBUG(tcp_server->logger, "new connection %d was dropped due to epoll error %d", index, net_error());
|
||||
kill_TCP_secure_connection(&tcp_server->incoming_connection_queue[index_new]);
|
||||
kill_tcp_secure_connection(&tcp_server->incoming_connection_queue[index_new]);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@ -1312,7 +1315,7 @@ static bool tcp_epoll_process(TCP_Server *tcp_server, const Mono_Time *mono_time
|
||||
|
||||
if (epoll_ctl(tcp_server->efd, EPOLL_CTL_MOD, sock.sock, &events[n]) == -1) {
|
||||
LOGGER_DEBUG(tcp_server->logger, "incoming connection %d was dropped due to epoll error %d", index, net_error());
|
||||
kill_TCP_secure_connection(&tcp_server->unconfirmed_connection_queue[index_new]);
|
||||
kill_tcp_secure_connection(&tcp_server->unconfirmed_connection_queue[index_new]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1350,7 +1353,7 @@ static bool tcp_epoll_process(TCP_Server *tcp_server, const Mono_Time *mono_time
|
||||
}
|
||||
|
||||
non_null()
|
||||
static void do_TCP_epoll(TCP_Server *tcp_server, const Mono_Time *mono_time)
|
||||
static void do_tcp_epoll(TCP_Server *tcp_server, const Mono_Time *mono_time)
|
||||
{
|
||||
while (tcp_epoll_process(tcp_server, mono_time)) {
|
||||
// Keep processing packets until there are no more FDs ready for reading.
|
||||
@ -1359,21 +1362,21 @@ static void do_TCP_epoll(TCP_Server *tcp_server, const Mono_Time *mono_time)
|
||||
}
|
||||
#endif
|
||||
|
||||
void do_TCP_server(TCP_Server *tcp_server, const Mono_Time *mono_time)
|
||||
void do_tcp_server(TCP_Server *tcp_server, const Mono_Time *mono_time)
|
||||
{
|
||||
#ifdef TCP_SERVER_USE_EPOLL
|
||||
do_TCP_epoll(tcp_server, mono_time);
|
||||
do_tcp_epoll(tcp_server, mono_time);
|
||||
|
||||
#else
|
||||
do_TCP_accept_new(tcp_server);
|
||||
do_TCP_incoming(tcp_server);
|
||||
do_TCP_unconfirmed(tcp_server, mono_time);
|
||||
do_tcp_accept_new(tcp_server);
|
||||
do_tcp_incoming(tcp_server);
|
||||
do_tcp_unconfirmed(tcp_server, mono_time);
|
||||
#endif
|
||||
|
||||
do_TCP_confirmed(tcp_server, mono_time);
|
||||
do_tcp_confirmed(tcp_server, mono_time);
|
||||
}
|
||||
|
||||
void kill_TCP_server(TCP_Server *tcp_server)
|
||||
void kill_tcp_server(TCP_Server *tcp_server)
|
||||
{
|
||||
if (tcp_server == nullptr) {
|
||||
return;
|
||||
@ -1406,6 +1409,6 @@ void kill_TCP_server(TCP_Server *tcp_server)
|
||||
|
||||
crypto_memzero(tcp_server->secret_key, sizeof(tcp_server->secret_key));
|
||||
|
||||
free(tcp_server->socks_listening);
|
||||
free(tcp_server);
|
||||
mem_delete(tcp_server->mem, tcp_server->socks_listening);
|
||||
mem_delete(tcp_server->mem, tcp_server);
|
||||
}
|
||||
|
Reference in New Issue
Block a user