gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r12630 - gnunet/src/transport


From: gnunet
Subject: [GNUnet-SVN] r12630 - gnunet/src/transport
Date: Wed, 18 Aug 2010 18:10:12 +0200

Author: nevans
Date: 2010-08-18 18:10:12 +0200 (Wed, 18 Aug 2010)
New Revision: 12630

Modified:
   gnunet/src/transport/gnunet-nat-client-windows.c
Log:
windoze suckssss

Modified: gnunet/src/transport/gnunet-nat-client-windows.c
===================================================================
--- gnunet/src/transport/gnunet-nat-client-windows.c    2010-08-18 15:59:14 UTC 
(rev 12629)
+++ gnunet/src/transport/gnunet-nat-client-windows.c    2010-08-18 16:10:12 UTC 
(rev 12630)
@@ -180,7 +180,62 @@
                                       sizeof (struct icmp_echo_packet)));
 }
 
+/**
+ * Send an ICMP message to the dummy IP.
+ *
+ * @param my_ip source address (our ip address)
+ */
+static void
+send_icmp_echo (const struct in_addr *my_ip)
+{
+  struct icmp_packet icmp_echo;
+  struct sockaddr_in dst;
+  size_t off;
+  int err;
+  struct ip_packet ip_pkt;
+  struct icmp_packet icmp_pkt;
+  char packet[sizeof (ip_pkt) + sizeof (icmp_pkt)];
 
+  off = 0;
+  memset(&ip_pkt, 0, sizeof(ip_pkt));
+  ip_pkt.vers_ihl = 0x45;
+  ip_pkt.tos = 0;
+  ip_pkt.pkt_len = sizeof (packet);
+  ip_pkt.id = 1;
+  ip_pkt.flags_frag_offset = 0;
+  ip_pkt.ttl = IPDEFTTL;
+  ip_pkt.proto = IPPROTO_ICMP;
+  ip_pkt.checksum = 0;
+  ip_pkt.src_ip = my_ip->s_addr;
+  ip_pkt.dst_ip = dummy.s_addr;
+  ip_pkt.checksum = htons(calc_checksum((uint16_t*)&ip_pkt, sizeof (ip_pkt)));
+  memcpy (packet, &ip_pkt, sizeof (ip_pkt));
+  off += sizeof (ip_pkt);
+  make_echo (my_ip, &icmp_echo);
+  memcpy (&packet[off], &icmp_echo, sizeof (icmp_echo));
+  off += sizeof (icmp_echo);
+
+  memset (&dst, 0, sizeof (dst));
+  dst.sin_family = AF_INET;
+  dst.sin_addr = dummy;
+  err = sendto(rawsock,
+               packet, off, 0,
+               (struct sockaddr*)&dst,
+               sizeof(dst));
+  if (err < 0)
+    {
+#if VERBOSE
+      fprintf(stderr,
+              "sendto failed: %s\n", strerror(errno));
+#endif
+    }
+  else if (err != off)
+    {
+      fprintf(stderr,
+              "Error: partial send of ICMP message\n");
+    }
+}
+
 /**
  * Send an ICMP message to the target.
  *
@@ -454,6 +509,7 @@
                strerror (errno));
       abort ();
     }
+  send_icmp_echo(&target);
   fprintf(stderr, "Sending icmp message.\n");
   send_icmp (&external,
             &target);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]