Make sure the ping comes from the correct ip.

db4
Doug Coleman 2010-09-21 11:10:31 -05:00
parent 7b0a50e7d2
commit 2e72e91f92
1 changed files with 8 additions and 5 deletions

View 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 ;