aboutsummaryrefslogtreecommitdiff
path: root/src/nat/gnunet-helper-nat-server-windows.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nat/gnunet-helper-nat-server-windows.c')
-rw-r--r--src/nat/gnunet-helper-nat-server-windows.c53
1 files changed, 27 insertions, 26 deletions
diff --git a/src/nat/gnunet-helper-nat-server-windows.c b/src/nat/gnunet-helper-nat-server-windows.c
index 727a7be67..8386a15b1 100644
--- a/src/nat/gnunet-helper-nat-server-windows.c
+++ b/src/nat/gnunet-helper-nat-server-windows.c
@@ -272,8 +272,8 @@ send_icmp_echo (const struct in_addr *my_ip)
272 ip_pkt.checksum = 0; 272 ip_pkt.checksum = 0;
273 ip_pkt.src_ip = my_ip->s_addr; 273 ip_pkt.src_ip = my_ip->s_addr;
274 ip_pkt.dst_ip = dummy.s_addr; 274 ip_pkt.dst_ip = dummy.s_addr;
275 ip_pkt.checksum = htons (calc_checksum ((uint16_t *) & ip_pkt, 275 ip_pkt.checksum =
276 sizeof (struct ip_header))); 276 htons (calc_checksum ((uint16_t *) & ip_pkt, sizeof (struct ip_header)));
277 memcpy (&packet[off], &ip_pkt, sizeof (struct ip_header)); 277 memcpy (&packet[off], &ip_pkt, sizeof (struct ip_header));
278 off += sizeof (struct ip_header); 278 off += sizeof (struct ip_header);
279 279
@@ -281,16 +281,17 @@ send_icmp_echo (const struct in_addr *my_ip)
281 icmp_echo.code = 0; 281 icmp_echo.code = 0;
282 icmp_echo.reserved = 0; 282 icmp_echo.reserved = 0;
283 icmp_echo.checksum = 0; 283 icmp_echo.checksum = 0;
284 icmp_echo.checksum = htons (calc_checksum ((uint16_t *) & icmp_echo, 284 icmp_echo.checksum =
285 sizeof (struct icmp_echo_header))); 285 htons (calc_checksum
286 ((uint16_t *) & icmp_echo, sizeof (struct icmp_echo_header)));
286 memcpy (&packet[off], &icmp_echo, sizeof (struct icmp_echo_header)); 287 memcpy (&packet[off], &icmp_echo, sizeof (struct icmp_echo_header));
287 off += sizeof (struct icmp_echo_header); 288 off += sizeof (struct icmp_echo_header);
288 289
289 memset (&dst, 0, sizeof (dst)); 290 memset (&dst, 0, sizeof (dst));
290 dst.sin_family = AF_INET; 291 dst.sin_family = AF_INET;
291 dst.sin_addr = dummy; 292 dst.sin_addr = dummy;
292 err = sendto (rawsock, 293 err =
293 packet, off, 0, (struct sockaddr *) &dst, sizeof (dst)); 294 sendto (rawsock, packet, off, 0, (struct sockaddr *) &dst, sizeof (dst));
294 if (err < 0) 295 if (err < 0)
295 { 296 {
296#if VERBOSE 297#if VERBOSE
@@ -383,9 +384,10 @@ process_icmp_response ()
383 switch (ip_pkt.proto) 384 switch (ip_pkt.proto)
384 { 385 {
385 case IPPROTO_ICMP: 386 case IPPROTO_ICMP:
386 if (have != (sizeof (struct ip_header) * 2 + 387 if (have !=
387 sizeof (struct icmp_ttl_exceeded_header) + 388 (sizeof (struct ip_header) * 2 +
388 sizeof (struct icmp_echo_header))) 389 sizeof (struct icmp_ttl_exceeded_header) +
390 sizeof (struct icmp_echo_header)))
389 { 391 {
390 /* malformed */ 392 /* malformed */
391 return; 393 return;
@@ -395,9 +397,9 @@ process_icmp_response ()
395 port = (uint16_t) ntohl (icmp_echo.reserved); 397 port = (uint16_t) ntohl (icmp_echo.reserved);
396 break; 398 break;
397 case IPPROTO_UDP: 399 case IPPROTO_UDP:
398 if (have != (sizeof (struct ip_header) * 2 + 400 if (have !=
399 sizeof (struct icmp_ttl_exceeded_header) + 401 (sizeof (struct ip_header) * 2 +
400 sizeof (struct udp_header))) 402 sizeof (struct icmp_ttl_exceeded_header) + sizeof (struct udp_header)))
401 { 403 {
402 /* malformed */ 404 /* malformed */
403 return; 405 return;
@@ -412,8 +414,8 @@ process_icmp_response ()
412 } 414 }
413 415
414 ssize = sizeof (buf); 416 ssize = sizeof (buf);
415 WSAAddressToString ((LPSOCKADDR) & source_ip, 417 WSAAddressToString ((LPSOCKADDR) & source_ip, sizeof (source_ip), NULL, buf,
416 sizeof (source_ip), NULL, buf, &ssize); 418 &ssize);
417 if (port == 0) 419 if (port == 0)
418 fprintf (stdout, "%s\n", buf); 420 fprintf (stdout, "%s\n", buf);
419 else 421 else
@@ -460,16 +462,17 @@ make_raw_socket ()
460 return INVALID_SOCKET; 462 return INVALID_SOCKET;
461 } 463 }
462 464
463 if (0 != setsockopt (rawsock, 465 if (0 !=
464 SOL_SOCKET, SO_BROADCAST, (char *) &bOptVal, bOptLen)) 466 setsockopt (rawsock, SOL_SOCKET, SO_BROADCAST, (char *) &bOptVal,
467 bOptLen))
465 { 468 {
466 fprintf (stderr, 469 fprintf (stderr, "Error setting SO_BROADCAST to ON: %s\n",
467 "Error setting SO_BROADCAST to ON: %s\n", strerror (errno)); 470 strerror (errno));
468 closesocket (rawsock); 471 closesocket (rawsock);
469 return INVALID_SOCKET; 472 return INVALID_SOCKET;
470 } 473 }
471 if (0 != setsockopt (rawsock, 474 if (0 !=
472 IPPROTO_IP, IP_HDRINCL, (char *) &bOptVal, bOptLen)) 475 setsockopt (rawsock, IPPROTO_IP, IP_HDRINCL, (char *) &bOptVal, bOptLen))
473 { 476 {
474 fprintf (stderr, "Error setting IP_HDRINCL to ON: %s\n", strerror (errno)); 477 fprintf (stderr, "Error setting IP_HDRINCL to ON: %s\n", strerror (errno));
475 closesocket (rawsock); 478 closesocket (rawsock);
@@ -503,9 +506,8 @@ make_udp_socket (const struct in_addr *my_ip)
503 addr.sin_port = htons (NAT_TRAV_PORT); 506 addr.sin_port = htons (NAT_TRAV_PORT);
504 if (0 != bind (ret, (struct sockaddr *) &addr, sizeof (addr))) 507 if (0 != bind (ret, (struct sockaddr *) &addr, sizeof (addr)))
505 { 508 {
506 fprintf (stderr, 509 fprintf (stderr, "Error binding UDP socket to port %u: %s\n", NAT_TRAV_PORT,
507 "Error binding UDP socket to port %u: %s\n", 510 strerror (errno));
508 NAT_TRAV_PORT, strerror (errno));
509 /* likely problematic, but not certain, try to continue */ 511 /* likely problematic, but not certain, try to continue */
510 } 512 }
511 return ret; 513 return ret;
@@ -530,9 +532,8 @@ main (int argc, char *const *argv)
530 } 532 }
531 if (1 != inet_pton (AF_INET, argv[1], &external)) 533 if (1 != inet_pton (AF_INET, argv[1], &external))
532 { 534 {
533 fprintf (stderr, 535 fprintf (stderr, "Error parsing IPv4 address: %s, error %s\n", argv[1],
534 "Error parsing IPv4 address: %s, error %s\n", 536 strerror (errno));
535 argv[1], strerror (errno));
536 return 1; 537 return 1;
537 } 538 }
538 if (1 != inet_pton (AF_INET, DUMMY_IP, &dummy)) 539 if (1 != inet_pton (AF_INET, DUMMY_IP, &dummy))