Move Networking_Core struct into the .c file.

To make it an abstract type everywhere except in network.c.
This commit is contained in:
iphydf 2018-01-10 16:44:49 +00:00
parent c84daff541
commit 2fbed5b4c5
No known key found for this signature in database
GPG Key ID: 3855DBA2D74403C9
9 changed files with 58 additions and 29 deletions

View File

@ -468,7 +468,7 @@ static void test_list_main(void)
dhts[i] = new_DHT(NULL, new_networking(NULL, ip, DHT_DEFAULT_PORT + i), true);
ck_assert_msg(dhts[i] != 0, "Failed to create dht instances %u", i);
ck_assert_msg(dhts[i]->net->port != DHT_DEFAULT_PORT + i, "Bound to wrong port");
ck_assert_msg(net_port(dhts[i]->net) != DHT_DEFAULT_PORT + i, "Bound to wrong port");
}
for (j = 0; j < NUM_DHT; ++j) {
@ -604,7 +604,7 @@ START_TEST(test_DHT_test)
dhts[i] = new_DHT(NULL, new_networking(NULL, ip, DHT_DEFAULT_PORT + i), true);
ck_assert_msg(dhts[i] != 0, "Failed to create dht instances %u", i);
ck_assert_msg(dhts[i]->net->port != DHT_DEFAULT_PORT + i, "Bound to wrong port");
ck_assert_msg(net_port(dhts[i]->net) != DHT_DEFAULT_PORT + i, "Bound to wrong port");
}
struct {

View File

@ -163,12 +163,12 @@ START_TEST(test_basic)
ck_assert_msg((onion1 != NULL) && (onion2 != NULL), "Onion failed initializing.");
networking_registerhandler(onion2->net, 'I', &handle_test_1, onion2);
IP_Port on1 = {ip, onion1->net->port};
IP_Port on1 = {ip, net_port(onion1->net)};
Node_format n1;
memcpy(n1.public_key, onion1->dht->self_public_key, CRYPTO_PUBLIC_KEY_SIZE);
n1.ip_port = on1;
IP_Port on2 = {ip, onion2->net->port};
IP_Port on2 = {ip, net_port(onion2->net)};
Node_format n2;
memcpy(n2.public_key, onion2->dht->self_public_key, CRYPTO_PUBLIC_KEY_SIZE);
n2.ip_port = on2;
@ -402,11 +402,11 @@ START_TEST(test_announce)
IP ip = get_loopback();
for (i = 3; i < NUM_ONIONS; ++i) {
IP_Port ip_port = {ip, onions[i - 1]->onion->net->port};
IP_Port ip_port = {ip, net_port(onions[i - 1]->onion->net)};
DHT_bootstrap(onions[i]->onion->dht, ip_port, onions[i - 1]->onion->dht->self_public_key);
IP_Port ip_port1 = {ip, onions[i - 2]->onion->net->port};
IP_Port ip_port1 = {ip, net_port(onions[i - 2]->onion->net)};
DHT_bootstrap(onions[i]->onion->dht, ip_port1, onions[i - 2]->onion->dht->self_public_key);
IP_Port ip_port2 = {ip, onions[i - 3]->onion->net->port};
IP_Port ip_port2 = {ip, net_port(onions[i - 3]->onion->net)};
DHT_bootstrap(onions[i]->onion->dht, ip_port2, onions[i - 3]->onion->dht->self_public_key);
}
@ -464,7 +464,7 @@ START_TEST(test_announce)
}
onion_getfriendip(onions[NUM_LAST]->onion_c, frnum, &ip_port);
ck_assert_msg(ip_port.port == onions[NUM_FIRST]->onion->net->port, "Port in returned ip not correct.");
ck_assert_msg(ip_port.port == net_port(onions[NUM_FIRST]->onion->net), "Port in returned ip not correct.");
for (i = 0; i < NUM_ONIONS; ++i) {
kill_onions(onions[i]);

View File

@ -157,7 +157,7 @@ int main(int argc, char *argv[])
fclose(file);
printf("\n");
printf("Port: %u\n", net_ntohs(dht->net->port));
printf("Port: %u\n", net_ntohs(net_port(dht->net)));
if (argc > argvoffset + 3) {
printf("Trying to bootstrap into the network...\n");

View File

@ -376,7 +376,7 @@ int send_LANdiscovery(uint16_t port, DHT *dht)
ip_port.port = port;
/* IPv6 multicast */
if (dht->net->family == TOX_AF_INET6) {
if (net_family(dht->net) == TOX_AF_INET6) {
ip_port.ip = broadcast_ip(TOX_AF_INET6, TOX_AF_INET6);
if (ip_isset(&ip_port.ip)) {
@ -387,7 +387,7 @@ int send_LANdiscovery(uint16_t port, DHT *dht)
}
/* IPv4 broadcast (has to be IPv4-in-IPv6 mapping if socket is TOX_AF_INET6 */
ip_port.ip = broadcast_ip(dht->net->family, TOX_AF_INET);
ip_port.ip = broadcast_ip(net_family(dht->net), TOX_AF_INET);
if (ip_isset(&ip_port.ip)) {
if (sendpacket(dht->net, ip_port, data, 1 + CRYPTO_PUBLIC_KEY_SIZE)) {

View File

@ -1946,8 +1946,7 @@ Messenger *new_messenger(Messenger_Options *options, unsigned int *error)
unsigned int net_err = 0;
if (options->udp_disabled) {
/* this is the easiest way to completely disable UDP without changing too much code. */
m->net = (Networking_Core *)calloc(1, sizeof(Networking_Core));
m->net = new_networking_no_udp(log);
} else {
IP ip;
ip_init(&ip, options->ipv6enabled);

View File

@ -388,6 +388,31 @@ static void loglogdata(Logger *log, const char *message, const uint8_t *buffer,
}
}
typedef struct {
packet_handler_callback function;
void *object;
} Packet_Handler;
struct Networking_Core {
Logger *log;
Packet_Handler packethandlers[256];
Family family;
uint16_t port;
/* Our UDP socket. */
Socket sock;
};
Family net_family(const Networking_Core *net)
{
return net->family;
}
uint16_t net_port(const Networking_Core *net)
{
return net->port;
}
/* Basic network functions:
* Function to send packet(data) of length length to ip_port.
*/
@ -816,6 +841,20 @@ Networking_Core *new_networking_ex(Logger *log, IP ip, uint16_t port_from, uint1
return NULL;
}
Networking_Core *new_networking_no_udp(Logger *log)
{
/* this is the easiest way to completely disable UDP without changing too much code. */
Networking_Core *net = (Networking_Core *)calloc(1, sizeof(Networking_Core));
if (net == NULL) {
return NULL;
}
net->log = log;
return net;
}
/* Function to cleanup networking stuff. */
void kill_networking(Networking_Core *net)
{

View File

@ -303,20 +303,10 @@ int addr_resolve_or_parse_ip(const char *address, IP *to, IP *extra);
typedef int (*packet_handler_callback)(void *object, IP_Port ip_port, const uint8_t *data, uint16_t len,
void *userdata);
typedef struct {
packet_handler_callback function;
void *object;
} Packet_Handles;
typedef struct Networking_Core Networking_Core;
typedef struct {
Logger *log;
Packet_Handles packethandlers[256];
Family family;
uint16_t port;
/* Our UDP socket. */
Socket sock;
} Networking_Core;
Family net_family(const Networking_Core *net);
uint16_t net_port(const Networking_Core *net);
/* Run this before creating sockets.
*
@ -415,6 +405,7 @@ int bind_to_port(Socket sock, int family, uint16_t port);
*/
Networking_Core *new_networking(Logger *log, IP ip, uint16_t port);
Networking_Core *new_networking_ex(Logger *log, IP ip, uint16_t port_from, uint16_t port_to, unsigned int *error);
Networking_Core *new_networking_no_udp(Logger *log);
/* Function to cleanup networking stuff (doesn't do much right now). */
void kill_networking(Networking_Core *net);

View File

@ -59,7 +59,7 @@ int create_announce_request(uint8_t *packet, uint16_t max_packet_length, const u
}
uint8_t plain[ONION_PING_ID_SIZE + CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_PUBLIC_KEY_SIZE +
ONION_ANNOUNCE_SENDBACK_DATA_LENGTH];
ONION_ANNOUNCE_SENDBACK_DATA_LENGTH];
memcpy(plain, ping_id, ONION_PING_ID_SIZE);
memcpy(plain + ONION_PING_ID_SIZE, client_id, CRYPTO_PUBLIC_KEY_SIZE);
memcpy(plain + ONION_PING_ID_SIZE + CRYPTO_PUBLIC_KEY_SIZE, data_public_key, CRYPTO_PUBLIC_KEY_SIZE);
@ -347,7 +347,7 @@ static int handle_announce_request(void *object, IP_Port source, const uint8_t *
get_shared_key(&onion_a->shared_keys_recv, shared_key, onion_a->dht->self_secret_key, packet_public_key);
uint8_t plain[ONION_PING_ID_SIZE + CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_PUBLIC_KEY_SIZE +
ONION_ANNOUNCE_SENDBACK_DATA_LENGTH];
ONION_ANNOUNCE_SENDBACK_DATA_LENGTH];
int len = decrypt_data_symmetric(shared_key, packet + 1, packet + 1 + CRYPTO_NONCE_SIZE + CRYPTO_PUBLIC_KEY_SIZE,
ONION_PING_ID_SIZE + CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_PUBLIC_KEY_SIZE + ONION_ANNOUNCE_SENDBACK_DATA_LENGTH +
CRYPTO_MAC_SIZE, plain);

View File

@ -1526,7 +1526,7 @@ void tox_self_get_dht_id(const Tox *tox, uint8_t *dht_id)
uint16_t tox_self_get_udp_port(const Tox *tox, TOX_ERR_GET_PORT *error)
{
const Messenger *m = tox;
uint16_t port = net_htons(m->net->port);
uint16_t port = net_htons(net_port(m->net));
if (port) {
SET_ERROR_PARAMETER(error, TOX_ERR_GET_PORT_OK);