X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fnat%2Fgnunet-helper-nat-server.c;h=95b46fd6c8f23199feb1e3f6de34f24aafa46da0;hb=80d2de6cdc4d253c7fbc6a4bc067d856aab9cca9;hp=40860cb4150934c091f765d7727b21909cf5bde4;hpb=197ffae2ff2f561cfef790d9fa29aa1a040b71c4;p=oweals%2Fgnunet.git diff --git a/src/nat/gnunet-helper-nat-server.c b/src/nat/gnunet-helper-nat-server.c index 40860cb41..95b46fd6c 100644 --- a/src/nat/gnunet-helper-nat-server.c +++ b/src/nat/gnunet-helper-nat-server.c @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2010 Christian Grothoff (and other contributing authors) + Copyright (C) 2010 Christian Grothoff (and other contributing authors) GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -14,8 +14,8 @@ You should have received a copy of the GNU General Public License along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /** @@ -40,6 +40,7 @@ * - Christian Grothoff * - Nathan Evans * - Benjamin Kuperman (22 Aug 2010) + * - Jacob Appelbaum (19 Dec 2011) */ #if HAVE_CONFIG_H /* Just needed for HAVE_SOCKADDR_IN_SIN_LEN test macro! */ @@ -64,6 +65,11 @@ #include #include +/* The following constant is missing from FreeBSD 9.2 */ +#ifndef ICMP_TIME_EXCEEDED +#define ICMP_TIME_EXCEEDED 11 +#endif + /** * Should we print some debug output? */ @@ -366,6 +372,9 @@ process_icmp_response () /* different type than what we want */ return; } + /* grab source IP of 1st IP header */ + source_ip.s_addr = ip_pkt.src_ip; + /* skip 2nd IP header */ memcpy (&ip_pkt, &buf[off], sizeof (struct ip_header)); off += sizeof (struct ip_header); @@ -402,7 +411,6 @@ process_icmp_response () return; } - source_ip.s_addr = ip_pkt.src_ip; if (port == 0) fprintf (stdout, "%s\n", inet_ntop (AF_INET, &source_ip, buf, sizeof (buf))); @@ -455,7 +463,9 @@ make_udp_socket (const struct in_addr *my_ip) ret = socket (AF_INET, SOCK_DGRAM, 0); if (-1 == ret) { - fprintf (stderr, "Error opening UDP socket: %s\n", strerror (errno)); + fprintf (stderr, + "Error opening UDP socket: %s\n", + strerror (errno)); return -1; } memset (&addr, 0, sizeof (addr)); @@ -466,9 +476,13 @@ make_udp_socket (const struct in_addr *my_ip) addr.sin_addr = *my_ip; addr.sin_port = htons (NAT_TRAV_PORT); - if (0 != bind (ret, &addr, sizeof (addr))) + if (0 != bind (ret, + (struct sockaddr *) &addr, + sizeof (addr))) { - fprintf (stderr, "Error binding UDP socket to port %u: %s\n", NAT_TRAV_PORT, + fprintf (stderr, + "Error binding UDP socket to port %u: %s\n", + NAT_TRAV_PORT, strerror (errno)); (void) close (ret); return -1; @@ -601,7 +615,7 @@ main (int argc, char *const *argv) } /* select failed (internal error or OS out of resources) */ - global_ret = 11; + global_ret = 11; error_exit: if (-1 != icmpsock) (void) close (icmpsock);