]> gitweb.factorcode.org Git - factor.git/blob - basis/io/sockets/icmp/icmp.factor
095a03ab7b7a10cd63d5ec239c88e30b1452fb92
[factor.git] / basis / io / sockets / icmp / icmp.factor
1 ! Copyright (C) 2010 John Benediktsson
2 ! See http://factorcode.org/license.txt for BSD license
3
4 USING: accessors arrays combinators generic kernel io.sockets
5 io.sockets.private memoize sequences system vocabs.parser ;
6
7 IN: io.sockets.icmp
8
9 << {
10     { [ os windows? ] [ "windows.winsock" ] }
11     { [ os unix? ] [ "unix.ffi" ] }
12 } cond use-vocab >>
13
14 <PRIVATE
15
16 MEMO: IPPROTO_ICMP4 ( -- protocol )
17     "icmp" getprotobyname proto>> ;
18
19 MEMO: IPPROTO_ICMP6 ( -- protocol )
20     "ipv6-icmp" getprotobyname proto>> ;
21
22 GENERIC: with-icmp ( addrspec -- addrspec )
23
24 PRIVATE>
25
26
27 TUPLE: icmp4 < ipv4 ;
28
29 C: <icmp4> icmp4
30
31 M: ipv4 with-icmp host>> <icmp4> ;
32
33 M: icmp4 protocol drop IPPROTO_ICMP4 ;
34
35 M: icmp4 port>> drop 0 ;
36
37 M: icmp4 parse-sockaddr call-next-method with-icmp ;
38
39 M: icmp4 resolve-host 1array ;
40
41
42 TUPLE: icmp6 < ipv6 ;
43
44 : <icmp6> ( host -- icmp6 ) 0 icmp6 boa ;
45
46 M: ipv6 with-icmp host>> <icmp6> ;
47
48 M: icmp6 protocol drop IPPROTO_ICMP6 ;
49
50 M: icmp6 port>> drop 0 ;
51
52 M: icmp6 parse-sockaddr call-next-method with-icmp ;
53
54 M: icmp6 resolve-host 1array ;
55
56
57 TUPLE: icmp < hostname ;
58
59 C: <icmp> icmp
60
61 M: icmp resolve-host call-next-method [ with-icmp ] map ;