Skip to content

Commit 2e94da6

Browse files
committed
feat(net): add missing connect to network struct
1 parent 41fb183 commit 2e94da6

File tree

7 files changed

+33
-15
lines changed

7 files changed

+33
-15
lines changed

auto_tests/TCP_test.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ static void test_basic(void)
7474
for (uint8_t i = 0; i < NUM_PORTS; i++) {
7575
sock = net_socket(ns, net_family_ipv6(), TOX_SOCK_STREAM, TOX_PROTO_TCP);
7676
localhost.port = net_htons(ports[i]);
77-
bool ret = net_connect(mem, logger, sock, &localhost);
77+
bool ret = net_connect(ns, mem, logger, sock, &localhost);
7878
ck_assert_msg(ret, "Failed to connect to created TCP relay server on port %d (%d).", ports[i], errno);
7979

8080
// Leave open one connection for the next test.
@@ -213,7 +213,7 @@ static struct sec_TCP_con *new_tcp_con(const Logger *logger, const Memory *mem,
213213
localhost.ip = get_loopback();
214214
localhost.port = net_htons(ports[random_u32(rng) % NUM_PORTS]);
215215

216-
bool ok = net_connect(mem, logger, sock, &localhost);
216+
bool ok = net_connect(ns, mem, logger, sock, &localhost);
217217
ck_assert_msg(ok, "Failed to connect to the test TCP relay server.");
218218

219219
uint8_t f_secret_key[CRYPTO_SECRET_KEY_SIZE];

testing/fuzzing/fuzz_support.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ static constexpr Network_Funcs fuzz_network_funcs = {
111111
/* .accept = */ ![](Fuzz_System *self, Socket sock) { return Socket{1337}; },
112112
/* .bind = */ ![](Fuzz_System *self, Socket sock, const Network_Addr *addr) { return 0; },
113113
/* .listen = */ ![](Fuzz_System *self, Socket sock, int backlog) { return 0; },
114+
/* .connect = */ ![](Fuzz_System *self, Socket sock, const Network_Addr *addr) { return 0; },
114115
/* .recvbuf = */
115116
![](Fuzz_System *self, Socket sock) {
116117
assert(sock.value == 42 || sock.value == 1337);
@@ -225,6 +226,7 @@ static constexpr Network_Funcs null_network_funcs = {
225226
/* .accept = */ ![](Null_System *self, Socket sock) { return Socket{1337}; },
226227
/* .bind = */ ![](Null_System *self, Socket sock, const Network_Addr *addr) { return 0; },
227228
/* .listen = */ ![](Null_System *self, Socket sock, int backlog) { return 0; },
229+
/* .connect = */ ![](Null_System *self, Socket sock, const Network_Addr *addr) { return 0; },
228230
/* .recvbuf = */ ![](Null_System *self, Socket sock) { return 0; },
229231
/* .recv = */
230232
![](Null_System *self, Socket sock, uint8_t *buf, size_t len) {
@@ -341,6 +343,7 @@ static constexpr Network_Funcs record_network_funcs = {
341343
return 0;
342344
},
343345
/* .listen = */ ![](Record_System *self, Socket sock, int backlog) { return 0; },
346+
/* .connect = */ ![](Record_System *self, Socket sock, const Network_Addr *addr) { return 0; },
344347
/* .recvbuf = */ ![](Record_System *self, Socket sock) { return 0; },
345348
/* .recv = */
346349
![](Record_System *self, Socket sock, uint8_t *buf, size_t len) {

toxcore/TCP_client.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,12 @@ void tcp_con_set_custom_uint(TCP_Client_Connection *con, uint32_t value)
107107
* @retval false on failure
108108
*/
109109
non_null()
110-
static bool connect_sock_to(const Logger *logger, const Memory *mem, Socket sock, const IP_Port *ip_port, const TCP_Proxy_Info *proxy_info)
110+
static bool connect_sock_to(const Network *ns, const Logger *logger, const Memory *mem, Socket sock, const IP_Port *ip_port, const TCP_Proxy_Info *proxy_info)
111111
{
112112
if (proxy_info->proxy_type != TCP_PROXY_NONE) {
113-
return net_connect(mem, logger, sock, &proxy_info->ip_port);
113+
return net_connect(ns, mem, logger, sock, &proxy_info->ip_port);
114114
} else {
115-
return net_connect(mem, logger, sock, ip_port);
115+
return net_connect(ns, mem, logger, sock, ip_port);
116116
}
117117
}
118118

@@ -617,7 +617,7 @@ TCP_Client_Connection *new_tcp_connection(
617617
return nullptr;
618618
}
619619

620-
if (!(set_socket_nonblock(ns, sock) && connect_sock_to(logger, mem, sock, ip_port, proxy_info))) {
620+
if (!(set_socket_nonblock(ns, sock) && connect_sock_to(ns, logger, mem, sock, ip_port, proxy_info))) {
621621
kill_sock(ns, sock);
622622
return nullptr;
623623
}

toxcore/network.c

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,12 @@ static int sys_listen(void *obj, Socket sock, int backlog)
513513
return listen(net_socket_to_native(sock), backlog);
514514
}
515515

516+
non_null()
517+
static int sys_connect(void *obj, Socket sock, const Network_Addr *addr)
518+
{
519+
return connect(net_socket_to_native(sock), (const struct sockaddr *)&addr->addr, addr->size);
520+
}
521+
516522
non_null()
517523
static int sys_recvbuf(void *obj, Socket sock)
518524
{
@@ -591,6 +597,7 @@ static const Network_Funcs os_network_funcs = {
591597
sys_accept,
592598
sys_bind,
593599
sys_listen,
600+
sys_connect,
594601
sys_recvbuf,
595602
sys_recv,
596603
sys_recvfrom,
@@ -1921,22 +1928,21 @@ bool addr_resolve_or_parse_ip(const Network *ns, const char *address, IP *to, IP
19211928
return true;
19221929
}
19231930

1924-
bool net_connect(const Memory *mem, const Logger *log, Socket sock, const IP_Port *ip_port)
1931+
bool net_connect(const Network *ns, const Memory *mem, const Logger *log, Socket sock, const IP_Port *ip_port)
19251932
{
1926-
struct sockaddr_storage addr = {0};
1927-
size_t addrsize;
1933+
Network_Addr addr = {{0}};
19281934

19291935
if (net_family_is_ipv4(ip_port->ip.family)) {
1930-
struct sockaddr_in *addr4 = (struct sockaddr_in *)&addr;
1936+
struct sockaddr_in *addr4 = (struct sockaddr_in *)&addr.addr;
19311937

1932-
addrsize = sizeof(struct sockaddr_in);
1938+
addr.size = sizeof(struct sockaddr_in);
19331939
addr4->sin_family = AF_INET;
19341940
fill_addr4(&ip_port->ip.ip.v4, &addr4->sin_addr);
19351941
addr4->sin_port = ip_port->port;
19361942
} else if (net_family_is_ipv6(ip_port->ip.family)) {
1937-
struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)&addr;
1943+
struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)&addr.addr;
19381944

1939-
addrsize = sizeof(struct sockaddr_in6);
1945+
addr.size = sizeof(struct sockaddr_in6);
19401946
addr6->sin6_family = AF_INET6;
19411947
fill_addr6(&ip_port->ip.ip.v6, &addr6->sin6_addr);
19421948
addr6->sin6_port = ip_port->port;
@@ -1958,7 +1964,7 @@ bool net_connect(const Memory *mem, const Logger *log, Socket sock, const IP_Por
19581964
net_socket_to_native(sock), net_ip_ntoa(&ip_port->ip, &ip_str), net_ntohs(ip_port->port));
19591965
errno = 0;
19601966

1961-
if (connect(net_socket_to_native(sock), (struct sockaddr *)&addr, addrsize) == -1) {
1967+
if (ns->funcs->connect(ns->obj, sock, &addr) == -1) {
19621968
const int error = net_error();
19631969

19641970
// Non-blocking socket: "Operation in progress" means it's connecting.

toxcore/network.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ typedef int net_close_cb(void *obj, Socket sock);
3939
typedef Socket net_accept_cb(void *obj, Socket sock);
4040
typedef int net_bind_cb(void *obj, Socket sock, const Network_Addr *addr);
4141
typedef int net_listen_cb(void *obj, Socket sock, int backlog);
42+
typedef int net_connect_cb(void *obj, Socket sock, const Network_Addr *addr);
4243
typedef int net_recvbuf_cb(void *obj, Socket sock);
4344
typedef int net_recv_cb(void *obj, Socket sock, uint8_t *buf, size_t len);
4445
typedef int net_recvfrom_cb(void *obj, Socket sock, uint8_t *buf, size_t len, Network_Addr *addr);
@@ -61,6 +62,7 @@ typedef struct Network_Funcs {
6162
net_accept_cb *accept;
6263
net_bind_cb *bind;
6364
net_listen_cb *listen;
65+
net_connect_cb *connect;
6466
net_recvbuf_cb *recvbuf;
6567
net_recv_cb *recv;
6668
net_recvfrom_cb *recvfrom;
@@ -501,7 +503,7 @@ void networking_poll(const Networking_Core *net, void *userdata);
501503
* Return false on failure.
502504
*/
503505
non_null()
504-
bool net_connect(const Memory *mem, const Logger *log, Socket sock, const IP_Port *ip_port);
506+
bool net_connect(const Network *ns, const Memory *mem, const Logger *log, Socket sock, const IP_Port *ip_port);
505507

506508
/** @brief High-level getaddrinfo implementation.
507509
*

toxcore/network_test_util.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Network_Funcs const Network_Class::vtable = {
1111
Method<net_accept_cb, Network_Class>::invoke<&Network_Class::accept>,
1212
Method<net_bind_cb, Network_Class>::invoke<&Network_Class::bind>,
1313
Method<net_listen_cb, Network_Class>::invoke<&Network_Class::listen>,
14+
Method<net_connect_cb, Network_Class>::invoke<&Network_Class::connect>,
1415
Method<net_recvbuf_cb, Network_Class>::invoke<&Network_Class::recvbuf>,
1516
Method<net_recv_cb, Network_Class>::invoke<&Network_Class::recv>,
1617
Method<net_recvfrom_cb, Network_Class>::invoke<&Network_Class::recvfrom>,
@@ -34,6 +35,10 @@ int Test_Network::listen(void *obj, Socket sock, int backlog)
3435
{
3536
return net->funcs->listen(net->obj, sock, backlog);
3637
}
38+
int Test_Network::connect(void *obj, Socket sock, const Network_Addr *addr)
39+
{
40+
return net->funcs->connect(net->obj, sock, addr);
41+
}
3742
int Test_Network::recvbuf(void *obj, Socket sock) { return net->funcs->recvbuf(net->obj, sock); }
3843
int Test_Network::recv(void *obj, Socket sock, uint8_t *buf, size_t len)
3944
{

toxcore/network_test_util.hh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ struct Network_Class {
2424
virtual net_accept_cb accept = 0;
2525
virtual net_bind_cb bind = 0;
2626
virtual net_listen_cb listen = 0;
27+
virtual net_connect_cb connect = 0;
2728
virtual net_recvbuf_cb recvbuf = 0;
2829
virtual net_recv_cb recv = 0;
2930
virtual net_recvfrom_cb recvfrom = 0;
@@ -48,6 +49,7 @@ class Test_Network : public Network_Class {
4849
Socket accept(void *obj, Socket sock) override;
4950
int bind(void *obj, Socket sock, const Network_Addr *addr) override;
5051
int listen(void *obj, Socket sock, int backlog) override;
52+
int connect(void *obj, Socket sock, const Network_Addr *addr) override;
5153
int recvbuf(void *obj, Socket sock) override;
5254
int recv(void *obj, Socket sock, uint8_t *buf, size_t len) override;
5355
int recvfrom(void *obj, Socket sock, uint8_t *buf, size_t len, Network_Addr *addr) override;

0 commit comments

Comments
 (0)