diff options
Diffstat (limited to 'src/nat/gnunet-helper-nat-server-windows.c')
-rw-r--r-- | src/nat/gnunet-helper-nat-server-windows.c | 53 |
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)) |