]> gitweb.factorcode.org Git - factor.git/blob - basis/windows/iphlpapi/iphlpapi.factor
Merge remote-tracking branch 'philip-searle/master'
[factor.git] / basis / windows / iphlpapi / iphlpapi.factor
1 ! Copyright (C) 2010 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors alien alien.c-types alien.data alien.syntax
4 classes.struct io.encodings.string io.encodings.utf8 kernel
5 make sequences windows.errors windows.types ;
6 IN: windows.iphlpapi
7
8 LIBRARY: iphlpapi
9
10 <<
11 CONSTANT: DEFAULT_MINIMUM_ENTITIES 32
12 CONSTANT: MAX_ADAPTER_ADDRESS_LENGTH 8
13 CONSTANT: MAX_ADAPTER_DESCRIPTION_LENGTH 128
14 CONSTANT: MAX_ADAPTER_NAME_LENGTH 256
15 CONSTANT: MAX_DOMAIN_NAME_LEN 128
16 CONSTANT: MAX_HOSTNAME_LEN 128
17 CONSTANT: MAX_SCOPE_ID_LEN 256
18 CONSTANT: BROADCAST_NODETYPE 1
19 CONSTANT: PEER_TO_PEER_NODETYPE 2
20 CONSTANT: MIXED_NODETYPE 4
21 CONSTANT: HYBRID_NODETYPE 8
22 CONSTANT: IF_OTHER_ADAPTERTYPE 0
23 CONSTANT: IF_ETHERNET_ADAPTERTYPE 1
24 CONSTANT: IF_TOKEN_RING_ADAPTERTYPE 2
25 CONSTANT: IF_FDDI_ADAPTERTYPE 3
26 CONSTANT: IF_PPP_ADAPTERTYPE 4
27 CONSTANT: IF_LOOPBACK_ADAPTERTYPE 5
28 >>
29
30 CONSTANT: MAX_DOMAIN_NAME_LEN+4 132
31 CONSTANT: MAX_HOSTNAME_LEN+4 132
32 CONSTANT: MAX_SCOPE_ID_LEN+4 260
33
34 STRUCT: IP_ADDRESS_STRING
35     { String char[16] } ;
36
37 TYPEDEF: IP_ADDRESS_STRING* PIP_ADDRESS_STRING
38 TYPEDEF: IP_ADDRESS_STRING IP_MASK_STRING
39 TYPEDEF: IP_MASK_STRING* PIP_MASK_STRING
40
41 STRUCT: IP_ADDR_STRING
42     { Next IP_ADDR_STRING* }
43     { IpAddress IP_ADDRESS_STRING }
44     { IpMask IP_MASK_STRING }
45     { Context DWORD } ;
46     
47 TYPEDEF: IP_ADDR_STRING* PIP_ADDR_STRING
48
49 STRUCT: FIXED_INFO
50     { HostName char[MAX_HOSTNAME_LEN+4] }
51     { DomainName char[MAX_DOMAIN_NAME_LEN+4] }
52     { CurrentDnsServer PIP_ADDR_STRING }
53     { DnsServerList IP_ADDR_STRING }
54     { NodeType UINT }
55     { ScopeId char[MAX_SCOPE_ID_LEN+4] }
56     { EnableRouting UINT }
57     { EnableProxy UINT }
58     { EnableDns UINT }
59     { ExtraSpace char[4096] } ;
60
61 TYPEDEF: FIXED_INFO* PFIXED_INFO
62
63 FUNCTION: DWORD GetNetworkParams ( PFIXED_INFO pFixedInfo, PULONG pOutBufLen ) ;
64
65 : get-fixed-info ( -- FIXED_INFO )
66     FIXED_INFO <struct> dup byte-length ulong <ref>
67     [ GetNetworkParams n>win32-error-check ] 2keep drop ;
68     
69 : dns-server-ips ( -- sequence )
70     get-fixed-info DnsServerList>> [
71         [
72             [ IpAddress>> String>> [ 0 = ] trim-tail utf8 decode , ]
73             [ Next>> ] bi dup
74         ] loop drop
75     ] { } make ;