aboutsummaryrefslogtreecommitdiff
path: root/src/transport/gnunet-nat-server-windows.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2010-08-20 12:48:22 +0000
committerChristian Grothoff <christian@grothoff.org>2010-08-20 12:48:22 +0000
commitf340371e37421aa85f8cc779b22a8d0c2ab85c4b (patch)
tree65c50214f718a24d83faa3dcd4bface28cb1cb98 /src/transport/gnunet-nat-server-windows.c
parent08218233023e3fd043ab89b9db69538b6f6955fb (diff)
downloadgnunet-f340371e37421aa85f8cc779b22a8d0c2ab85c4b.tar.gz
gnunet-f340371e37421aa85f8cc779b22a8d0c2ab85c4b.zip
code cleanup
Diffstat (limited to 'src/transport/gnunet-nat-server-windows.c')
-rw-r--r--src/transport/gnunet-nat-server-windows.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/transport/gnunet-nat-server-windows.c b/src/transport/gnunet-nat-server-windows.c
index a312fa2ca..7dee15296 100644
--- a/src/transport/gnunet-nat-server-windows.c
+++ b/src/transport/gnunet-nat-server-windows.c
@@ -141,8 +141,11 @@ struct ip_packet
141struct icmp_packet 141struct icmp_packet
142{ 142{
143 uint8_t type; 143 uint8_t type;
144
144 uint8_t code; 145 uint8_t code;
146
145 uint16_t checksum; 147 uint16_t checksum;
148
146 uint32_t reserved; 149 uint32_t reserved;
147}; 150};
148 151
@@ -158,14 +161,28 @@ struct udp_packet
158 uint32_t length; 161 uint32_t length;
159}; 162};
160 163
164/**
165 * Socket we use to receive "fake" ICMP replies.
166 */
161static SOCKET icmpsock; 167static SOCKET icmpsock;
162 168
169/**
170 * Socket we use to send our ICMP requests.
171 */
163static SOCKET rawsock; 172static SOCKET rawsock;
164 173
174/**
175 * Target "dummy" address.
176 */
165static struct in_addr dummy; 177static struct in_addr dummy;
166 178
179
167/** 180/**
168 * CRC-16 for IP/ICMP headers. 181 * CRC-16 for IP/ICMP headers.
182 *
183 * @param data what to calculate the CRC over
184 * @param bytes number of bytes in data (must be multiple of 2)
185 * @return the CRC 16.
169 */ 186 */
170static uint16_t 187static uint16_t
171calc_checksum(const uint16_t *data, 188calc_checksum(const uint16_t *data,
@@ -182,12 +199,14 @@ calc_checksum(const uint16_t *data,
182 return sum; 199 return sum;
183} 200}
184 201
202
185/** 203/**
186 * Convert IPv4 address from text to binary form. 204 * Convert IPv4 address from text to binary form.
187 * 205 *
188 * @param af address family 206 * @param af address family
189 * @param cp the address to print 207 * @param cp the address to print
190 * @param buf where to write the address result 208 * @param buf where to write the address result
209 * @return 1 on success
191 */ 210 */
192static int 211static int
193inet_pton (int af, 212inet_pton (int af,
@@ -270,6 +289,9 @@ send_icmp_echo (const struct in_addr *my_ip)
270} 289}
271 290
272 291
292/**
293 * We've received an ICMP response. Process it.
294 */
273static void 295static void
274process_icmp_response () 296process_icmp_response ()
275{ 297{
@@ -379,6 +401,9 @@ process_icmp_response ()
379} 401}
380 402
381 403
404/**
405 * Create an ICMP raw socket for reading.
406 */
382static SOCKET 407static SOCKET
383make_icmp_socket () 408make_icmp_socket ()
384{ 409{
@@ -396,6 +421,9 @@ make_icmp_socket ()
396} 421}
397 422
398 423
424/**
425 * Create an ICMP raw socket for writing.
426 */
399static SOCKET 427static SOCKET
400make_raw_socket () 428make_raw_socket ()
401{ 429{
@@ -498,10 +526,11 @@ main (int argc,
498 process_icmp_response (); 526 process_icmp_response ();
499 send_icmp_echo (&external); 527 send_icmp_echo (&external);
500 } 528 }
529 /* select failed (internal error or OS out of resources) */
501 closesocket(icmpsock); 530 closesocket(icmpsock);
502 closesocket(rawsock); 531 closesocket(rawsock);
503 WSACleanup (); 532 WSACleanup ();
504 return 4; /* select failed! */ 533 return 4;
505} 534}
506 535
507 536