Current File : //usr/lib/python2.7/site-packages/serial/rfc2217.pyc
�
{�QNc@s ddlTddlZddlZddlZddlZddlZddlZiejd6ejd6ej	d6ej
d6Zedg�Z
edg�Zed	g�Zed
g�Zedg�Zee
e
g�Zedg�Zed
g�Zedg�Zedg�Zedg�Zedg�Zedg�Zedg�Zedg�Zedg�Zedg�Zedg�Zedg�Zedg�Z edg�Z!edg�Z"edg�Z#edg�Z$edg�Z%edg�Z&edg�Z'edg�Z(ed g�Z)ed!g�Z*ed"g�Z+ed#g�Z,ed$g�Z-ed%g�Z.ed&g�Z/ed'g�Z0ed(g�Z1ed)g�Z2ed*g�Z3ed+g�Z4ed,g�Z5ed-g�Z6ed.g�Z7ed/g�Z8ed0g�Z9ie.e"6e/e#6e0e$6e1e%6e2e&6e3e'6e4e(6e5e)6e6e*6e7e+6e8e,6e9e-6Z:edg�Z;edg�Z<edg�Z=edg�Z>edg�Z?edg�Z@edg�ZAedg�ZBed g�ZCed!g�ZDed"g�ZEed#g�ZFed$g�ZGed1g�ZHed2g�ZIed3g�ZJed4g�ZKed5g�ZLed6g�ZMed7g�ZNd8ZOd9ZPd:ZQd4ZRd ZSdZTdZUdZVd8ZWd9ZXd:ZYd4ZZd Z[dZ\dZ]dZ^edg�Z_edg�Z`edg�Zaideb6dec6ded6dee6def6Zgehd;�egji�D��Zjidek6del6dem6Znehd<�enji�D��ZodZpdZqdZrd=Zsd>Ztd?Zud@ZvdAewfdB��YZxdCewfdD��YZydEezfdF��YZ{yddl|Z|Wn*e}k
r]dGe{e~fdH��YZnXdGe{e|j�fdI��YZdJewfdK��YZ�e�dLkrddl�Z�edMdN�Z�e�j�j�dOe��e�j�j�dP�e�j�dQ�e�j��e�j�j�dRe�j�d��e�j��ndS(Si����(t*Ntdebugtinfotwarningterrori�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�iiii,iiiiiii	i
iiieifigihiiijikiliminioipi
iiiiiii�i@i ccs!|]\}}||fVqdS(N((t.0tktv((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pys	<genexpr>�sccs!|]\}}||fVqdS(N((RRR((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pys	<genexpr>�st	REQUESTEDtACTIVEtINACTIVEtREALLY_INACTIVEtTelnetOptioncBs,eZdZdd�Zd�Zd�ZRS(s@Manage a single telnet option, keeps track of DO/DONT WILL/WONT.c

Cs^||_||_||_||_||_||_||_||_t|_	|	|_
dS(s-Init option.
        :param connection: connection used to transmit answers
        :param name: a readable name for debug outputs
        :param send_yes: what to send when option is to be enabled.
        :param send_no: what to send when option is to be disabled.
        :param ack_yes: what to expect when remote agrees on option.
        :param ack_no: what to expect when remote disagrees on option.
        :param initial_state: options initialized with REQUESTED are tried to
            be enabled on startup. use INACTIVE for all others.
        N(t
connectiontnametoptiontsend_yestsend_notack_yestack_notstatetFalsetactivetactivation_callback(
tselfR
RRRRRRt
initial_stateR((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyt__init__�s									cCsd|j|j|jfS(sString for debug outputss	%s:%s(%s)(RRR(R((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyt__repr__�scCs�||jkr�|jtkrOt|_t|_|jdk	r�|j�q�q�|jtkraq�|jtkr�t|_|j	j
|j|j�t|_|jdk	r�|j�q�q�|jt
kr�|j	j
|j|j�q�td|��n�||jkr�|jtkr+t|_t|_q�|jtkrht|_|j	j
|j|j�t|_q�|jtkrzq�|jt
kr�q�td|��ndS(s^A DO/DONT/WILL/WONT was received for this option, update state and
        answer when needed.soption in illegal state %rN(RRRR	tTrueRRtNoneR
R
ttelnetSendOptionRRRRt
ValueErrorRR(Rtcommand((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pytprocess_incoming�s<						N(t__name__t
__module__t__doc__RRRR!(((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR�s	tTelnetSubnegotiationcBsVeZdZdd�Zd�Zd�Zd�Zee�Z	dd�Z
d�ZRS(	s�A object to handle subnegotiation of options. In this case actually
    sub-sub options for RFC 2217. It is used to track com port options.cCsO|dkr|}n||_||_||_d|_||_t|_dS(N(RR
RRtvaluet
ack_optionR
R(RR
RRR'((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR's						cCsd|j|jfS(sString for debug outputs.s%s:%s(RR(R((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR0scCsa||_t|_|jj|j|j�|jjr]|jjjd|j|jf�ndS(s�request a change of the value. a request is sent to the server. if
        the client needs to know if the change is performed he has to check the
        state of this object.sSB Requesting %s -> %rN(	R&RRR
trfc2217SendSubnegotiationRtloggerRR(RR&((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pytset4s
		cCs2|jtkr%td|j��n|jtkS(sjcheck if answer from server has been received. when server rejects
        the change, raise a ValueError.s#remote rejected value for option %r(RRRRR	(R((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pytisReady>sicCs]tj�|}xFtj�|krEtjd�|j�rPqqWtd|j��dS(s�wait until the subnegotiation has been acknowledged or timeout. It
        can also throw a value error when the answer from the server does not
        match the value sent.g�������?s#timeout while waiting for option %rN(ttimetsleepR+tSerialExceptionR(Rttimeoutttimeout_time((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pytwaitGs
cCsj|j|t|j� kr(t|_n	t|_|jjrf|jjjd|j||jf�ndS(s�check an incoming subnegotiation block. the parameter already has
        cut off the header like sub option number and com port option value.sSB Answer %s -> %r -> %sN(	R&tlenR	RRR
R)RR(Rt	suboption((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pytcheckAnswerSs
	N(R"R#R$RRRR*R+tpropertyRR1R4(((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR%#s			
	t
RFC2217SerialcBs+eZdZd2Zd�Zd�Zd�Zd�Zd�Zd�Z	dd�Z
d�Zd�Zd�Z
dd�Zed�Zed �Zed!�Zd"�Zd#�Zd$�Zd%�Zd&�Zd'�Zd(�Zd)�Zd*�Zd+�Zd,d-�Zd.�Zd/�Zd0�Z d1�Z!RS(3s<Serial port implementation for RFC 2217 remote serial ports.i2iKini�i�i�i,iXi�ii`	i�i�%iKi�i�i�c
Cs7d|_t|_t|_d|_|jdkrBtd��n|jrZtd��nyWt	j	t	j
t	j�|_|jj
|j|j��|jjt	jt	jd�Wn5tk
r�}d|_td|j|f��nX|jjd�tj�|_tj�|_t|dtttttt �t|dt!ttttt"�g}t|d	t#ttttt"�t|d
t$ttttt"�t|dt$ttttt"�t|dtttttt �t|d
t!ttttt"�g||_%it&|dt't(�d6t&|dt)t*�d6t&|dt+t,�d6t&|dt-t.�d6|_/it&|dt0t1�d6t&|dt2t3�d6|_4|j4j5|j/�d|_6d|_7d|_8t|_9tj:d|j;�|_<|j<j=t>�|j<j?d|jf�|j<j@�x9|j%D].}|jAt"kr"|jB|jC|jD�q"q"WtEjE�|j}xYtEjE�|kr�tEjFd�tGd�|D��tH|�krjPqjqjWtd|��|jr�|jjId|j%�n|jJ�t>|_|jKs|jLt>�|jMt>�n|jN�|jO�dS(sjOpen port with current settings. This may throw a SerialException
           if the port cannot be opened.is.Port must be configured before it can be used.sPort is already open.isCould not open port %s: %sis	we-BINARYs
we-RFC2217tECHOswe-SGAsthey-SGAsthey-BINARYsthey-RFC2217tbaudratetdatasizetparitytstopsizetpurgetcontrolittargets&pySerial RFC 2217 reader thread for %sg�������?css|]}|jVqdS(N(R(Rto((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pys	<genexpr>�ss9Remote does not seem to support RFC2217 or BINARY mode %rsNegotiated options: %sN(PRR)Rt_ignore_set_control_answert_poll_modem_statet_network_timeoutt_portR.t_isOpentsockettAF_INETtSOCK_STREAMt_sockettconnecttfromURLtportstrt
setsockopttIPPROTO_TCPtTCP_NODELAYt	Exceptiont
settimeouttQueuet_read_buffert	threadingtLockt_write_lockRtBINARYtWILLtWONTtDOtDONTR
tCOM_PORT_OPTIONRR7tSGAt_telnet_optionsR%tSET_BAUDRATEtSERVER_SET_BAUDRATEtSET_DATASIZEtSERVER_SET_DATASIZEt
SET_PARITYtSERVER_SET_PARITYtSET_STOPSIZEtSERVER_SET_STOPSIZEt_rfc2217_port_settingst
PURGE_DATAtSERVER_PURGE_DATAtSET_CONTROLtSERVER_SET_CONTROLt_rfc2217_optionstupdatet
_linestatet_modemstatet_modemstate_expirest_remote_suspend_flowtThreadt_telnetReadLoopt_threadt	setDaemonRtsetNametstartRRRRR,R-tsumR2Rt_reconfigurePortt_rtsctstsetRTStsetDTRt
flushInputtflushOutput(Rtmsgtmandadory_optionsRR0((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pytopenesz					 	$!
				

"	
		

cCsG|jdkrtd��n|jdk	r<td��nt|jttf�sud|jkoodknr�t	d|j��n|j
djtj
d|j��|j
d	jtj
d
|j��|j
djtj
d
t|j��|j
djtj
d
t|j��|j
j�}|jrQ|jjd
|f�ntj�|j}xYtj�|kr�tjd�td�|D��t|�krgPqgqgWtd|��|jr�|jjd|f�n|jr|jrt	d��n?|jr|jt�n&|jr6|jt �n
|jt!�dS(s,Set communication parameters on opened port.sCan only operate on open portss'writeTimeout is currently not supportediii sinvalid baudrate: %rR8s!IR9s!BR:R;sNegotiating settings: %sg�������?css|]}|jVqdS(N(R(RR?((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pys	<genexpr>�ss5Remote does not accept parameter change (RFC2217): %rsNegotiated settings: %ss-xonxoff and rtscts together are not supportedNI("RHRR.t
_writeTimeouttNotImplementedErrort
isinstancet	_baudratetinttlongRRfR*tstructtpackt	_bytesizetRFC2217_PARITY_MAPt_paritytRFC2217_STOPBIT_MAPt	_stopbitstvaluesR)RR,RBR-RwR2RRyt_xonxofftrfc2217SetControltSET_CONTROL_USE_HW_FLOW_CONTROLtSET_CONTROL_USE_SW_FLOW_CONTROLtSET_CONTROL_USE_NO_FLOW_CONTROL(RtitemsR0((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyRx�s89##''	
"			cCs�|jr~|jrLy$|jjtj�|jj�WnnXd|_n|jre|jj�nt	|_t
jd�ndS(s
Close portg333333�?N(RDRHtshutdownREt	SHUT_RDWRtcloseRRstjoinRR,R-(R((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR��s				cCstd��dS(Ns2there is no sensible way to turn numbers into URLs(R.(Rtport((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pytmakeDeviceName�scCs�|j�jd�r"|d}nyqd|krC|jdd�\}}x�|jd�D]�}d|kr�|jdd�\}}nd}|dkr�tj�tjd�|_|jjt	|�|jj
d�qY|d	kr�t|_qY|d
krt|_
qY|dkr)t|�|_qYtd|f��qYWn|jd
d�\}}t|�}d|ko~dkns�td��nWn#tk
r�}td|��nX||fS(s(extract host and port from an URL strings
rfc2217://i
t/it=tloggingspySerial.rfc2217senabled loggingtign_set_controlt
poll_modemR/sunknown option: %rt:iisport not in range 0...65535sRexpected a string in the form "[rfc2217://]<host>:<port>[/option[/option...]]": %sN(tlowert
startswithtsplitRR�tbasicConfigt	getLoggerR)tsetLevelt
LOGGER_LEVELSRRR@RAtfloatRBRR�R.(RturltoptionsRR&thostR�te((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyRJs8

cCs|jst�n|jj�S(s>Return the number of characters currently in the input buffer.(RDtportNotOpenErrorRRtqsize(R((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyt	inWaiting&s		icCs�|jst�nt�}yZxSt|�|krs|jdkrQtd��n|j|jj	t
|j��q!WWntj
k
r�nXt|�S(s�Read size bytes from the serial port. If a timeout is set it may
        return less characters as requested. With no timeout it will block
        until the requested number of bytes is read.s&connection failed (reader thread died)N(RDR�t	bytearrayR2RsRR.tappendRRtgetRt_timeoutRQtEmptytbytes(Rtsizetdata((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pytread+s			'cCs�|jst�n|jj�zMy |jj|jtt��Wn&t	j
k
rj}td|��nXWd|jj�Xt
|�S(s�Output the given string over the serial port. Can block if the
        connection is blocked. May raise SerialException if the connection is
        closed.s$connection failed (socket error): %sN(RDR�RUtacquireRHtsendalltreplacetIACtIAC_DOUBLEDRERR.treleaseR2(RR�R�((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pytwrite:s		
 cCsI|jst�n|jt�x#|jj�rD|jjt�q"WdS(s9Clear input buffer, discarding all that is in the buffer.N(RDR�trfc2217SendPurgetPURGE_RECEIVE_BUFFERRRR�R�R(R((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR|Is
		
cCs#|jst�n|jt�dS(sbClear output buffer, aborting the current output and
        discarding all that is in the buffer.N(RDR�R�tPURGE_TRANSMIT_BUFFER(R((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR}Qs		g�?cCs=|jst�n|jt�tj|�|jt�dS(sPSend break condition. Timed, returns to idle state after given
        duration.N(RDR�tsetBreakRR,R-R(Rtduration((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyt	sendBreakWs
		

cCsc|jst�n|jr<|jjddt|��n|rR|jt�n
|jt�dS(sJSet break: Controls TXD. When active, to transmitting is
        possible.sset BREAK to %stinactiveRN(R�sactive(RDR�R)RtboolR�tSET_CONTROL_BREAK_ONtSET_CONTROL_BREAK_OFF(Rtlevel((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR�_s			!cCsc|jst�n|jr<|jjddt|��n|rR|jt�n
|jt�dS(s*Set terminal status line: Request To Send.s
set RTS to %sR�RN(sinactivesactive(RDR�R)RR�R�tSET_CONTROL_RTS_ONtSET_CONTROL_RTS_OFF(RR�((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyRzjs			!cCsc|jst�n|jr<|jjddt|��n|rR|jt�n
|jt�dS(s.Set terminal status line: Data Terminal Ready.s
set DTR to %sR�RN(sinactivesactive(RDR�R)RR�R�tSET_CONTROL_DTR_ONtSET_CONTROL_DTR_OFF(RR�((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR{ts			!cCs&|jst�nt|j�t@�S(s)Read terminal status line: Clear To Send.(RDR�R�t
getModemStatetMODEMSTATE_MASK_CTS(R((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pytgetCTS~s		cCs&|jst�nt|j�t@�S(s*Read terminal status line: Data Set Ready.(RDR�R�R�tMODEMSTATE_MASK_DSR(R((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pytgetDSR�s		cCs&|jst�nt|j�t@�S(s*Read terminal status line: Ring Indicator.(RDR�R�R�tMODEMSTATE_MASK_RI(R((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pytgetRI�s		cCs&|jst�nt|j�t@�S(s*Read terminal status line: Carrier Detect.(RDR�R�R�tMODEMSTATE_MASK_CD(R((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pytgetCD�s		cCs"t}d}z�x�|jdk	r�y|jjd�}WnPtjk
rPqn:tjk
r�}|jr�|jjd|f�nPnX|s�PnxY|D]Q}|tkr�|t	kr�t
}q�|dk	r�|j|�q�|jj
|�q�|t
kr�|t	kr>|dk	r%|jt	�n|jj
t	�t}q�|tkr\t�}t}q�|tkr�|jt|��d}t}q�|ttttfkr�|}t}q�|j|�t}q�|tkr�|j||�t}q�q�WqWWdd|_|jr|jjd�nXdS(sread loop for the socket.is!socket error in reader thread: %sNsread thread terminated(tM_NORMALRRHtrecvRER/RR)RR�t
M_IAC_SEENR�RRtputtSBR�tSEt_telnetProcessSubnegotiationR�RYRZRWRXtM_NEGOTIATEt_telnetProcessCommandt_telnetNegotiateOptionRs(RtmodeR3R�R�tbytettelnet_command((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyRr�sZ	
						
			cCs'|jr#|jjd|f�ndS(s1Process commands other than DO, DONT, WILL, WONT.signoring Telnet command: %rN(R)R(RR ((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR��s	cCs�t}x6|jD]+}|j|kr|j|�t}qqW|s�|tks]|tkr�|j|tkrutpxt	|�|j
r�|j
jd|f�q�q�ndS(s&Process incoming DO, DONT, WILL, WONT.srejected Telnet option: %rN(RR]RR!RRWRYRRZRXR)R(RR Rtknowntitem((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR��s

"	cCs�|dd!tkr�|dd!tkrtt|�dkrtt|dd!�|_|jr�|jjd|j�q�q�|dd!tkr�t|�dkr�t|dd!�|_|jr�|jjd|j�nt	j	�d|_
q�|dd!tkrt|_
q�|dd!tkr&t|_
q�x�|jj�D]7}|j|dd!kr6|jt|d��Pq6q6W|jr�|jjd|f�q�n#|jr�|jjd	|f�nd
S(s;Process subnegotiation, the data between IAC SB and IAC SE.iiiisNOTIFY_LINESTATE: %ssNOTIFY_MODEMSTATE: %sg333333�?signoring COM_PORT_OPTION: %rsignoring subnegotiation: %rN(R[tSERVER_NOTIFY_LINESTATER2tordRmR)RtSERVER_NOTIFY_MODEMSTATERnR,RotFLOWCONTROL_SUSPENDRRptFLOWCONTROL_RESUMERRkR�R'R4R�R(RR3R�((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR��s,%	%			cCs6|jj�z|jj|�Wd|jj�XdS(sGinternal socket write with no data escaping. used to send telnet stuff.N(RUR�RHR�R�(RR�((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyt_internal_raw_writes
cCs |jtt||g��dS(sSend DO, DONT, WILL, WONT.N(R�tto_bytesR�(RtactionR((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyRstcCsI|jtt�}|jtttt|gt|�ttg��dS(s%Subnegotiation of RFC2217 parameters.N(	R�R�R�R�R�R�R[tlistR�(RRR&((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR(scCs.|jd}|j|�|j|j�dS(NR<(RkR*R1RB(RR&R�((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR�$s

cCsG|jd}|j|�|jr3tjd�n|j|j�dS(NR=g�������?(RkR*R@R,R-R1RB(RR&R�((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR�)s


	cCsdS(sOcheck if server is ready to receive data. block for some time when
        not.N((R((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pytrfc2217FlowServerReady4scCs�|jr�|jtj�kr�|jr:|jjd�n|jt�tj�|j}x[tj�|kr�tjd�|jtj�kr]|jr�|jj	d�nPq]q]Wn|j
dk	r�|jr�|jjd�n|j
Std��dS(s�get last modem state (cached value. if value is "old", request a new
        one. this cache helps that we don't issue to many requests when e.g. all
        status lines, one after the other is queried by te user (getCTS, getDSR
        etc.)spolling modem stateg�������?spoll for modem state failedsusing cached modem states!remote sends no NOTIFY_MODEMSTATEN(
RARoR,R)RR(tNOTIFY_MODEMSTATERBR-RRnRR.(RR0((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR�:s 	

		(i2iKini�i�i�i,iXi�ii`	i�i�%iKi�i�i�("R"R#R$t	BAUDRATESR�RxR�R�RJR�R�R�R|R}R�RR�RzR{R�R�R�R�RrR�R�R�R�RR(R�R�R�R�(((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR6_s@	\	,			%				

				
	B			 					tSerialcBseZRS((R"R#(((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR�bscBseZRS((R"R#(((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR�fstPortManagercBsqeZdZdd�Zd�Zd�Zdd�Zed�Z	d�Z
d�Zd	�Zd
�Z
d�ZRS(
s�This class manages the state of Telnet and RFC 2217. It needs a serial
    instance and a connection to work with. Connection is expected to implement
    a (thread safe) write function, that writes the string to the network.cCs�||_||_||_t|_t|_d|_d|_	d|_
d|_d|_t
|dtttttt�t
|dtttttt�t
|dtttttt�t
|dtttttt�t
|dtttttt�t
|dtttttt|j�	t
|d	tttttt|j�	g|_|jr]|jjd
�nx9|jD].}|jtkrg|j|j|j�qgqgWdS(Ni�iR7swe-SGAsthey-SGAs	we-BINARYsthey-BINARYs
we-RFC2217sthey-RFC2217s*requesting initial Telnet/RFC 2217 options(tserialR
R)Rt_client_is_rfc2217R�R�RR3R�tmodemstate_masktlast_modemstatet
linstate_maskRR7RWRXRYRZRR\R
RVR[t
_client_okR]RRRRR(Rtserial_portR
R)R((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyRrs,										$-	cCs9t|_|jr%|jjd�n|jdt�dS(s�callback of telnet option. it gets called when option is activated.
        this one here is used to detect when the client agrees on RFC 2217. a
        flag is set so that other functions like check_modem_lines know if the
        client is ok.sclient accepts RFC 2217tforce_notificationN(RR�R)Rtcheck_modem_lines(R((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR��s			cCs#|jjtt||g��dS(sSend DO, DONT, WILL, WONT.N(R
R�R�R�(RR�R((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR�sR�cCsL|jtt�}|jjtttt|gt|�tt	g��dS(s&Subnegotiation of RFC 2217 parameters.N(
R�R�R�R
R�R�R�R[R�R�(RRR&((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR(�sc
CsH|jj�ot|jj�o$tB|jj�o7tB|jj�oJtB}||j	p]dA}|t@rx|t
O}n|t@r�|tO}n|t@r�|tO}n|t@r�|t
O}n||j	ks�|rD|jr�||j@s�|r4|jtt||j@g��|jr4|jjd|f�q4n|d@|_	ndS(NisNOTIFY_MODEMSTATE: %si�(R�R�R�R�R�R�R�R�R�R�tMODEMSTATE_MASK_CTS_CHANGEtMODEMSTATE_MASK_DSR_CHANGEtMODEMSTATE_MASK_RI_CHANGEtMODEMSTATE_MASK_CD_CHANGER�R�R(R�R�R)R(RR�t
modemstatetdeltas((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR��s&8







	ccs3x,|D]$}|tkr&tVtVq|VqWdS(s�this generator function is for the user. all outgoing data has to be
        properly escaped, so that no IAC character in the data stream messes up
        the Telnet state machine in the server.

        socket.sendall(escape(data))
        N(R�(RR�R�((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pytescape�s

ccs�x||D]t}|jtkr^|tkr4t|_q{|jdk	rV|jj|�q{|Vq|jtkrM|tkr�|jdk	r�|jj|�n|Vt|_q{|tkr�t�|_t|_q{|t	kr|j
t|j��d|_t|_q{|tt
ttfkr4||_t|_q{|j|�t|_q|jtkr|j|j|�t|_qqWdS(s�handle a bunch of incoming bytes. this is a generator. it will yield
        all characters not of interest for Telnet/RFC 2217.

        The idea is that the reader thread pushes data from the socket through
        this filter:

        for byte in filter(socket.recv(1024)):
            # do things like CR/LF conversion/whatever
            # and write data to the serial port
            serial.write(byte)

        (socket error handling code left as exercise for the reader)
        N(R�R�R�R�R3RR�R�R�R�R�R�RYRZRWRXR�R�R�R�(RR�R�((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pytfilter�s8
		
cCs'|jr#|jjd|f�ndS(s1Process commands other than DO, DONT, WILL, WONT.signoring Telnet command: %rN(R)R(RR ((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR�s	cCs�t}x6|jD]+}|j|kr|j|�t}qqW|s�|tks]|tkr�|j|tkrutpxt	|�|j
r�|j
jd|f�q�q�ndS(s&Process incoming DO, DONT, WILL, WONT.srejected Telnet option: %rN(RR]RR!RRWRYRRZRXR)R(RR RR�R�((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR�%s

"	cCs�
|dd!tkr�
|jr6|jjd|f�n|dd!tkr|jj}y&tjd|dd!�\|j_WnBtk
r�}|jr�|jj	d|f�n||j_n*X|jr�|jj
d|jjf�n|jttj
d|jj��q�
|dd!tkr�|jj}y&tjd	|dd
!�\|j_WnBtk
r�}|jr�|jj	d|f�n||j_n*X|jr�|jj
d|jjf�n|jttj
d	|jj��q�
|dd!tkr�|jj}y+ttjd	|dd
!�d|j_WnBtk
rt}|jre|jj	d
|f�n||j_n*X|jr�|jj
d|jjf�n|jttj
d	t|jj��q�
|dd!tkr�|jj}y+ttjd	|dd
!�d|j_WnBtk
rU}|jrF|jj	d|f�n||j_n*X|jr|jj
d|jjf�n|jttj
d	t|jj��q�
|dd!tkr�|dd
!tkr|jjr�|jtt�q�|jj r|jtt!�q�|jtt"�q�
|dd
!t"kryt#|j_t#|j_ |jrf|jj
d�n|jtt"�q�
|dd
!tkr�t$|j_|jr�|jj
d�n|jtt�q�
|dd
!t!krt$|j_ |jr|jj
d�n|jtt!�q�
|dd
!t%krG|jr�|jj&d�q�q�
|dd
!t'kr�|jj(t$�|jr�|jj
d�n|jtt'�q�
|dd
!t)kr�|jj(t#�|jr�|jj
d�n|jtt)�q�
|dd
!t*kr|jr�|jj&d�q�q�
|dd
!t+kro|jj,t$�|jr\|jj
d�n|jtt+�q�
|dd
!t-kr�|jj,t#�|jr�|jj
d�n|jtt-�q�
|dd
!t.kr�|jr�|jj&d�q�q�
|dd
!t/krE|jj0t$�|jr2|jj
d�n|jtt/�q�
|dd
!t1kr�
|jj0t#�|jr�|jj
d�n|jtt1�q�
q�
|dd!t2kr�|jt3t4dg��q�
|dd!t5kr|jr�|jj
d�n|j6dt$�q�
|dd!t7krF|jr:|jj
d�nt$|_8q�
|dd!t9kr�|jru|jj
d �nt#|_8q�
|dd!t:kr�t;|dd
!�|_<|jr�
|jj
d!|j<f�q�
q�
|dd!t=kr%	t;|dd
!�|_>|jr�
|jj
d"|j>f�q�
q�
|dd!t?kr_
|dd
!t@kr�	|jjA�|jrt	|jj
d#�n|jtBt@�q�
|dd
!tCkr�	|jjD�|jr�	|jj
d$�n|jtBtC�q�
|dd
!tEkr2
|jjA�|jjD�|jr
|jj
d%�n|jtBtE�q�
|jr�
|jj	d&tF|d��q�
q�
|jr�
|jj	d'tF|d��q�
n#|jr�
|jj&d(|f�nd)S(*s;Process subnegotiation, the data between IAC SB and IAC SE.iisreceived COM_PORT_OPTION: %ris!Iisfailed to set baud rate: %sschanged baud rate: %ss!Bisfailed to set data size: %sschanged data size: %ssfailed to set parity: %sschanged parity: %ssfailed to set stop bits: %sschanged stop bits: %sschanged flow control to Nones changed flow control to XON/XOFFschanged flow control to RTS/CTSs'requested break state - not implementedschanged BREAK to activeschanged BREAK to inactives%requested DTR state - not implementedschanged DTR to activeschanged DTR to inactives%requested RTS state - not implementedschanged RTS to activeschanged RTS to inactivesrequest for modem stateR�tsuspendtresumesline state mask: 0x%02xsmodem state mask: 0x%02xspurge ins	purge outs
purge bothsundefined PURGE_DATA: %rsundefined COM_PORT_OPTION: %rsunknown subnegotiation: %rN(GR[R)RR^R�R8R�tunpackRRRR(R_R�R`tbytesizeRaRbR:tRFC2217_REVERSE_PARITY_MAPRcR�RdtstopbitstRFC2217_REVERSE_STOPBIT_MAPReR�RitSET_CONTROL_REQ_FLOW_SETTINGtxonxoffRjR�trtsctsR�R�RRtSET_CONTROL_REQ_BREAK_STATERR�R�R�tSET_CONTROL_REQ_DTRR�R{R�tSET_CONTROL_REQ_RTSR�RzR�tNOTIFY_LINESTATER�R�R�R�R�RpR�tSET_LINESTATE_MASKR�R�tSET_MODEMSTATE_MASKR�RgR�R|RhR�R}tPURGE_BOTH_BUFFERSR�(RR3tbackupR�((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR�9sF	&		 %&		 %+		  +		  																 	 
	
	

		$	$	N(R"R#R$RRR�RR(RR�RRR�R�R�(((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyR�ms#		"		:		t__main__srfc2217://localhost:7000i�s%s
s	write...
shello
s	read: %s
(�tserial.serialutilR,R�RERSRQR�tDEBUGtINFOtWARNINGtERRORR�R�R�RZRYRXRWR�R�tNOPtDMtBRKtIPtAOtAYTtECtELtGAR�RVR7R\R[R^R`RbRdRiRR�R�R�RRRgR_RaRcReRjR�R�tSERVER_FLOWCONTROL_SUSPENDtSERVER_FLOWCONTROL_RESUMEtSERVER_SET_LINESTATE_MASKtSERVER_SET_MODEMSTATE_MASKRhtRFC2217_ANSWER_MAPRR�R�R�RR�R�RR�R�RR�R�tSET_CONTROL_REQ_FLOW_SETTING_INt"SET_CONTROL_USE_NO_FLOW_CONTROL_INt!SET_CONTROL_USE_SW_FLOW_CONTOL_INt!SET_CONTROL_USE_HW_FLOW_CONTOL_INt SET_CONTROL_USE_DCD_FLOW_CONTROLt SET_CONTROL_USE_DTR_FLOW_CONTROLt SET_CONTROL_USE_DSR_FLOW_CONTROLtLINESTATE_MASK_TIMEOUTtLINESTATE_MASK_SHIFTREG_EMPTYtLINESTATE_MASK_TRANSREG_EMPTYtLINESTATE_MASK_BREAK_DETECTtLINESTATE_MASK_FRAMING_ERRORtLINESTATE_MASK_PARTIY_ERRORtLINESTATE_MASK_OVERRUN_ERRORtLINESTATE_MASK_DATA_READYR�R�R�R�RRRR�R�R�RtPARITY_NONEt
PARITY_ODDtPARITY_EVENtPARITY_MARKtPARITY_SPACER�tdictR�RtSTOPBITS_ONEtSTOPBITS_ONE_POINT_FIVEtSTOPBITS_TWOR�R
R�R�R�RR	R
RtobjectRR%t
SerialBaseR6tiotImportErrortFileLikeR�t	RawIOBaseR�R"tsystststdoutR�tflushR�R�(((s2/usr/lib/python2.7/site-packages/serial/rfc2217.pyt<module>>s(







B<��
��