Ϫf$HUdZddlZddlZddlZddlmZmZddlmZddl m Z m Z m Z m Z ddlmZddlmZmZmZddlmZdd lmZdd lmZmZ dd lmZeZe j>fZ dZ$dZ%e&d\Z'Z(e jRdZ*e jRdZ+ee jXe jZe j\e j^ge Gdde j`eZ1dZ2ddgZ3y#e!$r0dZd Z eee j>d fe"d<ejFdYwxYw)z' Reactor that uses IO completion ports N)TupleType) implementer)baseerror interfacesmain)Process) iocpsupporttcpudp) WAIT_TIMEOUT)_ThreadedWin32EventsMixin)failurelog)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.iz#Handler has no getFileHandle methodzFiledescriptor went awayceZdZdZdZdZdZdZdZdZ dZ d Z d Z dd Z dd Ze dd Z ddZn ddZ ddZddZ ddZdidddddfdZdZy) IOCPReactorNctjj|tj|_t |_yN)r ReactorBase__init___iocpCompletionPortportsethandlesselfs F/usr/lib/python3/dist-packages/twisted/internet/iocpreactor/reactor.pyrzIOCPReactor.__init__<s/ !!$'((* u c:|jj|yr)r!addr#handles r$addActiveHandlezIOCPReactor.addActiveHandleAs  r%c:|jj|yr)r!discardr(s r$removeActiveHandlezIOCPReactor.removeActiveHandleDs V$r%cd}|t}ntttd|z}|jj |\}}}} |t k(ry|t k7r=|tk(sJtj|j|j||||dz }|tk\ry|jj d\}}}}{)z= Poll the IO completion port for new events. rNr) MAX_TIMEOUTminintrgetEventr KEY_WAKEUP KEY_NORMALrcallWithLoggerowner_callEventCallbackEVENTS_PER_LOOP)r#timeoutprocessed_eventsrcnumByteskeyevts r$ doIterationzIOCPReactor.doIterationGs2 ?!G+s4'>':;G!%!3!3G!<Hc3\!j j(((""IIt66Hc!A% ?2%)YY%7%7%: "B#sr%c^|j}d} |j|||t|dd}|st}n|dk(rt}|ry |r%|jtj|yy#t $r.t jd}tjY^wxYw)N getFileHandler/) r7callbackgetattr _NO_GETHANDLE _NO_FILEDESC BaseExceptionsysexc_inforerrloseConnectionrFailure)r#r<r=r?r7whyhandfns r$r8zIOCPReactor._callEventCallbackss   LLXs +UOT:F#R"   !5 6  ,,.#C GGI s;A554B,+B,cyrrr"s r$ installWakerzIOCPReactor.installWakers r%cF|jjdtdy)Nr)r postEventr4r"s r$wakeUpzIOCPReactor.wakeUps Az40r%cD|jj|tyr)r addHandler5r(s r$registerHandlezIOCPReactor.registerHandles FJ/r%cptj||}|j|j|Sr)socketrWfileno)r#afstypeskts r$ createSocketzIOCPReactor.createSockets+mmB& CJJL) r%cXtj|||||}|j|S)zI @see: twisted.internet.interfaces.IReactorTCP.listenTCP )r PortstartListening)r#rfactorybacklog interfaceps r$ listenTCPzIOCPReactor.listenTCPs+ HHT7GY = r%cZtj||||||}|j|S)zJ @see: twisted.internet.interfaces.IReactorTCP.connectTCP )r Connectorconnect)r#hostrrbr: bindAddresscs r$ connectTCPzIOCPReactor.connectTCPs* MM$gw T J r%cR|j|t|d|||}d|_|S)zQ @see: twisted.internet.interfaces.IReactorSSL.listenSSL FTLS)rfr_typer#rrbcontextFactoryrcrds r$ listenSSLzIOCPReactor.listenSSLs5>>#NE7C D DJKr%c B|j||t|d|||S)zR @see: twisted.internet.interfaces.IReactorSSL.connectSSL T)rmrr#rjrrbrrr:rks r$ connectSSLzIOCPReactor.connectSSLs- ??#ND'B  r%ctd)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.NotImplementedErrorrqs r$rszIOCPReactor.listenSSLs & r%ctd)z Non-implementation of L{IReactorSSL.connectSSL}. Some dependency is not satisfied. This implementation always raises L{NotImplementedError}. rxryrus r$rvzIOCPReactor.connectSSLs& r%cXtj|||||}|j|S)z Connects a given L{DatagramProtocol} to the given numeric UDP port. @returns: object conforming to L{IListeningPort}. )r r`ra)r#rprotocolrd maxPacketSizeres r$ listenUDPzIOCPReactor.listenUDPs+ HHT8Y t D r%cZtj||||||}|j|S)z Connects a given DatagramProtocol to the given numeric UDP port. EXPERIMENTAL. @returns: object conforming to IListeningPort. )r MulticastPortra)r#rr}rdr~listenMultipleres r$listenMulticastzIOCPReactor.listenMulticasts4    (I}dN  r%rrc | td| td|r td| tdt||||||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 executableargsenvpathuidgidusePTYchildFDss r$ spawnProcesszIOCPReactor.spawnProcesssd ?KL L ?KL L EF F  ! t_j$TJJr%cdt|j}|jj|Sr)listr!clear)r#ress r$ removeAllzIOCPReactor.removeAlls%4<<   r%)2)N)r )rrF)__name__ __module__ __qualname__rrr*r-r@r8rQrTrWr^rfrmrrsrvrrrrrr%r$rr2s D !%*;X7$ 10 & PT  PT PU(    K8r%rcBt}tj|yr)rr installReactor)rs r$installrs Ar%r)4__doc__rYrIwarningstypingrrzope.interfacertwisted.internetrrrr twisted.internet._dumbwin32procr twisted.internet.iocpreactorr rr r "twisted.internet.iocpreactor.constr"twisted.internet.win32eventreactorrtwisted.pythonrrtwisted.protocols.tlsr_TLSMemoryBIOFactory IReactorSSLr ImportError__annotations__warnr0r9ranger5r4ConnectionFdescWentAwayrFrG IReactorTCP IReactorUDPIReactorMulticastIReactorProcessrrr__all__rr%r$rsN   &::3GG;H' 1Q/"..0 q J---.ST ,u,,-GH       \$""$=\\~ ) $GBDeD!7!78#=>CHMM C sC,,2D! D!