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