]> gitweb.factorcode.org Git - factor.git/commitdiff
Make sure the ping comes from the correct ip.
authorDoug Coleman <doug.coleman@gmail.com>
Tue, 21 Sep 2010 16:10:31 +0000 (11:10 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Tue, 21 Sep 2010 16:16:05 +0000 (11:16 -0500)
extra/ping/ping.factor

index 07aefca55e1a84417d7b4a40a89049f7a44ec38b..1a9aba02110f3b07b23484f12db9034984e50764 100644 (file)
@@ -4,7 +4,7 @@
 USING: accessors byte-arrays calendar checksums
 checksums.internet combinators combinators.smart continuations
 destructors io.sockets io.sockets.icmp io.timeouts kernel pack
-random sequences ;
+random sequences locals ;
 
 IN: ping
 
@@ -35,8 +35,12 @@ TUPLE: echo type identifier sequence data ;
 : send-ping ( addr datagram -- )
     [ 0 { } <echo> echo>byte-array ] 2dip send ;
 
-: recv-ping ( datagram -- echo )
-    receive drop 20 tail byte-array>echo ;
+:: recv-ping ( addr datagram -- echo )
+    datagram receive addr = [
+        20 tail byte-array>echo
+    ] [
+        drop addr datagram recv-ping
+    ] if ;
 
 PRIVATE>
 
@@ -44,7 +48,7 @@ PRIVATE>
     <icmp> resolve-host [ icmp4? ] filter random
     f <icmp4> <datagram>
         1 seconds over set-timeout
-    [ [ send-ping ] [ recv-ping ] bi ] with-disposal ;
+    [ [ send-ping ] [ recv-ping ] 2bi ] with-disposal ;
 
 : local-ping ( -- reply )
     "127.0.0.1" ping ;
@@ -52,4 +56,3 @@ PRIVATE>
 : alive? ( host -- ? )
     [ ping drop t ] [ 2drop f ] recover ;
 
-