Make a way to get DNS server ips on Windows
							parent
							
								
									67fa5080f4
								
							
						
					
					
						commit
						f981b6db3c
					
				| 
						 | 
				
			
			@ -734,6 +734,13 @@ ERROR: windows-error n string ;
 | 
			
		|||
: win32-error<0 ( n -- ) 0 < [ win32-error ] when ;
 | 
			
		||||
: win32-error<>0 ( n -- ) zero? [ win32-error ] unless ;
 | 
			
		||||
 | 
			
		||||
: n>win32-error-check ( n -- )
 | 
			
		||||
    dup ERROR_SUCCESS = [
 | 
			
		||||
        drop
 | 
			
		||||
    ] [
 | 
			
		||||
        dup n>win32-error-string windows-error
 | 
			
		||||
    ] if ;
 | 
			
		||||
 | 
			
		||||
: check-invalid-handle ( handle -- handle )
 | 
			
		||||
    dup INVALID_HANDLE_VALUE = [ win32-error-string throw ] when ;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
Doug Coleman
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,75 @@
 | 
			
		|||
! Copyright (C) 2010 Doug Coleman.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: accessors alien alien.c-types alien.syntax
 | 
			
		||||
classes.struct io.encodings.string io.encodings.utf8 kernel
 | 
			
		||||
make sequences windows.errors windows.types ;
 | 
			
		||||
IN: windows.iphlpapi
 | 
			
		||||
 | 
			
		||||
LIBRARY: iphlpapi
 | 
			
		||||
 | 
			
		||||
<<
 | 
			
		||||
CONSTANT: DEFAULT_MINIMUM_ENTITIES 32
 | 
			
		||||
CONSTANT: MAX_ADAPTER_ADDRESS_LENGTH 8
 | 
			
		||||
CONSTANT: MAX_ADAPTER_DESCRIPTION_LENGTH 128
 | 
			
		||||
CONSTANT: MAX_ADAPTER_NAME_LENGTH 256
 | 
			
		||||
CONSTANT: MAX_DOMAIN_NAME_LEN 128
 | 
			
		||||
CONSTANT: MAX_HOSTNAME_LEN 128
 | 
			
		||||
CONSTANT: MAX_SCOPE_ID_LEN 256
 | 
			
		||||
CONSTANT: BROADCAST_NODETYPE 1
 | 
			
		||||
CONSTANT: PEER_TO_PEER_NODETYPE 2
 | 
			
		||||
CONSTANT: MIXED_NODETYPE 4
 | 
			
		||||
CONSTANT: HYBRID_NODETYPE 8
 | 
			
		||||
CONSTANT: IF_OTHER_ADAPTERTYPE 0
 | 
			
		||||
CONSTANT: IF_ETHERNET_ADAPTERTYPE 1
 | 
			
		||||
CONSTANT: IF_TOKEN_RING_ADAPTERTYPE 2
 | 
			
		||||
CONSTANT: IF_FDDI_ADAPTERTYPE 3
 | 
			
		||||
CONSTANT: IF_PPP_ADAPTERTYPE 4
 | 
			
		||||
CONSTANT: IF_LOOPBACK_ADAPTERTYPE 5
 | 
			
		||||
>>
 | 
			
		||||
 | 
			
		||||
CONSTANT: MAX_DOMAIN_NAME_LEN+4 132
 | 
			
		||||
CONSTANT: MAX_HOSTNAME_LEN+4 132
 | 
			
		||||
CONSTANT: MAX_SCOPE_ID_LEN+4 260
 | 
			
		||||
 | 
			
		||||
STRUCT: IP_ADDRESS_STRING
 | 
			
		||||
    { String char[16] } ;
 | 
			
		||||
 | 
			
		||||
TYPEDEF: IP_ADDRESS_STRING* PIP_ADDRESS_STRING
 | 
			
		||||
TYPEDEF: IP_ADDRESS_STRING IP_MASK_STRING
 | 
			
		||||
TYPEDEF: IP_MASK_STRING* PIP_MASK_STRING
 | 
			
		||||
 | 
			
		||||
STRUCT: IP_ADDR_STRING
 | 
			
		||||
    { Next IP_ADDR_STRING* }
 | 
			
		||||
    { IpAddress IP_ADDRESS_STRING }
 | 
			
		||||
    { IpMask IP_MASK_STRING }
 | 
			
		||||
    { Context DWORD } ;
 | 
			
		||||
    
 | 
			
		||||
TYPEDEF: IP_ADDR_STRING* PIP_ADDR_STRING
 | 
			
		||||
 | 
			
		||||
STRUCT: FIXED_INFO
 | 
			
		||||
    { HostName char[MAX_HOSTNAME_LEN+4] }
 | 
			
		||||
    { DomainName char[MAX_DOMAIN_NAME_LEN+4] }
 | 
			
		||||
    { CurrentDnsServer PIP_ADDR_STRING }
 | 
			
		||||
    { DnsServerList IP_ADDR_STRING }
 | 
			
		||||
    { NodeType UINT }
 | 
			
		||||
    { ScopeId char[MAX_SCOPE_ID_LEN+4] }
 | 
			
		||||
    { EnableRouting UINT }
 | 
			
		||||
    { EnableProxy UINT }
 | 
			
		||||
    { EnableDns UINT }
 | 
			
		||||
    { ExtraSpace char[4096] } ;
 | 
			
		||||
 | 
			
		||||
TYPEDEF: FIXED_INFO* PFIXED_INFO
 | 
			
		||||
 | 
			
		||||
FUNCTION: DWORD GetNetworkParams ( PFIXED_INFO pFixedInfo, PULONG pOutBufLen ) ;
 | 
			
		||||
 | 
			
		||||
: get-fixed-info ( -- FIXED_INFO )
 | 
			
		||||
    FIXED_INFO <struct> dup byte-length <ulong>
 | 
			
		||||
    [ GetNetworkParams n>win32-error-check ] 2keep drop ;
 | 
			
		||||
    
 | 
			
		||||
: dns-server-ips ( -- sequence )
 | 
			
		||||
    get-fixed-info DnsServerList>> [
 | 
			
		||||
        [
 | 
			
		||||
            [ IpAddress>> String>> [ 0 = ] trim-tail utf8 decode , ]
 | 
			
		||||
            [ Next>> ] bi dup
 | 
			
		||||
        ] loop drop
 | 
			
		||||
    ] { } make ;
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
windows
 | 
			
		||||
| 
						 | 
				
			
			@ -14,6 +14,7 @@ CONSTANT: MAX_UNICODE_PATH 32768
 | 
			
		|||
    { "winsock"     "ws2_32.dll"         stdcall }
 | 
			
		||||
    { "mswsock"     "mswsock.dll"        stdcall }
 | 
			
		||||
    { "shell32"     "shell32.dll"        stdcall }
 | 
			
		||||
    { "iphlpapi"    "iphlpapi.dll"       stdcall }
 | 
			
		||||
    { "libc"        "msvcrt.dll"         cdecl   }
 | 
			
		||||
    { "libm"        "msvcrt.dll"         cdecl   }
 | 
			
		||||
    { "gl"          "opengl32.dll"       stdcall }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue