o
    ¯b‡  ã                	   @   sà   d Z ddlmZmZmZmZmZmZmZm	Z	m
Z
mZ ddlmZmZmZ edƒZeZeZeZeZeZeZeZeZeZejZeeeeeeeeeg	e_ee_ejZeeeeege_ee_dZdZG dd„ deƒZ d	d
„ Z!dd„ Z"dS )z@
Windows implementation of local network interface enumeration.
é    )
ÚPOINTERÚ	StructureÚWinDLLÚbyrefÚc_intÚc_void_pÚcastÚcreate_string_bufferÚcreate_unicode_bufferÚ
wstring_at)ÚAF_INET6ÚSOCK_STREAMÚsocketÚws2_32i  Hi'  c                   @   s   e Zd ZdefdefgZdS )ÚSOCKET_ADDRESSÚ
lpSockaddrÚiSockaddrLengthN)Ú__name__Ú
__module__Ú__qualname__r   r   Ú_fields_© r   r   úD/usr/lib/python3/dist-packages/twisted/internet/test/_win32ifaces.pyr   M   s    r   c                    s   G ‡ fdd„dt ƒ}|S )Nc                       s    e Zd Zdefde”  fgZdS )z%make_SAL.<locals>.SOCKET_ADDRESS_LISTÚiAddressCountÚAddressN)r   r   r   r   r   r   r   ©Úlnr   r   ÚSOCKET_ADDRESS_LISTR   s    r   )r   )r   r   r   r   r   Úmake_SALQ   s   r   c                  C   s  t ttƒ} d}tƒ }tdƒD ]}t|ƒ}t|  ¡ tdd||t	|ƒddƒ	}|r-|j
r-|j
}q |r4tdƒ‚t|ttdƒƒƒ}|d j}t|tt|ƒƒƒ}d}t|ƒ}	g }
t|d jƒD ]%}||_
|d j| }t|j|jd|	t	|ƒƒ}|rxtdƒ‚|
 t|	ƒ¡ qZdd„ |
D ƒS )	z¼
    Return a list of strings in colon-hex format representing all the link local
    IPv6 addresses available on the system, as reported by
    I{WSAIoctl}/C{SIO_ADDRESS_LIST_QUERY}.
    i   é   r   zWSAIoctl failurei   zWSAAddressToString failurec                 S   s   g | ]}d |v r|‘qS )ú%r   )Ú.0Úaddrr   r   r   Ú
<listcomp>‰   s    z2win32GetLinkLocalIPv6Addresses.<locals>.<listcomp>)r   r   r   r   Úranger	   ÚWSAIoctlÚfilenoÚSIO_ADDRESS_LIST_QUERYr   ÚvalueÚRuntimeErrorr   r   r   r   r
   r   ÚWSAAddressToStringr   r   Úappendr   )ÚsÚsizeÚretBytesÚiÚbufÚretÚaddrListÚ	addrCountÚaddressStringBufLengthÚaddressStringBufÚretListÚaddressr   r   r   Úwin32GetLinkLocalIPv6AddressesX   sB   
ÿ

ûr8   N)#Ú__doc__Úctypesr   r   r   r   r   r   r   r	   r
   r   r   r   r   ÚWS2_32ÚSOCKETÚDWORDÚLPVOIDÚ
LPSOCKADDRÚLPWSAPROTOCOL_INFOÚLPTSTRÚLPDWORDÚLPWSAOVERLAPPEDÚ"LPWSAOVERLAPPED_COMPLETION_ROUTINEr%   ÚargtypesÚrestypeÚWSAAddressToStringWr*   r'   Ú	WSAEFAULTr   r   r8   r   r   r   r   Ú<module>   sB   0÷
