windows: Start adding GetBestInterface.
parent
c5df68d7b3
commit
b72040d3b6
|
@ -3,8 +3,9 @@
|
||||||
USING: accessors alien alien.c-types alien.data alien.strings
|
USING: accessors alien alien.c-types alien.data alien.strings
|
||||||
alien.syntax arrays byte-arrays classes.struct combinators
|
alien.syntax arrays byte-arrays classes.struct combinators
|
||||||
combinators.smart destructors io.encodings.string
|
combinators.smart destructors io.encodings.string
|
||||||
io.encodings.utf8 kernel libc make sequences sequences.extras
|
io.encodings.utf8 io.sockets io.sockets.private kernel libc
|
||||||
windows.errors windows.kernel32 windows.types windows.winsock ;
|
make refs sequences sequences.extras windows.errors
|
||||||
|
windows.kernel32 windows.types windows.winsock fry ;
|
||||||
IN: windows.iphlpapi
|
IN: windows.iphlpapi
|
||||||
|
|
||||||
LIBRARY: iphlpapi
|
LIBRARY: iphlpapi
|
||||||
|
@ -43,7 +44,7 @@ CONSTANT: MIB_IF_TYPE_LOOPBACK 24
|
||||||
CONSTANT: MIB_IF_TYPE_SLIP 28
|
CONSTANT: MIB_IF_TYPE_SLIP 28
|
||||||
CONSTANT: MAX_DNS_SUFFIX_STRING_LENGTH 256 ! 246?
|
CONSTANT: MAX_DNS_SUFFIX_STRING_LENGTH 256 ! 246?
|
||||||
CONSTANT: MAX_DHCPV6_DUID_LENGTH 130
|
CONSTANT: MAX_DHCPV6_DUID_LENGTH 130
|
||||||
|
CONSTANT: MAX_ADAPTER_NAME 128
|
||||||
|
|
||||||
STRUCT: IP_ADDRESS_STRING
|
STRUCT: IP_ADDRESS_STRING
|
||||||
{ String char[16] } ;
|
{ String char[16] } ;
|
||||||
|
@ -330,6 +331,45 @@ TYPEDEF: IP_ADAPTER_ADDRESSES* PIP_ADAPTER_ADDRESSES
|
||||||
|
|
||||||
TYPEDEF: FIXED_INFO* PFIXED_INFO
|
TYPEDEF: FIXED_INFO* PFIXED_INFO
|
||||||
|
|
||||||
|
STRUCT: S_un_b
|
||||||
|
{ s_b1 uchar }
|
||||||
|
{ s_b2 uchar }
|
||||||
|
{ s_b3 uchar }
|
||||||
|
{ s_b4 uchar } ;
|
||||||
|
|
||||||
|
STRUCT: S_un_w
|
||||||
|
{ s_w1 ushort }
|
||||||
|
{ s_w2 ushort } ;
|
||||||
|
|
||||||
|
UNION-STRUCT: IPAddr
|
||||||
|
{ S_un_b S_un_b }
|
||||||
|
{ S_un_w S_un_w }
|
||||||
|
{ S_addr ulong } ;
|
||||||
|
|
||||||
|
UNION-STRUCT: S_un
|
||||||
|
{ S_un_b S_un_b }
|
||||||
|
{ S_un_w S_un_w }
|
||||||
|
{ S_addr ulong } ;
|
||||||
|
|
||||||
|
STRUCT: IP_ADAPTER_INDEX_MAP
|
||||||
|
{ Index ULONG }
|
||||||
|
{ Name WCHAR[MAX_ADAPTER_NAME] } ;
|
||||||
|
TYPEDEF: IP_ADAPTER_INDEX_MAP* PIP_ADAPTER_INDEX_MAP
|
||||||
|
|
||||||
|
FUNCTION: DWORD IpReleaseAddress ( PIP_ADAPTER_INDEX_MAP AdapterInfo ) ;
|
||||||
|
FUNCTION: DWORD IpRenewAddress ( PIP_ADAPTER_INDEX_MAP AdapterInfo ) ;
|
||||||
|
|
||||||
|
|
||||||
|
FUNCTION: DWORD GetBestInterface (
|
||||||
|
IPAddr dwDestAddr,
|
||||||
|
PDWORD pdwBestIfIndex
|
||||||
|
) ;
|
||||||
|
|
||||||
|
FUNCTION: DWORD GetBestInterfaceEx (
|
||||||
|
sockaddr* pDestAddr,
|
||||||
|
PDWORD pdwBestIfIndex
|
||||||
|
) ;
|
||||||
|
|
||||||
FUNCTION: ULONG GetAdaptersAddresses (
|
FUNCTION: ULONG GetAdaptersAddresses (
|
||||||
ULONG Family,
|
ULONG Family,
|
||||||
ULONG Flags,
|
ULONG Flags,
|
||||||
|
@ -376,7 +416,6 @@ FUNCTION: DWORD GetNetworkParams ( PFIXED_INFO pFixedInfo, PULONG pOutBufLen ) ;
|
||||||
|
|
||||||
PRIVATE>
|
PRIVATE>
|
||||||
|
|
||||||
|
|
||||||
: interfaces-each ( quot -- seq )
|
: interfaces-each ( quot -- seq )
|
||||||
[ [ iterate-interfaces ] dip each ] with-destructors ; inline
|
[ [ iterate-interfaces ] dip each ] with-destructors ; inline
|
||||||
|
|
||||||
|
@ -398,3 +437,7 @@ PRIVATE>
|
||||||
[ FirstUnicastAddress>> loop-list [ Address>> SOCKET_ADDRESS>sockaddr sockaddr>ip ] map ]
|
[ FirstUnicastAddress>> loop-list [ Address>> SOCKET_ADDRESS>sockaddr sockaddr>ip ] map ]
|
||||||
} cleave>array
|
} cleave>array
|
||||||
] interfaces-map ;
|
] interfaces-map ;
|
||||||
|
|
||||||
|
: get-best-interface ( inet -- interface )
|
||||||
|
make-sockaddr 0 DWORD <ref>
|
||||||
|
[ GetBestInterfaceEx win32-error=0/f ] keep DWORD deref ;
|
||||||
|
|
Loading…
Reference in New Issue