Your IP : 172.28.240.42


Current Path : /usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/
Upload File :
Current File : //usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyc


Nc@s-dZddlZddlZddlZddlZddlmZmZddlm	Z	m
Z
mZmZm
Z
ddlmZmZddlmZmZddlmZddlmZmZmZmZdd	lmZmZdd
lm Z ddl!m"Z"ddl!m#Z#dd
l!m$Z$ddl!m%Z%ddl!m&Z&yddl'm(Z)Wne*k
rudZ)nXiej,e%6ej-e&6Z.dej/eefdYZ0e)dk	ree0e	j1nde0fdYZ2de0fdYZ3defdYZdeefdYZ4dS(s
TCP support for IOCP reactor
iN(t
implementstclassImplements(t
interfacesterrortaddresstmaintdefer(t	_LogOwnertisIPAddress(t
_SocketClosert	Connector(t_AbortingMixin(tlogtfailuretreflecttutil(tiocpsupporttabstract(tIReadWriteHandle(tERROR_IO_PENDING(tSO_UPDATE_CONNECT_CONTEXT(tSO_UPDATE_ACCEPT_CONTEXT(tERROR_CONNECTION_REFUSED(tERROR_NETWORK_UNREACHABLE(tstartTLSt
ConnectioncBseZdZeeejejeZ	ddZdZdZ
dZdZdZdZdZd	Zd
ZdZdZd
Zedk	redZndZdZddZRS(s
    @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.
    cCs5tjj||||_|j|_||_dS(N(Rt
FileHandlet__init__tsockettfilenot
getFileHandletprotocol(tselftsocktprototreactor((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyR1s	cCs|jS(N(R(R ((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyt	getHandle8scCs|jjt|dS(N(RtdataReceivedtstr(R trbuffer((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyR%<scCstj|j||S(N(t_iocptrecvR(R tbufflisttevt((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pytreadFromHandleAscCs(tj|jt|d|j|S(s
        Send C{buff} to current file handle using C{_iocp.send}. The buffer
        sent is limited to a size of C{self.SEND_LIMIT}.
        i(R(tsendRtbuffert
SEND_LIMIT(R tbuffR+((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyt
writeToHandleEscCsyt|j|jdWntjk
r3nXtj|jd}|ry|jWqt	j
}tj|j
|qXndS(Ni(tgetattrRt_socketShutdownMethodRRtIHalfCloseableProtocolRtNonetwriteConnectionLostR
tFailureRterrtconnectionLost(R tptf((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyt_closeWriteConnectionNs
cCsdtj|jd}|rSy|jWq`tj|jtj	q`Xn
|j|dS(N(
RR4RR5treadConnectionLostRR8R9R
R7(R treasonR:((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyR=]s
cCsx|jr
dStjj|||dkp<|jtj}|j||j	}|`	|`
|`|j|dS(N(tdisconnectedRRR9R5tcheckRtConnectionAbortedt_closeSocketRRR(R R>tisCleanR((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyR9is	
	cCs|jS(sN
        Return the prefix to log with when I own the logging thread.
        (tlogstr(R ((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyt	logPrefixwscCs"tj|jjtjtjS(N(toperatorttruthRt
getsockopttIPPROTO_TCPtTCP_NODELAY(R ((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyt
getTcpNoDelay~scCs |jjtjtj|dS(N(Rt
setsockoptRIRJ(R tenabled((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyt
setTcpNoDelayscCs"tj|jjtjtjS(N(RFRGRRHt
SOL_SOCKETtSO_KEEPALIVE(R ((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pytgetTcpKeepAlivescCs |jjtjtj|dS(N(RRLRORP(R RM((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pytsetTcpKeepAlivescCst|||tjdS(s9
            @see: L{ITLSTransport.startTLS}
            N(t	_startTLSRR(R tcontextFactorytnormal((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyRscCs@|jr
dS|jr)|jj|ntjj||dS(s
        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{ITCPTransport.write}
        N(R?tTLSRtwriteRR(R tdata((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyRWs
		cCs@|jr
dS|jr)|jj|ntjj||dS(s
        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{ITCPTransport.writeSequence}
        N(R?RVRt
writeSequenceRR(R tiovec((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyRYs
		cCsF|jr/|jrB|jrB|jjqBntjj||dS(s
        Close the underlying handle or, if TLS has been started, first shut it
        down.

        @see: L{ITCPTransport.loseConnection}
        N(RVt	connectedt
disconnectingRtloseConnectionRR(R R>((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyR]s	N(t__name__t
__module__t__doc__RRRt
ITCPTransportt
ISystemHandletFalseRVR5RR$R%R,R1R<R=R9RERKRNRQRRRStTrueRRWRYR](((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyR%s,
															tClientcBseZdZejZejZeZ	dZ
dZdZdZ
dZdZdZdZd	Zd
ZdZRS(s
    @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.
    c	Cs2||_||f|_||_|dkr6d}nyy|j|j|j}Wn0tjk
r}tj	|d|dnwXy|j
|Wn0tjk
r}tj	|d|dnX||_tj||d||j
d|jWn,tj	k
r-}|j
d|j|nXdS(Ntii(Rfi(t	connectortaddrR#R5tcreateSockett
addressFamilyt
socketTypeRRtConnectBindErrortbindRRt	callLatertresolveAddresstfailIfNotConnected(	R thosttporttbindAddressRgR#tskttseR8((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyRs&				cCs]t|jdr*|j|jdn/|jj|jd}|j|j|jdS(Ni(RRht_setRealAddressR#tresolvetaddCallbacksRp(R td((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyRoscCs$||jdf|_|jdS(Ni(RhtrealAddresst	doConnect(R R((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyRvscCs|js"|js"t|dr&dSy|jtWntk
rJn
X|`|`|jj	||j
jtj
||`
dS(NRg(R[R?thasattrRBRdtAttributeErrorRRR#tremoveActiveHandleRgtconnectionFailedR
R7(R R8((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyRps
cCs|jtjdS(s*
        Stop attempt to connect.
        N(RpRt	UserError(R ((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pytstopConnectingscCs|rFtj||}|jtj|tjj|dfn|jjtj	t
tjd|jj
|jj|j|_t|_|j|j}|d|_|jj||jdS(Ns
Unknown errortPs,client(tconnectExErrorstgetRpRtgetConnectErrorterrnot	errorcodeRRLRORtstructtpackRRgt
buildProtocoltgetPeerRRdR[t
_getLogPrefixRDtmakeConnectiontstartReading(R trctbytesR+RE((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyt	cbConnects			
cCst|dsdStjs"t|jj|tj|j|}tj|j	j
|j|}|r|tkr|j|dd|ndS(NRgi(
R|R(thave_connectextAssertionErrorR#taddActiveHandletEventRtconnectRRRzR(R R+R((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyR{#s!cCstjd|jjS(si
        Returns an IPv4Address.

        This indicates the address from which I am connecting.
        tTCP(RtIPv4AddressRtgetsockname(R ((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pytgetHost1scCstjd|jS(se
        Returns an IPv4Address.

        This indicates the address that I am connected to.
        R(RRRz(R ((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyR:scCs&d|j|jtj|f}|S(Ns<%s to %s at %x>(t	__class__RhRt
unsignedID(R ts((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyt__repr__CscCsI|js%|jtjd|n tj|||jj|dS(Ntstring(R[RpRtConnectErrorRR9Rg(R R>((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyR9Is	(R^R_R`RtAF_INETRjtSOCK_STREAMRkRdt_tlsClientDefaultRRoRvRpRRR{RRRR9(((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyRes														tServercBs8eZdZeZdZdZdZdZRS(sV
    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.
    cCstj||||||_||_||_|j|j}d|||jjf|_d|jj	j
|j|jjf|_t
|_|jdS(s

        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.
        s%s,%s,%ss<%s #%s on %s>N(RRt
serverAddrt
clientAddrt	sessionnoRRRqRDRR^RrtrepstrRdR[R(R R!RRRRR#RE((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyRas				cCs|jS(s=
        A string representation of this connection.
        (R(R ((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyRuscCs|jS(sW
        Returns an IPv4Address.

        This indicates the server's address.
        (R(R ((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyR|scCs|jS(sW
        Returns an IPv4Address.

        This indicates the client's address.
        (R(R ((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyRs(	R^R_R`RcRRRRR(((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyRRs
				R
cBseZdZRS(cCs"t|j|j|j||jS(N(ReRqRrRsR#(R ((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyt_makeTransports(R^R_R(((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyR
stPortcBseZeejeZeZeZe	j
Ze	jZ
dZdZdZddddZdZdZejejdZeZdZd	Zd
ZdZdZd
Z dZ!RS(iRi2RfcCs1||_||_||_||_||_dS(N(Rrtfactorytbacklogt	interfaceR#(R RrRRRR#((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyRs
				cCsG|jdk	r,d|j|jj|jfSd|j|jjfSdS(Ns<%s of %s on %s>s<%s of %s (not listening)>(t_realPortNumberR5RR(R ((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyRs			cCs"y8|jj|j|j}|j|j|jfWn1tjk
rk}tj	|j|j|fnXt
j|j|_
|jd|_tjd|j|j|jf|jj|j|jt|_t|_|jj|||_|jj|_|jdS(Nis%s starting on %s(R#RiRjRkRmRRrRRtCannotListenErrorR(t
maxAddrLenRtaddrLenRRRtmsgRRtdoStarttlistenRRdR[RcR?RRtdoAccept(R Rttle((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pytstartListenings$
			cCsEt|_|jrAtj|_|jjd|j||jSdS(s
        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.
        iN(	RdR\R[RtDeferredtdeferredR#RnR9(R tconnDone((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyR]s
		cCs!tjd|j|jfdS(s.
        Log message for closing port
        s(%s Port %s Closed)N(RRt_typeR(R ((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyt_logConnectionLostMsgscCs|jd|_d}t|dr:|j}|`nt|_|jj|t	|_
|jt|`|`
y|jjWn5t	|_|dk	r|jtjqn&Xt	|_|dk	r|jdndS(s'
        Cleans up the socket.
        RN(RR5RR|RRdR?R#R~RcR[RBRRRtdoStopR\terrbackR
R7tcallback(R R>Ry((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyR9s,
					
		cCstj|jjS(sK
        Returns the name of my class, to prefix log entries with.
        (RtqualRR(R ((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyREscCstjd|jjS(sW
        Returns an IPv4Address.

        This indicates the server's address.
        R(RRRR(R ((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyRscCs3|j|||jp|js/|jndS(N(thandleAcceptR\R?R(R RRR+((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pytcbAccept!sc	
Cso|js|jrtS|rFtjdtjj|d|ftS|jj	t
jtt
jd|j
jtj|jj|j\}}}||jkst|jjtjd|d|d}|dkr|jjnr|j}|d|_t|j|tjd|d|dtjd|d|d||j}|j|t SdS(Ns*Could not accept new connection -- %s (%s)s
unknown errorRRii(!R\R?RcRRRRRtnewsktRLRRORRRRR(tget_accept_addrsR0RjRRRRt_ServerFactoryIPv4AddressR5tcloseRRRR#RRd(	R RR+tfamilytlAddrtrAddrRRt	transport((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyR's0				 	

cCstj|j|}tjd|jd|_}|jj|j|j	|_
}tj|jj
|j
||}|r|tkr|j||ndS(Nii(R(RRtAllocateReadBufferRR0R#RiRjRkRtacceptRRRR(R R+R0RR((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyRHs!'N("R^R_RRtIListeningPortRcR[R?R\RRRjRRkRR5RRRRRR
R7RtCONNECTION_DONER]t
stopListeningRR9RERRRR(((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyRs*
			
			 					!(5R`RRFRRtzope.interfaceRRttwisted.internetRRRRRttwisted.internet.abstractRRttwisted.internet.tcpR	R
tTCPConnectorRttwisted.pythonRR
RRttwisted.internet.iocpreactorRR(Rt'twisted.internet.iocpreactor.interfacesRt"twisted.internet.iocpreactor.constRRRRRttwisted.internet._newtlsRRStImportErrorR5tWSAECONNREFUSEDtWSAENETUNREACHRRRt
ITLSTransportReRR(((sD/usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/tcp.pyt<module>s80("



=