JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrB YI~d$@sdZddlZddlZddlZddlZddlZddlZddlZy ddlZWne k r`dZYnXddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZdd l mZdd lmZd d ZddZGddde jZGdddejejZGdddeZGdddeZdS))BaseSelectorEventLoopN) base_events) constants)events)futures) protocols)sslproto) transports)loggercCs6y||}Wntk r"dSXt|j|@SdS)NF)get_keyKeyErrorboolr)selectorfdZeventkeyrd?Z!d@dAZ"dBdCZ#dDdEZ$dFdGZ%dHdIZ&dJdKZ'dLdMZ(dNdOZ)Z*S)TrNcsFt|dkrt}td|jj||_| t |_ dS)NzUsing selector: %s) super__init__ selectorsZDefaultSelectorr debug __class____name__ _selector_make_self_pipeweakrefZWeakValueDictionary _transports)selfr)rrrr5s zBaseSelectorEventLoop.__init__)extraservercCst||||||S)N)_SelectorSocketTransport)r$rprotocolwaiterr%r&rrr_make_socket_transport?s z,BaseSelectorEventLoop._make_socket_transportF) server_sideserver_hostnamer%r&ssl_handshake_timeoutc Cs0tj||||||| d} t||| ||d| jS)N)r-)r%r&)r Z SSLProtocolr'Z_app_transport) r$Zrawsockr( sslcontextr)r+r,r%r&r-Z ssl_protocolrrr_make_ssl_transportDs z)BaseSelectorEventLoop._make_ssl_transportcCst||||||S)N)_SelectorDatagramTransport)r$rr(addressr)r%rrr_make_datagram_transportQsz.BaseSelectorEventLoop._make_datagram_transportcsL|rtd|rdS|t|jdk rH|jd|_dS)Nz!Cannot close a running event loop)Z is_running RuntimeError is_closed_close_self_pipercloser )r$)rrrr6Vs   zBaseSelectorEventLoop.closecCsB||j|jd|_|jd|_|jd8_dS)Nr)_remove_reader_ssockfilenor6_csock _internal_fds)r$rrrr5as   z&BaseSelectorEventLoop._close_self_pipecCsNt\|_|_|jd|jd|jd7_||j|jdS)NFr) socketZ socketpairr8r: setblockingr; _add_readerr9_read_from_self)r$rrrr!is   z%BaseSelectorEventLoop._make_self_pipecCsdS)Nr)r$datarrr_process_self_dataqsz(BaseSelectorEventLoop._process_self_datacCsVxPy |jd}|sP||Wqtk r8wYqtk rLPYqXqWdS)Ni)r8recvrAInterruptedErrorBlockingIOError)r$r@rrrr?ts z%BaseSelectorEventLoop._read_from_selfcCsJ|j}|dk rFy|dWn(tk rD|jr@tjdddYnXdS)Nz3Fail to write a null byte into the self-pipe socketT)exc_info)r:sendOSError_debugr r)r$Zcsockrrr_write_to_selfsz$BaseSelectorEventLoop._write_to_selfdc Cs"|||j||||||dS)N)r>r9_accept_connection)r$protocol_factoryrr.r&backlogr-rrr_start_servings z$BaseSelectorEventLoop._start_servingc Csxt|D]}y0|\}} |jr4td|| ||dWntttfk rZdSt k r} z^| j t j t j t j t jfkr|d| |d|||tj|j||||||nWdd} ~ XYq Xd| i} |||| |||} || q WdS)Nz#%r got a new connection from %r: %rFz&socket.accept() out of system resource)message exceptionr<peername)rangeacceptrIr rr=rDrCConnectionAbortedErrorrHerrnoZEMFILEZENFILEZENOBUFSZENOMEMcall_exception_handlerr7r9Z call_laterrZACCEPT_RETRY_DELAYrO_accept_connection2Z create_task) r$rMrr.r&rNr-_connaddrexcr%rTrrrrLs6      z(BaseSelectorEventLoop._accept_connectionc sd}d}yl|}|} |r8|j|||| d|||d}n|j||| ||d}y| IdHWn|YnXWn\tk r} z>|jrd| d} |dk r|| d<|dk r|| d<|| Wdd} ~ XYnXdS)NT)r)r+r%r&r-)r)r%r&z3Error on transport creation for incoming connection)rPrQr( transport) create_futurer/r*r6 ExceptionrIrW) r$rMrZr%r.r&r-r(r]r)r\contextrrrrXs6  z)BaseSelectorEventLoop._accept_connection2c Cs|}t|tsJyt|}Wn*tttfk rHtd|dYnXy|j|}Wntk rlYnX|st d|d|dS)NzInvalid file object: zFile descriptor z is used by transport ) rintr9AttributeErrorr ValueErrorr#r is_closingr3)r$rr9r]rrr_ensure_fd_no_transports z-BaseSelectorEventLoop._ensure_fd_no_transportc Gs|t|||d}y|j|}Wn*tk rR|j|tj|dfYn>X|j|j }\}}|j ||tjB||f|dk r| dS)N) _check_closedrHandler r r registerr EVENT_READr@modifycancel) r$rcallbackargshandlermaskreaderwriterrrrr>s  z!BaseSelectorEventLoop._add_readercCs|r dSy|j|}Wntk r0dSX|j|j}\}}|tjM}|sb|j|n|j ||d|f|dk r| dSdSdS)NFT) r4r r r rr@rri unregisterrjrk)r$rrrorprqrrrr7 s z$BaseSelectorEventLoop._remove_readerc Gs|t|||d}y|j|}Wn*tk rR|j|tjd|fYn>X|j|j }\}}|j ||tjB||f|dk r| dS)N) rfrrgr r r rhr EVENT_WRITEr@rjrk) r$rrlrmrnrrorprqrrr _add_writer s  z!BaseSelectorEventLoop._add_writercCs|r dSy|j|}Wntk r0dSX|j|j}\}}|tjM}|sb|j|n|j |||df|dk r| dSdSdS)NFT) r4r r r rr@rrsrrrjrk)r$rrrorprqrrr_remove_writer/s z$BaseSelectorEventLoop._remove_writercGs|||j||f|S)N)rer>)r$rrlrmrrr add_readerFs z BaseSelectorEventLoop.add_readercCs||||S)N)rer7)r$rrrr remove_readerKs z#BaseSelectorEventLoop.remove_readercGs|||j||f|S)N)rert)r$rrlrmrrr add_writerPs z BaseSelectorEventLoop.add_writercCs||||S)N)reru)r$rrrr remove_writerUs z#BaseSelectorEventLoop.remove_writercsDt||jr"|dkr"td|}||d|||IdHS)Nrzthe socket must be non-blocking)rrI gettimeoutrcr^ _sock_recv)r$rnfutrrr sock_recvZs zBaseSelectorEventLoop.sock_recvc Cs|dk r|||rdSy||}Wn`ttfk rb|}|||j||||Yn6tk r}z| |Wdd}~XYn X| |dS)N) rw cancelledrBrDrCr9rvr{r_ set_exception set_result)r$r} registered_fdrr|r@rr\rrrr{hs z BaseSelectorEventLoop._sock_recvcsDt||jr"|dkr"td|}||d|||IdHS)Nrzthe socket must be non-blocking)rrIrzrcr^_sock_recv_into)r$rbufr}rrrsock_recv_into}s z$BaseSelectorEventLoop.sock_recv_intoc Cs|dk r|||rdSy||}Wn`ttfk rb|}|||j||||Yn6tk r}z| |Wdd}~XYn X| |dS)N) rwr recv_intorDrCr9rvrr_rr)r$r}rrrnbytesrr\rrrrs z%BaseSelectorEventLoop._sock_recv_intocsTt||jr"|dkr"td|}|r@||d||n |d|IdHS)Nrzthe socket must be non-blocking)rrIrzrcr^ _sock_sendallr)r$rr@r}rrr sock_sendalls  z"BaseSelectorEventLoop.sock_sendallc Cs|dk r|||rdSy||}WnFttfk rHd}Yn,tk rr}z||dSd}~XYnX|t|kr|dn.|r||d}| }| ||j ||||dS)Nr) ryrrGrDrCr_rlenrr9rxr)r$r}rrr@r|r\rrrrrs"     z#BaseSelectorEventLoop._sock_sendallcst||jr"|dkr"tdttdr8|jtjkrf|j||j|j |dIdH}|d\}}}}}| }| ||||IdHS)Nrzthe socket must be non-blockingAF_UNIX)familyprotoloop) rrIrzrchasattrr<rrZ_ensure_resolvedrr^ _sock_connect)r$rr1ZresolvedrYr}rrr sock_connectsz"BaseSelectorEventLoop.sock_connectc Cs|}y||Wnjttfk rV|t|j||||j |||Yn6t k r}z| |Wdd}~XYn X| ddS)N) r9ZconnectrDrCZadd_done_callback functoolspartial_sock_connect_donerx_sock_connect_cbr_rr)r$r}rr1rr\rrrrsz#BaseSelectorEventLoop._sock_connectcCs||dS)N)ry)r$rr}rrrrsz(BaseSelectorEventLoop._sock_connect_donec Cs|r dSy,|tjtj}|dkr6t|d|WnBttfk rPYn6tk rz}z| |Wdd}~XYn X| ddS)NrzConnect call failed ) rZ getsockoptr<Z SOL_SOCKETZSO_ERRORrHrDrCr_rr)r$r}rr1errr\rrrrsz&BaseSelectorEventLoop._sock_connect_cbcsBt||jr"|dkr"td|}||d||IdHS)Nrzthe socket must be non-blockingF)rrIrzrcr^ _sock_accept)r$rr}rrr sock_accepts z!BaseSelectorEventLoop.sock_acceptc Cs|}|r|||r"dSy|\}}|dWnVttfk rh|||j|d|Yn:t k r}z| |Wdd}~XYnX| ||fdS)NFT) r9rwrrTr=rDrCrvrr_rr)r$r}Z registeredrrrZr1r\rrrrs  z"BaseSelectorEventLoop._sock_acceptc sl|j|j=|}||IdHz|j|j|||ddIdHS||rZ|||j|j<XdS)NF)fallback) r#_sock_fd is_reading pause_reading_make_empty_waiterZ sock_sendfile_sock_reset_empty_waiterresume_reading)r$Ztranspfileoffsetcountrrrr_sendfile_natives z&BaseSelectorEventLoop._sendfile_nativecCsx~|D]v\}}|j|j}\}}|tj@rN|dk rN|jrD||n |||tj@r|dk r|jrr||q||qWdS)N) fileobjr@rriZ _cancelledr7Z _add_callbackrsru)r$Z event_listrrorrprqrrr_process_events-s   z%BaseSelectorEventLoop._process_eventscCs|||dS)N)r7r9r6)r$rrrr _stop_serving;sz#BaseSelectorEventLoop._stop_serving)N)N)N)NNN)+r __module__ __qualname__rr*rZSSL_HANDSHAKE_TIMEOUTr/r2r6r5r!rAr?rJrOrLrXrer>r7rtrurvrwrxryr~r{rrrrrrrrrrrrr __classcell__rr)rrr/sX    +$ rcseZdZdZeZdZdfdd ZddZddZ d d Z d d Z d dZ ddZ ddZdddZddZddZddZddZZS) _SelectorTransportiNcst||||jd<y||jd<Wntk rHd|jd<YnXd|jkry||jd<Wn tjk rd|jd<YnX||_| |_ d|_ | |||_ ||_d|_d|_|j dk r|j ||j|j <dS)Nr<ZsocknamerRFr)rr_extraZ getsocknamerHZ getpeernamer<errorrr9r_protocol_connected set_protocol_server_buffer_factory_buffer _conn_lost_closingZ_attachr#)r$rrr(r%r&)rrrrLs,       z_SelectorTransport.__init__cCs|jjg}|jdkr |dn|jr0|d|d|j|jdk r|jst|jj |jt j }|rz|dn |dt|jj |jt j }|rd}nd}| }|d|d |d d d |S) Nclosedclosingzfd=z read=pollingz read=idlepollingZidlezwrite=z<{}> )rrrappendrr_loopr4rr rrirsget_write_buffer_sizeformatjoin)r$inforstatebufsizerrr__repr__fs*       z_SelectorTransport.__repr__cCs|ddS)N) _force_close)r$rrrabortsz_SelectorTransport.abortcCs||_d|_dS)NT) _protocolr)r$r(rrrrsz_SelectorTransport.set_protocolcCs|jS)N)r)r$rrr get_protocolsz_SelectorTransport.get_protocolcCs|jS)N)r)r$rrrrdsz_SelectorTransport.is_closingcCsT|jr dSd|_|j|j|jsP|jd7_|j|j|j|jddS)NTr) rrr7rrrru call_soon_call_connection_lost)r$rrrr6sz_SelectorTransport.closecCs.|jdk r*tjd|t|d|jdS)Nzunclosed transport )source)rwarningswarnResourceWarningr6)r$rrr__del__s z_SelectorTransport.__del__Fatal error on transportcCsNt|tr(|jr@tjd||ddn|j||||jd||dS)Nz%r: %sT)rF)rPrQr]r() rrHr get_debugr rrWrr)r$r\rPrrr _fatal_errors   z_SelectorTransport._fatal_errorcCsd|jr dS|jr(|j|j|j|jsBd|_|j|j|jd7_|j|j |dS)NTr) rrclearrrurrr7rr)r$r\rrrrs z_SelectorTransport._force_closecCsVz|jr|j|Wd|jd|_d|_d|_|j}|dk rP|d|_XdS)N)rrZconnection_lostrr6rrZ_detach)r$r\r&rrrrs z(_SelectorTransport._call_connection_lostcCs t|jS)N)rr)r$rrrrsz(_SelectorTransport.get_write_buffer_sizecGs"|jr dS|jj||f|dS)N)rrr>)r$rrlrmrrrr>sz_SelectorTransport._add_reader)NN)r)rrrmax_size bytearrayrrrrrrrrdr6rrrrrr>rrr)rrr@s    rcseZdZdZejjZd#fdd ZfddZ ddZ d d Z d d Z d dZ ddZddZddZddZddZddZddZfddZdd Zd!d"ZZS)$r'TNcs~d|_t|||||d|_d|_d|_t|j|j |j j ||j |j |j|j|dk rz|j tj|ddS)NF)_read_ready_cbrr_eof_paused _empty_waiterrZ _set_nodelayrrrrconnection_mader>r _read_readyr_set_result_unless_cancelled)r$rrr(r)r%r&)rrrrs    z!_SelectorSocketTransport.__init__cs.t|tjr|j|_n|j|_t|dS)N)rrZBufferedProtocol_read_ready__get_bufferr_read_ready__data_receivedrr)r$r()rrrrs  z%_SelectorSocketTransport.set_protocolcCs|j o|j S)N)rr)r$rrrrsz#_SelectorSocketTransport.is_readingcCs>|js |jrdSd|_|j|j|jr:td|dS)NTz%r pauses reading)rrrr7rrr r)r$rrrrs   z&_SelectorSocketTransport.pause_readingcCs@|js |jsdSd|_||j|j|jrrrrrr r)r$rrrrs   z'_SelectorSocketTransport.resume_readingcCs |dS)N)r)r$rrrrsz$_SelectorSocketTransport._read_readyc Cs|jr dSy |jd}t|s(tdWn.tk rX}z||ddSd}~XYnXy|j|}WnDt t fk rdStk r}z||ddSd}~XYnX|s| dSy|j |Wn0tk r}z||dWdd}~XYnXdS)Nz%get_buffer() returned an empty bufferz/Fatal error: protocol.get_buffer() call failed.z$Fatal read error on socket transportz3Fatal error: protocol.buffer_updated() call failed.) rrZ get_bufferrr3r_rrrrDrC_read_ready__on_eofZbuffer_updated)r$rr\rrrrr s2   z0_SelectorSocketTransport._read_ready__get_bufferc Cs|jr dSy|j|j}WnDttfk r4dStk r`}z||ddSd}~XYnX|sr|dSy|j |Wn.tk r}z||dWdd}~XYnXdS)Nz$Fatal read error on socket transportz2Fatal error: protocol.data_received() call failed.) rrrBrrDrCr_rrrZ data_received)r$r@r\rrrr*s" z3_SelectorSocketTransport._read_ready__data_receivedc Cst|jrtd|y|j}Wn.tk rR}z||ddSd}~XYnX|rh|j|j n| dS)Nz%r received EOFz1Fatal error: protocol.eof_received() call failed.) rrr rrZ eof_receivedr_rr7rr6)r$Z keep_openr\rrrr?s  z,_SelectorSocketTransport._read_ready__on_eofc Cst|tttfs$tdt|j|jr2td|j dk rDtd|sLdS|j rz|j t j krht d|j d7_ dS|jsy|j|}WnDttfk rYnBtk r}z||ddSd}~XYnX||d}|sdS|j|j|j|j||dS)Nz/data argument must be a bytes-like object, not z%Cannot call write() after write_eof()z(unable to write; sendfile is in progresszsocket.send() raised exception.rz%Fatal write error on socket transport)rbytesr memoryviewrtyperrr3rrr!LOG_THRESHOLD_FOR_CONNLOST_WRITESr warningrrrGrDrCr_rrrtr _write_readyextend_maybe_pause_protocol)r$r@r|r\rrrwriteRs6      z_SelectorSocketTransport.writec Cs|jr dSy|j|j}Wnrttfk r4Yntk r}z>|j|j |j | |d|j dk r~|j |Wdd}~XYnjX|r|jd|=||js|j|j |j dk r|j d|jr|dn|jr|jtjdS)Nz%Fatal write error on socket transport)rrrGrrDrCr_rrurrrrr_maybe_resume_protocolrrrrshutdownr<SHUT_WR)r$r|r\rrrrws.       z%_SelectorSocketTransport._write_readycCs.|js |jrdSd|_|js*|jtjdS)NT)rrrrrr<r)r$rrr write_eofs  z"_SelectorSocketTransport.write_eofcCsdS)NTr)r$rrr can_write_eofsz&_SelectorSocketTransport.can_write_eofcs*t||jdk r&|jtddS)NzConnection is closed by peer)rrrrConnectionError)r$r\)rrrrs  z._SelectorSocketTransport._call_connection_lostcCs6|jdk rtd|j|_|js0|jd|jS)NzEmpty waiter is already set)rr3rr^rr)r$rrrrs    z+_SelectorSocketTransport._make_empty_waitercCs d|_dS)N)r)r$rrrrsz,_SelectorSocketTransport._reset_empty_waiter)NNN)rrrZ_start_tls_compatiblerZ _SendfileModeZ TRY_NATIVEZ_sendfile_compatiblerrrrrrrrrrrrrrrrrrr)rrr's& % r'csFeZdZejZd fdd ZddZddZd dd Z d d Z Z S)r0Ncs^t||||||_|j|jj||j|j|j|j |dk rZ|jt j |ddS)N) rr_addressrrrrr>rrrr)r$rrr(r1r)r%)rrrrs   z#_SelectorDatagramTransport.__init__cCstdd|jDS)Ncss|]\}}t|VqdS)N)r).0r@rYrrr szC_SelectorDatagramTransport.get_write_buffer_size..)sumr)r$rrrrsz0_SelectorDatagramTransport.get_write_buffer_sizec Cs|jr dSy|j|j\}}Wnpttfk r8Ynhtk rd}z|j|Wdd}~XYn<t k r}z| |dWdd}~XYnX|j ||dS)Nz&Fatal read error on datagram transport) rrZrecvfromrrDrCrHrerror_receivedr_rZdatagram_received)r$r@r[r\rrrrsz&_SelectorDatagramTransport._read_readyc Csdt|tttfs$tdt|j|s,dS|jrV|d|jfkrPtd|j|j}|j r|jr|j t j krxt d|j d7_ dS|jsDy*|jdr|j|n|j||dSttfk r|j|j|jYn^tk r}z|j|dSd}~XYn0tk rB}z||ddSd}~XYnX|jt||f|dS)Nz/data argument must be a bytes-like object, not z!Invalid address: must be None or zsocket.send() raised exception.rrRz'Fatal write error on datagram transport) rrrrrrrrrcrrrr rrrrrGsendtorDrCrrtr _sendto_readyrHrrr_rrr)r$r@r[r\rrrrs>     z!_SelectorDatagramTransport.sendtoc Csx|jr|j\}}y*|jdr0|j|n|j||Wqttfk rj|j||fPYqt k r}z|j |dSd}~XYqt k r}z| |ddSd}~XYqXqW||js|j|j|jr|ddS)NrRz'Fatal write error on datagram transport)rpopleftrrrGrrDrC appendleftrHrrr_rrrrurrr)r$r@r[r\rrrrs*  z(_SelectorDatagramTransport._sendto_ready)NNN)N) rrr collectionsdequerrrrrrrrr)rrr0s  )r0)__all__rrVrrr<rr"r ImportErrorrrrrrr r logr rrZ BaseEventLooprZ_FlowControlMixinZ Transportrr'r0rrrrs@           _