summaryrefslogtreecommitdiff
path: root/toxcore
diff options
context:
space:
mode:
authorCoren[m] <Break@Ocean>2013-09-09 16:12:50 +0200
committerCoren[m] <Break@Ocean>2013-09-09 16:12:50 +0200
commitdbd75e903e7931a3f673df6121a0dedab15c0423 (patch)
tree987ec9a012c203dcab90718598a9188d2c01126f /toxcore
parent291fa8d5c53a819602bd84ef21f4ace9f310ed85 (diff)
network.*:
- IPAny_Port: analogous to IP_Port - ipport_equal: moved from DHT.c and adapted DHTc.: - ipport_equal renamed to ip4port_equal
Diffstat (limited to 'toxcore')
-rw-r--r--toxcore/DHT.c6
-rw-r--r--toxcore/network.c37
-rw-r--r--toxcore/network.h16
3 files changed, 56 insertions, 3 deletions
diff --git a/toxcore/DHT.c b/toxcore/DHT.c
index 3f3aef05..151f59d3 100644
--- a/toxcore/DHT.c
+++ b/toxcore/DHT.c
@@ -115,7 +115,7 @@ static int client_id_cmp(ClientPair p1, ClientPair p2)
115 return c; 115 return c;
116} 116}
117 117
118static int ipport_equal(IP_Port a, IP_Port b) 118static int ip4port_equal(IP_Port a, IP_Port b)
119{ 119{
120 return (a.ip.uint32 == b.ip.uint32) && (a.port == b.port); 120 return (a.ip.uint32 == b.ip.uint32) && (a.port == b.port);
121} 121}
@@ -144,7 +144,7 @@ static int client_in_list(Client_data *list, uint32_t length, uint8_t *client_id
144 144
145 for (i = 0; i < length; ++i) { 145 for (i = 0; i < length; ++i) {
146 /* If ip_port is assigned to a different client_id replace it */ 146 /* If ip_port is assigned to a different client_id replace it */
147 if (ipport_equal(list[i].ip_port, ip_port)) { 147 if (ip4port_equal(list[i].ip_port, ip_port)) {
148 memcpy(list[i].client_id, client_id, CLIENT_ID_SIZE); 148 memcpy(list[i].client_id, client_id, CLIENT_ID_SIZE);
149 } 149 }
150 150
@@ -447,7 +447,7 @@ static int is_gettingnodes(DHT *dht, IP_Port ip_port, uint64_t ping_id)
447 if (!is_timeout(temp_time, dht->send_nodes[i].timestamp, PING_TIMEOUT)) { 447 if (!is_timeout(temp_time, dht->send_nodes[i].timestamp, PING_TIMEOUT)) {
448 pinging = 0; 448 pinging = 0;
449 449
450 if (ip_port.ip.uint32 != 0 && ipport_equal(dht->send_nodes[i].ip_port, ip_port)) 450 if (ip_port.ip.uint32 != 0 && ip4port_equal(dht->send_nodes[i].ip_port, ip_port))
451 ++pinging; 451 ++pinging;
452 452
453 if (ping_id != 0 && dht->send_nodes[i].ping_id == ping_id) 453 if (ping_id != 0 && dht->send_nodes[i].ping_id == ping_id)
diff --git a/toxcore/network.c b/toxcore/network.c
index 31da833c..1fb5b77a 100644
--- a/toxcore/network.c
+++ b/toxcore/network.c
@@ -235,6 +235,43 @@ void kill_networking(Networking_Core *net)
235 return; 235 return;
236} 236}
237 237
238/* ip_equal
239 * compares two IPAny structures
240 * unset means unequal
241 *
242 * returns 0 when not equal or when uninitialized
243 */
244int ip_equal(IPAny *a, IPAny *b)
245{
246 if (!a || !b)
247 return 0;
248
249 if (a->family == AF_INET)
250 return (a->ip4.in_addr.s_addr == b->ip4.in_addr.s_addr);
251
252 if (a->family == AF_INET6)
253 return IN6_ARE_ADDR_EQUAL(&a->ip6, &b->ip6);
254
255 return 0;
256};
257
258/* ipport_equal
259 * compares two IPAny_Port structures
260 * unset means unequal
261 *
262 * returns 0 when not equal or when uninitialized
263 */
264int ipport_equal(IPAny_Port *a, IPAny_Port *b)
265{
266 if (!a || !b)
267 return 0;
268
269 if (!a->port || (a->port != b->port))
270 return 0;
271
272 return ip_equal(&a->ip, &b->ip);
273};
274
238/* ipany_ntoa 275/* ipany_ntoa
239 * converts ip into a string 276 * converts ip into a string
240 * uses a static buffer, so mustn't used multiple times in the same output 277 * uses a static buffer, so mustn't used multiple times in the same output
diff --git a/toxcore/network.h b/toxcore/network.h
index 15ca68e3..d52a02ae 100644
--- a/toxcore/network.h
+++ b/toxcore/network.h
@@ -115,6 +115,22 @@ typedef union {
115 uint8_t uint8[8]; 115 uint8_t uint8[8];
116} IP_Port; 116} IP_Port;
117 117
118
119/* will replace IP_Port as soon as the complete infrastructure is in place
120 * removed the unused union and padding also */
121typedef struct {
122 IPAny ip;
123 uint16_t port;
124} IPAny_Port;
125
126/* ipport_equal
127 * compares two IPAny_Port structures
128 * unset means unequal
129 *
130 * returns 0 when not equal or when uninitialized
131 */
132int ipport_equal(IPAny_Port *a, IPAny_Port *b);
133
118typedef struct { 134typedef struct {
119 int16_t family; 135 int16_t family;
120 uint16_t port; 136 uint16_t port;