U
    
W[+  ã                	   @   sà   d Z ddlmZmZmZ ddlmZmZmZmZm	Z	m
Z
mZ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.
é    )ÚsocketÚAF_INET6ÚSOCK_STREAM)
ÚWinDLLÚbyrefÚcreate_string_bufferÚcreate_unicode_bufferÚc_intÚc_void_pÚPOINTERÚ	StructureÚcastÚ
wstring_atZ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   =   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_LISTD   s   
ÿr   )r   )r   r   r   r   r   Úmake_SALC   s    r   c                  C   s  t ttƒ} d}tƒ }tdƒD ]B}t|ƒ}t|  ¡ tdd||t	|ƒddƒ	}|rZ|j
rZ|j
}q q`q|rltdƒ‚t|ttdƒƒƒ}|d j}t|tt|ƒƒƒ}d}t|ƒ}	g }
t|d jƒD ]J}||_
|d j| }t|j|jd|	t	|ƒƒ}|rôtdƒ‚|
 t|	ƒ¡ q¸d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 |kr|‘qS )ú%r   )Ú.0Zaddrr   r   r   Ú
<listcomp>x   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ÚsizeZretBytesÚiZbufZretZaddrListZ	addrCountZaddressStringBufLengthZaddressStringBufZretListZaddressr   r   r   Úwin32GetLinkLocalIPv6AddressesK   sR    
       þ

   þr-   N)#Ú__doc__r   r   r   Zctypesr   r   r   r   r	   r
   r   r   r   r   ZWS2_32ZSOCKETZDWORDZLPVOIDZ
LPSOCKADDRZLPWSAPROTOCOL_INFOZLPTSTRZLPDWORDZLPWSAOVERLAPPEDZ"LPWSAOVERLAPPED_COMPLETION_ROUTINEr#   ZargtypesZrestypeZWSAAddressToStringWr(   r%   Z	WSAEFAULTr   r   r-   r   r   r   r   Ú<module>   sJ   0       þ
    ÿ