o
    ]i                     @   s  d dl Z d dl mZ d dlmZmZ d dlmZ d ZdZ	dZ
dZdZd ZG dd	 d	e jZG d
d de jZdejfdejfde efdefde jfde jfde jfdejfdejfdejfde jfge_G dd de jZdejfdejfde efde jfde efde jfde jfde jfde jfd e jfd!e jfge_e jd"Zd#ed$ed%eej fd&d'Z d,d)e!d%eej" fd*d+Z#dS )-    N)wintypes)IterableListo            c                   @   s&   e Zd ZdeejfdejfgZ	dS )SOCKET_ADDRESS
lpSockaddriSockaddrLengthN)
__name__
__module____qualname__ctypesPOINTERsharedsockaddrr   INT_fields_ r   r   A/home/ubuntu/.local/lib/python3.10/site-packages/ifaddr/_win32.pyr	   $   s    r	   c                   @      e Zd ZdS )IP_ADAPTER_UNICAST_ADDRESSNr   r   r   r   r   r   r   r   (       r   LengthFlagsNextAddressPrefixOriginSuffixOriginDadStateValidLifetimePreferredLifetimeLeaseLifetimeOnLinkPrefixLengthc                   @   r   )IP_ADAPTER_ADDRESSESNr   r   r   r   r   r&   ;   r   r&   IfIndexAdapterNameFirstUnicastAddressFirstAnycastAddressFirstMulticastAddressFirstDnsServerAddress	DnsSuffixDescriptionFriendlyNameIphlpapi	nice_nameaddressreturnc                 c   st    g }	 | | |jsn|jd }q|D ]"}t|jj}|d us,J d|jj d|j}t||| V  qd S )NTr   zsockaddr_to_ip(z) returned None)appendr   r   sockaddr_to_ipr   r
   r%   IP)r1   r2   	addressesipnetwork_prefixr   r   r   enumerate_interfaces_of_adapterQ   s   

r:   Finclude_unconfiguredc              	   C   s  t d}t}|tkr*t|j}tt tt dd t	|t	|}|tks|t
kr2t g }t|}	 || |jsCn|jd }q:g }|D ]8}|j }|j}	|j}
|jrwt|j|jd }t|}|tj||	||
d qM| r|tj||	g |
d qM|S )Ni <  r   T)index)r   ULONGERROR_BUFFER_OVERFLOWr   create_string_buffervalueiphlpapiGetAdaptersAddresses	AF_UNSPECbyrefNO_ERRORWinErrorr&   from_bufferr4   r   r(   decoder.   r'   r)   r:   r/   listr   Adapter)r;   addressbuffersizeretvaladdressbufferaddress_infosaddress_inforesultadapter_infonamer1   r<   ipsr   r   r   get_adaptersd   sJ   
	



rT   )F)$r   r   typingr   r   ifaddr._shared_sharedr   rE   r>   MAX_ADAPTER_NAME_LENGTHMAX_ADAPTER_DESCRIPTION_LENGTHMAX_ADAPTER_ADDRESS_LENGTHrC   	Structurer	   r   r=   DWORDr   c_uintc_uint8r   r&   c_char_pc_void_p	c_wchar_pwindllLoadLibraryrA   strr6   r:   boolrJ   rT   r   r   r   r   <module>   s\   
