diff options
-rw-r--r-- | core/DHT.c | 35 | ||||
-rw-r--r-- | core/DHT.h | 8 | ||||
-rw-r--r-- | core/LAN_discovery.c | 10 | ||||
-rw-r--r-- | core/LAN_discovery.h | 6 | ||||
-rw-r--r-- | core/Lossless_UDP.c | 26 | ||||
-rw-r--r-- | core/Lossless_UDP.h | 6 | ||||
-rw-r--r-- | core/Messenger.c | 30 | ||||
-rw-r--r-- | core/friend_requests.c | 7 | ||||
-rw-r--r-- | core/friend_requests.h | 6 | ||||
-rw-r--r-- | core/network.c | 24 | ||||
-rw-r--r-- | core/network.h | 14 | ||||
-rw-r--r-- | core/ping.c | 4 | ||||
-rw-r--r-- | core/ping.h | 4 | ||||
-rw-r--r-- | other/DHT_bootstrap.c | 12 | ||||
-rw-r--r-- | other/bootstrap_serverdaemon/DHT_bootstrap_daemon.c | 20 | ||||
-rw-r--r-- | testing/DHT_test.c | 11 | ||||
-rw-r--r-- | testing/Lossless_UDP_testclient.c | 12 | ||||
-rw-r--r-- | testing/Lossless_UDP_testserver.c | 23 |
18 files changed, 117 insertions, 141 deletions
@@ -554,7 +554,7 @@ static int sendnodes(IP_Port ip_port, uint8_t * public_key, uint8_t * client_id, | |||
554 | return sendpacket(ip_port, data, 1 + CLIENT_ID_SIZE + crypto_box_NONCEBYTES + len); | 554 | return sendpacket(ip_port, data, 1 + CLIENT_ID_SIZE + crypto_box_NONCEBYTES + len); |
555 | } | 555 | } |
556 | 556 | ||
557 | static int handle_getnodes(uint8_t * packet, uint32_t length, IP_Port source) | 557 | static int handle_getnodes(IP_Port source, uint8_t * packet, uint32_t length) |
558 | { | 558 | { |
559 | uint64_t ping_id; | 559 | uint64_t ping_id; |
560 | 560 | ||
@@ -586,7 +586,7 @@ static int handle_getnodes(uint8_t * packet, uint32_t length, IP_Port source) | |||
586 | return 0; | 586 | return 0; |
587 | } | 587 | } |
588 | 588 | ||
589 | static int handle_sendnodes(uint8_t * packet, uint32_t length, IP_Port source) | 589 | static int handle_sendnodes(IP_Port source, uint8_t * packet, uint32_t length) |
590 | { | 590 | { |
591 | uint64_t ping_id; | 591 | uint64_t ping_id; |
592 | uint32_t cid_size = 1 + CLIENT_ID_SIZE; | 592 | uint32_t cid_size = 1 + CLIENT_ID_SIZE; |
@@ -930,7 +930,7 @@ static int send_NATping(uint8_t * public_key, uint64_t ping_id, uint8_t type) | |||
930 | } | 930 | } |
931 | 931 | ||
932 | /* Handle a received ping request for */ | 932 | /* Handle a received ping request for */ |
933 | static int handle_NATping(uint8_t * packet, uint32_t length, IP_Port source) | 933 | static int handle_NATping(IP_Port source, uint8_t * packet, uint32_t length) |
934 | { | 934 | { |
935 | if (length < crypto_box_PUBLICKEYBYTES * 2 + crypto_box_NONCEBYTES + ENCRYPTION_PADDING | 935 | if (length < crypto_box_PUBLICKEYBYTES * 2 + crypto_box_NONCEBYTES + ENCRYPTION_PADDING |
936 | || length > MAX_DATA_SIZE + ENCRYPTION_PADDING) | 936 | || length > MAX_DATA_SIZE + ENCRYPTION_PADDING) |
@@ -1074,30 +1074,13 @@ static void doNAT(void) | |||
1074 | /*----------------------------------------------------------------------------------*/ | 1074 | /*----------------------------------------------------------------------------------*/ |
1075 | /*-----------------------END OF NAT PUNCHING FUNCTIONS------------------------------*/ | 1075 | /*-----------------------END OF NAT PUNCHING FUNCTIONS------------------------------*/ |
1076 | 1076 | ||
1077 | int DHT_handlepacket(uint8_t * packet, uint32_t length, IP_Port source) | 1077 | void DHT_init(void) |
1078 | { | 1078 | { |
1079 | switch (packet[0]) { | 1079 | networking_registerhandler(0, &handle_ping_request); |
1080 | case 0: | 1080 | networking_registerhandler(1, &handle_ping_response); |
1081 | return handle_ping_request(packet, length, source); | 1081 | networking_registerhandler(2, &handle_getnodes); |
1082 | 1082 | networking_registerhandler(3, &handle_sendnodes); | |
1083 | case 1: | 1083 | networking_registerhandler(254, &handle_NATping); |
1084 | return handle_ping_response(packet, length, source); | ||
1085 | |||
1086 | case 2: | ||
1087 | return handle_getnodes(packet, length, source); | ||
1088 | |||
1089 | case 3: | ||
1090 | return handle_sendnodes(packet, length, source); | ||
1091 | |||
1092 | case 254: | ||
1093 | return handle_NATping(packet, length, source); | ||
1094 | |||
1095 | default: | ||
1096 | return 1; | ||
1097 | |||
1098 | } | ||
1099 | |||
1100 | return 0; | ||
1101 | } | 1084 | } |
1102 | 1085 | ||
1103 | void doDHT(void) | 1086 | void doDHT(void) |
@@ -58,11 +58,6 @@ IP_Port DHT_getfriendip(uint8_t *client_id); | |||
58 | /* Run this function at least a couple times per second (It's the main loop) */ | 58 | /* Run this function at least a couple times per second (It's the main loop) */ |
59 | void doDHT(void); | 59 | void doDHT(void); |
60 | 60 | ||
61 | /* if we receive a DHT packet we call this function so it can be handled. | ||
62 | return 0 if packet is handled correctly. | ||
63 | return 1 if it didn't handle the packet or if the packet was shit. */ | ||
64 | int DHT_handlepacket(uint8_t *packet, uint32_t length, IP_Port source); | ||
65 | |||
66 | /* Use this function to bootstrap the client | 61 | /* Use this function to bootstrap the client |
67 | Sends a get nodes request to the given node with ip port and public_key */ | 62 | Sends a get nodes request to the given node with ip port and public_key */ |
68 | void DHT_bootstrap(IP_Port ip_port, uint8_t *public_key); | 63 | void DHT_bootstrap(IP_Port ip_port, uint8_t *public_key); |
@@ -93,6 +88,9 @@ uint32_t DHT_size(void); | |||
93 | /* save the DHT in data where data is an array of size DHT_size() */ | 88 | /* save the DHT in data where data is an array of size DHT_size() */ |
94 | void DHT_save(uint8_t *data); | 89 | void DHT_save(uint8_t *data); |
95 | 90 | ||
91 | /* init DHT */ | ||
92 | void DHT_init(void); | ||
93 | |||
96 | /* load the DHT from data of size size; | 94 | /* load the DHT from data of size size; |
97 | return -1 if failure | 95 | return -1 if failure |
98 | return 0 if success */ | 96 | return 0 if success */ |
diff --git a/core/LAN_discovery.c b/core/LAN_discovery.c index 26b3930c..67dc656b 100644 --- a/core/LAN_discovery.c +++ b/core/LAN_discovery.c | |||
@@ -111,7 +111,7 @@ static int LAN_ip(IP ip) | |||
111 | return -1; | 111 | return -1; |
112 | } | 112 | } |
113 | 113 | ||
114 | static int handle_LANdiscovery(uint8_t *packet, uint32_t length, IP_Port source) | 114 | static int handle_LANdiscovery(IP_Port source, uint8_t *packet, uint32_t length) |
115 | { | 115 | { |
116 | if (LAN_ip(source.ip) == -1) | 116 | if (LAN_ip(source.ip) == -1) |
117 | return 1; | 117 | return 1; |
@@ -125,16 +125,14 @@ static int handle_LANdiscovery(uint8_t *packet, uint32_t length, IP_Port source) | |||
125 | int send_LANdiscovery(uint16_t port) | 125 | int send_LANdiscovery(uint16_t port) |
126 | { | 126 | { |
127 | uint8_t data[crypto_box_PUBLICKEYBYTES + 1]; | 127 | uint8_t data[crypto_box_PUBLICKEYBYTES + 1]; |
128 | data[0] = 32; | 128 | data[0] = 33; |
129 | memcpy(data + 1, self_public_key, crypto_box_PUBLICKEYBYTES); | 129 | memcpy(data + 1, self_public_key, crypto_box_PUBLICKEYBYTES); |
130 | IP_Port ip_port = {broadcast_ip(), port}; | 130 | IP_Port ip_port = {broadcast_ip(), port}; |
131 | return sendpacket(ip_port, data, 1 + crypto_box_PUBLICKEYBYTES); | 131 | return sendpacket(ip_port, data, 1 + crypto_box_PUBLICKEYBYTES); |
132 | } | 132 | } |
133 | 133 | ||
134 | 134 | ||
135 | int LANdiscovery_handlepacket(uint8_t *packet, uint32_t length, IP_Port source) | 135 | void LANdiscovery_init(void) |
136 | { | 136 | { |
137 | if (packet[0] == 32) | 137 | networking_registerhandler(33, &handle_LANdiscovery); |
138 | return handle_LANdiscovery(packet, length, source); | ||
139 | return 1; | ||
140 | } | 138 | } |
diff --git a/core/LAN_discovery.h b/core/LAN_discovery.h index 96a6e6ad..6b5b8c75 100644 --- a/core/LAN_discovery.h +++ b/core/LAN_discovery.h | |||
@@ -43,10 +43,8 @@ extern "C" { | |||
43 | int send_LANdiscovery(uint16_t port); | 43 | int send_LANdiscovery(uint16_t port); |
44 | 44 | ||
45 | 45 | ||
46 | /* if we receive a packet we call this function so it can be handled. | 46 | /* sets up packet handlers */ |
47 | return 0 if packet is handled correctly. | 47 | void LANdiscovery_init(void); |
48 | return 1 if it didn't handle the packet or if the packet was shit. */ | ||
49 | int LANdiscovery_handlepacket(uint8_t *packet, uint32_t length, IP_Port source); | ||
50 | 48 | ||
51 | 49 | ||
52 | 50 | ||
diff --git a/core/Lossless_UDP.c b/core/Lossless_UDP.c index 3a289735..002e2cf8 100644 --- a/core/Lossless_UDP.c +++ b/core/Lossless_UDP.c | |||
@@ -555,7 +555,7 @@ static int send_DATA(uint32_t connection_id) | |||
555 | 555 | ||
556 | 556 | ||
557 | /* Return 0 if handled correctly, 1 if packet is bad. */ | 557 | /* Return 0 if handled correctly, 1 if packet is bad. */ |
558 | static int handle_handshake(uint8_t * packet, uint32_t length, IP_Port source) | 558 | static int handle_handshake(IP_Port source, uint8_t * packet, uint32_t length) |
559 | { | 559 | { |
560 | if (length != (1 + 4 + 4)) | 560 | if (length != (1 + 4 + 4)) |
561 | return 1; | 561 | return 1; |
@@ -669,7 +669,7 @@ static int handle_SYNC3(int connection_id, uint8_t counter, uint32_t recv_packet | |||
669 | return 1; | 669 | return 1; |
670 | } | 670 | } |
671 | 671 | ||
672 | static int handle_SYNC(uint8_t *packet, uint32_t length, IP_Port source) | 672 | static int handle_SYNC(IP_Port source, uint8_t *packet, uint32_t length) |
673 | { | 673 | { |
674 | 674 | ||
675 | if (!SYNC_valid(length)) | 675 | if (!SYNC_valid(length)) |
@@ -742,7 +742,7 @@ static int add_recv(int connection_id, uint32_t data_num, uint8_t *data, uint16_ | |||
742 | return 0; | 742 | return 0; |
743 | } | 743 | } |
744 | 744 | ||
745 | static int handle_data(uint8_t *packet, uint32_t length, IP_Port source) | 745 | static int handle_data(IP_Port source, uint8_t *packet, uint32_t length) |
746 | { | 746 | { |
747 | int connection = getconnection_id(source); | 747 | int connection = getconnection_id(source); |
748 | 748 | ||
@@ -770,23 +770,11 @@ static int handle_data(uint8_t *packet, uint32_t length, IP_Port source) | |||
770 | * END of packet handling functions | 770 | * END of packet handling functions |
771 | */ | 771 | */ |
772 | 772 | ||
773 | int LosslessUDP_handlepacket(uint8_t *packet, uint32_t length, IP_Port source) | 773 | void LosslessUDP_init(void) |
774 | { | 774 | { |
775 | switch (packet[0]) { | 775 | networking_registerhandler(16, &handle_handshake); |
776 | case 16: | 776 | networking_registerhandler(17, &handle_SYNC); |
777 | return handle_handshake(packet, length, source); | 777 | networking_registerhandler(18, &handle_data); |
778 | |||
779 | case 17: | ||
780 | return handle_SYNC(packet, length, source); | ||
781 | |||
782 | case 18: | ||
783 | return handle_data(packet, length, source); | ||
784 | |||
785 | default: | ||
786 | return 1; | ||
787 | } | ||
788 | |||
789 | return 0; | ||
790 | } | 778 | } |
791 | 779 | ||
792 | /* | 780 | /* |
diff --git a/core/Lossless_UDP.h b/core/Lossless_UDP.h index b4cb186a..53afe606 100644 --- a/core/Lossless_UDP.h +++ b/core/Lossless_UDP.h | |||
@@ -113,11 +113,9 @@ int is_connected(int connection_id); | |||
113 | void doLossless_UDP(void); | 113 | void doLossless_UDP(void); |
114 | 114 | ||
115 | /* | 115 | /* |
116 | * If we receive a Lossless_UDP packet, call this function so it can be handled. | 116 | * This function sets up LosslessUDP packet handling. |
117 | * Return 0 if packet is handled correctly. | ||
118 | * Return 1 if it didn't handle the packet or if the packet was shit. | ||
119 | */ | 117 | */ |
120 | int LosslessUDP_handlepacket(uint8_t *packet, uint32_t length, IP_Port source); | 118 | void LosslessUDP_init(void); |
121 | 119 | ||
122 | #ifdef __cplusplus | 120 | #ifdef __cplusplus |
123 | } | 121 | } |
diff --git a/core/Messenger.c b/core/Messenger.c index dd651107..37ab5e2d 100644 --- a/core/Messenger.c +++ b/core/Messenger.c | |||
@@ -518,6 +518,11 @@ int initMessenger(void) | |||
518 | if(init_networking(ip,PORT) == -1) | 518 | if(init_networking(ip,PORT) == -1) |
519 | return -1; | 519 | return -1; |
520 | 520 | ||
521 | DHT_init(); | ||
522 | LosslessUDP_init(); | ||
523 | friendreq_init(); | ||
524 | LANdiscovery_init(); | ||
525 | |||
521 | return 0; | 526 | return 0; |
522 | } | 527 | } |
523 | 528 | ||
@@ -684,29 +689,8 @@ static void LANdiscovery(void) | |||
684 | /* the main loop that needs to be run at least 200 times per second. */ | 689 | /* the main loop that needs to be run at least 200 times per second. */ |
685 | void doMessenger(void) | 690 | void doMessenger(void) |
686 | { | 691 | { |
687 | IP_Port ip_port; | 692 | networking_poll(); |
688 | uint8_t data[MAX_UDP_PACKET_SIZE]; | 693 | |
689 | uint32_t length; | ||
690 | while (receivepacket(&ip_port, data, &length) != -1) { | ||
691 | #ifdef DEBUG | ||
692 | /* if(rand() % 3 != 1) //simulate packet loss */ | ||
693 | /* { */ | ||
694 | if (DHT_handlepacket(data, length, ip_port) && LosslessUDP_handlepacket(data, length, ip_port) && | ||
695 | friendreq_handlepacket(data, length, ip_port) && LANdiscovery_handlepacket(data, length, ip_port)) | ||
696 | /* if packet is discarded */ | ||
697 | printf("Received unhandled packet with length: %u\n", length); | ||
698 | else | ||
699 | printf("Received handled packet with length: %u\n", length); | ||
700 | /* } */ | ||
701 | printf("Status: %u %u %u\n",friendlist[0].status ,is_cryptoconnected(friendlist[0].crypt_connection_id), friendlist[0].crypt_connection_id); | ||
702 | #else | ||
703 | DHT_handlepacket(data, length, ip_port); | ||
704 | LosslessUDP_handlepacket(data, length, ip_port); | ||
705 | friendreq_handlepacket(data, length, ip_port); | ||
706 | LANdiscovery_handlepacket(data, length, ip_port); | ||
707 | #endif | ||
708 | |||
709 | } | ||
710 | doDHT(); | 694 | doDHT(); |
711 | doLossless_UDP(); | 695 | doLossless_UDP(); |
712 | doNetCrypto(); | 696 | doNetCrypto(); |
diff --git a/core/friend_requests.c b/core/friend_requests.c index b8dab87e..422cc028 100644 --- a/core/friend_requests.c +++ b/core/friend_requests.c | |||
@@ -101,7 +101,7 @@ static int request_received(uint8_t * client_id) | |||
101 | } | 101 | } |
102 | 102 | ||
103 | 103 | ||
104 | int friendreq_handlepacket(uint8_t * packet, uint32_t length, IP_Port source) | 104 | static int friendreq_handlepacket(IP_Port source, uint8_t * packet, uint32_t length) |
105 | { | 105 | { |
106 | if (packet[0] == 32) { | 106 | if (packet[0] == 32) { |
107 | if (length <= crypto_box_PUBLICKEYBYTES * 2 + crypto_box_NONCEBYTES + 1 + ENCRYPTION_PADDING || | 107 | if (length <= crypto_box_PUBLICKEYBYTES * 2 + crypto_box_NONCEBYTES + 1 + ENCRYPTION_PADDING || |
@@ -129,3 +129,8 @@ int friendreq_handlepacket(uint8_t * packet, uint32_t length, IP_Port source) | |||
129 | } | 129 | } |
130 | return 1; | 130 | return 1; |
131 | } | 131 | } |
132 | |||
133 | void friendreq_init(void) | ||
134 | { | ||
135 | networking_registerhandler(32, &friendreq_handlepacket); | ||
136 | } | ||
diff --git a/core/friend_requests.h b/core/friend_requests.h index 4dfc5130..708d8f66 100644 --- a/core/friend_requests.h +++ b/core/friend_requests.h | |||
@@ -39,10 +39,8 @@ int send_friendrequest(uint8_t *public_key, uint8_t *data, uint32_t length); | |||
39 | function format is function(uint8_t * public_key, uint8_t * data, uint16_t length) */ | 39 | function format is function(uint8_t * public_key, uint8_t * data, uint16_t length) */ |
40 | void callback_friendrequest(void (*function)(uint8_t *, uint8_t *, uint16_t)); | 40 | void callback_friendrequest(void (*function)(uint8_t *, uint8_t *, uint16_t)); |
41 | 41 | ||
42 | /* if we receive a packet we call this function so it can be handled. | 42 | /* sets up friendreq packet handlers */ |
43 | return 0 if packet is handled correctly. | 43 | void friendreq_init(void); |
44 | return 1 if it didn't handle the packet or if the packet was shit. */ | ||
45 | int friendreq_handlepacket(uint8_t *packet, uint32_t length, IP_Port source); | ||
46 | 44 | ||
47 | #ifdef __cplusplus | 45 | #ifdef __cplusplus |
48 | } | 46 | } |
diff --git a/core/network.c b/core/network.c index 8c6fa7b6..7e3b344a 100644 --- a/core/network.c +++ b/core/network.c | |||
@@ -71,7 +71,7 @@ int sendpacket(IP_Port ip_port, uint8_t * data, uint32_t length) | |||
71 | the packet data into data | 71 | the packet data into data |
72 | the packet length into length. | 72 | the packet length into length. |
73 | dump all empty packets. */ | 73 | dump all empty packets. */ |
74 | int receivepacket(IP_Port * ip_port, uint8_t * data, uint32_t * length) | 74 | static int receivepacket(IP_Port * ip_port, uint8_t * data, uint32_t * length) |
75 | { | 75 | { |
76 | ADDR addr; | 76 | ADDR addr; |
77 | #ifdef WIN32 | 77 | #ifdef WIN32 |
@@ -88,6 +88,27 @@ int receivepacket(IP_Port * ip_port, uint8_t * data, uint32_t * length) | |||
88 | return 0; | 88 | return 0; |
89 | } | 89 | } |
90 | 90 | ||
91 | static packet_handler_callback packethandlers[256] = {0}; | ||
92 | |||
93 | void networking_registerhandler(uint8_t byte, packet_handler_callback cb) | ||
94 | { | ||
95 | packethandlers[byte] = cb; | ||
96 | } | ||
97 | |||
98 | void networking_poll() | ||
99 | { | ||
100 | IP_Port ip_port; | ||
101 | uint8_t data[MAX_UDP_PACKET_SIZE]; | ||
102 | uint32_t length; | ||
103 | |||
104 | while (receivepacket(&ip_port, data, &length) != -1) | ||
105 | { | ||
106 | if (length < 1) continue; | ||
107 | if (!packethandlers[data[0]]) continue; | ||
108 | packethandlers[data[0]](ip_port, data, length); | ||
109 | } | ||
110 | } | ||
111 | |||
91 | /* initialize networking | 112 | /* initialize networking |
92 | bind to ip and port | 113 | bind to ip and port |
93 | ip must be in network order EX: 127.0.0.1 = (7F000001) | 114 | ip must be in network order EX: 127.0.0.1 = (7F000001) |
@@ -149,7 +170,6 @@ int init_networking(IP ip, uint16_t port) | |||
149 | bind(sock, (struct sockaddr*)&addr, sizeof(addr)); | 170 | bind(sock, (struct sockaddr*)&addr, sizeof(addr)); |
150 | 171 | ||
151 | return 0; | 172 | return 0; |
152 | |||
153 | } | 173 | } |
154 | 174 | ||
155 | /* function to cleanup networking stuff */ | 175 | /* function to cleanup networking stuff */ |
diff --git a/core/network.h b/core/network.h index d3c39333..7c95d84d 100644 --- a/core/network.h +++ b/core/network.h | |||
@@ -94,6 +94,11 @@ typedef struct { | |||
94 | #endif | 94 | #endif |
95 | } ADDR; | 95 | } ADDR; |
96 | 96 | ||
97 | /* Function to receive data, ip and port of sender is put into ip_port | ||
98 | the packet data into data | ||
99 | the packet length into length. */ | ||
100 | typedef int (*packet_handler_callback)(IP_Port ip_port, uint8_t *data, uint32_t len); | ||
101 | |||
97 | /* returns current time in milleseconds since the epoch. */ | 102 | /* returns current time in milleseconds since the epoch. */ |
98 | uint64_t current_time(void); | 103 | uint64_t current_time(void); |
99 | 104 | ||
@@ -106,10 +111,11 @@ uint32_t random_int(void); | |||
106 | /* Function to send packet(data) of length length to ip_port */ | 111 | /* Function to send packet(data) of length length to ip_port */ |
107 | int sendpacket(IP_Port ip_port, uint8_t *data, uint32_t length); | 112 | int sendpacket(IP_Port ip_port, uint8_t *data, uint32_t length); |
108 | 113 | ||
109 | /* Function to receive data, ip and port of sender is put into ip_port | 114 | /* Function to call when packet beginning with byte is received */ |
110 | the packet data into data | 115 | void networking_registerhandler(uint8_t byte, packet_handler_callback cb); |
111 | the packet length into length. */ | 116 | |
112 | int receivepacket(IP_Port *ip_port, uint8_t *data, uint32_t *length); | 117 | /* call this several times a second */ |
118 | void networking_poll(); | ||
113 | 119 | ||
114 | /* initialize networking | 120 | /* initialize networking |
115 | bind to ip and port | 121 | bind to ip and port |
diff --git a/core/ping.c b/core/ping.c index 6a1fbb7e..24ece06a 100644 --- a/core/ping.c +++ b/core/ping.c | |||
@@ -163,7 +163,7 @@ int send_ping_response(IP_Port ipp, clientid_t* client_id, uint64_t ping_id) | |||
163 | return sendpacket(ipp, (uint8_t*) &pk, sizeof(pk)); | 163 | return sendpacket(ipp, (uint8_t*) &pk, sizeof(pk)); |
164 | } | 164 | } |
165 | 165 | ||
166 | int handle_ping_request(uint8_t* packet, uint32_t length, IP_Port source) | 166 | int handle_ping_request(IP_Port source, uint8_t* packet, uint32_t length) |
167 | { | 167 | { |
168 | pingreq_t* p = (pingreq_t*) packet; | 168 | pingreq_t* p = (pingreq_t*) packet; |
169 | int rc; | 169 | int rc; |
@@ -190,7 +190,7 @@ int handle_ping_request(uint8_t* packet, uint32_t length, IP_Port source) | |||
190 | return 0; | 190 | return 0; |
191 | } | 191 | } |
192 | 192 | ||
193 | int handle_ping_response(uint8_t* packet, uint32_t length, IP_Port source) | 193 | int handle_ping_response(IP_Port source, uint8_t* packet, uint32_t length) |
194 | { | 194 | { |
195 | pingres_t* p = (pingres_t*) packet; | 195 | pingres_t* p = (pingres_t*) packet; |
196 | int rc; | 196 | int rc; |
diff --git a/core/ping.h b/core/ping.h index 2cab7d59..1ccfabac 100644 --- a/core/ping.h +++ b/core/ping.h | |||
@@ -12,5 +12,5 @@ uint64_t add_ping(IP_Port ipp); | |||
12 | bool is_pinging(IP_Port ipp, uint64_t ping_id); | 12 | bool is_pinging(IP_Port ipp, uint64_t ping_id); |
13 | int send_ping_request(IP_Port ipp, clientid_t* client_id); | 13 | int send_ping_request(IP_Port ipp, clientid_t* client_id); |
14 | int send_ping_response(IP_Port ipp, clientid_t* client_id, uint64_t ping_id); | 14 | int send_ping_response(IP_Port ipp, clientid_t* client_id, uint64_t ping_id); |
15 | int handle_ping_request(uint8_t* packet, uint32_t length, IP_Port source); | 15 | int handle_ping_request(IP_Port source, uint8_t* packet, uint32_t length); |
16 | int handle_ping_response(uint8_t* packet, uint32_t length, IP_Port source); | 16 | int handle_ping_response(IP_Port source, uint8_t* packet, uint32_t length); |
diff --git a/other/DHT_bootstrap.c b/other/DHT_bootstrap.c index befe2225..4b0adeff 100644 --- a/other/DHT_bootstrap.c +++ b/other/DHT_bootstrap.c | |||
@@ -113,9 +113,8 @@ int main(int argc, char *argv[]) | |||
113 | free(bootstrap_key); | 113 | free(bootstrap_key); |
114 | } | 114 | } |
115 | 115 | ||
116 | IP_Port ip_port; | 116 | DHT_init(); |
117 | uint8_t data[MAX_UDP_PACKET_SIZE]; | 117 | friendreq_init(); |
118 | uint32_t length; | ||
119 | 118 | ||
120 | int is_waiting_for_dht_connection = 1; | 119 | int is_waiting_for_dht_connection = 1; |
121 | while(1) | 120 | while(1) |
@@ -127,11 +126,8 @@ int main(int argc, char *argv[]) | |||
127 | } | 126 | } |
128 | doDHT(); | 127 | doDHT(); |
129 | 128 | ||
130 | while(receivepacket(&ip_port, data, &length) != -1) | 129 | networking_poll(); |
131 | { | 130 | |
132 | DHT_handlepacket(data, length, ip_port); | ||
133 | friendreq_handlepacket(data, length, ip_port); | ||
134 | } | ||
135 | c_sleep(1); | 131 | c_sleep(1); |
136 | } | 132 | } |
137 | shutdown_networking(); | 133 | shutdown_networking(); |
diff --git a/other/bootstrap_serverdaemon/DHT_bootstrap_daemon.c b/other/bootstrap_serverdaemon/DHT_bootstrap_daemon.c index 48152744..6ce542c1 100644 --- a/other/bootstrap_serverdaemon/DHT_bootstrap_daemon.c +++ b/other/bootstrap_serverdaemon/DHT_bootstrap_daemon.c | |||
@@ -81,10 +81,6 @@ int connect_to_servers(struct server_info_s *info) | |||
81 | int i; | 81 | int i; |
82 | int c; | 82 | int c; |
83 | 83 | ||
84 | IP_Port ip_port; | ||
85 | uint8_t data[MAX_UDP_PACKET_SIZE]; | ||
86 | uint32_t length; | ||
87 | |||
88 | for(i = 0; i < 32; ++i) { | 84 | for(i = 0; i < 32; ++i) { |
89 | if(info[i].valid) { | 85 | if(info[i].valid) { |
90 | /* Actual bootstrapping code goes here */ | 86 | /* Actual bootstrapping code goes here */ |
@@ -109,10 +105,7 @@ int connect_to_servers(struct server_info_s *info) | |||
109 | 105 | ||
110 | doDHT(); | 106 | doDHT(); |
111 | 107 | ||
112 | while(receivepacket(&ip_port, data, &length) != -1) | 108 | networking_poll(); |
113 | { | ||
114 | DHT_handlepacket(data, length, ip_port); | ||
115 | } | ||
116 | } | 109 | } |
117 | 110 | ||
118 | /* This probably never happens */ | 111 | /* This probably never happens */ |
@@ -337,6 +330,7 @@ int main(int argc, char *argv[]) { | |||
337 | /* Bootstrap the DHT | 330 | /* Bootstrap the DHT |
338 | This one throws odd errors, too. Ignore. I assume they come | 331 | This one throws odd errors, too. Ignore. I assume they come |
339 | from somewhere in the core. */ | 332 | from somewhere in the core. */ |
333 | DHT_init(); | ||
340 | tmperr = errno; | 334 | tmperr = errno; |
341 | connect_to_servers(server_conf.info); | 335 | connect_to_servers(server_conf.info); |
342 | errno = tmperr; | 336 | errno = tmperr; |
@@ -400,19 +394,13 @@ int main(int argc, char *argv[]) { | |||
400 | close(STDERR_FILENO); | 394 | close(STDERR_FILENO); |
401 | 395 | ||
402 | /* Main loop */ | 396 | /* Main loop */ |
403 | IP_Port ip_port; | 397 | friendreq_init(); |
404 | uint8_t data[MAX_UDP_PACKET_SIZE]; | ||
405 | uint32_t length; | ||
406 | 398 | ||
407 | while(1) | 399 | while(1) |
408 | { | 400 | { |
409 | doDHT(); | 401 | doDHT(); |
410 | 402 | ||
411 | while(receivepacket(&ip_port, data, &length) != -1) | 403 | networking_poll(); |
412 | { | ||
413 | DHT_handlepacket(data, length, ip_port); | ||
414 | friendreq_handlepacket(data, length, ip_port); | ||
415 | } | ||
416 | usleep(10000); | 404 | usleep(10000); |
417 | } | 405 | } |
418 | 406 | ||
diff --git a/testing/DHT_test.c b/testing/DHT_test.c index c8feaf4b..350093fd 100644 --- a/testing/DHT_test.c +++ b/testing/DHT_test.c | |||
@@ -156,14 +156,20 @@ int main(int argc, char *argv[]) | |||
156 | bootstrap_ip_port.ip.i = inet_addr(argv[1]); | 156 | bootstrap_ip_port.ip.i = inet_addr(argv[1]); |
157 | DHT_bootstrap(bootstrap_ip_port, hex_string_to_bin(argv[3])); | 157 | DHT_bootstrap(bootstrap_ip_port, hex_string_to_bin(argv[3])); |
158 | 158 | ||
159 | /* | ||
159 | IP_Port ip_port; | 160 | IP_Port ip_port; |
160 | uint8_t data[MAX_UDP_PACKET_SIZE]; | 161 | uint8_t data[MAX_UDP_PACKET_SIZE]; |
161 | uint32_t length; | 162 | uint32_t length; |
163 | */ | ||
164 | |||
165 | DHT_init(); | ||
166 | friendreq_init(); | ||
162 | 167 | ||
163 | while(1) { | 168 | while(1) { |
164 | 169 | ||
165 | doDHT(); | 170 | doDHT(); |
166 | 171 | ||
172 | /* slvrTODO: | ||
167 | while(receivepacket(&ip_port, data, &length) != -1) { | 173 | while(receivepacket(&ip_port, data, &length) != -1) { |
168 | if(DHT_handlepacket(data, length, ip_port) && friendreq_handlepacket(data, length, ip_port)) { | 174 | if(DHT_handlepacket(data, length, ip_port) && friendreq_handlepacket(data, length, ip_port)) { |
169 | //unhandled packet | 175 | //unhandled packet |
@@ -172,11 +178,14 @@ int main(int argc, char *argv[]) | |||
172 | printf("Received handled packet with length: %u\n", length); | 178 | printf("Received handled packet with length: %u\n", length); |
173 | } | 179 | } |
174 | } | 180 | } |
181 | */ | ||
182 | networking_poll(); | ||
183 | |||
175 | print_clientlist(); | 184 | print_clientlist(); |
176 | print_friendlist(); | 185 | print_friendlist(); |
177 | c_sleep(300); | 186 | c_sleep(300); |
178 | } | 187 | } |
179 | 188 | ||
180 | shutdown_networking(); | 189 | shutdown_networking(); |
181 | return 0; | 190 | return 0; |
182 | } | 191 | } |
diff --git a/testing/Lossless_UDP_testclient.c b/testing/Lossless_UDP_testclient.c index 78aff1a3..7efafa4f 100644 --- a/testing/Lossless_UDP_testclient.c +++ b/testing/Lossless_UDP_testclient.c | |||
@@ -120,20 +120,23 @@ void printconnection(int connection_id) | |||
120 | /*run doLossless_UDP(); */ | 120 | /*run doLossless_UDP(); */ |
121 | void Lossless_UDP() | 121 | void Lossless_UDP() |
122 | { | 122 | { |
123 | IP_Port ip_port; | 123 | /* IP_Port ip_port; |
124 | uint8_t data[MAX_UDP_PACKET_SIZE]; | 124 | uint8_t data[MAX_UDP_PACKET_SIZE]; |
125 | uint32_t length; | 125 | uint32_t length; |
126 | while (receivepacket(&ip_port, data, &length) != -1) { | 126 | while (receivepacket(&ip_port, data, &length) != -1) { |
127 | printf("packet with length: %u\n", length); | 127 | printf("packet with length: %u\n", length); */ |
128 | /* if(rand() % 3 != 1)//add packet loss | 128 | /* if(rand() % 3 != 1)//add packet loss |
129 | { */ | 129 | { */ |
130 | /* | ||
130 | if (LosslessUDP_handlepacket(data, length, ip_port)) | 131 | if (LosslessUDP_handlepacket(data, length, ip_port)) |
131 | printpacket(data, length, ip_port); | 132 | printpacket(data, length, ip_port); |
132 | else | 133 | else |
133 | printf("Received handled packet with length: %u\n", length); //printconnection(0); | 134 | printf("Received handled packet with length: %u\n", length); //printconnection(0); */ |
134 | 135 | ||
135 | /* } */ | 136 | /* } */ |
136 | } | 137 | /* }*/ |
138 | |||
139 | networking_poll(); | ||
137 | 140 | ||
138 | doLossless_UDP(); | 141 | doLossless_UDP(); |
139 | 142 | ||
@@ -181,6 +184,7 @@ int main(int argc, char *argv[]) | |||
181 | } | 184 | } |
182 | timer = current_time(); | 185 | timer = current_time(); |
183 | 186 | ||
187 | LosslessUDP_init(); | ||
184 | 188 | ||
185 | /*read first part of file */ | 189 | /*read first part of file */ |
186 | read = fread(buffer, 1, 512, file); | 190 | read = fread(buffer, 1, 512, file); |
diff --git a/testing/Lossless_UDP_testserver.c b/testing/Lossless_UDP_testserver.c index f4b144b4..bc4fed7a 100644 --- a/testing/Lossless_UDP_testserver.c +++ b/testing/Lossless_UDP_testserver.c | |||
@@ -117,20 +117,22 @@ void printconnection(int connection_id) | |||
117 | * run doLossless_UDP(); */ | 117 | * run doLossless_UDP(); */ |
118 | void Lossless_UDP() | 118 | void Lossless_UDP() |
119 | { | 119 | { |
120 | IP_Port ip_port; | 120 | // IP_Port ip_port; |
121 | uint8_t data[MAX_UDP_PACKET_SIZE]; | 121 | // uint8_t data[MAX_UDP_PACKET_SIZE]; |
122 | uint32_t length; | 122 | // uint32_t length; |
123 | while (receivepacket(&ip_port, data, &length) != -1) { | 123 | // while (receivepacket(&ip_port, data, &length) != -1) { |
124 | //if(rand() % 3 != 1)//add packet loss | 124 | //if(rand() % 3 != 1)//add packet loss |
125 | //{ | 125 | //{ |
126 | if (LosslessUDP_handlepacket(data, length, ip_port)) { | 126 | // if (LosslessUDP_handlepacket(data, length, ip_port)) { |
127 | printpacket(data, length, ip_port); | 127 | // printpacket(data, length, ip_port); |
128 | } else { | 128 | // } else { |
129 | //printconnection(0); | 129 | //printconnection(0); |
130 | printf("Received handled packet with length: %u\n", length); | 130 | // printf("Received handled packet with length: %u\n", length); |
131 | } | 131 | // } |
132 | //} | 132 | //} |
133 | } | 133 | // } |
134 | |||
135 | networking_poll(); | ||
134 | 136 | ||
135 | doLossless_UDP(); | 137 | doLossless_UDP(); |
136 | } | 138 | } |
@@ -161,6 +163,7 @@ int main(int argc, char *argv[]) | |||
161 | int connection; | 163 | int connection; |
162 | uint64_t timer = current_time(); | 164 | uint64_t timer = current_time(); |
163 | 165 | ||
166 | LosslessUDP_init(); | ||
164 | 167 | ||
165 | while (1) { | 168 | while (1) { |
166 | Lossless_UDP(); | 169 | Lossless_UDP(); |