o
    Òó·i%  ã                   @   sÞ  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ƒpMd	ƒZej d
¡sZejdkrmd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„ deƒZ!G dd„ deƒZ"G dd„ deƒZ#G dd„ deƒZ$G dd„ deƒZ%G d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"d#„ Z-d$d%„ Z.d&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ÚdarwinZsin_lenÚ
sin_familyÚ_sockaddrCommonc                   @   s   e Zd Zd ed fgZdS )Úin_addré   N©Ú__name__Ú
__module__Ú__qualname__r   Ú_fields_© r#   r#   úhC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\twisted/internet/test/_posixifaces.pyr   ,   ó    
ÿr   c                   @   s   e Zd Zded fgZdS )Úin6_addrr   é   Nr   r#   r#   r#   r$   r&   2   r%   r&   c                   @   s   e Zd Zedefg ZdS )ÚsockaddrÚsin_portN)r   r    r!   r   r
   r"   r#   r#   r#   r$   r(   8   s    
ÿr(   c                   @   s    e Zd Zedefdefg ZdS )Úsockaddr_inr)   Úsin_addrN)r   r    r!   r   r
   r   r"   r#   r#   r#   r$   r*   >   s
    
þr*   c                   @   s&   e Zd Zedefdefdefg ZdS )Úsockaddr_in6r)   Zsin_flowinfor+   N)r   r    r!   r   r
   r	   r&   r"   r#   r#   r#   r$   r,   E   s    
ýr,   c                   @   s   e Zd ZdS )ÚifaddrsN)r   r    r!   r#   r#   r#   r$   r-   M   s    r-   Úifa_nextÚifa_nameZ	ifa_flagsÚifa_addrZifa_netmaskZifa_dstaddrZifa_datac                 C   s<   t j d¡r|dd… dkr|dd… d |dd…  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Úpackedr#   r#   r$   Ú_maybeCleanupScopeIndexd   s   r7   c                  C   sö   t ƒ } tt| ƒƒdk rtƒ ‚g }ze| ro| d jra| d jd j}|tkr/t| d jtt	ƒƒ}n|t
kr>t| d jttƒƒ}nd}|rat|d jjdd… ƒ}t||ƒ}| | d j|t||ƒf¡ | d j} | sW t| ƒ |S W t| ƒ |S t| ƒ 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   ÚOSErrorr0   r   r   r   r   r*   r   r,   Úbytesr+   r   r7   Úappendr/   r   r.   Úfreeifaddrs)r-   Úresultsr5   Úaddrr6   r#   r#   r$   Ú_interfaces}   s6   

ÿ
ïì
ÿr@   c                  C   sR   g } t ƒ D ]!\}}}t|ƒ}t|ƒ}|tjkr&| d¡r&|  |› d|› �¡ q| 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:ú%N)r@   r   Úsocketr   r4   r<   )ZretListZ	interfacer5   Úaddressr#   r#   r$   ÚposixGetLinkLocalIPv6Addressesž   s   €rD   )0Ú__doc__rB   r2   Úctypesr   r   r   r   r   r   r   r	   r
   r   r   r   Zctypes.utilr   r   r   r   Útypingr   r   r   Ztwisted.python.compatr   Úlibcr3   r4   r   ÚstrÚ__annotations__r   r&   r(   r*   r,   r-   r8   r"   r9   ÚargtypesÚrestyper=   r7   r@   rD   r#   r#   r#   r$   Ú<module>   sL   8þÿ


ù
!