
    Yf$                        U d Z ddlZddlZddlZddlmZmZ ddlmZ ddl	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 dd	lmZ dd
lmZmZ 	 ddlmZ eZej        fZ n7# e!$ r/ dZdZ eeej                 df         e"d<    ej#        d           Y nw xY wdZ$dZ% e&d          \  Z'Z( ej)        d          Z* ej)        d          Z+ eej,        ej-        ej.        ej/        ge R   G d de
j0        e                      Z1d Z2ddgZ3dS )z'
Reactor that uses IO completion ports
    N)TupleType)implementer)baseerror
interfacesmain)Process)iocpsupporttcpudp)WAIT_TIMEOUT)_ThreadedWin32EventsMixin)failurelog)TLSMemoryBIOFactory ._extraInterfacesz|pyOpenSSL 0.10 or newer is required for SSL support in iocpreactor. It is missing, so the reactor will not support SSL APIs.i       z#Handler has no getFileHandle methodzFiledescriptor went awayc                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZddZddZe
ddZ	 ddZn	ddZ	 ddZddZ	 ddZdi dddddfdZd ZdS ) IOCPReactorNc                     t           j                            |            t          j                    | _        t                      | _        d S N)r   ReactorBase__init___iocpCompletionPortportsethandlesselfs    V/var/www/html/env/lib/python3.11/site-packages/twisted/internet/iocpreactor/reactor.pyr   zIOCPReactor.__init__<   s8    !!$'''(**	uu    c                 :    | j                             |           d S r   )r!   addr#   handles     r$   addActiveHandlezIOCPReactor.addActiveHandleA   s         r%   c                 :    | j                             |           d S r   )r!   discardr(   s     r$   removeActiveHandlezIOCPReactor.removeActiveHandleD   s    V$$$$$r%   c                    d}|t           }n%t          t           t          d|z                      }| j                            |          \  }}}}	 |t
          k    rdS |t          k    r4|t          k    sJ t          j	        |j
        | j        |||           |dz  }|t          k    rdS | j                            d          \  }}}}y)z=
        Poll the IO completion port for new events.
        r   Nr      )MAX_TIMEOUTminintr   getEventr   
KEY_WAKEUP
KEY_NORMALr   callWithLoggerowner_callEventCallbackEVENTS_PER_LOOP)r#   timeoutprocessed_eventsrcnumByteskeyevts          r$   doIterationzIOCPReactor.doIterationG   s    2 ?!GG+s4'>':':;;G!%!3!3G!<!<Hc3	;\!!j  j(((("It6Hc   !A% ?22%)Y%7%7%:%:"B#s	;r%   c                    |j         }d }	 |                    |||           t          |dd           }|st          }n |            dk    rt          }|rd S n<# t
          $ r/ t          j                    d         }t          j	                     Y nw xY w|r)|
                    t          j        |                     d S d S )NgetFileHandler/   )r7   callbackgetattr_NO_GETHANDLE_NO_FILEDESCBaseExceptionsysexc_infor   errloseConnectionr   Failure)r#   r<   r=   r?   r7   whyhandfns          r$   r8   zIOCPReactor._callEventCallbacks   s    		LLXs+++UOT::F ##R"  	 	 	,..#CGIIIII	  	7  !5!566666	7 	7s   A	A 6BBc                     d S r   r   r"   s    r$   installWakerzIOCPReactor.installWaker   s    r%   c                 H    | j                             dt          d            d S )Nr   )r   	postEventr4   r"   s    r$   wakeUpzIOCPReactor.wakeUp   s"    	Az400000r%   c                 F    | j                             |t                     d S r   )r   	addHandler5   r(   s     r$   registerHandlezIOCPReactor.registerHandle   s     	FJ/////r%   c                 ~    t          j         ||          }|                     |                                           |S r   )socketrW   fileno)r#   afstypeskts       r$   createSocketzIOCPReactor.createSocket   s4    mB&&CJJLL)))
r%   2    c                 ^    t          j        |||||           }|                                 |S )zI
        @see: twisted.internet.interfaces.IReactorTCP.listenTCP
        )r   PortstartListening)r#   r   factorybacklog	interfaceps         r$   	listenTCPzIOCPReactor.listenTCP   s2     HT7GY==	r%      c                 `    t          j        ||||||           }|                                 |S )zJ
        @see: twisted.internet.interfaces.IReactorTCP.connectTCP
        )r   	Connectorconnect)r#   hostr   rd   r:   bindAddresscs          r$   
connectTCPzIOCPReactor.connectTCP   s/     M$gwTJJ			r%   c                 b    |                      |t          |d|          ||          }d|_        |S )zQ
            @see: twisted.internet.interfaces.IReactorSSL.listenSSL
            FTLS)rh   r   _typer#   r   rd   contextFactoryre   rf   s         r$   	listenSSLzIOCPReactor.listenSSL   s=     >>#NE7CC	 D DJKr%   c           	      R    |                      ||t          |d|          ||          S )zR
            @see: twisted.internet.interfaces.IReactorSSL.connectSSL
            T)rp   r   r#   rm   r   rd   ru   r:   rn   s          r$   
connectSSLzIOCPReactor.connectSSL   s5     ??#ND'BB  r%   c                      t          d          )z
            Non-implementation of L{IReactorSSL.listenSSL}.  Some dependency
            is not satisfied.  This implementation always raises
            L{NotImplementedError}.
            |pyOpenSSL 0.10 or newer is required for SSL support in iocpreactor. It is missing, so the reactor does not support SSL APIs.NotImplementedErrorrt   s         r$   rv   zIOCPReactor.listenSSL   s     &  r%   c                      t          d          )z
            Non-implementation of L{IReactorSSL.connectSSL}.  Some dependency
            is not satisfied.  This implementation always raises
            L{NotImplementedError}.
            r{   r|   rx   s          r$   ry   zIOCPReactor.connectSSL   s     &  r%       c                 ^    t          j        |||||           }|                                 |S )z
        Connects a given L{DatagramProtocol} to the given numeric UDP port.

        @returns: object conforming to L{IListeningPort}.
        )r   rb   rc   )r#   r   protocolrf   maxPacketSizerg   s         r$   	listenUDPzIOCPReactor.listenUDP   s2     HT8YtDD	r%   Fc                 `    t          j        ||||| |          }|                                 |S )z
        Connects a given DatagramProtocol to the given numeric UDP port.

        EXPERIMENTAL.

        @returns: object conforming to IListeningPort.
        )r   MulticastPortrc   )r#   r   r   rf   r   listenMultiplerg   s          r$   listenMulticastzIOCPReactor.listenMulticast   s<     (I}dN
 
 	
r%   r   r   c
                     |t          d          |t          d          |rt          d          |	t          d          t          | |||||          S )z"
        Spawn a process.
        Nz,Setting UID is unsupported on this platform.z,Setting GID is unsupported on this platform.z&PTYs are unsupported on this platform.zGCustom child file descriptor mappings are unsupported on this platform.)
ValueErrorr
   )
r#   processProtocol
executableargsenvpathuidgidusePTYchildFDss
             r$   spawnProcesszIOCPReactor.spawnProcess   s{     ?KLLL?KLLL 	GEFFF!   t_j$TJJJr%   c                 `    t          | j                  }| j                                         |S r   )listr!   clear)r#   ress     r$   	removeAllzIOCPReactor.removeAll  s*    4<  
r%   )r_   r`   )ri   N)r`   r   )r`   r   F)__name__
__module____qualname__r   r   r*   r-   r@   r8   rQ   rT   rW   r^   rh   rp   r   rv   ry   r   r   r   r   r   r%   r$   r   r   2   s        D  
! ! !% % %*; *; *;X7 7 7$  1 1 10 0 0  
       &	 	 	 	 PT	 	 	 	 	 
	 
	 
	 
	 PT	 	 	 	    PU   ( K K K K8    r%   r   c                  J    t                      } t          j        |            d S r   )r   r	   installReactor)rs    r$   installr     s"    Ar%   r   )4__doc__rY   rI   warningstypingr   r   zope.interfacer   twisted.internetr   r   r   r	   twisted.internet._dumbwin32procr
   twisted.internet.iocpreactorr   r   r   r   "twisted.internet.iocpreactor.constr   "twisted.internet.win32eventreactorr   twisted.pythonr   r   twisted.protocols.tlsr   _TLSMemoryBIOFactoryIReactorSSLr   ImportError__annotations__warnr0   r9   ranger5   r4   ConnectionFdescWentAwayrF   rG   IReactorTCPIReactorUDPIReactorMulticastIReactorProcessr   r   r   __all__r   r%   r$   <module>r      si  
  
  



          & & & & & & : : : : : : : : : : : : 3 3 3 3 3 3 G G G G G G G G G G ; ; ; ; ; ; H H H H H H ' ' ' ' ' ' ' '1QQQQQQ /".0     BDeD!78#=>CCCHM	C      q 
J--.STT,u,-GHH  	
   \ \ \ \ \$"$= \ \ \~  
 )
$s   A   1BB