U
    P|j‡  ã                	   @   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ÚsocketZ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   úF/tmp/pip-unpacked-wheel-audpp6lv/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 ]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   )Ú.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ÚsizeZretBytesÚiÚbufÚretZaddrListZ	addrCountZaddressStringBufLengthZaddressStringBufZretListÚaddressr   r   r   Úwin32GetLinkLocalIPv6AddressesX   sR    
        ÿ

ûr1   N)#Ú__doc__Úctypesr   r   r   r   r   r   r   r	   r
   r   r   r   r   ZWS2_32ZSOCKETZDWORDZLPVOIDZ
LPSOCKADDRZLPWSAPROTOCOL_INFOZLPTSTRZLPDWORDZLPWSAOVERLAPPEDZ"LPWSAOVERLAPPED_COMPLETION_ROUTINEr$   ÚargtypesÚrestypeZWSAAddressToStringWr)   r&   Z	WSAEFAULTr   r   r1   r   r   r   r   Ú<module>   s@   0÷
