§
    ÈtºfkO  ã                  ó   — d Z ddlmZ ddlZddlZddlZddlmZmZm	Z	 ddl
mZmZ ddlmZmZmZmZmZ ddlmZmZ ddlmZmZ dd	lmZ dd
lmZmZ ddlm Z m!Z!m"Z"m#Z#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5 	 ddl6m7Z8 e8Z9n# e:$ r dZ9Y nw xY werddl;m<Z< e ej=        e"ej>        iZ? ee&ej@        ejA        ¦  «         G d„ dejB        e1e,¦  «        ¦   «         ZCe9� eeCejD        ¦  «          G d„ de-e.eC¦  «        ZE G d„ deC¦  «        ZF G d„ de+¦  «        Z* eejG        ¦  «         G d„ de1e¦  «        ¦   «         ZHdS )z
TCP support for IOCP reactor
é    )ÚannotationsN)ÚTYPE_CHECKINGÚOptionalÚUnion)ÚclassImplementsÚimplementer)ÚaddressÚdeferÚerrorÚ
interfacesÚmain)Ú	_LogOwnerÚisIPv6Address)ÚIPv4AddressÚIPv6Address)Ú	IProtocol)ÚabstractÚiocpsupport)ÚERROR_CONNECTION_REFUSEDÚERROR_IO_PENDINGÚERROR_NETWORK_UNREACHABLEÚSO_UPDATE_ACCEPT_CONTEXTÚSO_UPDATE_CONNECT_CONTEXT)ÚIReadWriteHandle)ÚProtocol)Ú	ConnectorÚ_AbortingMixinÚ_BaseBaseClientÚ_BaseTCPClientÚ_getsocknameÚ_resolveIPv6Ú_SocketCloser)ÚfailureÚlogÚreflect)ÚstartTLS)ÚIOCPReactorc                  óž   — e Zd ZdZdZdd„Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Ze�dd„Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ ZdS )Ú
ConnectionzÞ
    @ivar TLS: C{False} to indicate the connection is in normal TCP mode,
        C{True} to indicate that TLS has been started and that operations must
        be routed through the L{TLSMemoryBIOProtocol} instance.
    FNc                óz   — t           j                             | |¦  «         || _        |j        | _        || _        d S ©N)r   Ú
FileHandleÚ__init__ÚsocketÚfilenoÚgetFileHandleÚprotocol)ÚselfÚsockÚprotoÚreactors       ú_/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/internet/iocpreactor/tcp.pyr-   zConnection.__init__F   s7   € ÝÔ×$Ò$ T¨7Ñ3Ô3Ð3ØˆŒØ!œ[ˆÔØˆŒˆˆó    c                ó   — | j         S r+   )r.   ©r2   s    r6   Ú	getHandlezConnection.getHandleL   s
   € ØŒ{Ðr7   c                óî   — t          |t          ¦  «        rnDt          |t          ¦  «        rt          |¦  «        }nt          dt	          |¦  «        z   ¦  «        ‚| j                             |¦  «         dS )z`
        @param rbuffer: Data received.
        @type rbuffer: L{bytes} or L{bytearray}
        z%data must be bytes or bytearray, not N)Ú
isinstanceÚbytesÚ	bytearrayÚ	TypeErrorÚtyper1   ÚdataReceived)r2   Úrbuffers     r6   rA   zConnection.dataReceivedO   sp   € õ
 �g�uÑ%Ô%ð 	UØÝ˜¥Ñ+Ô+ð 	Uå˜G‘n”nˆGˆGåÐCÅdÈ7ÁmÄmÑSÑTÔTÐTàŒ×"Ò" 7Ñ+Ô+Ð+Ð+Ð+r7   c                óR   — t          j        |                      ¦   «         ||¦  «        S r+   )Ú_iocpÚrecvr0   )r2   ÚbufflistÚevts      r6   ÚreadFromHandlezConnection.readFromHandle^   s"   € ÝŒz˜$×,Ò,Ñ.Ô.°¸#Ñ>Ô>Ð>r7   c                ó®   — t          |¦  «        }t          j        |                      ¦   «         |d| j        …                              ¦   «         |¦  «        S )zŽ
        Send C{buff} to current file handle using C{_iocp.send}. The buffer
        sent is limited to a size of C{self.SEND_LIMIT}.
        r   )Ú
memoryviewrD   Úsendr0   Ú
SEND_LIMITÚtobytes)r2   ÚbuffrG   Ú	writeViews       r6   ÚwriteToHandlezConnection.writeToHandlea   sP   € õ
 ˜tÑ$Ô$ˆ	ÝŒzØ×ÒÑ Ô  )¨A°´Ð,?Ô"@×"HÒ"HÑ"JÔ"JÈCñ
ô 
ð 	
r7   c                ó\  — 	 | j                              d¦  «         n# t          $ r Y nw xY wt          j        | j        d ¦  «        }|rc	 |                     ¦   «          d S # t          $ r? t          j	        ¦   «         }t          j        ¦   «          |                      |¦  «         Y d S w xY wd S )Né   )r.   ÚshutdownÚOSErrorr   ÚIHalfCloseableProtocolr1   ÚwriteConnectionLostÚBaseExceptionr#   ÚFailurer$   ÚerrÚconnectionLost)r2   ÚpÚfs      r6   Ú_closeWriteConnectionz Connection._closeWriteConnectionk   sÓ   € ð	ØŒK× Ò  Ñ#Ô#Ð#Ð#øÝð 	ð 	ð 	ØˆDð	øøøåÔ-¨d¬m¸TÑBÔBˆØð 	'ð'Ø×%Ò%Ñ'Ô'Ð'Ð'Ð'øÝ ð 'ð 'ð 'Ý”OÑ%Ô%�Ý”‘	”	�	Ø×#Ò# AÑ&Ô&Ð&Ð&Ð&Ð&ð'øøøð	'ð 	's   ‚ �
*©*Á
A  Á AB)Â(B)c                ó*  — t          j        | j        d ¦  «        }|ra	 |                     ¦   «          d S # t          $ r= t          j        ¦   «          |                      t          j	        ¦   «         ¦  «         Y d S w xY w|                      |¦  «         d S r+   )
r   rU   r1   ÚreadConnectionLostrW   r$   rY   rZ   r#   rX   )r2   Úreasonr[   s      r6   r_   zConnection.readConnectionLosty   s¢   € ÝÔ-¨d¬m¸TÑBÔBˆØð 	(ð7Ø×$Ò$Ñ&Ô&Ð&Ð&Ð&øÝ ð 7ð 7ð 7Ý”‘	”	�	Ø×#Ò#¥G¤OÑ$5Ô$5Ñ6Ô6Ð6Ð6Ð6Ð6ð7øøøð ×Ò Ñ'Ô'Ð'Ð'Ð's   ž4 ´AA;Á:A;c                ó  — | j         rd S t          j                             | |¦  «         |d u p|                     t
          j        ¦  «         }|                      |¦  «         | j        }| `| `	| `
|                     |¦  «         d S r+   )Údisconnectedr   r,   rZ   Úcheckr   ÚConnectionAbortedÚ_closeSocketr1   r.   r0   )r2   r`   ÚisCleanr1   s       r6   rZ   zConnection.connectionLost„   s�   € ØÔð 	ØˆFÝÔ×*Ò*¨4°Ñ8Ô8Ð8Ø˜D�.ÐM¨¯ªµUÔ5LÑ(MÔ(MÐ$MˆØ×Ò˜'Ñ"Ô"Ð"Ø”=ˆØˆMØˆKØÐØ×Ò Ñ'Ô'Ð'Ð'Ð'r7   c                ó   — | j         S )zN
        Return the prefix to log with when I own the logging thread.
        )Úlogstrr9   s    r6   Ú	logPrefixzConnection.logPrefix�   ó   € ð Œ{Ðr7   c                óz   — t          | j                             t          j        t          j        ¦  «        ¦  «        S r+   )Úboolr.   Ú
getsockoptÚIPPROTO_TCPÚTCP_NODELAYr9   s    r6   ÚgetTcpNoDelayzConnection.getTcpNoDelay–   s(   € Ý�D”K×*Ò*­6Ô+=½vÔ?QÑRÔRÑSÔSÐSr7   c                óf   — | j                              t           j        t           j        |¦  «         d S r+   )r.   Ú
setsockoptrn   ro   ©r2   Úenableds     r6   ÚsetTcpNoDelayzConnection.setTcpNoDelay™   s(   € ØŒ×Ò�vÔ1µ6Ô3EÀwÑOÔOÐOÐOÐOr7   c                óz   — t          | j                             t          j        t          j        ¦  «        ¦  «        S r+   )rl   r.   rm   Ú
SOL_SOCKETÚSO_KEEPALIVEr9   s    r6   ÚgetTcpKeepAlivezConnection.getTcpKeepAliveœ   s(   € Ý�D”K×*Ò*­6Ô+<½fÔ>QÑRÔRÑSÔSÐSr7   c                óf   — | j                              t           j        t           j        |¦  «         d S r+   )r.   rr   rw   rx   rs   s     r6   ÚsetTcpKeepAlivezConnection.setTcpKeepAliveŸ   s(   € ØŒ×Ò�vÔ0µ&Ô2EÀwÑOÔOÐOÐOÐOr7   Tc                ó>   — t          | ||t          j        ¦  «         dS )z9
            @see: L{ITLSTransport.startTLS}
            N)Ú	_startTLSr   r,   )r2   ÚcontextFactoryÚnormals      r6   r&   zConnection.startTLS¤   s!   € õ �d˜N¨FµHÔ4GÑHÔHÐHÐHÐHr7   c                óž   — | j         rdS | j        r| j                             |¦  «         dS t          j                             | |¦  «         dS )zò
        Write some data, either directly to the underlying handle or, if TLS
        has been started, to the L{TLSMemoryBIOProtocol} for it to encrypt and
        send.

        @see: L{twisted.internet.interfaces.ITransport.write}
        N)rb   ÚTLSr1   Úwriter   r,   )r2   Údatas     r6   r‚   zConnection.writeª   sY   € ð Ôð 	ØˆFØŒ8ð 	2ØŒM×Ò Ñ%Ô%Ð%Ð%Ð%åÔ×%Ò% d¨DÑ1Ô1Ð1Ð1Ð1r7   c                óž   — | j         rdS | j        r| j                             |¦  «         dS t          j                             | |¦  «         dS )zú
        Write some data, either directly to the underlying handle or, if TLS
        has been started, to the L{TLSMemoryBIOProtocol} for it to encrypt and
        send.

        @see: L{twisted.internet.interfaces.ITransport.writeSequence}
        N)rb   r�   r1   ÚwriteSequencer   r,   )r2   Úiovecs     r6   r…   zConnection.writeSequence¹   sY   € ð Ôð 	ØˆFØŒ8ð 	;ØŒM×'Ò'¨Ñ.Ô.Ð.Ð.Ð.åÔ×-Ò-¨d°EÑ:Ô:Ð:Ð:Ð:r7   c                ó®   — | j         r-| j        r"| j        s| j                             ¦   «          dS dS dS t
          j                             | |¦  «         dS )z®
        Close the underlying handle or, if TLS has been started, first shut it
        down.

        @see: L{twisted.internet.interfaces.ITransport.loseConnection}
        N)r�   Ú	connectedÚdisconnectingr1   ÚloseConnectionr   r,   )r2   r`   s     r6   rŠ   zConnection.loseConnectionÈ   sq   € ð Œ8ð 	=ØŒ~ð / dÔ&8ð /Ø”×,Ò,Ñ.Ô.Ð.Ð.Ð.ð/ð /ð /ð /õ Ô×.Ò.¨t°VÑ<Ô<Ð<Ð<Ð<r7   c                ó�   — | j         r| j                             ||¦  «         dS t          j                             | ||¦  «         dS )zc
        Register a producer.

        If TLS is enabled, the TLS connection handles this.
        N)r�   r1   ÚregisterProducerr   r,   )r2   ÚproducerÚ	streamings      r6   rŒ   zConnection.registerProducerÕ   sP   € ð Œ8ð 	Lð
 ŒM×*Ò*¨8°YÑ?Ô?Ð?Ð?Ð?åÔ×0Ò0°°xÀÑKÔKÐKÐKÐKr7   c                óˆ   — | j         r| j                             ¦   «          dS t          j                             | ¦  «         dS )ze
        Unregister a producer.

        If TLS is enabled, the TLS connection handles this.
        N)r�   r1   ÚunregisterProducerr   r,   r9   s    r6   r�   zConnection.unregisterProducerä   sE   € ð Œ8ð 	9ØŒM×,Ò,Ñ.Ô.Ð.Ð.Ð.åÔ×2Ò2°4Ñ8Ô8Ð8Ð8Ð8r7   c                ó   — d S r+   © r9   s    r6   ÚgetHostzConnection.getHostï   ó   € àˆr7   c                ó   — d S r+   r’   r9   s    r6   ÚgetPeerzConnection.getPeeró   r”   r7   r+   )T)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r�   r-   r:   rA   rH   rP   r]   r_   rZ   ri   rp   ru   ry   r{   r}   r&   r‚   r…   rŠ   rŒ   r�   r“   r–   r’   r7   r6   r)   r)   <   sŠ  € € € € € ðð ð €Cðð ð ð ðð ð ð,ð ,ð ,ð?ð ?ð ?ð
ð 
ð 
ð'ð 'ð 'ð	(ð 	(ð 	(ð
(ð 
(ð 
(ðð ð ðTð Tð TðPð Pð PðTð Tð TðPð Pð Pð Ðð	Ið 	Ið 	Ið 	Ið2ð 2ð 2ð;ð ;ð ;ð=ð =ð =ð =ðLð Lð Lð	9ð 	9ð 	9ðð ð ðð ð ð ð r7   r)   c                  óZ   — e Zd ZdZej        Zej        ZdZ	e
Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd	S )
ÚClientzº
    @ivar _tlsClientDefault: Always C{True}, indicating that this is a client
        connection, and by default when TLS is negotiated this class will act as
        a TLS client.
    Tc                óN   — |€d}|| _         t          j        | |||||¦  «         d S )N)Ú r   )r5   r   r-   )r2   ÚhostÚportÚbindAddressÚ	connectorr5   s         r6   r-   zClient.__init__	  s5   € àÐØ!ˆKØˆŒÝÔ  d¨D°+¸yÈ'ÑRÔRÐRÐRÐRr7   c                óL   — | j                              | j        | j        ¦  «        S )zd
        Create a socket registered with the IOCP reactor.

        @see: L{_BaseTCPClient}
        )r5   ÚcreateSocketÚaddressFamilyÚ
socketTyper9   s    r6   ÚcreateInternetSocketzClient.createInternetSocket  s!   € ð Œ|×(Ò(¨Ô);¸T¼_ÑMÔMÐMr7   c                ó   — | ` | `dS )z–
        Clean up potentially circular references to the socket and to its
        C{getFileHandle} method.

        @see: L{_BaseBaseClient}
        N)r.   r0   r9   s    r6   Ú_collectSocketDetailszClient._collectSocketDetails  s   € ð ˆK˜Ð+Ð+Ð+r7   c                ó:   — | j                              | ¦  «         dS )z^
        Remove the active handle from the reactor.

        @see: L{_BaseBaseClient}
        N)r5   ÚremoveActiveHandler9   s    r6   Ú_stopReadingAndWritingzClient._stopReadingAndWriting!  s    € ð 	Œ×'Ò'¨Ñ-Ô-Ð-Ð-Ð-r7   c           	     óð  — |rdt                                ||¦  «        }|                      t          j        |t
          j                             |d¦  «        f¦  «        ¦  «         d S | j                             t          j	        t          t          j        d| j                             ¦   «         ¦  «        ¦  «         | j                             |                      ¦   «         ¦  «        | _        d| _        |                      | j        ¦  «        }|dz   | _        | j        €)t+          ¦   «         | _        |                      ¦   «          d S | j                             | ¦  «         |                      ¦   «          d S )NzUnknown errorÚPTz,client)ÚconnectExErrorsÚgetÚfailIfNotConnectedr   ÚgetConnectErrorÚerrnoÚ	errorcoder.   rr   rw   r   ÚstructÚpackr/   r¢   ÚbuildProtocolr–   r1   rˆ   Ú_getLogPrefixrh   r   rŠ   ÚmakeConnectionÚstartReading)r2   Úrcrƒ   rG   ri   s        r6   Ú	cbConnectzClient.cbConnect)  sL  € Øð 	$Ý ×$Ò$ R¨Ñ,Ô,ˆBØ×#Ò#ÝÔ% r­5¬?×+>Ò+>¸rÀ?Ñ+SÔ+SÐ&TÑUÔUñô ð ð ð ð ŒK×"Ò"ÝÔ!Ý)Ý”˜C ¤×!3Ò!3Ñ!5Ô!5Ñ6Ô6ñô ð ð
 !œN×8Ò8¸¿º¹¼ÑHÔHˆDŒMØ!ˆDŒNØ×*Ò*¨4¬=Ñ9Ô9ˆIØ# iÑ/ˆDŒKØŒ}Ð$õ !)¡
¤
�”à×#Ò#Ñ%Ô%Ð%Ð%Ð%à”×,Ò,¨TÑ2Ô2Ð2Ø×!Ò!Ñ#Ô#Ð#Ð#Ð#r7   c                ób  — t          | d¦  «        sd S t          j        sJ ‚| j                             | ¦  «         t          j        | j        | ¦  «        }t          j        | j         	                    ¦   «         | j
        |¦  «        }|r$|t          k    r|                      |d|¦  «         d S d S d S )Nr¢   r   )ÚhasattrrD   Úhave_connectexr5   ÚaddActiveHandleÚEventr¼   Úconnectr.   r/   ÚrealAddressr   )r2   rG   r»   s      r6   Ú	doConnectzClient.doConnectG  s¶   € Ý�t˜[Ñ)Ô)ð 	ð ˆFÝÔ#Ð#Ð#Ð#ØŒ×$Ò$ TÑ*Ô*Ð*ÝŒk˜$œ.¨$Ñ/Ô/ˆåŒ]˜4œ;×-Ò-Ñ/Ô/°Ô1AÀ3ÑGÔGˆØð 	'�"Õ(Ò(Ð(Ø�NŠN˜2˜q #Ñ&Ô&Ð&Ð&Ð&ð	'ð 	'Ð(Ð(r7   N)r—   r˜   r™   rš   r.   ÚAF_INETr¥   ÚSOCK_STREAMr¦   Ú_tlsClientDefaultr)   Ú_commonConnectionr-   r§   r©   r¬   r¼   rÄ   r’   r7   r6   rœ   rœ   ü   s›   € € € € € ðð ð ”N€MØÔ#€JàÐØ"ÐðSð Sð SðNð Nð Nð,ð ,ð ,ð.ð .ð .ð$ð $ð $ð<'ð 'ð 'ð 'ð 'r7   rœ   c                  ó2   — e Zd ZdZdZdd„Zdd„Zd„ Zd„ ZdS )ÚServeraV  
    Serverside socket-stream connection class.

    I am a serverside network connection transport; a socket which came from an
    accept() on a server.

    @ivar _tlsClientDefault: Always C{False}, indicating that this is a server
        connection, and by default when TLS is negotiated this class will act as
        a TLS server.
    Fr3   úsocket.socketr1   r   Ú
clientAddrúUnion[IPv4Address, IPv6Address]Ú
serverAddrÚ	sessionnoÚintr5   r'   c                óz  — t                                | |||¦  «         || _        || _        || _        |                      | j        ¦  «        }|› d|› d| j        j        › �| _        d 	                    | j        j
        j        | j        | j        j        ¦  «        | _        d| _        |                      ¦   «          dS )a  
        Server(sock, protocol, client, server, sessionno)

        Initialize me with a socket, a protocol, a descriptor for my peer (a
        tuple of host, port describing the other end of the connection), an
        instance of Port, and a session number.
        ú,z<{} #{} on {}>TN)r)   r-   rÎ   rÌ   rÏ   r¸   r1   rŸ   rh   ÚformatÚ	__class__r—   r    Úrepstrrˆ   rº   )r2   r3   r1   rÌ   rÎ   rÏ   r5   ri   s           r6   r-   zServer.__init__c  sº   € õ  	×Ò˜D $¨°'Ñ:Ô:Ð:Ø$ˆŒØ$ˆŒØ"ˆŒØ×&Ò& t¤}Ñ5Ô5ˆ	Ø"ÐGÐG YÐGÐG°´Ô1EÐGÐGˆŒØ+×2Ò2ØŒMÔ#Ô,ØŒNØŒOÔ ñ
ô 
ˆŒð
 ˆŒØ×ÒÑÔÐÐÐr7   ÚreturnÚstrc                ó   — | j         S )z=
        A string representation of this connection.
        )rÕ   r9   s    r6   Ú__repr__zServer.__repr__�  rj   r7   c                ó   — | j         S )zW
        Returns an IPv4Address.

        This indicates the server's address.
        )rÎ   r9   s    r6   r“   zServer.getHost‡  ó   € ð ŒÐr7   c                ó   — | j         S )zW
        Returns an IPv4Address.

        This indicates the client's address.
        )rÌ   r9   s    r6   r–   zServer.getPeer�  rÛ   r7   N)r3   rË   r1   r   rÌ   rÍ   rÎ   rÍ   rÏ   rÐ   r5   r'   ©rÖ   r×   )	r—   r˜   r™   rš   rÇ   r-   rÙ   r“   r–   r’   r7   r6   rÊ   rÊ   U  sl   € € € € € ð	ð 	ð Ððð ð ð ð<ð ð ð ðð ð ðð ð ð ð r7   rÊ   c                  ó   — e Zd Zd„ ZdS )r   c                óP   — t          | j        | j        | j        | | j        ¦  «        S r+   )rœ   rŸ   r    r¡   r5   r9   s    r6   Ú_makeTransportzConnector._makeTransport™  s!   € Ý�d”i ¤¨DÔ,<¸dÀDÄLÑQÔQÐQr7   N)r—   r˜   r™   rà   r’   r7   r6   r   r   ˜  s(   € € € € € ðRð Rð Rð Rð Rr7   r   c                  óÐ   — e Zd ZU dZdZdZej        Zej	        Z
ej        ZdZdZded<   dZdd	„Zdd„Zd„ Z ej        ej        ¦  «        fd„ZeZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!dS )ÚPortFr   NzOptional[int]Ú_realPortNumberÚTCPé2   rž   c                ó²   — || _         || _        || _        || _        || _        t          |¦  «        r$t          j        | _        t          j
        | _        d S d S r+   )r    ÚfactoryÚbacklogÚ	interfacer5   r   r.   ÚAF_INET6r¥   r	   r   Ú_addressType)r2   r    rç   rè   ré   r5   s         r6   r-   zPort.__init__±  sZ   € ØˆŒ	ØˆŒØˆŒØ"ˆŒØˆŒÝ˜Ñ#Ô#ð 	4Ý!'¤ˆDÔÝ 'Ô 3ˆDÔÐÐð	4ð 	4r7   rÖ   r×   c                ó°   — | j         �+d                     | j        | j        j        | j         ¦  «        S d                     | j        | j        j        ¦  «        S )Nz<{} of {} on {}>z<{} of {} (not listening)>)rã   rÓ   rÔ   rç   r9   s    r6   rÙ   zPort.__repr__»  s]   € ØÔÐ+Ø%×,Ò,Ø”Ø”Ô&ØÔ$ñô ð ð 0×6Ò6Ø”Ø”Ô&ñô ð r7   c                ól  — 	 | j                              | j        | j        ¦  «        }| j        t          j        k    rt          | j        | j        ¦  «        }n| j        | j        f}| 	                    |¦  «         n2# t          $ r%}t          j        | j        | j        |¦  «        ‚d }~ww xY wt          j        |                     ¦   «         ¦  «        | _        |                     ¦   «         d         | _        t'          j        |                      | j        ¦  «        ›d| j        ›�¦  «         | j                             ¦   «          |                     | j        ¦  «         d| _        d| _        | j                              | ¦  «         || _        | j        j        | _        |                      ¦   «          d S )NrR   z starting on TF)r5   r¤   r¥   r¦   r.   rê   r!   ré   r    ÚbindrT   r   ÚCannotListenErrorrD   Ú
maxAddrLenr/   ÚaddrLenÚgetsocknamerã   r$   Úmsgr¸   rç   ÚdoStartÚlistenrè   rˆ   rb   rÀ   r0   ÚdoAccept)r2   ÚsktÚaddrÚles       r6   ÚstartListeningzPort.startListeningÈ  sˆ  € ð		IØ”,×+Ò+¨DÔ,>ÀÄÑPÔPˆCàÔ!¥V¤_Ò4Ð4Ý# D¤N°D´IÑ>Ô>��àœ¨¬	Ð2�Ø�HŠH�T‰NŒNˆNˆNøÝð 	Ið 	Ið 	IÝÔ)¨$¬.¸$¼)ÀRÑHÔHÐHøøøøð	Iøøøõ Ô'¨¯
ª
©¬Ñ5Ô5ˆŒð  #ŸšÑ0Ô0°Ô3ˆÔåŒà×!Ò! $¤,Ñ/Ô/Ð/Ð/°Ô1EÐ1EðGñ	
ô 	
ð 	
ð
 	Œ×ÒÑÔÐØ�
Š
�4”<Ñ Ô Ð ØˆŒØ!ˆÔØŒ×$Ò$ TÑ*Ô*Ð*ØˆŒØ!œ[Ô/ˆÔØ�Š‰Œˆˆˆs   ‚A8A; Á;
B*Â B%Â%B*c                ó¢   — d| _         | j        r@t          j        ¦   «         | _        | j                             d| j        |¦  «         | j        S dS )zæ
        Stop accepting connections on this port.

        This will shut down my socket and call self.connectionLost().
        It returns a deferred which will fire successfully when the
        port is actually closed.
        Tr   N)r‰   rˆ   r
   ÚDeferredÚdeferredr5   Ú	callLaterrZ   )r2   ÚconnDones     r6   rŠ   zPort.loseConnectionè  sT   € ð "ˆÔØŒ>ð 	!Ý!œNÑ,Ô,ˆDŒMØŒL×"Ò" 1 dÔ&9¸8ÑDÔDÐDØ”=Ð ð	!ð 	!r7   c                óP   — t          j        d| j        › d| j        › d�¦  «         dS )z.
        Log message for closing port
        ú(z Port z Closed)N)r$   ró   Ú_typerã   r9   s    r6   Ú_logConnectionLostMsgzPort._logConnectionLostMsgø  s3   € õ 	ŒÐD�D”JÐDÐD dÔ&:ÐDÐDÐDÑEÔEÐEÐEÐEr7   c                óê  — |                       ¦   «          d| _        d}t          | d¦  «        r	| j        }| `d| _        | j                             | ¦  «         d| _        |                      d¦  «         | `	| `
	 | j                             ¦   «          d| _        |�|                     d¦  «         dS dS # t          $ r4 d| _        |�)|                     t#          j        ¦   «         ¦  «         Y dS ‚ w xY w)z'
        Cleans up the socket.
        Nrý   TF)r  rã   r¾   rý   rb   r5   r«   rˆ   re   r.   r0   rç   ÚdoStopr‰   ÚcallbackrW   Úerrbackr#   rX   )r2   r`   Úds      r6   rZ   zPort.connectionLostþ  s  € ð 	×"Ò"Ñ$Ô$Ð$Ø#ˆÔØˆÝ�4˜Ñ$Ô$ð 	Ø”ˆAØ�à ˆÔØŒ×'Ò'¨Ñ-Ô-Ð-ØˆŒØ×Ò˜$ÑÔÐØˆKØÐð	!ØŒL×ÒÑ!Ô!Ð!ð "'ˆDÔØˆ}Ø—
’
˜4Ñ Ô Ð Ð Ð ð ˆ}øõ ð 	ð 	ð 	Ø!&ˆDÔØˆ}Ø—	’	�'œ/Ñ+Ô+Ñ,Ô,Ð,Ð,Ð,Ð,àð	øøøs   Á9B4 Â49C2Ã0C2c                ó>   — t          j        | j        j        ¦  «        S )zK
        Returns the name of my class, to prefix log entries with.
        )r%   Úqualrç   rÔ   r9   s    r6   ri   zPort.logPrefix  s   € õ Œ|˜DœLÔ2Ñ3Ô3Ð3r7   c                óB   —  | j         dgt          | j        ¦  «        ¢R Ž S )zf
        Returns an IPv4Address or IPv6Address.

        This indicates the server's address.
        rä   )rë   r    r.   r9   s    r6   r“   zPort.getHost#  s)   € ð !ˆtÔ  ÐC­°d´kÑ)BÔ)BÐCÐCÐCÐCr7   c                ó~   — |                       ||¦  «         | j        s| j        s|                      ¦   «          d S d S d S r+   )ÚhandleAcceptr‰   rb   rö   )r2   r»   rƒ   rG   s       r6   ÚcbAcceptzPort.cbAccept+  sR   € Ø×Ò˜"˜cÑ"Ô"Ð"ØÔ"ð 	 dÔ&7ð 	Ø�MŠM‰OŒOˆOˆOˆOð	ð 	ð 	ð 	r7   c           	     ó2  — | j         s| j        rdS |r;t          j        dt          j                             |d¦  «        ›d|›d�¦  «         dS |j                             t          j
        t          t          j        d| j	                             ¦   «         ¦  «        ¦  «         t          j        |j                             ¦   «         |j        ¦  «        \  }}}|| j        k    sJ ‚d|d         v r@t'          |d                              d¦  «        d	         ¦  «        }|d         |d	         d|f}d|d         v r@t'          |d                              d¦  «        d	         ¦  «        }|d         |d	         d|f}| j                              | j        d
g|¢R Ž ¦  «        }|€|j                             ¦   «          n\| j        }|d	z   | _        t5          |j        | | j        d
g|¢R Ž  | j        d
g|¢R Ž || j        ¦  «        }	|                     |	¦  «         dS )NFz#Could not accept new connection -- zunknown errorz (ú)r®   ú%r   rR   rä   T)r‰   rb   r$   ró   r³   r´   r°   Únewsktrr   r.   rw   r   rµ   r¶   r/   rD   Úget_accept_addrsrN   r¥   rÐ   Úsplitrç   r·   rë   ÚcloserÏ   rÊ   r5   r¹   )
r2   r»   rG   ÚfamilyÚlAddrÚrAddrÚscoper1   ÚsÚ	transports
             r6   r  zPort.handleAccept0  s;  € ØÔð 	 Ô!2ð 	Ø�5ð ð +	ÝŒGˆGå”?×&Ò& r¨?Ñ;Ô;Ð;Ð;¸R¸R¸RðAñô ð ð �5ð ŒJ×!Ò!ÝÔ!Ý(Ý”˜C ¤×!3Ò!3Ñ!5Ô!5Ñ6Ô6ñô ð õ
 $)Ô#9¸#¼*×:KÒ:KÑ:MÔ:MÈsÌxÑ#XÔ#XÑ ˆF�E˜5Ø˜TÔ/Ò/Ð/Ð/Ð/ð �e˜A”hˆˆÝ˜E !œHŸNšN¨3Ñ/Ô/°Ô2Ñ3Ô3�Ø˜qœ 5¨¤8¨Q°Ð6�Ø�e˜A”hˆˆÝ˜E !œHŸNšN¨3Ñ/Ô/°Ô2Ñ3Ô3�Ø˜qœ 5¨¤8¨Q°Ð6�à”|×1Ò1Ð2C°$Ô2CÀEÐ2RÈEÐ2RÐ2RÐ2RÑSÔSˆHØÐØ”
× Ò Ñ"Ô"Ð"Ð"à”N�Ø!" Q¡�”Ý"Ø”JØØ%�DÔ% eÐ4¨eÐ4Ð4Ð4Ø%�DÔ% eÐ4¨eÐ4Ð4Ð4ØØ”Lñô �	ð ×'Ò'¨	Ñ2Ô2Ð2Ø�4r7   c                ó¢  — t          j        | j        | ¦  «        }t          d| j        dz   z  ¦  «        x|_        }| j                             | j        | j	        ¦  «        x|_
        }t          j        | j                             ¦   «         |                     ¦   «         ||¦  «        }|r#|t          k    r|                      ||¦  «         d S d S d S )Né   é   )rD   rÁ   r  r>   rñ   rN   r5   r¤   r¥   r¦   r  Úacceptr.   r/   r   r  )r2   rG   rN   r  r»   s        r6   rö   zPort.doAcceptc  sÍ   € ÝŒk˜$œ-¨Ñ.Ô.ˆõ $ A¨¬¸Ñ):Ñ$;Ñ<Ô<Ð<ˆŒ�4à"œl×7Ò7ØÔ ¤ñ
ô 
ð 	
ˆŒ
�Võ Œ\˜$œ+×,Ò,Ñ.Ô.°·²±´ÀÀsÑKÔKˆàð 	'�"Õ(Ò(Ð(Ø×Ò˜b #Ñ&Ô&Ð&Ð&Ð&ð	'ð 	'Ð(Ð(r7   )rå   rž   NrÝ   )"r—   r˜   r™   rˆ   rb   r‰   r.   rÅ   r¥   rÆ   r¦   r	   r   rë   rÏ   rã   Ú__annotations__r  r-   rÙ   rú   r#   rX   r   ÚCONNECTION_DONErŠ   ÚstopListeningr  rZ   ri   r“   r  r  rö   r’   r7   r6   râ   râ   �  s2  € € € € € € à€IØ€LØ€MØ”N€MØÔ#€JØÔ&€LØ€Ið &*€OÐ)Ð)Ð)Ñ)ð €Eð4ð 4ð 4ð 4ðð ð ð ðð ð ð@ '6 g¤o°dÔ6JÑ&KÔ&Kð !ð !ð !ð !ð #€MðFð Fð Fð!ð !ð !ð>4ð 4ð 4ðDð Dð Dðð ð ð
1ð 1ð 1ðf'ð 'ð 'ð 'ð 'r7   râ   )Irš   Ú
__future__r   r³   r.   rµ   Útypingr   r   r   Úzope.interfacer   r   Útwisted.internetr	   r
   r   r   r   Útwisted.internet.abstractr   r   Útwisted.internet.addressr   r   Útwisted.internet.interfacesr   Útwisted.internet.iocpreactorr   r   rD   Ú"twisted.internet.iocpreactor.constr   r   r   r   r   Ú'twisted.internet.iocpreactor.interfacesr   Útwisted.internet.protocolr   Útwisted.internet.tcpr   ÚTCPConnectorr   r   r   r    r!   r"   Útwisted.pythonr#   r$   r%   Útwisted.internet._newtlsr&   Ú
__startTLSr}   ÚImportErrorÚ$twisted.internet.iocpreactor.reactorr'   ÚWSAECONNREFUSEDÚWSAENETUNREACHr¯   ÚITCPTransportÚISystemHandler,   r)   ÚITLSTransportrœ   rÊ   ÚIListeningPortrâ   r’   r7   r6   ú<module>r;     sË  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1à 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ Gðð ð ð ð ð ð ð ð ð ð ð ð ð ð EÐ DÐ DÐ DÐ DÐ DØ .Ð .Ð .Ð .Ð .Ð .ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 1Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0ðØ?Ð?Ð?Ð?Ð?Ð?ð €I€Iøð ð ð ð Ø€I€I€Iðøøøð
 ð Aà@Ð@Ð@Ð@Ð@Ð@ð ˜eÔ3Ø˜uÔ3ð€ð €Ð˜zÔ7¸Ô9QÑRÔRðxð xð xð xð x�Ô$ m°^ñ xô xñ SÔRðxðv ÐØ€O�J 
Ô 8Ñ9Ô9Ð9ðV'ð V'ð V'ð V'ð V'ˆ_˜n¨jñ V'ô V'ð V'ðr@ð @ð @ð @ð @ˆZñ @ô @ð @ðFRð Rð Rð Rð R�ñ Rô Rð Rð
 €ˆZÔ&Ñ'Ô'ðQ'ð Q'ð Q'ð Q'ð Q'ˆ=˜)ñ Q'ô Q'ñ (Ô'ðQ'ð Q'ð Q's   Â
B ÂBÂB