
    Yf%              	          U d Z ddlZddlZddlmZmZ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 ddlmZmZmZ ddlmZmZmZ ddlmZ  e ed          pd	          Zej                            d
          sej        dk    rde
fde
fgZeeeef                  e d<   ndefgZeeeef                  e d<    G d de          Z! G d de          Z" G d de          Z# G d de          Z$ G d de          Z% G d de          Z& ee&          Z'de'fdefdefd ee#          fd ee#          fd  ee#          fd!efge&_(        ej)        Z) ee'          ge)_*        ee)_+        ej,        Z,e'ge,_*        d" Z-d# Z.d$ Z/dS )%z>
POSIX implementation of local network interface enumeration.
    N)CDLLPOINTER	Structurec_char_pc_intc_ubytec_uint8c_uint32c_ushortc_void_pcastpointer)find_library)AF_INETAF_INET6	inet_ntop)AnyListTuple)nativeStringc freebsddarwinsin_len
sin_family_sockaddrCommonc                       e Zd Zd edz  fgZdS )in_addr   N__name__
__module____qualname__r   _fields_     T/var/www/html/env/lib/python3.11/site-packages/twisted/internet/test/_posixifaces.pyr   r   ,   s!        	GaK HHHr'   r   c                       e Zd Zdedz  fgZdS )in6_addrr      Nr!   r&   r'   r(   r*   r*   2   s!        	GbL!HHHr'   r*   c                       e Zd Zedefgz   ZdS )sockaddrsin_portN)r"   r#   r$   r   r   r%   r&   r'   r(   r-   r-   8   s%        	X" HHHr'   r-   c                   $    e Zd Zedefdefgz   ZdS )sockaddr_inr.   sin_addrN)r"   r#   r$   r   r   r   r%   r&   r'   r(   r0   r0   >   s-        	X	W" HHHr'   r0   c                   *    e Zd Zedefdefdefgz   ZdS )sockaddr_in6r.   sin_flowinfor1   N)r"   r#   r$   r   r   r
   r*   r%   r&   r'   r(   r3   r3   E   s5        	X	"	X" HHHr'   r3   c                       e Zd ZdS )ifaddrsN)r"   r#   r$   r&   r'   r(   r6   r6   M   s        Dr'   r6   ifa_nextifa_name	ifa_flagsifa_addrifa_netmaskifa_dstaddrifa_datac                     t           j                            d          r&|dd         dk    r|dd         dz   |dd         z   S |S )a  
    On FreeBSD, kill the embedded interface indices in link-local scoped
    addresses.

    @param family: The address family of the packed address - one of the
        I{socket.AF_*} constants.

    @param packed: The packed representation of the address (ie, the bytes of a
        I{in_addr} field).
    @type packed: L{bytes}

    @return: The packed address with any FreeBSD-specific extra bits cleared.
    @rtype: L{bytes}

    @see: U{https://twistedmatrix.com/trac/ticket/6843}
    @see: U{http://www.freebsd.org/doc/en/books/developers-handbook/ipv6.html#ipv6-scope-index}

    @note: Indications are that the need for this will be gone in FreeBSD >=10.
    r   N   s   s     r    )sysplatform
startswith)familypackeds     r(   _maybeCleanupScopeIndexrE   d   sS    ( |y)) 5fRaRjK.G.GbqbzK'&*44Mr'   c                     t                      } t          t          |                     dk     rt                      g }	 | r| d         j        r| d         j        d         j        }|t          k    r.t          | d         j        t          t                              }n;|t          k    r.t          | d         j        t          t                              }nd}|rht          |d         j        j        dd                   }t          ||          }|                    | d         j        |t%          ||          f           | d         j        } | t)          |            n# t)          |            w xY w|S )z
    Call C{getifaddrs(3)} and return a list of tuples of interface name, address
    family, and human-readable address representing its results.
    r   N)	ifaddrs_p
getifaddrsr   OSErrorr:   r   r   r   r   r0   r   r3   bytesr1   r   rE   appendr8   r   r7   freeifaddrs)r6   resultsrC   addrrD   s        r(   _interfacesrO   }   sm   
 kkG''""##a''iiG 	*qz"  ,Q/:W$$
 3W[5I5IJJDDx''
 3W\5J5JKKDDD "47#3#;AAA#>??F4VVDDFNN ,fi6O6OP   aj)G#  	*& 	GGNs    DE& &E7c                      g } t                      D ]c\  }}}t          |          }t          |          }|t          j        k    r/|                    d          r|                     | 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{getifaddrs(3)}.
    zfe80:%)rO   r   socketr   rB   rK   )retList	interfacerC   addresss       r(   posixGetLinkLocalIPv6AddressesrV      s    
 G&1mm 5 5"	67 ++	w''V_$$););G)D)D$NNg33	33444Nr'   )0__doc__rR   r@   ctypesr   r   r   r   r   r   r	   r
   r   r   r   r   ctypes.utilr   r   r   r   typingr   r   r   twisted.python.compatr   libcrA   rB   r   str__annotations__r   r*   r-   r0   r3   r6   rG   r%   rH   argtypesrestyperL   rE   rO   rV   r&   r'   r(   <module>ra      s    
  



                            % $ $ $ $ $ / / / / / / / / / / # # # # # # # # # # . . . . . .tLL#$$<9%% )A)A	G	w.OT%S/*     
x .OT%S/*   
    i       y       y       )       9   	 	 	 	 	i 	 	 	 GG	(""#GGH%%&GGH%%&  _
wy))*
 
 !{   2  B    r'   