diff options
author | irungentoo <irungentoo@gmail.com> | 2013-06-29 18:40:41 -0400 |
---|---|---|
committer | irungentoo <irungentoo@gmail.com> | 2013-06-29 18:40:41 -0400 |
commit | 6bd24212ee41d87a011733974bdc76bd04e60037 (patch) | |
tree | 15e84e325573726bef7640a7eb6415630aae6bd9 /testing | |
parent | 7f2d4bb05bbdf459e3c063db4cebec40acab9e55 (diff) |
Lossless UDP now works.
The testclient and testserver simulate a packet loss of 33%.
The only thing left to do in lossless UDP is the flow control (automatic
adjustment of the data send rate) which is only needed to transfer large
amounts of data.
Diffstat (limited to 'testing')
-rw-r--r-- | testing/Lossless_UDP_testclient.c | 42 | ||||
-rw-r--r-- | testing/Lossless_UDP_testserver.c | 37 |
2 files changed, 44 insertions, 35 deletions
diff --git a/testing/Lossless_UDP_testclient.c b/testing/Lossless_UDP_testclient.c index 20fae86f..5790ad3b 100644 --- a/testing/Lossless_UDP_testclient.c +++ b/testing/Lossless_UDP_testclient.c | |||
@@ -1,5 +1,6 @@ | |||
1 | /* Lossless_UDP testclient | 1 | /* Lossless_UDP testclient |
2 | * A program that connects and sends a file using our lossless UDP algorithm. | 2 | * A program that connects and sends a file using our lossless UDP algorithm. |
3 | * NOTE: this program simulates a 33% packet loss. | ||
3 | * | 4 | * |
4 | * Best used in combination with Lossless_UDP_testserver | 5 | * Best used in combination with Lossless_UDP_testserver |
5 | * | 6 | * |
@@ -44,7 +45,7 @@ void printip(IP_Port ip_port) | |||
44 | { | 45 | { |
45 | printf("\nIP: %u.%u.%u.%u Port: %u",ip_port.ip.c[0],ip_port.ip.c[1],ip_port.ip.c[2],ip_port.ip.c[3],ntohs(ip_port.port)); | 46 | printf("\nIP: %u.%u.%u.%u Port: %u",ip_port.ip.c[0],ip_port.ip.c[1],ip_port.ip.c[2],ip_port.ip.c[3],ntohs(ip_port.port)); |
46 | } | 47 | } |
47 | 48 | /* | |
48 | void printpackets(Data test) | 49 | void printpackets(Data test) |
49 | { | 50 | { |
50 | int i; | 51 | int i; |
@@ -80,14 +81,14 @@ void printconnection(int connection_id) | |||
80 | } | 81 | } |
81 | Data sendbuffer[MAX_QUEUE_NUM]; | 82 | Data sendbuffer[MAX_QUEUE_NUM]; |
82 | Data recvbuffer[MAX_QUEUE_NUM]; | 83 | Data recvbuffer[MAX_QUEUE_NUM]; |
83 | printf("recv_num: %u, recv_sync: %u, sent_packetnum %u, send_packetnum: %u, successful_sent: %u, successful_read: %u\n", | 84 | printf("recv_num: %u, orecv_num: %u, sent_packetnum %u, osent_packetnum: %u, successful_sent: %u, successful_read: %u\n", |
84 | connections[connection_id].recv_packetnum, | 85 | connections[connection_id].recv_packetnum, |
85 | connections[connection_id].recv_packetnum_sync, connections[connection_id].sent_packetnum, connections[connection_id].send_packetnum, | 86 | connections[connection_id].orecv_packetnum, connections[connection_id].sent_packetnum, connections[connection_id].osent_packetnum, |
86 | connections[connection_id].successful_sent, | 87 | connections[connection_id].successful_sent, |
87 | connections[connection_id].successful_read); | 88 | connections[connection_id].successful_read); |
88 | 89 | ||
89 | printf("req packets: \n"); | 90 | printf("req packets: \n"); |
90 | for(i = 0; i < MAX_PACKET_NUM; i++) | 91 | for(i = 0; i < BUFFER_PACKET_NUM; i++) |
91 | { | 92 | { |
92 | printf(" %u ", connections[connection_id].req_packets[i]); | 93 | printf(" %u ", connections[connection_id].req_packets[i]); |
93 | } | 94 | } |
@@ -97,7 +98,7 @@ void printconnection(int connection_id) | |||
97 | printf("--------------------END---------------------\n"); | 98 | printf("--------------------END---------------------\n"); |
98 | 99 | ||
99 | } | 100 | } |
100 | 101 | */ | |
101 | //recieve packets and send them to the packethandler | 102 | //recieve packets and send them to the packethandler |
102 | //run doLossless_UDP(); | 103 | //run doLossless_UDP(); |
103 | void Lossless_UDP() | 104 | void Lossless_UDP() |
@@ -107,18 +108,19 @@ void Lossless_UDP() | |||
107 | uint32_t length; | 108 | uint32_t length; |
108 | while(recievepacket(&ip_port, data, &length) != -1) | 109 | while(recievepacket(&ip_port, data, &length) != -1) |
109 | { | 110 | { |
111 | printf("packet with length: %u\n", length); | ||
110 | if(rand() % 3 != 1)//add packet loss | 112 | if(rand() % 3 != 1)//add packet loss |
111 | 113 | { | |
112 | if(LosslessUDP_handlepacket(data, length, ip_port)) | 114 | if(LosslessUDP_handlepacket(data, length, ip_port)) |
113 | { | 115 | { |
114 | printpacket(data, length, ip_port); | 116 | printpacket(data, length, ip_port); |
115 | } | 117 | } |
116 | else | 118 | else |
117 | { | 119 | { |
118 | //printconnection(0); | 120 | //printconnection(0); |
119 | printf("Received handled packet with length: %u\n", length); | 121 | printf("Received handled packet with length: %u\n", length); |
122 | } | ||
120 | } | 123 | } |
121 | |||
122 | } | 124 | } |
123 | 125 | ||
124 | doLossless_UDP(); | 126 | doLossless_UDP(); |
@@ -155,6 +157,7 @@ int main(int argc, char *argv[]) | |||
155 | uint64_t timer = current_time(); | 157 | uint64_t timer = current_time(); |
156 | while(1) | 158 | while(1) |
157 | { | 159 | { |
160 | // printconnection(connection); | ||
158 | Lossless_UDP(); | 161 | Lossless_UDP(); |
159 | if(is_connected(connection) == 3) | 162 | if(is_connected(connection) == 3) |
160 | { | 163 | { |
@@ -166,27 +169,28 @@ int main(int argc, char *argv[]) | |||
166 | printf("Connection timeout after: %llu us\n", (unsigned long long)(current_time() - timer)); | 169 | printf("Connection timeout after: %llu us\n", (unsigned long long)(current_time() - timer)); |
167 | return 1; | 170 | return 1; |
168 | } | 171 | } |
169 | c_sleep(100); | 172 | c_sleep(1); |
170 | } | 173 | } |
171 | timer = current_time(); | 174 | timer = current_time(); |
172 | 175 | ||
173 | 176 | ||
174 | //read first part of file | 177 | //read first part of file |
175 | read = fread(buffer, 1, 1, file); | 178 | read = fread(buffer, 1, 128, file); |
176 | 179 | ||
177 | while(1) | 180 | while(1) |
178 | { | 181 | { |
179 | //printconnection(connection); | 182 | //printconnection(connection); |
180 | Lossless_UDP(); | 183 | Lossless_UDP(); |
181 | |||
182 | if(is_connected(connection) == 3) | 184 | if(is_connected(connection) == 3) |
183 | { | 185 | { |
184 | 186 | ||
185 | if(write_packet(connection, buffer, read)) | 187 | if(write_packet(connection, buffer, read)) |
186 | { | 188 | { |
187 | //printf("Wrote data.\n"); | 189 | //printf("Wrote data.\n"); |
188 | read = fread(buffer, 1, 1, file); | 190 | read = fread(buffer, 1, 128, file); |
191 | |||
189 | } | 192 | } |
193 | //printf("%u\n", sendqueue(connection)); | ||
190 | if(sendqueue(connection) == 0) | 194 | if(sendqueue(connection) == 0) |
191 | { | 195 | { |
192 | if(read == 0) | 196 | if(read == 0) |
@@ -201,7 +205,7 @@ int main(int argc, char *argv[]) | |||
201 | printf("Connecting Lost after: %llu us\n", (unsigned long long)(current_time() - timer)); | 205 | printf("Connecting Lost after: %llu us\n", (unsigned long long)(current_time() - timer)); |
202 | return 0; | 206 | return 0; |
203 | } | 207 | } |
204 | c_sleep(50); | 208 | c_sleep(1); |
205 | } | 209 | } |
206 | 210 | ||
207 | return 0; | 211 | return 0; |
diff --git a/testing/Lossless_UDP_testserver.c b/testing/Lossless_UDP_testserver.c index 9a180cbb..5370da9e 100644 --- a/testing/Lossless_UDP_testserver.c +++ b/testing/Lossless_UDP_testserver.c | |||
@@ -1,5 +1,6 @@ | |||
1 | /* Lossless_UDP testserver | 1 | /* Lossless_UDP testserver |
2 | * A program that waits for a lossless UDP connection and then saves all the data recieved to a file. | 2 | * A program that waits for a lossless UDP connection and then saves all the data recieved to a file. |
3 | * NOTE: this program simulates a 33% packet loss. | ||
3 | * | 4 | * |
4 | * Best used in combination with Lossless_UDP_testclient | 5 | * Best used in combination with Lossless_UDP_testclient |
5 | * | 6 | * |
@@ -40,6 +41,7 @@ void printpacket(char * data, uint32_t length, IP_Port ip_port) | |||
40 | } | 41 | } |
41 | printf("\n--------------------END-----------------------------\n\n\n"); | 42 | printf("\n--------------------END-----------------------------\n\n\n"); |
42 | } | 43 | } |
44 | /* | ||
43 | void printpackets(Data test) | 45 | void printpackets(Data test) |
44 | { | 46 | { |
45 | int i; | 47 | int i; |
@@ -75,14 +77,14 @@ void printconnection(int connection_id) | |||
75 | } | 77 | } |
76 | Data sendbuffer[MAX_QUEUE_NUM]; | 78 | Data sendbuffer[MAX_QUEUE_NUM]; |
77 | Data recvbuffer[MAX_QUEUE_NUM]; | 79 | Data recvbuffer[MAX_QUEUE_NUM]; |
78 | printf("recv_num: %u, recv_sync: %u, sent_packetnum %u, send_packetnum: %u, successful_sent: %u, successful_read: %u\n", | 80 | printf("recv_num: %u, orecv_num: %u, sent_packetnum %u, osent_packetnum: %u, successful_sent: %u, successful_read: %u\n", |
79 | connections[connection_id].recv_packetnum, | 81 | connections[connection_id].recv_packetnum, |
80 | connections[connection_id].recv_packetnum_sync, connections[connection_id].sent_packetnum, connections[connection_id].send_packetnum, | 82 | connections[connection_id].orecv_packetnum, connections[connection_id].sent_packetnum, connections[connection_id].osent_packetnum, |
81 | connections[connection_id].successful_sent, | 83 | connections[connection_id].successful_sent, |
82 | connections[connection_id].successful_read); | 84 | connections[connection_id].successful_read); |
83 | 85 | ||
84 | printf("req packets: \n"); | 86 | printf("req packets: \n"); |
85 | for(i = 0; i < MAX_PACKET_NUM; i++) | 87 | for(i = 0; i < BUFFER_PACKET_NUM; i++) |
86 | { | 88 | { |
87 | printf(" %u ", connections[connection_id].req_packets[i]); | 89 | printf(" %u ", connections[connection_id].req_packets[i]); |
88 | } | 90 | } |
@@ -92,7 +94,7 @@ void printconnection(int connection_id) | |||
92 | printf("--------------------END---------------------\n"); | 94 | printf("--------------------END---------------------\n"); |
93 | 95 | ||
94 | } | 96 | } |
95 | 97 | */ | |
96 | //recieve packets and send them to the packethandler | 98 | //recieve packets and send them to the packethandler |
97 | //run doLossless_UDP(); | 99 | //run doLossless_UDP(); |
98 | void Lossless_UDP() | 100 | void Lossless_UDP() |
@@ -103,14 +105,16 @@ void Lossless_UDP() | |||
103 | while(recievepacket(&ip_port, data, &length) != -1) | 105 | while(recievepacket(&ip_port, data, &length) != -1) |
104 | { | 106 | { |
105 | if(rand() % 3 != 1)//add packet loss | 107 | if(rand() % 3 != 1)//add packet loss |
106 | if(LosslessUDP_handlepacket(data, length, ip_port)) | ||
107 | { | ||
108 | printpacket(data, length, ip_port); | ||
109 | } | ||
110 | else | ||
111 | { | 108 | { |
112 | // printconnection(0); | 109 | if(LosslessUDP_handlepacket(data, length, ip_port)) |
113 | printf("Received handled packet with length: %u\n", length); | 110 | { |
111 | printpacket(data, length, ip_port); | ||
112 | } | ||
113 | else | ||
114 | { | ||
115 | //printconnection(0); | ||
116 | // printf("Received handled packet with length: %u\n", length); | ||
117 | } | ||
114 | } | 118 | } |
115 | } | 119 | } |
116 | 120 | ||
@@ -151,13 +155,14 @@ int main(int argc, char *argv[]) | |||
151 | connection = incoming_connection(); | 155 | connection = incoming_connection(); |
152 | if(connection != -1) | 156 | if(connection != -1) |
153 | { | 157 | { |
154 | if(is_connected(connection) == 3) | 158 | if(is_connected(connection) == 2) |
155 | { | 159 | { |
156 | printf("Recieved the connection.\n"); | 160 | printf("Recieved the connection.\n"); |
161 | |||
157 | } | 162 | } |
158 | break; | 163 | break; |
159 | } | 164 | } |
160 | c_sleep(100); | 165 | c_sleep(1); |
161 | } | 166 | } |
162 | 167 | ||
163 | timer = current_time(); | 168 | timer = current_time(); |
@@ -166,13 +171,13 @@ int main(int argc, char *argv[]) | |||
166 | { | 171 | { |
167 | //printconnection(0); | 172 | //printconnection(0); |
168 | Lossless_UDP(); | 173 | Lossless_UDP(); |
169 | if(is_connected(connection) == 3) | 174 | if(is_connected(connection) >= 2) |
170 | { | 175 | { |
171 | read = read_packet(connection, buffer); | 176 | read = read_packet(connection, buffer); |
172 | 177 | ||
173 | if(read != 0) | 178 | if(read != 0) |
174 | { | 179 | { |
175 | printf("Recieved data.\n"); | 180 | // printf("Recieved data.\n"); |
176 | if(!fwrite(buffer, read, 1, file)) | 181 | if(!fwrite(buffer, read, 1, file)) |
177 | { | 182 | { |
178 | printf("file write error\n"); | 183 | printf("file write error\n"); |
@@ -185,7 +190,7 @@ int main(int argc, char *argv[]) | |||
185 | fclose(file); | 190 | fclose(file); |
186 | return 1; | 191 | return 1; |
187 | } | 192 | } |
188 | c_sleep(50); | 193 | c_sleep(1); |
189 | } | 194 | } |
190 | 195 | ||
191 | return 0; | 196 | return 0; |