mirror of
https://github.com/irungentoo/toxcore.git
synced 2024-03-22 13:30:51 +08:00
Move system header includes from network.h to network.c
This commit is contained in:
parent
291a849a5a
commit
be797d4b03
|
@ -10,7 +10,7 @@ install:
|
|||
- cd third_party
|
||||
# libsodium
|
||||
- mkdir libsodium && cd libsodium
|
||||
- if not exist %APPDATA%\downloads\libsodium.zip curl -L https://download.libsodium.org/libsodium/releases/libsodium-1.0.12-msvc.zip -o %APPDATA%\downloads\libsodium.zip
|
||||
- if not exist %APPDATA%\downloads\libsodium.zip curl -L https://download.libsodium.org/libsodium/releases/libsodium-1.0.16-msvc.zip -o %APPDATA%\downloads\libsodium.zip
|
||||
- unzip %APPDATA%\downloads\libsodium.zip
|
||||
- cd ..
|
||||
# pthreads-win32
|
||||
|
|
|
@ -83,14 +83,14 @@ START_TEST(test_basic)
|
|||
TCP_HANDSHAKE_PLAIN_SIZE, handshake + CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_NONCE_SIZE);
|
||||
ck_assert_msg(ret == TCP_CLIENT_HANDSHAKE_SIZE - (CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_NONCE_SIZE),
|
||||
"Encrypt failed.");
|
||||
ck_assert_msg(send(sock, (const char *)handshake, TCP_CLIENT_HANDSHAKE_SIZE - 1, 0) == TCP_CLIENT_HANDSHAKE_SIZE - 1,
|
||||
ck_assert_msg(net_send(sock, handshake, TCP_CLIENT_HANDSHAKE_SIZE - 1) == TCP_CLIENT_HANDSHAKE_SIZE - 1,
|
||||
"send Failed.");
|
||||
c_sleep(50);
|
||||
do_TCP_server(tcp_s);
|
||||
c_sleep(50);
|
||||
do_TCP_server(tcp_s);
|
||||
c_sleep(50);
|
||||
ck_assert_msg(send(sock, (const char *)(handshake + (TCP_CLIENT_HANDSHAKE_SIZE - 1)), 1, 0) == 1, "send Failed.");
|
||||
ck_assert_msg(net_send(sock, handshake + (TCP_CLIENT_HANDSHAKE_SIZE - 1), 1) == 1, "send Failed.");
|
||||
c_sleep(50);
|
||||
do_TCP_server(tcp_s);
|
||||
c_sleep(50);
|
||||
|
@ -98,7 +98,7 @@ START_TEST(test_basic)
|
|||
c_sleep(50);
|
||||
uint8_t response[TCP_SERVER_HANDSHAKE_SIZE];
|
||||
uint8_t response_plain[TCP_HANDSHAKE_PLAIN_SIZE];
|
||||
ck_assert_msg(recv(sock, (char *)response, TCP_SERVER_HANDSHAKE_SIZE, 0) == TCP_SERVER_HANDSHAKE_SIZE, "recv Failed.");
|
||||
ck_assert_msg(net_recv(sock, response, TCP_SERVER_HANDSHAKE_SIZE) == TCP_SERVER_HANDSHAKE_SIZE, "recv Failed.");
|
||||
ret = decrypt_data(self_public_key, f_secret_key, response, response + CRYPTO_NONCE_SIZE,
|
||||
TCP_SERVER_HANDSHAKE_SIZE - CRYPTO_NONCE_SIZE, response_plain);
|
||||
ck_assert_msg(ret == TCP_HANDSHAKE_PLAIN_SIZE, "Decrypt Failed.");
|
||||
|
@ -118,8 +118,10 @@ START_TEST(test_basic)
|
|||
uint32_t i;
|
||||
|
||||
for (i = 0; i < sizeof(r_req); ++i) {
|
||||
ck_assert_msg(send(sock, (const char *)(r_req + i), 1, 0) == 1, "send Failed.");
|
||||
//ck_assert_msg(send(sock, (const char *)r_req, sizeof(r_req), 0) == sizeof(r_req), "send Failed.");
|
||||
ck_assert_msg(net_send(sock, r_req + i, 1) == 1, "send Failed.");
|
||||
#if 0
|
||||
ck_assert_msg(net_send(sock, r_req, sizeof(r_req)) == sizeof(r_req), "send Failed.");
|
||||
#endif
|
||||
do_TCP_server(tcp_s);
|
||||
c_sleep(50);
|
||||
}
|
||||
|
@ -127,7 +129,7 @@ START_TEST(test_basic)
|
|||
do_TCP_server(tcp_s);
|
||||
c_sleep(50);
|
||||
uint8_t packet_resp[4096];
|
||||
int recv_data_len = recv(sock, (char *)packet_resp, 2 + 2 + CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_MAC_SIZE, 0);
|
||||
int recv_data_len = net_recv(sock, packet_resp, 2 + 2 + CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_MAC_SIZE);
|
||||
ck_assert_msg(recv_data_len == 2 + 2 + CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_MAC_SIZE,
|
||||
"recv Failed. %u", recv_data_len);
|
||||
memcpy(&size, packet_resp, 2);
|
||||
|
@ -180,16 +182,16 @@ static struct sec_TCP_con *new_TCP_con(TCP_Server *tcp_s)
|
|||
TCP_HANDSHAKE_PLAIN_SIZE, handshake + CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_NONCE_SIZE);
|
||||
ck_assert_msg(ret == TCP_CLIENT_HANDSHAKE_SIZE - (CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_NONCE_SIZE),
|
||||
"Encrypt failed.");
|
||||
ck_assert_msg(send(sock, (const char *)handshake, TCP_CLIENT_HANDSHAKE_SIZE - 1, 0) == TCP_CLIENT_HANDSHAKE_SIZE - 1,
|
||||
ck_assert_msg(net_send(sock, handshake, TCP_CLIENT_HANDSHAKE_SIZE - 1) == TCP_CLIENT_HANDSHAKE_SIZE - 1,
|
||||
"send Failed.");
|
||||
do_TCP_server(tcp_s);
|
||||
c_sleep(50);
|
||||
ck_assert_msg(send(sock, (const char *)(handshake + (TCP_CLIENT_HANDSHAKE_SIZE - 1)), 1, 0) == 1, "send Failed.");
|
||||
ck_assert_msg(net_send(sock, handshake + (TCP_CLIENT_HANDSHAKE_SIZE - 1), 1) == 1, "send Failed.");
|
||||
c_sleep(50);
|
||||
do_TCP_server(tcp_s);
|
||||
uint8_t response[TCP_SERVER_HANDSHAKE_SIZE];
|
||||
uint8_t response_plain[TCP_HANDSHAKE_PLAIN_SIZE];
|
||||
ck_assert_msg(recv(sock, (char *)response, TCP_SERVER_HANDSHAKE_SIZE, 0) == TCP_SERVER_HANDSHAKE_SIZE, "recv Failed.");
|
||||
ck_assert_msg(net_recv(sock, response, TCP_SERVER_HANDSHAKE_SIZE) == TCP_SERVER_HANDSHAKE_SIZE, "recv Failed.");
|
||||
ret = decrypt_data(tcp_server_public_key(tcp_s), f_secret_key, response, response + CRYPTO_NONCE_SIZE,
|
||||
TCP_SERVER_HANDSHAKE_SIZE - CRYPTO_NONCE_SIZE, response_plain);
|
||||
ck_assert_msg(ret == TCP_HANDSHAKE_PLAIN_SIZE, "Decrypt Failed.");
|
||||
|
@ -219,13 +221,13 @@ static int write_packet_TCP_secure_connection(struct sec_TCP_con *con, uint8_t *
|
|||
|
||||
increment_nonce(con->sent_nonce);
|
||||
|
||||
ck_assert_msg(send(con->sock, (const char *)packet, SIZEOF_VLA(packet), 0) == SIZEOF_VLA(packet), "send failed");
|
||||
ck_assert_msg(net_send(con->sock, packet, SIZEOF_VLA(packet)) == SIZEOF_VLA(packet), "send failed");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int read_packet_sec_TCP(struct sec_TCP_con *con, uint8_t *data, uint16_t length)
|
||||
{
|
||||
int len = recv(con->sock, (char *)data, length, 0);
|
||||
int len = net_recv(con->sock, data, length);
|
||||
ck_assert_msg(len == length, "wrong len %i\n", len);
|
||||
len = decrypt_data_symmetric(con->shared_key, con->recv_nonce, data + 2, length - 2, data);
|
||||
ck_assert_msg(len != -1, "Decrypt failed");
|
||||
|
|
|
@ -286,7 +286,11 @@ int main(int argc, char *argv[])
|
|||
// toxcore/TCP_server
|
||||
CHECK_SIZE(TCP_Priority_List, 16);
|
||||
CHECK_SIZE(TCP_Secure_Connection, 11816);
|
||||
#ifdef TCP_SERVER_USE_EPOLL
|
||||
CHECK_SIZE(TCP_Server, 6049968); // 6MB!
|
||||
#else
|
||||
CHECK_SIZE(TCP_Server, 6049952); // 6MB!
|
||||
#endif
|
||||
// toxcore/tox
|
||||
CHECK_SIZE(Tox_Options, 64);
|
||||
#endif
|
||||
|
|
|
@ -25,6 +25,8 @@
|
|||
*/
|
||||
#include "bootstrap_node_packets.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#define INFO_REQUEST_PACKET_LENGTH 78
|
||||
|
||||
static uint32_t bootstrap_version;
|
||||
|
|
|
@ -23,12 +23,13 @@
|
|||
|
||||
#include "audio.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "rtp.h"
|
||||
|
||||
#include "../toxcore/logger.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
static struct JitterBuffer *jbuf_new(uint32_t capacity);
|
||||
static void jbuf_clear(struct JitterBuffer *q);
|
||||
static void jbuf_free(struct JitterBuffer *q);
|
||||
|
|
|
@ -23,14 +23,16 @@
|
|||
|
||||
#include "bwcontroller.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "ring_buffer.h"
|
||||
|
||||
#include "../toxcore/logger.h"
|
||||
#include "../toxcore/util.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
|
||||
#define BWC_PACKET_ID 196
|
||||
#define BWC_SEND_INTERVAL_MS 950 /* 0.95s */
|
||||
#define BWC_AVG_PKT_COUNT 20
|
||||
|
|
|
@ -23,6 +23,9 @@
|
|||
|
||||
#include "groupav.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "../toxcore/logger.h"
|
||||
#include "../toxcore/util.h"
|
||||
|
||||
|
|
|
@ -23,16 +23,17 @@
|
|||
|
||||
#include "rtp.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "bwcontroller.h"
|
||||
|
||||
#include "../toxcore/Messenger.h"
|
||||
#include "../toxcore/logger.h"
|
||||
#include "../toxcore/util.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
enum {
|
||||
/**
|
||||
* The number of milliseconds we want to keep a keyframe in the buffer for,
|
||||
|
|
|
@ -23,6 +23,10 @@
|
|||
|
||||
#include "video.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "msi.h"
|
||||
#include "ring_buffer.h"
|
||||
#include "rtp.h"
|
||||
|
@ -30,9 +34,6 @@
|
|||
#include "../toxcore/logger.h"
|
||||
#include "../toxcore/network.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/**
|
||||
* Soft deadline the decoder should attempt to meet, in "us" (microseconds).
|
||||
* Set to zero for unlimited.
|
||||
|
|
|
@ -123,6 +123,11 @@ cc_library(
|
|||
"TCP_connection.c",
|
||||
"TCP_server.c",
|
||||
],
|
||||
copts = select({
|
||||
"//tools/config:freebsd": [],
|
||||
"//tools/config:linux": ["-DTCP_SERVER_USE_EPOLL=1"],
|
||||
"//tools/config:osx": [],
|
||||
}),
|
||||
hdrs = [
|
||||
"TCP_client.h",
|
||||
"TCP_connection.h",
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
*/
|
||||
|
||||
/*
|
||||
* Copyright © 2016-2017 The TokTok team.
|
||||
* Copyright © 2016-2018 The TokTok team.
|
||||
* Copyright © 2013 Tox project.
|
||||
*
|
||||
* This file is part of Tox, the free peer to peer instant messenger.
|
||||
|
@ -34,6 +34,8 @@
|
|||
#include "util.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/* The timeout after which a node is discarded completely. */
|
||||
#define KILL_NODE_TIMEOUT (BAD_NODE_TIMEOUT + PING_INTERVAL)
|
||||
|
|
|
@ -27,6 +27,8 @@
|
|||
|
||||
#include "LAN_discovery.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "util.h"
|
||||
|
||||
#define MAX_INTERFACES 16
|
||||
|
@ -39,6 +41,14 @@ static IP_Port broadcast_ip_ports[MAX_INTERFACES];
|
|||
|
||||
#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
|
||||
|
||||
// The mingw32/64 Windows library warns about including winsock2.h after
|
||||
// windows.h even though with the above it's a valid thing to do. So, to make
|
||||
// mingw32 headers happy, we include winsock2.h first.
|
||||
#include <winsock2.h>
|
||||
|
||||
#include <windows.h>
|
||||
#include <ws2tcpip.h>
|
||||
|
||||
#include <iphlpapi.h>
|
||||
|
||||
static void fetch_broadcast_info(uint16_t port)
|
||||
|
@ -108,6 +118,12 @@ static void fetch_broadcast_info(uint16_t port)
|
|||
|
||||
#elif defined(__linux__) || defined(__FreeBSD__)
|
||||
|
||||
#include <netinet/in.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#ifdef __linux__
|
||||
#include <linux/netdevice.h>
|
||||
#endif
|
||||
|
@ -116,8 +132,6 @@ static void fetch_broadcast_info(uint16_t port)
|
|||
#include <net/if.h>
|
||||
#endif
|
||||
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
static void fetch_broadcast_info(uint16_t port)
|
||||
{
|
||||
/* Not sure how many platforms this will run on,
|
||||
|
@ -127,7 +141,7 @@ static void fetch_broadcast_info(uint16_t port)
|
|||
broadcast_count = 0;
|
||||
const Socket sock = net_socket(TOX_AF_INET, TOX_SOCK_STREAM, 0);
|
||||
|
||||
if (sock < 0) {
|
||||
if (!sock_valid(sock)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -139,8 +153,8 @@ static void fetch_broadcast_info(uint16_t port)
|
|||
ifconf.ifc_buf = (char *)i_faces;
|
||||
ifconf.ifc_len = sizeof(i_faces);
|
||||
|
||||
if (ioctl(sock, SIOCGIFCONF, &ifconf) < 0) {
|
||||
close(sock);
|
||||
if (ioctl(sock.socket, SIOCGIFCONF, &ifconf) < 0) {
|
||||
kill_sock(sock);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -160,12 +174,12 @@ static void fetch_broadcast_info(uint16_t port)
|
|||
|
||||
for (int i = 0; i < n; i++) {
|
||||
/* there are interfaces with are incapable of broadcast */
|
||||
if (ioctl(sock, SIOCGIFBRDADDR, &i_faces[i]) < 0) {
|
||||
if (ioctl(sock.socket, SIOCGIFBRDADDR, &i_faces[i]) < 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
/* moot check: only TOX_AF_INET returned (backwards compat.) */
|
||||
if (i_faces[i].ifr_broadaddr.sa_family != TOX_AF_INET) {
|
||||
/* moot check: only AF_INET returned (backwards compat.) */
|
||||
if (i_faces[i].ifr_broadaddr.sa_family != AF_INET) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -187,7 +201,7 @@ static void fetch_broadcast_info(uint16_t port)
|
|||
count++;
|
||||
}
|
||||
|
||||
close(sock);
|
||||
kill_sock(sock);
|
||||
|
||||
broadcast_count = count;
|
||||
|
||||
|
|
|
@ -27,12 +27,16 @@
|
|||
|
||||
#include "Messenger.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "logger.h"
|
||||
#include "network.h"
|
||||
#include "util.h"
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
static int write_cryptpacket_id(const Messenger *m, int32_t friendnumber, uint8_t packet_id, const uint8_t *data,
|
||||
uint32_t length, uint8_t congestion_control);
|
||||
|
||||
|
|
|
@ -27,11 +27,11 @@
|
|||
|
||||
#include "TCP_client.h"
|
||||
|
||||
#include "util.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#if !defined(_WIN32) && !defined(__WIN32__) && !defined (WIN32)
|
||||
#include <sys/ioctl.h>
|
||||
#endif
|
||||
#include "util.h"
|
||||
|
||||
struct TCP_Client_Connection {
|
||||
TCP_CLIENT_STATUS status;
|
||||
|
@ -177,7 +177,7 @@ static int proxy_http_read_connection_response(TCP_Client_Connection *TCP_conn)
|
|||
|
||||
if (strstr((char *)data, success)) {
|
||||
// drain all data
|
||||
unsigned int data_left = TCP_socket_data_recv_buffer(TCP_conn->sock);
|
||||
unsigned int data_left = net_socket_data_recv_buffer(TCP_conn->sock);
|
||||
|
||||
if (data_left) {
|
||||
VLA(uint8_t, temp_data, data_left);
|
||||
|
@ -332,9 +332,8 @@ static int client_send_pending_data_nonpriority(TCP_Client_Connection *con)
|
|||
return 0;
|
||||
}
|
||||
|
||||
uint16_t left = con->last_packet_length - con->last_packet_sent;
|
||||
const char *data = (const char *)(con->last_packet + con->last_packet_sent);
|
||||
int len = send(con->sock, data, left, MSG_NOSIGNAL);
|
||||
const uint16_t left = con->last_packet_length - con->last_packet_sent;
|
||||
const int len = net_send(con->sock, con->last_packet + con->last_packet_sent, left);
|
||||
|
||||
if (len <= 0) {
|
||||
return -1;
|
||||
|
@ -363,8 +362,8 @@ static int client_send_pending_data(TCP_Client_Connection *con)
|
|||
TCP_Priority_List *p = con->priority_queue_start;
|
||||
|
||||
while (p) {
|
||||
uint16_t left = p->size - p->sent;
|
||||
int len = send(con->sock, (const char *)(p->data + p->sent), left, MSG_NOSIGNAL);
|
||||
const uint16_t left = p->size - p->sent;
|
||||
const int len = net_send(con->sock, p->data + p->sent, left);
|
||||
|
||||
if (len != left) {
|
||||
if (len > 0) {
|
||||
|
@ -459,7 +458,7 @@ static int write_packet_TCP_client_secure_connection(TCP_Client_Connection *con,
|
|||
}
|
||||
|
||||
if (priority) {
|
||||
len = sendpriority ? send(con->sock, (const char *)packet, SIZEOF_VLA(packet), MSG_NOSIGNAL) : 0;
|
||||
len = sendpriority ? net_send(con->sock, packet, SIZEOF_VLA(packet)) : 0;
|
||||
|
||||
if (len <= 0) {
|
||||
len = 0;
|
||||
|
@ -474,7 +473,7 @@ static int write_packet_TCP_client_secure_connection(TCP_Client_Connection *con,
|
|||
return client_add_priority(con, packet, SIZEOF_VLA(packet), len);
|
||||
}
|
||||
|
||||
len = send(con->sock, (const char *)packet, SIZEOF_VLA(packet), MSG_NOSIGNAL);
|
||||
len = net_send(con->sock, packet, SIZEOF_VLA(packet));
|
||||
|
||||
if (len <= 0) {
|
||||
return 0;
|
||||
|
|
|
@ -27,9 +27,11 @@
|
|||
|
||||
#include "TCP_connection.h"
|
||||
|
||||
#include "util.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "util.h"
|
||||
|
||||
|
||||
struct TCP_Connections {
|
||||
|
|
|
@ -27,12 +27,20 @@
|
|||
|
||||
#include "TCP_server.h"
|
||||
|
||||
#include "util.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#if !defined(_WIN32) && !defined(__WIN32__) && !defined (WIN32)
|
||||
#include <sys/ioctl.h>
|
||||
#endif
|
||||
|
||||
#ifdef TCP_SERVER_USE_EPOLL
|
||||
#include <sys/epoll.h>
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "util.h"
|
||||
|
||||
typedef struct TCP_Secure_Connection {
|
||||
Socket sock;
|
||||
uint8_t public_key[CRYPTO_PUBLIC_KEY_SIZE];
|
||||
|
@ -231,22 +239,6 @@ static int del_accepted(TCP_Server *TCP_server, int index)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* return the amount of data in the tcp recv buffer.
|
||||
* return 0 on failure.
|
||||
*/
|
||||
unsigned int TCP_socket_data_recv_buffer(Socket sock)
|
||||
{
|
||||
#if defined(_WIN32) || defined(__WIN32__) || defined (WIN32)
|
||||
unsigned long count = 0;
|
||||
ioctlsocket(sock, FIONREAD, &count);
|
||||
#else
|
||||
int count = 0;
|
||||
ioctl(sock, FIONREAD, &count);
|
||||
#endif
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
/* Read the next two bytes in TCP stream then convert them to
|
||||
* length (host byte order).
|
||||
*
|
||||
|
@ -256,11 +248,11 @@ unsigned int TCP_socket_data_recv_buffer(Socket sock)
|
|||
*/
|
||||
uint16_t read_TCP_length(Socket sock)
|
||||
{
|
||||
unsigned int count = TCP_socket_data_recv_buffer(sock);
|
||||
const unsigned int count = net_socket_data_recv_buffer(sock);
|
||||
|
||||
if (count >= sizeof(uint16_t)) {
|
||||
uint16_t length;
|
||||
int len = recv(sock, (char *)&length, sizeof(uint16_t), MSG_NOSIGNAL);
|
||||
const int len = net_recv(sock, &length, sizeof(uint16_t));
|
||||
|
||||
if (len != sizeof(uint16_t)) {
|
||||
fprintf(stderr, "FAIL recv packet\n");
|
||||
|
@ -286,10 +278,10 @@ uint16_t read_TCP_length(Socket sock)
|
|||
*/
|
||||
int read_TCP_packet(Socket sock, uint8_t *data, uint16_t length)
|
||||
{
|
||||
unsigned int count = TCP_socket_data_recv_buffer(sock);
|
||||
unsigned int count = net_socket_data_recv_buffer(sock);
|
||||
|
||||
if (count >= length) {
|
||||
int len = recv(sock, (char *)data, length, MSG_NOSIGNAL);
|
||||
const int len = net_recv(sock, data, length);
|
||||
|
||||
if (len != length) {
|
||||
fprintf(stderr, "FAIL recv packet\n");
|
||||
|
@ -356,8 +348,8 @@ static int send_pending_data_nonpriority(TCP_Secure_Connection *con)
|
|||
return 0;
|
||||
}
|
||||
|
||||
uint16_t left = con->last_packet_length - con->last_packet_sent;
|
||||
int len = send(con->sock, (const char *)(con->last_packet + con->last_packet_sent), left, MSG_NOSIGNAL);
|
||||
const uint16_t left = con->last_packet_length - con->last_packet_sent;
|
||||
const int len = net_send(con->sock, con->last_packet + con->last_packet_sent, left);
|
||||
|
||||
if (len <= 0) {
|
||||
return -1;
|
||||
|
@ -386,8 +378,8 @@ static int send_pending_data(TCP_Secure_Connection *con)
|
|||
TCP_Priority_List *p = con->priority_queue_start;
|
||||
|
||||
while (p) {
|
||||
uint16_t left = p->size - p->sent;
|
||||
int len = send(con->sock, (const char *)(p->data + p->sent), left, MSG_NOSIGNAL);
|
||||
const uint16_t left = p->size - p->sent;
|
||||
const int len = net_send(con->sock, p->data + p->sent, left);
|
||||
|
||||
if (len != left) {
|
||||
if (len > 0) {
|
||||
|
@ -462,7 +454,7 @@ static int write_packet_TCP_secure_connection(TCP_Secure_Connection *con, const
|
|||
|
||||
VLA(uint8_t, packet, sizeof(uint16_t) + length + CRYPTO_MAC_SIZE);
|
||||
|
||||
uint16_t c_length = net_htons(length + CRYPTO_MAC_SIZE);
|
||||
const uint16_t c_length = net_htons(length + CRYPTO_MAC_SIZE);
|
||||
memcpy(packet, &c_length, sizeof(uint16_t));
|
||||
int len = encrypt_data_symmetric(con->shared_key, con->sent_nonce, data, length, packet + sizeof(uint16_t));
|
||||
|
||||
|
@ -471,7 +463,7 @@ static int write_packet_TCP_secure_connection(TCP_Secure_Connection *con, const
|
|||
}
|
||||
|
||||
if (priority) {
|
||||
len = sendpriority ? send(con->sock, (const char *)packet, SIZEOF_VLA(packet), MSG_NOSIGNAL) : 0;
|
||||
len = sendpriority ? net_send(con->sock, packet, SIZEOF_VLA(packet)) : 0;
|
||||
|
||||
if (len <= 0) {
|
||||
len = 0;
|
||||
|
@ -486,7 +478,7 @@ static int write_packet_TCP_secure_connection(TCP_Secure_Connection *con, const
|
|||
return add_priority(con, packet, SIZEOF_VLA(packet), len);
|
||||
}
|
||||
|
||||
len = send(con->sock, (const char *)packet, SIZEOF_VLA(packet), MSG_NOSIGNAL);
|
||||
len = net_send(con->sock, packet, SIZEOF_VLA(packet));
|
||||
|
||||
if (len <= 0) {
|
||||
return 0;
|
||||
|
@ -583,7 +575,7 @@ static int handle_TCP_handshake(TCP_Secure_Connection *con, const uint8_t *data,
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (TCP_SERVER_HANDSHAKE_SIZE != send(con->sock, (const char *)response, TCP_SERVER_HANDSHAKE_SIZE, MSG_NOSIGNAL)) {
|
||||
if (TCP_SERVER_HANDSHAKE_SIZE != net_send(con->sock, response, TCP_SERVER_HANDSHAKE_SIZE)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -1005,12 +997,12 @@ static int accept_connection(TCP_Server *TCP_server, Socket sock)
|
|||
return index;
|
||||
}
|
||||
|
||||
static Socket new_listening_TCP_socket(int family, uint16_t port)
|
||||
static Socket new_listening_TCP_socket(Family family, uint16_t port)
|
||||
{
|
||||
Socket sock = net_socket(family, TOX_SOCK_STREAM, TOX_PROTO_TCP);
|
||||
|
||||
if (!sock_valid(sock)) {
|
||||
return ~0;
|
||||
return net_invalid_socket;
|
||||
}
|
||||
|
||||
int ok = set_socket_nonblock(sock);
|
||||
|
@ -1023,11 +1015,11 @@ static Socket new_listening_TCP_socket(int family, uint16_t port)
|
|||
ok = set_socket_reuseaddr(sock);
|
||||
}
|
||||
|
||||
ok = ok && bind_to_port(sock, family, port) && (listen(sock, TCP_MAX_BACKLOG) == 0);
|
||||
ok = ok && bind_to_port(sock, family, port) && (net_listen(sock, TCP_MAX_BACKLOG) == 0);
|
||||
|
||||
if (!ok) {
|
||||
kill_sock(sock);
|
||||
return ~0;
|
||||
return net_invalid_socket;
|
||||
}
|
||||
|
||||
return sock;
|
||||
|
@ -1087,9 +1079,9 @@ TCP_Server *new_TCP_server(uint8_t ipv6_enabled, uint16_t num_sockets, const uin
|
|||
if (sock_valid(sock)) {
|
||||
#ifdef TCP_SERVER_USE_EPOLL
|
||||
ev.events = EPOLLIN | EPOLLET;
|
||||
ev.data.u64 = sock | ((uint64_t)TCP_SOCKET_LISTENING << 32);
|
||||
ev.data.u64 = sock.socket | ((uint64_t)TCP_SOCKET_LISTENING << 32);
|
||||
|
||||
if (epoll_ctl(temp->efd, EPOLL_CTL_ADD, sock, &ev) == -1) {
|
||||
if (epoll_ctl(temp->efd, EPOLL_CTL_ADD, sock.socket, &ev) == -1) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -1119,20 +1111,20 @@ TCP_Server *new_TCP_server(uint8_t ipv6_enabled, uint16_t num_sockets, const uin
|
|||
return temp;
|
||||
}
|
||||
|
||||
#ifndef TCP_SERVER_USE_EPOLL
|
||||
static void do_TCP_accept_new(TCP_Server *TCP_server)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
for (i = 0; i < TCP_server->num_listening_socks; ++i) {
|
||||
struct sockaddr_storage addr;
|
||||
socklen_t addrlen = sizeof(addr);
|
||||
Socket sock;
|
||||
|
||||
do {
|
||||
sock = accept(TCP_server->socks_listening[i], (struct sockaddr *)&addr, &addrlen);
|
||||
sock = net_accept(TCP_server->socks_listening[i]);
|
||||
} while (accept_connection(TCP_server, sock) != -1);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static int do_incoming(TCP_Server *TCP_server, uint32_t i)
|
||||
{
|
||||
|
@ -1208,6 +1200,7 @@ static void do_confirmed_recv(TCP_Server *TCP_server, uint32_t i)
|
|||
}
|
||||
}
|
||||
|
||||
#ifndef TCP_SERVER_USE_EPOLL
|
||||
static void do_TCP_incoming(TCP_Server *TCP_server)
|
||||
{
|
||||
uint32_t i;
|
||||
|
@ -1225,6 +1218,7 @@ static void do_TCP_unconfirmed(TCP_Server *TCP_server)
|
|||
do_unconfirmed(TCP_server, i);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void do_TCP_confirmed(TCP_Server *TCP_server)
|
||||
{
|
||||
|
@ -1294,8 +1288,9 @@ static void do_TCP_epoll(TCP_Server *TCP_server)
|
|||
int n;
|
||||
|
||||
for (n = 0; n < nfds; ++n) {
|
||||
Socket sock = events[n].data.u64 & 0xFFFFFFFF;
|
||||
int status = (events[n].data.u64 >> 32) & 0xFF, index = (events[n].data.u64 >> 40);
|
||||
const Socket sock = {(int)(events[n].data.u64 & 0xFFFFFFFF)};
|
||||
const int status = (events[n].data.u64 >> 32) & 0xFF;
|
||||
const int index = events[n].data.u64 >> 40;
|
||||
|
||||
if ((events[n].events & EPOLLERR) || (events[n].events & EPOLLHUP) || (events[n].events & EPOLLRDHUP)) {
|
||||
switch (status) {
|
||||
|
@ -1331,11 +1326,8 @@ static void do_TCP_epoll(TCP_Server *TCP_server)
|
|||
switch (status) {
|
||||
case TCP_SOCKET_LISTENING: {
|
||||
//socket is from socks_listening, accept connection
|
||||
struct sockaddr_storage addr;
|
||||
socklen_t addrlen = sizeof(addr);
|
||||
|
||||
while (1) {
|
||||
Socket sock_new = accept(sock, (struct sockaddr *)&addr, &addrlen);
|
||||
Socket sock_new = net_accept(sock);
|
||||
|
||||
if (!sock_valid(sock_new)) {
|
||||
break;
|
||||
|
@ -1349,10 +1341,10 @@ static void do_TCP_epoll(TCP_Server *TCP_server)
|
|||
|
||||
struct epoll_event ev = {
|
||||
.events = EPOLLIN | EPOLLET | EPOLLRDHUP,
|
||||
.data.u64 = sock_new | ((uint64_t)TCP_SOCKET_INCOMING << 32) | ((uint64_t)index_new << 40)
|
||||
.data.u64 = sock_new.socket | ((uint64_t)TCP_SOCKET_INCOMING << 32) | ((uint64_t)index_new << 40)
|
||||
};
|
||||
|
||||
if (epoll_ctl(TCP_server->efd, EPOLL_CTL_ADD, sock_new, &ev) == -1) {
|
||||
if (epoll_ctl(TCP_server->efd, EPOLL_CTL_ADD, sock_new.socket, &ev) == -1) {
|
||||
kill_TCP_secure_connection(&TCP_server->incoming_connection_queue[index_new]);
|
||||
continue;
|
||||
}
|
||||
|
@ -1366,9 +1358,9 @@ static void do_TCP_epoll(TCP_Server *TCP_server)
|
|||
|
||||
if ((index_new = do_incoming(TCP_server, index)) != -1) {
|
||||
events[n].events = EPOLLIN | EPOLLET | EPOLLRDHUP;
|
||||
events[n].data.u64 = sock | ((uint64_t)TCP_SOCKET_UNCONFIRMED << 32) | ((uint64_t)index_new << 40);
|
||||
events[n].data.u64 = sock.socket | ((uint64_t)TCP_SOCKET_UNCONFIRMED << 32) | ((uint64_t)index_new << 40);
|
||||
|
||||
if (epoll_ctl(TCP_server->efd, EPOLL_CTL_MOD, sock, &events[n]) == -1) {
|
||||
if (epoll_ctl(TCP_server->efd, EPOLL_CTL_MOD, sock.socket, &events[n]) == -1) {
|
||||
kill_TCP_secure_connection(&TCP_server->unconfirmed_connection_queue[index_new]);
|
||||
break;
|
||||
}
|
||||
|
@ -1382,9 +1374,9 @@ static void do_TCP_epoll(TCP_Server *TCP_server)
|
|||
|
||||
if ((index_new = do_unconfirmed(TCP_server, index)) != -1) {
|
||||
events[n].events = EPOLLIN | EPOLLET | EPOLLRDHUP;
|
||||
events[n].data.u64 = sock | ((uint64_t)TCP_SOCKET_CONFIRMED << 32) | ((uint64_t)index_new << 40);
|
||||
events[n].data.u64 = sock.socket | ((uint64_t)TCP_SOCKET_CONFIRMED << 32) | ((uint64_t)index_new << 40);
|
||||
|
||||
if (epoll_ctl(TCP_server->efd, EPOLL_CTL_MOD, sock, &events[n]) == -1) {
|
||||
if (epoll_ctl(TCP_server->efd, EPOLL_CTL_MOD, sock.socket, &events[n]) == -1) {
|
||||
//remove from confirmed connections
|
||||
kill_accepted(TCP_server, index_new);
|
||||
break;
|
||||
|
|
|
@ -32,11 +32,6 @@
|
|||
#include <sys/epoll.h>
|
||||
#endif
|
||||
|
||||
// Disable MSG_NOSIGNAL on systems not supporting it, e.g. Windows, FreeBSD
|
||||
#if !defined(MSG_NOSIGNAL)
|
||||
#define MSG_NOSIGNAL 0
|
||||
#endif
|
||||
|
||||
#define MAX_INCOMING_CONNECTIONS 256
|
||||
|
||||
#define TCP_MAX_BACKLOG MAX_INCOMING_CONNECTIONS
|
||||
|
@ -108,11 +103,6 @@ void do_TCP_server(TCP_Server *TCP_server);
|
|||
*/
|
||||
void kill_TCP_server(TCP_Server *TCP_server);
|
||||
|
||||
/* return the amount of data in the tcp recv buffer.
|
||||
* return 0 on failure.
|
||||
*/
|
||||
unsigned int TCP_socket_data_recv_buffer(Socket sock);
|
||||
|
||||
/* Read the next two bytes in TCP stream then convert them to
|
||||
* length (host byte order).
|
||||
*
|
||||
|
|
|
@ -26,8 +26,8 @@
|
|||
#define CRYPTO_CORE_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
|
|
@ -25,8 +25,8 @@
|
|||
#define CRYPTO_CORE_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
|
|
@ -27,6 +27,10 @@
|
|||
|
||||
#include "friend_connection.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "util.h"
|
||||
|
||||
#define PORTS_PER_DISCOVERY 10
|
||||
|
|
|
@ -27,6 +27,9 @@
|
|||
|
||||
#include "friend_requests.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "util.h"
|
||||
|
||||
struct Friend_Requests {
|
||||
|
|
|
@ -27,6 +27,9 @@
|
|||
|
||||
#include "group.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "util.h"
|
||||
|
||||
/* return 1 if the groupnumber is not valid.
|
||||
|
|
|
@ -29,6 +29,9 @@
|
|||
|
||||
#include "list.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "ccompat.h"
|
||||
|
||||
/* Basically, the elements in the list are placed in order so that they can be searched for easily
|
||||
|
|
|
@ -27,8 +27,6 @@
|
|||
#define LIST_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
typedef struct {
|
||||
uint32_t n; //number of elements
|
||||
|
|
|
@ -29,9 +29,11 @@
|
|||
|
||||
#include "net_crypto.h"
|
||||
|
||||
#include "util.h"
|
||||
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "util.h"
|
||||
|
||||
typedef struct {
|
||||
uint64_t sent_time;
|
||||
|
|
|
@ -38,44 +38,65 @@
|
|||
#define _WIN32_WINNT 0x501
|
||||
#endif
|
||||
|
||||
#if !defined(OS_WIN32) && (defined(_WIN32) || defined(__WIN32__) || defined(WIN32))
|
||||
#define OS_WIN32
|
||||
#endif
|
||||
|
||||
#ifdef OS_WIN32
|
||||
#ifndef WINVER
|
||||
//Windows XP
|
||||
#define WINVER 0x0501
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef PLAN9
|
||||
#include <u.h> // Plan 9 requires this is imported first
|
||||
// Comment line here to avoid reordering by source code formatters.
|
||||
#include <libc.h>
|
||||
#endif
|
||||
|
||||
#ifdef OS_WIN32 /* Put win32 includes here */
|
||||
// The mingw32/64 Windows library warns about including winsock2.h after
|
||||
// windows.h even though with the above it's a valid thing to do. So, to make
|
||||
// mingw32 headers happy, we include winsock2.h first.
|
||||
#include <winsock2.h>
|
||||
// Comment line here to avoid reordering by source code formatters.
|
||||
#include <windows.h>
|
||||
#include <ws2tcpip.h>
|
||||
#endif
|
||||
|
||||
#include "network.h"
|
||||
|
||||
#include "logger.h"
|
||||
#include "util.h"
|
||||
|
||||
#include <assert.h>
|
||||
#ifdef __APPLE__
|
||||
#include <mach/clock.h>
|
||||
#include <mach/mach.h>
|
||||
#endif
|
||||
|
||||
#ifndef IPV6_ADD_MEMBERSHIP
|
||||
#ifdef IPV6_JOIN_GROUP
|
||||
#define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !(defined(_WIN32) || defined(__WIN32__) || defined(WIN32))
|
||||
#if !defined(OS_WIN32)
|
||||
|
||||
#include <arpa/inet.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <netdb.h>
|
||||
#include <netinet/in.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define TOX_EWOULDBLOCK EWOULDBLOCK
|
||||
|
||||
#else
|
||||
|
||||
#ifndef IPV6_V6ONLY
|
||||
#define IPV6_V6ONLY 27
|
||||
#endif
|
||||
|
||||
#define TOX_EWOULDBLOCK WSAEWOULDBLOCK
|
||||
|
||||
static const char *inet_ntop(Family family, const void *addr, char *buf, size_t bufsize)
|
||||
static const char *inet_ntop(int family, const void *addr, char *buf, size_t bufsize)
|
||||
{
|
||||
if (family == TOX_AF_INET) {
|
||||
if (family == AF_INET) {
|
||||
struct sockaddr_in saddr;
|
||||
memset(&saddr, 0, sizeof(saddr));
|
||||
|
||||
|
@ -89,7 +110,7 @@ static const char *inet_ntop(Family family, const void *addr, char *buf, size_t
|
|||
}
|
||||
|
||||
return buf;
|
||||
} else if (family == TOX_AF_INET6) {
|
||||
} else if (family == AF_INET6) {
|
||||
struct sockaddr_in6 saddr;
|
||||
memset(&saddr, 0, sizeof(saddr));
|
||||
|
||||
|
@ -108,9 +129,9 @@ static const char *inet_ntop(Family family, const void *addr, char *buf, size_t
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
static int inet_pton(Family family, const char *addrString, void *addrbuf)
|
||||
static int inet_pton(int family, const char *addrString, void *addrbuf)
|
||||
{
|
||||
if (family == TOX_AF_INET) {
|
||||
if (family == AF_INET) {
|
||||
struct sockaddr_in saddr;
|
||||
memset(&saddr, 0, sizeof(saddr));
|
||||
|
||||
|
@ -123,7 +144,7 @@ static int inet_pton(Family family, const char *addrString, void *addrbuf)
|
|||
*(struct in_addr *)addrbuf = saddr.sin_addr;
|
||||
|
||||
return 1;
|
||||
} else if (family == TOX_AF_INET6) {
|
||||
} else if (family == AF_INET6) {
|
||||
struct sockaddr_in6 saddr;
|
||||
memset(&saddr, 0, sizeof(saddr));
|
||||
|
||||
|
@ -143,6 +164,25 @@ static int inet_pton(Family family, const char *addrString, void *addrbuf)
|
|||
|
||||
#endif
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "logger.h"
|
||||
#include "util.h"
|
||||
|
||||
// Disable MSG_NOSIGNAL on systems not supporting it, e.g. Windows, FreeBSD
|
||||
#if !defined(MSG_NOSIGNAL)
|
||||
#define MSG_NOSIGNAL 0
|
||||
#endif
|
||||
|
||||
#ifndef IPV6_ADD_MEMBERSHIP
|
||||
#ifdef IPV6_JOIN_GROUP
|
||||
#define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if TOX_INET6_ADDRSTRLEN < INET6_ADDRSTRLEN
|
||||
#error TOX_INET6_ADDRSTRLEN should be greater or equal to INET6_ADDRSTRLEN (#INET6_ADDRSTRLEN)
|
||||
#endif
|
||||
|
@ -153,8 +193,40 @@ static int inet_pton(Family family, const char *addrString, void *addrbuf)
|
|||
|
||||
static int make_proto(int proto);
|
||||
static int make_socktype(int type);
|
||||
static int make_family(int tox_family);
|
||||
static int make_tox_family(int family);
|
||||
|
||||
static int make_family(Family tox_family)
|
||||
{
|
||||
switch (tox_family) {
|
||||
case TOX_AF_INET:
|
||||
return AF_INET;
|
||||
|
||||
case TOX_AF_INET6:
|
||||
return AF_INET6;
|
||||
|
||||
case TOX_AF_UNSPEC:
|
||||
return AF_UNSPEC;
|
||||
|
||||
default:
|
||||
return tox_family;
|
||||
}
|
||||
}
|
||||
|
||||
static Family make_tox_family(int family)
|
||||
{
|
||||
switch (family) {
|
||||
case AF_INET:
|
||||
return TOX_AF_INET;
|
||||
|
||||
case AF_INET6:
|
||||
return TOX_AF_INET6;
|
||||
|
||||
case AF_UNSPEC:
|
||||
return TOX_AF_UNSPEC;
|
||||
|
||||
default:
|
||||
return family;
|
||||
}
|
||||
}
|
||||
|
||||
static void get_ip4(IP4 *result, const struct in_addr *addr)
|
||||
{
|
||||
|
@ -201,6 +273,14 @@ IP6 get_ip6_loopback(void)
|
|||
return loopback;
|
||||
}
|
||||
|
||||
const Socket net_invalid_socket = {
|
||||
#ifdef OS_WIN32
|
||||
(int)INVALID_SOCKET,
|
||||
#else
|
||||
-1,
|
||||
#endif
|
||||
};
|
||||
|
||||
/* Check if socket is valid.
|
||||
*
|
||||
* return 1 if valid
|
||||
|
@ -208,27 +288,17 @@ IP6 get_ip6_loopback(void)
|
|||
*/
|
||||
int sock_valid(Socket sock)
|
||||
{
|
||||
#if defined(_WIN32) || defined(__WIN32__) || defined (WIN32)
|
||||
|
||||
if (sock == INVALID_SOCKET) {
|
||||
#else
|
||||
|
||||
if (sock < 0) {
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
return sock.socket != net_invalid_socket.socket;
|
||||
}
|
||||
|
||||
/* Close the socket.
|
||||
*/
|
||||
void kill_sock(Socket sock)
|
||||
{
|
||||
#if defined(_WIN32) || defined(__WIN32__) || defined (WIN32)
|
||||
closesocket(sock);
|
||||
#ifdef OS_WIN32
|
||||
closesocket(sock.socket);
|
||||
#else
|
||||
close(sock);
|
||||
close(sock.socket);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -239,11 +309,11 @@ void kill_sock(Socket sock)
|
|||
*/
|
||||
int set_socket_nonblock(Socket sock)
|
||||
{
|
||||
#if defined(_WIN32) || defined(__WIN32__) || defined (WIN32)
|
||||
#ifdef OS_WIN32
|
||||
u_long mode = 1;
|
||||
return (ioctlsocket(sock, FIONBIO, &mode) == 0);
|
||||
return (ioctlsocket(sock.socket, FIONBIO, &mode) == 0);
|
||||
#else
|
||||
return (fcntl(sock, F_SETFL, O_NONBLOCK, 1) == 0);
|
||||
return (fcntl(sock.socket, F_SETFL, O_NONBLOCK, 1) == 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -256,7 +326,7 @@ int set_socket_nosigpipe(Socket sock)
|
|||
{
|
||||
#if defined(__MACH__)
|
||||
int set = 1;
|
||||
return (setsockopt(sock, SOL_SOCKET, SO_NOSIGPIPE, (const char *)&set, sizeof(int)) == 0);
|
||||
return setsockopt(sock.socket, SOL_SOCKET, SO_NOSIGPIPE, (const char *)&set, sizeof(int)) == 0;
|
||||
#else
|
||||
return 1;
|
||||
#endif
|
||||
|
@ -270,7 +340,7 @@ int set_socket_nosigpipe(Socket sock)
|
|||
int set_socket_reuseaddr(Socket sock)
|
||||
{
|
||||
int set = 1;
|
||||
return (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (const char *)&set, sizeof(set)) == 0);
|
||||
return setsockopt(sock.socket, SOL_SOCKET, SO_REUSEADDR, (const char *)&set, sizeof(set)) == 0;
|
||||
}
|
||||
|
||||
/* Set socket to dual (IPv4 + IPv6 socket)
|
||||
|
@ -282,14 +352,14 @@ int set_socket_dualstack(Socket sock)
|
|||
{
|
||||
int ipv6only = 0;
|
||||
socklen_t optsize = sizeof(ipv6only);
|
||||
int res = getsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (char *)&ipv6only, &optsize);
|
||||
int res = getsockopt(sock.socket, IPPROTO_IPV6, IPV6_V6ONLY, (char *)&ipv6only, &optsize);
|
||||
|
||||
if ((res == 0) && (ipv6only == 0)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
ipv6only = 0;
|
||||
return (setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (const char *)&ipv6only, sizeof(ipv6only)) == 0);
|
||||
return setsockopt(sock.socket, IPPROTO_IPV6, IPV6_V6ONLY, (const char *)&ipv6only, sizeof(ipv6only)) == 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -297,7 +367,7 @@ int set_socket_dualstack(Socket sock)
|
|||
static uint64_t current_time_actual(void)
|
||||
{
|
||||
uint64_t time;
|
||||
#if defined(_WIN32) || defined(__WIN32__) || defined (WIN32)
|
||||
#ifdef OS_WIN32
|
||||
/* This probably works fine */
|
||||
FILETIME ft;
|
||||
GetSystemTimeAsFileTime(&ft);
|
||||
|
@ -315,7 +385,7 @@ static uint64_t current_time_actual(void)
|
|||
}
|
||||
|
||||
|
||||
#if defined(_WIN32) || defined(__WIN32__) || defined (WIN32)
|
||||
#ifdef OS_WIN32
|
||||
static uint64_t last_monotime;
|
||||
static uint64_t add_monotime;
|
||||
#endif
|
||||
|
@ -324,7 +394,7 @@ static uint64_t add_monotime;
|
|||
uint64_t current_time_monotonic(void)
|
||||
{
|
||||
uint64_t time;
|
||||
#if defined(_WIN32) || defined(__WIN32__) || defined (WIN32)
|
||||
#ifdef OS_WIN32
|
||||
uint64_t old_add_monotime = add_monotime;
|
||||
time = (uint64_t)GetTickCount() + add_monotime;
|
||||
|
||||
|
@ -472,11 +542,11 @@ int sendpacket(Networking_Core *net, IP_Port ip_port, const uint8_t *data, uint1
|
|||
addr6->sin6_flowinfo = 0;
|
||||
addr6->sin6_scope_id = 0;
|
||||
} else {
|
||||
/* unknown address type*/
|
||||
LOGGER_WARNING(net->log, "unknown address type: %d", ip_port.ip.family);
|
||||
return -1;
|
||||
}
|
||||
|
||||
const int res = sendto(net->sock, (const char *) data, length, 0, (struct sockaddr *)&addr, addrsize);
|
||||
const int res = sendto(net->sock.socket, (const char *) data, length, 0, (struct sockaddr *)&addr, addrsize);
|
||||
|
||||
loglogdata(net->log, "O=>", data, length, ip_port, res);
|
||||
|
||||
|
@ -492,13 +562,13 @@ static int receivepacket(Logger *log, Socket sock, IP_Port *ip_port, uint8_t *da
|
|||
{
|
||||
memset(ip_port, 0, sizeof(IP_Port));
|
||||
struct sockaddr_storage addr;
|
||||
#if defined(_WIN32) || defined(__WIN32__) || defined (WIN32)
|
||||
#ifdef OS_WIN32
|
||||
int addrlen = sizeof(addr);
|
||||
#else
|
||||
socklen_t addrlen = sizeof(addr);
|
||||
#endif
|
||||
*length = 0;
|
||||
int fail_or_len = recvfrom(sock, (char *) data, MAX_UDP_PACKET_SIZE, 0, (struct sockaddr *)&addr, &addrlen);
|
||||
int fail_or_len = recvfrom(sock.socket, (char *) data, MAX_UDP_PACKET_SIZE, 0, (struct sockaddr *)&addr, &addrlen);
|
||||
|
||||
if (fail_or_len < 0) {
|
||||
int error = net_error();
|
||||
|
@ -597,7 +667,7 @@ int networking_at_startup(void)
|
|||
|
||||
#endif/*VANILLA_NACL*/
|
||||
|
||||
#if defined(_WIN32) || defined(__WIN32__) || defined (WIN32)
|
||||
#ifdef OS_WIN32
|
||||
WSADATA wsaData;
|
||||
|
||||
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != NO_ERROR) {
|
||||
|
@ -614,7 +684,7 @@ int networking_at_startup(void)
|
|||
#if 0
|
||||
static void at_shutdown(void)
|
||||
{
|
||||
#if defined(_WIN32) || defined(__WIN32__) || defined (WIN32)
|
||||
#ifdef OS_WIN32
|
||||
WSACleanup();
|
||||
#endif
|
||||
}
|
||||
|
@ -703,12 +773,12 @@ Networking_Core *new_networking_ex(Logger *log, IP ip, uint16_t port_from, uint1
|
|||
/* Functions to increase the size of the send and receive UDP buffers.
|
||||
*/
|
||||
int n = 1024 * 1024 * 2;
|
||||
setsockopt(temp->sock, SOL_SOCKET, SO_RCVBUF, (const char *)&n, sizeof(n));
|
||||
setsockopt(temp->sock, SOL_SOCKET, SO_SNDBUF, (const char *)&n, sizeof(n));
|
||||
setsockopt(temp->sock.socket, SOL_SOCKET, SO_RCVBUF, (const char *)&n, sizeof(n));
|
||||
setsockopt(temp->sock.socket, SOL_SOCKET, SO_SNDBUF, (const char *)&n, sizeof(n));
|
||||
|
||||
/* Enable broadcast on socket */
|
||||
int broadcast = 1;
|
||||
setsockopt(temp->sock, SOL_SOCKET, SO_BROADCAST, (const char *)&broadcast, sizeof(broadcast));
|
||||
setsockopt(temp->sock.socket, SOL_SOCKET, SO_BROADCAST, (const char *)&broadcast, sizeof(broadcast));
|
||||
|
||||
/* iOS UDP sockets are weird and apparently can SIGPIPE */
|
||||
if (!set_socket_nosigpipe(temp->sock)) {
|
||||
|
@ -776,7 +846,7 @@ Networking_Core *new_networking_ex(Logger *log, IP ip, uint16_t port_from, uint1
|
|||
mreq.ipv6mr_multiaddr.s6_addr[ 1] = 0x02;
|
||||
mreq.ipv6mr_multiaddr.s6_addr[15] = 0x01;
|
||||
mreq.ipv6mr_interface = 0;
|
||||
int res = setsockopt(temp->sock, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, (const char *)&mreq, sizeof(mreq));
|
||||
const int res = setsockopt(temp->sock.socket, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, (const char *)&mreq, sizeof(mreq));
|
||||
|
||||
int neterror = net_error();
|
||||
const char *strerror = net_new_strerror(neterror);
|
||||
|
@ -806,7 +876,7 @@ Networking_Core *new_networking_ex(Logger *log, IP ip, uint16_t port_from, uint1
|
|||
int tries;
|
||||
|
||||
for (tries = port_from; tries <= port_to; tries++) {
|
||||
int res = bind(temp->sock, (struct sockaddr *)&addr, addrsize);
|
||||
int res = bind(temp->sock.socket, (struct sockaddr *)&addr, addrsize);
|
||||
|
||||
if (!res) {
|
||||
temp->port = *portptr;
|
||||
|
@ -1290,7 +1360,7 @@ int net_connect(Socket sock, IP_Port ip_port)
|
|||
return 0;
|
||||
}
|
||||
|
||||
return connect(sock, (struct sockaddr *)&addr, addrsize);
|
||||
return connect(sock.socket, (struct sockaddr *)&addr, addrsize);
|
||||
}
|
||||
|
||||
int32_t net_getipport(const char *node, IP_Port **res, int tox_type)
|
||||
|
@ -1391,41 +1461,7 @@ int bind_to_port(Socket sock, int family, uint16_t port)
|
|||
return 0;
|
||||
}
|
||||
|
||||
return (bind(sock, (struct sockaddr *)&addr, addrsize) == 0);
|
||||
}
|
||||
|
||||
static int make_tox_family(int family)
|
||||
{
|
||||
switch (family) {
|
||||
case AF_INET:
|
||||
return TOX_AF_INET;
|
||||
|
||||
case AF_INET6:
|
||||
return TOX_AF_INET6;
|
||||
|
||||
case AF_UNSPEC:
|
||||
return TOX_AF_UNSPEC;
|
||||
|
||||
default:
|
||||
return family;
|
||||
}
|
||||
}
|
||||
|
||||
static int make_family(int tox_family)
|
||||
{
|
||||
switch (tox_family) {
|
||||
case TOX_AF_INET:
|
||||
return AF_INET;
|
||||
|
||||
case TOX_AF_INET6:
|
||||
return AF_INET6;
|
||||
|
||||
case TOX_AF_UNSPEC:
|
||||
return AF_UNSPEC;
|
||||
|
||||
default:
|
||||
return tox_family;
|
||||
}
|
||||
return bind(sock.socket, (struct sockaddr *)&addr, addrsize) == 0;
|
||||
}
|
||||
|
||||
static int make_socktype(int type)
|
||||
|
@ -1456,12 +1492,47 @@ static int make_proto(int proto)
|
|||
}
|
||||
}
|
||||
|
||||
Socket net_socket(int domain, int type, int protocol)
|
||||
Socket net_socket(Family domain, int type, int protocol)
|
||||
{
|
||||
int platform_domain = make_family(domain);
|
||||
int platform_type = make_socktype(type);
|
||||
int platform_prot = make_proto(protocol);
|
||||
return socket(platform_domain, platform_type, platform_prot);
|
||||
const int platform_domain = make_family(domain);
|
||||
const int platform_type = make_socktype(type);
|
||||
const int platform_prot = make_proto(protocol);
|
||||
const Socket sock = {(int)socket(platform_domain, platform_type, platform_prot)};
|
||||
return sock;
|
||||
}
|
||||
|
||||
int net_send(Socket sock, const void *buf, size_t len)
|
||||
{
|
||||
return send(sock.socket, (const char *)buf, len, MSG_NOSIGNAL);
|
||||
}
|
||||
|
||||
int net_recv(Socket sock, void *buf, size_t len)
|
||||
{
|
||||
return recv(sock.socket, (char *)buf, len, MSG_NOSIGNAL);
|
||||
}
|
||||
|
||||
int net_listen(Socket sock, int backlog)
|
||||
{
|
||||
return listen(sock.socket, backlog);
|
||||
}
|
||||
|
||||
Socket net_accept(Socket sock)
|
||||
{
|
||||
const Socket newsock = {accept(sock.socket, nullptr, nullptr)};
|
||||
return newsock;
|
||||
}
|
||||
|
||||
size_t net_socket_data_recv_buffer(Socket sock)
|
||||
{
|
||||
#ifdef OS_WIN32
|
||||
unsigned long count = 0;
|
||||
ioctlsocket(sock.socket, FIONREAD, &count);
|
||||
#else
|
||||
int count = 0;
|
||||
ioctl(sock.socket, FIONREAD, &count);
|
||||
#endif
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
uint32_t net_htonl(uint32_t hostlong)
|
||||
|
|
|
@ -24,54 +24,55 @@
|
|||
#ifndef NETWORK_H
|
||||
#define NETWORK_H
|
||||
|
||||
#ifdef PLAN9
|
||||
#include <u.h> // Plan 9 requires this is imported first
|
||||
// Comment line here to avoid reordering by source code formatters.
|
||||
#include <libc.h>
|
||||
#endif
|
||||
|
||||
#include "ccompat.h"
|
||||
#include "logger.h"
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
#if defined(_WIN32) || defined(__WIN32__) || defined (WIN32) /* Put win32 includes here */
|
||||
#ifndef WINVER
|
||||
//Windows XP
|
||||
#define WINVER 0x0501
|
||||
#endif
|
||||
|
||||
// The mingw32/64 Windows library warns about including winsock2.h after
|
||||
// windows.h even though with the above it's a valid thing to do. So, to make
|
||||
// mingw32 headers happy, we include winsock2.h first.
|
||||
#include <winsock2.h>
|
||||
|
||||
#include <windows.h>
|
||||
#include <ws2tcpip.h>
|
||||
|
||||
#else // UNIX includes
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <netdb.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#endif
|
||||
#include <stdbool.h> // bool
|
||||
#include <stddef.h> // size_t
|
||||
#include <stdint.h> // uint*_t
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef short Family;
|
||||
typedef uint8_t Family;
|
||||
|
||||
typedef int Socket;
|
||||
Socket net_socket(int domain, int type, int protocol);
|
||||
typedef struct Socket {
|
||||
int socket;
|
||||
} Socket;
|
||||
|
||||
Socket net_socket(Family domain, int type, int protocol);
|
||||
|
||||
/* Check if socket is valid.
|
||||
*
|
||||
* return 1 if valid
|
||||
* return 0 if not valid
|
||||
*/
|
||||
int sock_valid(Socket sock);
|
||||
|
||||
extern const Socket net_invalid_socket;
|
||||
|
||||
/**
|
||||
* Calls send(sockfd, buf, len, MSG_NOSIGNAL).
|
||||
*/
|
||||
int net_send(Socket sockfd, const void *buf, size_t len);
|
||||
/**
|
||||
* Calls recv(sockfd, buf, len, MSG_NOSIGNAL).
|
||||
*/
|
||||
int net_recv(Socket sockfd, void *buf, size_t len);
|
||||
/**
|
||||
* Calls listen(sockfd, backlog).
|
||||
*/
|
||||
int net_listen(Socket sockfd, int backlog);
|
||||
/**
|
||||
* Calls accept(sockfd, nullptr, nullptr).
|
||||
*/
|
||||
Socket net_accept(Socket sockfd);
|
||||
|
||||
/**
|
||||
* return the amount of data in the tcp recv buffer.
|
||||
* return 0 on failure.
|
||||
*/
|
||||
size_t net_socket_data_recv_buffer(Socket sock);
|
||||
|
||||
#define MAX_UDP_PACKET_SIZE 2048
|
||||
|
||||
|
@ -326,13 +327,6 @@ uint16_t net_port(const Networking_Core *net);
|
|||
*/
|
||||
int networking_at_startup(void);
|
||||
|
||||
/* Check if socket is valid.
|
||||
*
|
||||
* return 1 if valid
|
||||
* return 0 if not valid
|
||||
*/
|
||||
int sock_valid(Socket sock);
|
||||
|
||||
/* Close the socket.
|
||||
*/
|
||||
void kill_sock(Socket sock);
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
*/
|
||||
|
||||
/*
|
||||
* Copyright © 2016-2017 The TokTok team.
|
||||
* Copyright © 2016-2018 The TokTok team.
|
||||
* Copyright © 2013 Tox project.
|
||||
*
|
||||
* This file is part of Tox, the free peer to peer instant messenger.
|
||||
|
@ -27,6 +27,9 @@
|
|||
|
||||
#include "onion.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "util.h"
|
||||
|
||||
#define RETURN_1 ONION_RETURN_1
|
||||
|
|
|
@ -27,6 +27,9 @@
|
|||
|
||||
#include "onion_announce.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "LAN_discovery.h"
|
||||
#include "util.h"
|
||||
|
||||
|
|
|
@ -28,6 +28,9 @@
|
|||
|
||||
#include "onion_client.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "LAN_discovery.h"
|
||||
#include "util.h"
|
||||
|
||||
|
|
|
@ -29,13 +29,14 @@
|
|||
|
||||
#include "ping.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "DHT.h"
|
||||
#include "network.h"
|
||||
#include "ping_array.h"
|
||||
#include "util.h"
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define PING_NUM_MAX 512
|
||||
|
||||
/* Maximum newly announced nodes to ping per TIME_TO_PING seconds. */
|
||||
|
|
|
@ -27,6 +27,9 @@
|
|||
|
||||
#include "ping_array.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "crypto_core.h"
|
||||
#include "util.h"
|
||||
|
||||
|
|
|
@ -31,6 +31,8 @@
|
|||
typedef struct Messenger Tox;
|
||||
#include "tox.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "Messenger.h"
|
||||
#include "group.h"
|
||||
#include "logger.h"
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include "crypto_core.h" /* for CRYPTO_PUBLIC_KEY_SIZE */
|
||||
#include "network.h" /* for current_time_monotonic */
|
||||
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
#include <sodium.h>
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#if TOX_PASS_SALT_LENGTH != crypto_pwhash_scryptsalsa208sha256_SALTBYTES
|
||||
|
|
Loading…
Reference in New Issue
Block a user