psyc/social: local join flag; social service: leave place, save _file
[oweals/gnunet.git] / src / nat / gnunet-helper-nat-server-windows.c
index 8386a15b14aa3624d85137378a90fee7e8dbf111..bb9356d1df1b31dd3f7d1d666dba71743129f9f2 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.
 */
 
 /**
@@ -42,7 +42,7 @@
  */
 #define _GNU_SOURCE
 
-
+#define FD_SETSIZE 1024
 #include <winsock2.h>
 #include <ws2tcpip.h>
 #include <sys/time.h>
  */
 #define NAT_TRAV_PORT 22225
 
+/**
+ * Must match packet ID used by gnunet-helper-nat-client.c
+ */
+#define PACKET_ID 256
+
 /**
  * TTL to use for our outgoing messages.
  */
@@ -182,6 +187,11 @@ struct udp_header
   uint16_t crc;
 };
 
+/**
+ * Will this binary be run in permissions testing mode?
+ */
+static boolean privilege_testing = FALSE;
+
 /**
  * Socket we use to receive "fake" ICMP replies.
  */
@@ -265,7 +275,7 @@ send_icmp_echo (const struct in_addr *my_ip)
   ip_pkt.vers_ihl = 0x45;
   ip_pkt.tos = 0;
   ip_pkt.pkt_len = htons (sizeof (packet));
-  ip_pkt.id = htons (256);
+  ip_pkt.id = htons (PACKET_ID);
   ip_pkt.flags_frag_offset = 0;
   ip_pkt.ttl = IPDEFTTL;
   ip_pkt.proto = IPPROTO_ICMP;
@@ -521,9 +531,18 @@ main (int argc, char *const *argv)
   fd_set rs;
   struct timeval tv;
   WSADATA wsaData;
-  unsigned int alt;
+  unsigned int alt = 0;
+
+  if ( (argc > 1) && (0 != strcmp (argv[1], "-d")))
+  {
+    privilege_testing = TRUE;
+    fprintf (stderr,
+            "%s",
+            "DEBUG: Running binary in privilege testing mode.");
+    argv++;
+    argc--;
+  }
 
-  alt = 0;
   if (2 != argc)
   {
     fprintf (stderr,
@@ -561,7 +580,8 @@ main (int argc, char *const *argv)
     closesocket (rawsock);
     return 3;
   }
-  while (1)
+
+  while ( ! privilege_testing)
   {
     FD_ZERO (&rs);
     FD_SET (icmpsock, &rs);
@@ -586,6 +606,8 @@ main (int argc, char *const *argv)
   closesocket (rawsock);
   closesocket (udpsock);
   WSACleanup ();
+  if (privilege_testing)
+    return 0;
   return 4;
 }