psyc/social: local join flag; social service: leave place, save _file
[oweals/gnunet.git] / src / nat / gnunet-helper-nat-server.c
index d3c890b9815ad06e4253af206654ba85223f4e83..95b46fd6c8f23199feb1e3f6de34f24aafa46da0 100644 (file)
@@ -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.
 */
 
 /**
 #include <netinet/ip_icmp.h>
 #include <netinet/in.h>
 
+/* 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?
  */
@@ -367,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);
@@ -403,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)));
@@ -456,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));
@@ -467,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;
@@ -602,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);