
    Vh %                     H   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 dZ$dZ% e&d      \  Z'Z( ejR                  d      Z* ejR                  d      Z+ eejX                  ejZ                  ej\                  ej^                  ge   G d de
j`                  e             Z1d Z2ddgZ3y# e!$ r0 dZdZ eeej>                     df   e"d<    ejF                  d       Y w xY w)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
ej                  dej                  dej                  f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y)IOCPReactorNc                     t         j                  j                  |        t        j                         | _        t               | _        y N)r   ReactorBase__init___iocpCompletionPortportsethandlesselfs    T/home/dcms/DCMS/lib/python3.12/site-packages/twisted/internet/iocpreactor/reactor.pyr   zIOCPReactor.__init__<   s/    !!$'((*	u    c                 :    | j                   j                  |       y r   )r!   addr#   handles     r$   addActiveHandlezIOCPReactor.addActiveHandleA   s     r%   c                 :    | j                   j                  |       y r   )r!   discardr(   s     r$   removeActiveHandlezIOCPReactor.removeActiveHandleD   s    V$r%   c                    d}|t         }nt        t         t        d|z              }| j                  j	                  |      \  }}}}	 |t
        k(  ry|t        k7  r=|t        k(  sJ t        j                  |j                  | j                  |||       |dz  }|t        k\  ry| j                  j	                  d      \  }}}}{)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 ?!G+s4'>':;G!%!3!3G!<Hc3\!j j(((""IIt66Hc !A% ?2%)YY%7%7%:"B#s r%   c                 ^   |j                   }d }	 |j                  |||       t        |dd       }|st        }n |       dk(  rt        }|ry 	 |r%|j                  t        j                  |             y y # t
        $ r. t        j                         d   }t        j                          Y ^w xY w)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" 
   !56   	,,.#CGGI	s   ;A5 54B,+B,c                      y r   r   r"   s    r$   installWakerzIOCPReactor.installWaker   s    r%   c                 F    | j                   j                  dt        d        y )Nr   )r   	postEventr4   r"   s    r$   wakeUpzIOCPReactor.wakeUp   s    		Az40r%   c                 D    | j                   j                  |t               y r   )r   	addHandler5   r(   s     r$   registerHandlezIOCPReactor.registerHandle   s    		FJ/r%   afstypereturnc                 p    t        j                   ||      }| j                  |j                                |S r   )socketrW   fileno)r#   rX   rY   skts       r$   createSocketzIOCPReactor.createSocket   s-     mmB&CJJL)
r%   c                 X    t        j                  |||||       }|j                          |S )zI
        @see: twisted.internet.interfaces.IReactorTCP.listenTCP
        )r   PortstartListening)r#   r   factorybacklog	interfaceps         r$   	listenTCPzIOCPReactor.listenTCP   s+     HHT7GY=	r%   c                 Z    t        j                  ||||||       }|j                          |S )zJ
        @see: twisted.internet.interfaces.IReactorTCP.connectTCP
        )r   	Connectorconnect)r#   hostr   rc   r:   bindAddresscs          r$   
connectTCPzIOCPReactor.connectTCP   s*     MM$gwTJ			r%   c                 R    | j                  |t        |d|      ||      }d|_        |S )zQ
            @see: twisted.internet.interfaces.IReactorSSL.listenSSL
            FTLS)rg   r   _typer#   r   rc   contextFactoryrd   re   s         r$   	listenSSLzIOCPReactor.listenSSL   s5     >>#NE7C	D DJKr%   c           	      B    | j                  ||t        |d|      ||      S )zR
            @see: twisted.internet.interfaces.IReactorSSL.connectSSL
            T)rn   r   r#   rk   r   rc   rs   r:   rl   s          r$   
connectSSLzIOCPReactor.connectSSL   s-     ??#ND'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.NotImplementedErrorrr   s         r$   rt   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}.
            ry   rz   rv   s          r$   rw   zIOCPReactor.connectSSL   s     & r%   c                 X    t        j                  |||||       }|j                          |S )z
        Connects a given L{DatagramProtocol} to the given numeric UDP port.

        @returns: object conforming to L{IListeningPort}.
        )r   ra   rb   )r#   r   protocolre   maxPacketSizerf   s         r$   	listenUDPzIOCPReactor.listenUDP   s+     HHT8YtD	r%   c                 Z    t        j                  ||||| |      }|j                          |S )z
        Connects a given DatagramProtocol to the given numeric UDP port.

        EXPERIMENTAL.

        @returns: object conforming to IListeningPort.
        )r   MulticastPortrb   )r#   r   r~   re   r   listenMultiplerf   s          r$   listenMulticastzIOCPReactor.listenMulticast   s4     (I}dN
 	
r%   r   r   c
                     |t        d      |t        d      |rt        d      |	t        d      t        | |||||      S )z"
        Spawn a process.
        z,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   sd     ?KLL?KLLEFF!  t_j$TJJr%   c                 d    t        | j                        }| j                  j                          |S r   )listr!   clear)r#   ress     r$   	removeAllzIOCPReactor.removeAll  s%    4<< 
r%   )2    )   N)r       )r   r   F)__name__
__module____qualname__r   r   r*   r-   r@   r8   rQ   rT   rW   r\   AddressFamily
SocketKindr_   rg   rn   r   rt   rw   r   r   r   r   r   r%   r$   r   r   2   s     D
!%*;X7$10&&/5/@/@	 &	 PT	 
	 PT	 PU( K8r%   r   c                  B    t               } t        j                  |        y r   )r   r	   installReactor)rs    r$   installr     s    Ar%   r   )4__doc__r\   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      sN  

  
   & : : 3 G G ; H '1Q /"..0 q 
J---.ST,u,,-GH   	
 ^$""$= ^^B
 )
$K   BDeD!7!78#=>CHMM	Cs   C, ,2D! D!