Ë
    oj%  ã            	       óÆ  — 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«      xs d	«      Zej8                  j;                  d
«      sej8                  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jR                  Z) ee'«      ge)_*        ee)_+        ejX                  Z,e'ge,_*        d"„ Z-d#„ Z.d$„ Z/y)%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y)Úin_addré   N©Ú__name__Ú
__module__Ú__qualname__r   Ú_fields_© ó    úD/usr/lib/python3/dist-packages/twisted/internet/test/_posixifaces.pyr   r   ,   s   „ à	�G˜a‘KÐ ð�Hr'   r   c                   ó   — e Zd Zdedz  fgZy)Úin6_addrr   é   Nr!   r&   r'   r(   r*   r*   2   s   „ à	�G˜b‘LÐ!ð�Hr'   r*   c                   ó   — e Zd Zedefgz   Zy)ÚsockaddrÚsin_portN)r"   r#   r$   r   r   r%   r&   r'   r(   r-   r-   8   s   „ ØØ	�XÐð"ñ �Hr'   r-   c                   ó"   — e Zd Zedefdefgz   Zy)Úsockaddr_inr.   Úsin_addrN)r"   r#   r$   r   r   r   r%   r&   r'   r(   r0   r0   >   s!   „ ØØ	�XÐØ	�WÐð"ñ �Hr'   r0   c                   ó(   — e Zd Zedefdefdefgz   Zy)Úsockaddr_in6r.   Úsin_flowinfor1   N)r"   r#   r$   r   r   r
   r*   r%   r&   r'   r(   r3   r3   E   s)   „ ØØ	�XÐØ	˜Ð"Ø	�XÐð"ñ �Hr'   r3   c                   ó   — e Zd Zy)ÚifaddrsN)r"   r#   r$   r&   r'   r(   r6   r6   M   s   „ Ør'   r6   Úifa_nextÚifa_nameÚ	ifa_flagsÚifa_addrÚifa_netmaskÚifa_dstaddrÚifa_datac                 óp   — t         j                  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   sD   € ô( ‡|�|×Ñ˜yÔ)¨f°R°a¨j¸KÒ.GØ�b�qˆz˜KÑ'¨&°°¨*Ñ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        «      «      }n2|t        k(  r't        | d   j                  t        t        «      «      }nd}|r\t        |d   j                  j                  dd «      }t        ||«      }|j!                  | d   j"                  |t%        ||«      f«       | d   j&                  } | rŒýt)        | «       |S # t)        | «       w xY w)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   }   s)  € ô
 ‹k€GÜ”'˜'Ó"Ó# aÒ'Ü‹iˆØ€GðÙØ�q‰z×"Ò"Ø  ™×,Ñ,¨QÑ/×:Ñ:�ØœWÒ$Ü ¨¡
× 3Ñ 3´W¼[Ó5IÓJ‘DØœxÒ'Ü ¨¡
× 3Ñ 3´W¼\Ó5JÓK‘Dà�DáÜ" 4¨¡7×#3Ñ#3×#;Ñ#;¹AÐ#>Ó?�FÜ4°V¸VÓD�FØ—N‘NØ  ™×,Ñ,¨f´iÀÈÓ6OÐPôð ˜a‘j×)Ñ)ˆGò# ô& 	�GÔØ€Nøô 	�GÕús   ¯C>D; Ä;Ec                  óÔ   — g } t        «       D ]X  \  }}}t        |«      }t        |«      }|t        j                  k(  sŒ1|j	                  d«      sŒC| j                  |› d|› �«       ŒZ | 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   ž   sl   € ð
 €GÜ&1£mò 5Ñ"ˆ	�6˜7Ü  Ó+ˆ	Ü˜wÓ'ˆØ”V—_‘_Ó$¨×);Ñ);¸GÕ)DØ�N‰N˜g˜Y a¨	 {Ð3Õ4ð	5ð
 €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¨  ðòó
 Û 
÷÷ ÷ ó õ %ß /Ñ /ß #Ñ #å .á‰L˜ÓÒ# Ó$€à‡<�<×Ñ˜9Ô%¨¯©¸Ò)Aà	�GÐØ	�wÐð.€O�T˜%  S ™/Ñ*ô ð 
�xÐ ð.€O�T˜%  S ™/Ñ*ó ô
ˆiô ôˆyô ôˆyô ô�)ô ô�9ô ô	ˆiô 	ñ �GÓ€	à�ÐØ�ÐØ�(ÐØ‘˜Ó"Ð#Ø‘G˜HÓ%Ð&Ø‘G˜HÓ%Ð&Ø�Ðð€Ô ð �_‰_€
Ù˜yÓ)Ð*€
Ô Ø€
Ô à×Ñ€Ø!�{€Ô òò2óBr'   