dhg4ddlmZddlZddlZddlZddlZddlZ ddlZn#e$r ddl m ZYnwxYw ddl Z n#e$rddl Z YnwxYwddl Z ddlmZmZmZmZmZmZejejejejdZdZdZdZdZd Zd Zd Z d Z!d Z"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6d Z7d!Z8d"Z9d#Z:d$Z;d%Zd(Z?d)Z@d*ZAd+ZBd,ZCd-ZDd.ZEd/ZFe/e;e0ee3e?e4e@e5eAe6eBe7eCe8eDe9eEe:eFi ZGdZHdZIdZJdZKdZLdZMdZNdZOdZPd ZQd!ZRd"ZSd#ZTd0ZUd1ZVd2ZWd3ZXd4ZYd5ZZd6Z[d7Z\d8Z]d9Z^d:Z_d;Z`dZcd7Zdd8Zed9Zfd:Zgd;ZhdZkdZldZmdZne jod>e jpd=e jqd?e jrde jyd?e jzd=iZ{eudBe{vDZ|dZ}d>Z~d=ZdCZdDZdEZdFZGdGdHeZGdIdJeZGdKdLeZGdMdNeZedOkrddlZedPdQZejdReejdSedTeejdUed@edSdS)V)absolute_importN) SerialBaseSerialExceptionto_bytes iterbytesPortNotOpenErrorTimeout)debuginfowarningerrors,    efghijklmnop @ c#$K|] \}}||fV dSN.0kvs ^/home/jenkins/workspace/simtester-sanitize/venv/lib/python3.11/site-packages/serial/rfc2217.py rQs*!P!PTQ1a&!P!P!P!P!P!Pc#$K|] \}}||fV dSrJrKrLs rPrQrQs*"R"RdaAq6"R"R"R"R"R"RrR REQUESTEDACTIVEINACTIVEREALLY_INACTIVEc(eZdZdZ ddZdZdZdS) TelnetOptionz@Manage a single telnet option, keeps track of DO/DONT WILL/WONT.Nc ||_||_||_||_||_||_||_||_d|_| |_ dS)a; Initialize 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. FN) connectionnameoptionsend_yessend_noack_yesack_nostateactiveactivation_callback) selfr[r\r]r^r_r`ra initial_staterds rP__init__zTelnetOption.__init__sQ%       "  #6   rRc.d|S)zString for debug outputsz{o.name}:{o.active}({o.state}))oformatres rP__repr__zTelnetOption.__repr__s/666>>>rRc||jkr |jtur2t|_d|_|j|dSdS|jturdS|jt urWt|_|j|j |j d|_|j|dSdS|jtur'|j|j |j dStd|||jkr|jturt |_d|_dS|jtur:t |_|j|j |j d|_dS|jt urdS|jturdStd|dS)zo A DO/DONT/WILL/WONT was received for this option, update state and answer when needed. TNzoption in illegal state {!r}F)r`rbrTrUrcrdrVr[telnet_send_optionr^r]rWr_ ValueErrorrkrarecommands rPprocess_incomingzTelnetOption.process_incoming s dl " "zY&&# " +7,,.....87v%%x''# 224=$+NNN" +7,,.....87..224<MMMMM !?!F!Ft!L!LMMM  # #zY&&% # v%%% 224<MMM# x''.. !?!F!Ft!L!LMMM$ #rRrJ)__name__ __module__ __qualname____doc__rgrmrsrKrRrPrYrYsWJJ=A77770???$N$N$N$N$NrRrYcPeZdZdZd dZdZdZdZeeZ d dZ d Z dS) TelnetSubnegotiationz 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. Ncl||}||_||_||_d|_||_t |_dSrJ)r[r\r]value ack_optionrVrb)rer[r\r]r|s rPrgzTelnetSubnegotiation.__init__9s;  J$   $ rRc.d|S)zString for debug outputs.z{sn.name}:{sn.state})snrjrls rPrmzTelnetSubnegotiation.__repr__Cs%,,,555rRc ||_t|_|j|j|j|jjr?|jjd|j |jdSdS)z 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. zSB Requesting {} -> {!r}N) r{rTrbr[rfc2217_send_subnegotiationr]loggerr rkr\)rer{s rPsetzTelnetSubnegotiation.setGs~    33DKLLL ? ! c O " ( ()C)J)J49VZV`)a)a b b b b b c crRc|jtkr'td|j|jt kS)z{ Check if answer from server has been received. when server rejects the change, raise a ValueError. z%remote rejected value for option {!r})rbrWrprkr\rUrls rPis_readyzTelnetSubnegotiation.is_readySs= : ( (DKKDIVVWW WzV##rRrGct|}|s>tjd|rdS|>t d|j)z 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. 皙?z%timeout while waiting for option {!r}N)r expiredtimesleeprrrkr\)retimeout timeout_timers rPwaitzTelnetSubnegotiation.wait^s  (( '')) ] Jt   }}  '')) ] ""I"P"PQUQZ"["[\\ \rRc|j|dt|jkr t|_n t|_|jjr@|jjd|j ||jdSdS)z Check an incoming subnegotiation block. The parameter already has cut off the header like sub option number and com port option value. NzSB Answer {} -> {!r} -> {}) r{lenrUrbrWr[rr rkr\)re suboptions rP check_answerz!TelnetSubnegotiation.check_answerls :#3C OO#34 4 4DJJ)DJ ? ! p O " ( ()E)L)LTYXacgcm)n)n o o o o o p prRrJ)rG) rtrurvrwrgrmrrpropertyrcrrrKrRrPryry3s 666 c c c$$$Xh  F ] ] ] ] p p p p prRryceZdZdZdZfdZdZdZdZdZ e dZ d!d Z d Z d Zd ZdZdZdZe dZe dZe dZe dZdZdZdZdZdZdZd"dZdZdZdZ d Z!xZ"S)#Serialzt4t6t0t2t<t-|d t@t0t2t4t6t<t-|dt@t4t6t0t2t<t-|dt.t4t6t0t2t8t-|dt:t4t6t0t2t<g|z|_!tE|dtFtHtE|dtJtLtE|dtNtPtE|dtRtTd|_+tE|dtXtZtE|dt\t^d|_0|j01|j+d|_2d|_3tid|_5d|_6d|_t'j7|j8|_9|j9:d|j9;d|j|j9< |j!D]0}|j=t<ur |>|j?|j@1ti|j}|As]tjCdtd|Dtd |Dkrn6|A]t d!||jr2|jEd"|j!|F|jGs|H|jIs|J|K|LdS#|MxYw)#zx Open port with current settings. This may throw a SerialException if the port cannot be opened. NFrGz.Port must be configured before it can be used.zPort is already open.rH)rrFzCould not open port {}: {} we-BINARY we-RFC2217ECHOwe-SGAthey-SGA they-BINARY they-RFC2217baudratedatasizeparitystopsize)rrrrpurgecontrol)rrrrT)targetz&pySerial RFC 2217 reader thread for {}rc3$K|] }|jV dSrJrcrMris rPrQzSerial.open..s$;;Aqx;;;;;;rRc36K|]}|jtkVdSrJ)rbrVrs rPrQzSerial.open..s*BrBr[\17hCVBrBrBrBrBrBrrRz;Remote does not seem to support RFC2217 or BINARY mode {!r}zNegotiated options: {})Nrrrr_portris_opensocketcreate_connectionfrom_urlportstrr setsockopt IPPROTO_TCP TCP_NODELAY ExceptionrkQueuer threadingLockrrYBINARYWILLWONTDODONTrVCOM_PORT_OPTIONrTrSGArry SET_BAUDRATESERVER_SET_BAUDRATE SET_DATASIZESERVER_SET_DATASIZE SET_PARITYSERVER_SET_PARITY SET_STOPSIZESERVER_SET_STOPSIZEr PURGE_DATASERVER_PURGE_DATA SET_CONTROLSERVER_SET_CONTROLrupdaterrr rrThread_telnet_read_loopr setDaemonsetNamestartrbror^r]rrrsumr _reconfigure_port_dsrdtr_update_dtr_state_rtscts_update_rts_statereset_input_bufferreset_output_bufferclose)remsgmandadory_optionsr]rs rPopenz Serial.opens  */'!& ! : !"RSS S < ;!"9:: : Z!3DMM$,4O4OYZ[[L L # #F$68JA N N N N Z Z ZDL!">"E"EdlTW"X"XYY Y Z "KMM%>++ {FD$D( S S |_dD"dT] ^ ^  vtRtT9 M M xdD"dI N N z3D$i P P }fb$dH U U ~D$PTV_ ` `    -T:|M`aa,T:|M`aa,T8zM^__,T:|M`aa ' ' #-T7zM^__,T9{M_``! !  $$T%@AAA#*2;; $)!  't/EFFF  t$$$ ELLTZXXYYY  . L L<9,,++FOV]KKKd344Goo'' m 4   ;;):;;;;;sBrBr`qBrBrBr?r?rrroo'' m &QXXYjkkmmm{ X   !9!@!@AU!V!VWWW  " " $ $ $< )&&(((< )&&(((  # # % % %  $ $ & & & & &  JJLLL s& A#B.. C,8/C''C,F V""V9c|jtd|jtdd|jcxkrdks)nt d|j|jdtj d|j|jd tj d |j |jd tj d t|j |jd tj d t|j|j}|jr-|jd |t'|j}|sSt-jdt1d|Dt3|krn6|Std||jr-|jd||jr|jrt d|jr|t<dS|jr|t>dS|t@dS)z,Set communication parameters on opened port.NzCan only operate on open portsz(write_timeout is currently not supportedrlzinvalid baudrate: {!r}r!Ir!BrrzNegotiating settings: {}rc3$K|] }|jV dSrJrrs rPrQz+Serial._reconfigure_port..s$++18++++++rRz7Remote does not accept parameter change (RFC2217): {!r}zNegotiated settings: {}z-xonxoff and rtscts together are not supported)!rr_write_timeoutNotImplementedError _baudraterprkrrstructpack _bytesizeRFC2217_PARITY_MAP_parityRFC2217_STOPBIT_MAP _stopbitsvaluesrr r rrrrrrr r_xonxoffrfc2217_set_controlSET_CONTROL_USE_HW_FLOW_CONTROLSET_CONTROL_USE_SW_FLOW_CONTROLSET_CONTROL_USE_NO_FLOW_CONTROL)reitemsrs rPrzSerial._reconfigure_ports < !"BCC C   *%&PQQ Q 4>++++G++++5<:[?option[&option...]]": not starting with rfc2217:// ({!r})TloggingzpySerial.rfc2217rzenabled loggingign_set_control poll_modemrzunknown option: {!r}izport not in range 0...65535zPexpected a string in the form "rfc2217://:[?option[&option...]]": {}N)urlparseurlsplitschemerrkparse_qsqueryrr basicConfig getLoggerrsetLevel LOGGER_LEVELSr rrfloatrrpporthostname)reurlpartsr]res rPrzSerial.from_url0s !#&& <9 $ $!66???+ P P P!EEKVAYYPP P P ++sD+E44 F%>"F  F%c^|jst|jS)z9Return the number of bytes currently in the input buffer.)rrrqsizerls rP in_waitingzSerial.in_waitingUs/| %"$$ $ &&(((rRrFc|jstt} t|j}t ||kr|j|jstd|j d| }|t|S||z }| rnt ||kn#tj$rYnwxYwt|S)z 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. Nz&connection failed (reader thread died)T)rr bytearrayr _timeoutrris_aliverrget time_leftbytesrrEmpty)resizedatarbufs rPreadz Serial.read\s  | %"$$ ${{ dm,,Gd))d""<'t|/D/D/F/F')*RSSS'++D'2C2C2E2EFF; ;;& ??$$d))d""{    D T{{sBC'9-C''C98C9c|jst|j5 |jt |ttn9#tj $r'}td |d}~wwxYw dddn #1swxYwYt|S)z Output the given byte string over the serial port. Can block if the connection is blocked. May raise SerialException if the connection is closed. z$connection failed (socket error): {}N)rrrrsendallrreplaceIAC IAC_DOUBLEDrr rrkr)rer/r"s rPwritez Serial.writets | %"$$ $   X X X $$Xd^^%;%;C%M%MNNNN< X X X%&L&S&STU&V&VWWW XO X X X X X X X X X X X X X X X 4yys5B+AA%$B+%B4"BBB++B/2B/c|jst|t|jr5|jd|j3dSdS)z9Clear input buffer, discarding all that is in the buffer.FN)rrrfc2217_send_purgePURGE_RECEIVE_BUFFERrr$r*rls rPrzSerial.reset_input_buffers| %"$$ $  4555%%'' )   ! !% ( ( (%%'' ) ) ) ) )rRcd|jst|tdS)zs Clear output buffer, aborting the current output and discarding all that is in the buffer. N)rrr9PURGE_TRANSMIT_BUFFERrls rPrzSerial.reset_output_buffers5 | %"$$ $  566666rRc$|jst|jr6|jd|jrdnd|jr|tdS|tdS)z[ Set break: Controls TXD. When active, to transmitting is possible. zset BREAK to {}rcinactiveN) rrrr rk _break_staterSET_CONTROL_BREAK_ONSET_CONTROL_BREAK_OFFrls rP_update_break_statezSerial._update_break_states | %"$$ $ ; f K  .55$BS6chhYcdd e e e   <  $ $%9 : : : : :  $ $%: ; ; ; ; ;rRc$|jst|jr6|jd|jrdnd|jr|tdS|tdS)z*Set terminal status line: Request To Send.z set RTS to {}rcr>N) rrrr rk _rts_staterSET_CONTROL_RTS_ONSET_CONTROL_RTS_OFFrls rPrzSerial._update_rts_state| %"$$ $ ; b K  _334_HHU_`` a a a ? :  $ $%7 8 8 8 8 8  $ $%8 9 9 9 9 9rRc$|jst|jr6|jd|jrdnd|jr|tdS|tdS)z.Set terminal status line: Data Terminal Ready.z set DTR to {}rcr>N) rrrr rk _dtr_staterSET_CONTROL_DTR_ONSET_CONTROL_DTR_OFFrls rPrzSerial._update_dtr_staterGrRc~|jstt|tzS)z)Read terminal status line: Clear To Send.)rrboolget_modem_stateMODEMSTATE_MASK_CTSrls rPctsz Serial.cts:| %"$$ $D((**-@@AAArRc~|jstt|tzS)z*Read terminal status line: Data Set Ready.)rrrMrNMODEMSTATE_MASK_DSRrls rPdsrz Serial.dsrrQrRc~|jstt|tzS)z*Read terminal status line: Ring Indicator.)rrrMrNMODEMSTATE_MASK_RIrls rPriz Serial.ri:| %"$$ $D((**-??@@@rRc~|jstt|tzS)z*Read terminal status line: Carrier Detect.)rrrMrNMODEMSTATE_MASK_CDrls rPcdz Serial.cdrXrRct}d} |jr! |jd}n{#tj$rY5tj$rY}|jr-|jd ||j dYd}~nd}~wwxYw|s|j dnlt|D]S}|tkr6|tkrt}!|||z })|j |D|tkr|tkr4| |tz }n|j tt}|tkrt!}t}|t"kr,|t'|d}t}|t(t*t,t.fvr |}t0} ||t}+|t0kr|||t}U|j!|jr|jddSdS#|jr|jdwwxYw)zRead loop for the socket.Niz!socket error in reader thread: {}zread thread terminated)M_NORMALrrrecvrrr rr rkrputrr5 M_IAC_SEENSBr'SE_telnet_process_subnegotiationr,rrrr M_NEGOTIATE_telnet_process_command_telnet_negotiate_option)remoderr/r"bytetelnet_commands rPrzSerial._telnet_read_loops < <,8 ( <,,T22DD~H|{Y ))*M*T*TUV*W*WXXX%))$///EEEE  %))$///%dOO((((Dx''3;;#-DD )4 )T 1 $ 1 5 5d ; ; ; ;++3;; )4 )S 0 $ 1 5 5c : : :#+DD!RZZ(1 I#+DD!RZZ ??i@P@PQQQ(,I#+DD!b$d%;;;-1N#.DD!88>>>#+DD,,55ndKKK'q,8 (t{ < !!":;;;;; < I/IB'IB'AB"I"B''F I$I=cr|jr/|jd|dSdSz1Process commands other than DO, DONT, WILL, WONT.zignoring Telnet command: {!r}Nrr rkrqs rPrezSerial._telnet_process_commandF ; Q K   ? F Fw O O P P P P P Q QrRc`d}|jD]$}|j|kr||d}%|sy|tks |tkre||tkrt nt||jr3|j d |dSdSdSdSz&Process incoming DO, DONT, WILL, WONT.FTzrejected Telnet option: {!r}N rr]rsrrrorrrr rkrerrr]knownitems rPrfzSerial._telnet_negotiate_option$(  D{f$$%%g... W$'R--''DdVTTT;WK''(F(M(Mf(U(UVVVVV  W W#0-WWrRc^|ddtkr|ddtkrlt|dkrYt|dd|_|jr4|jd|jd Sd S|ddtkrt|dkrqt|dd|_ |jr2|jd|j |j dd S|ddtkr d|_ d S|ddtkr d |_ d S|jD]B}|j|ddkr-|t'|dd d SC|jr/|jd |d Sd S|jr/|jd |d Sd S) ;Process subnegotiation, the data between IAC SB and IAC SE.rrFrErGzNOTIFY_LINESTATE: {}NOTIFY_MODEMSTATE: {}r TFNzignoring COM_PORT_OPTION: {!r}zignoring subnegotiation: {!r})rSERVER_NOTIFY_LINESTATErordrrr rkSERVER_NOTIFY_MODEMSTATErrrestartFLOWCONTROL_SUSPENDrFLOWCONTROL_RESUMErrr|rr,r )rerrss rPrcz%Serial._telnet_process_subnegotiation7sS QqS>_ , ,1~!888S^^q=P=P"%i!n"5"5;UK$$%;%B%B4?%S%STTTTTUU1Q3#;;;IRS@S@S#&y1~#6#6 ;WK$$%<%C%CDDT%U%UVVV(00555551Q3#666,0)))1Q3#555,1))) 188::``D)AaC.88))% !"" *>*>???9 {` ++,L,S,ST],^,^_____``{ W ##$C$J$J9$U$UVVVVV W WrRcz|j5|j|ddddS#1swxYwYdS)zGinternal socket write with no data escaping. used to send telnet stuff.N)rrr3)rer/s rP_internal_raw_writezSerial._internal_raw_writeWs   ' ' L  & & & ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's 044cF|t|z|zdSzSend DO, DONT, WILL, WONT.N)rr5reactionr]s rProzSerial.telnet_send_option\s%   v!677777rRrRc|tt}|ttzt z|z|ztzt zdS)z%Subnegotiation of RFC2217 parameters.N)r4r5r6rrarrbrer]r{s rPrz"Serial.rfc2217_send_subnegotiation`sM c;//   rO!;f!Du!Ls!RUW!WXXXXXrRc~|jd}||||jdS)z~ Send purge request to the remote. (PURGE_RECEIVE_BUFFER / PURGE_TRANSMIT_BUFFER / PURGE_BOTH_BUFFERS) rN)rrrrrer{rss rPr9zSerial.rfc2217_send_purgees; $W-  $'(((((rRc|jd}|||jrtjddS||jdS)z)transmit change of control line to remoterg?N)rrrrrrrrs rPrzSerial.rfc2217_set_controlnsW$Y/   * - JsOOOOO IId+ , , , , ,rRcdS)z` check if server is ready to receive data. block for some time when not. NrKrls rPrfc2217_flow_server_readyz Serial.rfc2217_flow_server_readyzsrRcJ|jr|jr|jr|jd|t t|j}|sBtj d|jsn5|B|jr|j d|j (|jr|jd|j Std)z 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 the user (CTS, DSR etc.) zpolling modem staterzpoll for modem state failedNzusing cached modem statez!remote sends no NOTIFY_MODEMSTATE)rrrrr rNOTIFY_MODEMSTATEr rrrr rr)rers rPrNzSerial.get_modem_states+  ! Gd&>&F&F&H&H G{ 9 !!"7888  , ,-> ? ? ?d344Goo'' G 4   /7799 oo'' G;GK''(EFFF   '{ > !!"<===# #""EFF FrR)rFrR)#rtrurvrw BAUDRATESrgrrrrrr%r1r7rrrBrrrPrTrWr[rrerfrcrrorr9rrrN __classcell__)rs@rPrrzsNFF4I66666$___B*F*F*FX"!,!,!,J))X) 0   )))777 < < < : : : : : :BBXB BBXB AAXA AAXA@<@<@||_||_||_d|_t|_d|_d|_d|_d|_ d|_ t|dttttt t"t|dt$tttt t"t|dt$tt ttt&t|dt(tttt t&t|dt(tt ttt"t|d t*tttt t"|j t|d t*tt ttt&|j g|_|jr|jd |jD]0}|jt"ur ||j|j1dS) NFrrrrrrrrz*requesting initial Telnet/RFC 2217 options)serialr[r_client_is_rfc2217r]rgrrimodemstate_masklast_modemstate linstate_maskrYrrrrrrTrrVrr _client_okrr rbror^r])re serial_portr[rr]s rPrgzPortManager.__init__s! $ "' " ## vtT4T9 M M xdD"dI N N z3D$h O O {FD$D( S S }fb$dI V V |_dD"dT]_c_n o o ~D$PTV^`d`o p p  ; L K  J K K K* H HF|y((''GGG H HrRcd|_|jr|jd|ddS)a 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. Tzclient accepts RFC 2217force_notificationN)rrr check_modem_linesrls rPrzPortManager._client_oksL#' ; 8 K  6 7 7 7 $77777rRcP|jt|z|zdSr)r[r7r5rs rProzPortManager.telnet_send_options' cFlV344444rRrRc|tt}|jtt zt z|z|ztztzdS)z&Subnegotiation of RFC 2217 parameters.N)r4r5r6r[r7rarrbrs rPrz'PortManager.rfc2217_send_subnegotiationsO c;// cBh86AEICORTTUUUUUrRFc~|jjot|jjotz|jjot z|jjotz}||j pdz }|tzr |tz}|tzr |tz}|t zr |tz}|tzr |tz}||j ks|r|jr ||jzs|re|t"t%||jzg|jr-|jd||dz|_ dSdS)z read control lines from serial port and compare the last value sent to remote. send updates on changes. rrwN)rrPrOrTrSrWrVr[rZrMODEMSTATE_MASK_CTS_CHANGEMODEMSTATE_MASK_DSR_CHANGEMODEMSTATE_MASK_RI_CHANGEMODEMSTATE_MASK_CD_CHANGErrrrzrrr rk)rer modemstatedeltass rPrzPortManager.check_modem_liness [_ 4!4 [_ 4!4 6 [^ 2 2 4[^ 2 2 4  t38q9 ' ' 5 4 4J ' ' 5 4 4J & & 4 3 3J & & 4 3 3J - - -1C -' QZ$:N-N QTf Q00,j4+??@AACCC;QK$$%<%C%CJ%O%OPPP$.#4D  . -rRc#rKt|D]$}|tkrtVtV |V%dS)z 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)rr5rer/rhs rPescapezPortManager.escapesOdOO  Ds{{     rRc#<Kt|D]}|jtkr5|tkr t|_+|j|xj|z c_C|VH|jtkr|tkr)|j|xj|z c_n|Vt|_|t kr t|_t|_|tkr;| t|jd|_t|_|ttttfvr||_t |_.||t|_Q|jt kr'||j|t|_dS)a 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)rrgr]r5r`rrar'rbrcr,rrrrrirdrerfrs rPfilterzPortManager.filter(sxdOO( %( %DyH$$3;; *DII~1$." j((3;;~1$." (DIIRZZ%.[[DN (DIIRZZ77dn8M8MNNN%)DN (DIIb$d333*.D' +DII00666 (DIIk))--d.A4HHH$ Q( %( %rRcr|jr/|jd|dSdSrkrlrqs rPrez#PortManager._telnet_process_commandcrmrRc`d}|jD]$}|j|kr||d}%|sy|tks |tkre||tkrt nt||jr3|j d |dSdSdSdSrorprqs rPrfz$PortManager._telnet_negotiate_optionirtrRc |ddtk r|jr-|jd||ddtkr|jj} tjd|dd\}|dkr ||j_|jr<|j d|rdnd |jjnW#t$rJ}|jr-|j d |||j_Yd }~nd }~wwxYw| ttjd|jjd S|ddtkr|jj} tjd |dd \}|dkr ||j_|jr<|j d|rdnd |jjnW#t$rJ}|jr-|j d|||j_Yd }~nd }~wwxYw| t"tjd |jjd S|ddt$kr-|jj} tjd |dd d}|dkrt(||j_|jr<|j d|rdnd |jjnW#t$rJ}|jr-|j d|||j_Yd }~nd }~wwxYw| t*tjd t,|jjd S|ddt.kr-|jj} tjd |dd d}|dkrt2||j_|jr<|j d|rdnd |jjnW#t$rJ}|jr-|j d|||j_Yd }~nd }~wwxYw| t4tjd t6|jjd S|ddt8kr|dd t:kr~|jjr"| t>t@d S|jj!r"| t>tDd S| t>tFd S|dd tFkr[d|j_d|j_!|jr|j d| t>tFd S|dd t@krOd|j_|jr|j d| t>t@d S|dd tDkrOd|j_!|jr|j d| t>tDd S|dd tHkr#|jr|j%dd S|dd tLkrOd|j_'|jr|j d| t>tLd S|dd tPkrOd|j_'|jr|j d| t>tPd S|dd tRkr#|jr|j%dd S|dd tTkrOd|j_+|jr|j d| t>tTd S|dd tXkrOd|j_+|jr|j d| t>tXd S|dd tZkr#|jr|j%dd S|dd t\krOd|j_/|jr|j d | t>t\d S|dd t`krOd|j_/|jr|j d!| t>t`d Sd S|ddtbkr+| tdtgdgd S|ddthkr9|jr|j d"|5d#d S|ddtlkr*|jr|j d$d|_7d S|ddtpkr*|jr|j d%d|_7d S|ddtrkrYtu|dd |_;|jr4|j d&|j;d Sd S|ddtxkrYtu|dd |_=|jr4|j d'|j=d Sd S|ddt|kr|dd t~kr\|j@|jr|j d(| tt~d S|dd tkr\|jC|jr|j d)| ttd S|dd tkru|j@|jC|jr|j d*| ttd S|jrD|j d+t|dd d Sd S|jrD|j d,t|dd d Sd S|jr/|j%d-|d Sd S).rvrrFzreceived COM_PORT_OPTION: {!r}rErz{} baud rate: {}rr*zfailed to set baud rate: {}NrrGz{} data size: {}zfailed to set data size: {}z {} parity: {}zfailed to set parity: {}z{} stop bits: {}zfailed to set stop bits: {}Fzchanged flow control to NoneTz changed flow control to XON/XOFFzchanged flow control to RTS/CTSz'requested break state - not implementedzchanged BREAK to activezchanged BREAK to inactivez%requested DTR state - not implementedzchanged DTR to activezchanged DTR to inactivez%requested RTS state - not implementedzchanged RTS to activezchanged RTS to inactivezrequest for modem statersuspendresumezline state mask: 0x{:02x}zmodem state mask: 0x{:02x}zpurge inz purge outz purge bothzundefined PURGE_DATA: {!r}zundefined COM_PORT_OPTION: {!r}zunknown subnegotiation: {!r})Frrr rkrrrrunpackr rpr rrrrbytesizerrrRFC2217_REVERSE_PARITY_MAPrrrstopbitsRFC2217_REVERSE_STOPBIT_MAPrrrSET_CONTROL_REQ_FLOW_SETTINGxonxoffrrrtsctsrrSET_CONTROL_REQ_BREAK_STATEr r@break_conditionrASET_CONTROL_REQ_DTRrJdtrrKSET_CONTROL_REQ_RTSrErtsrFNOTIFY_LINESTATErxrrrr|rr}SET_LINESTATE_MASKryrSET_MODEMSTATE_MASKrrr:rrr<rPURGE_BOTH_BUFFERSlist)rerbackuprr"rrrs rPrcz*PortManager._telnet_process_subnegotiation|sF QqS>_ , ,{ V !!"B"I"I)"T"TUUU1~--- x"(-y1~"F"FKX1}}/7 , {x (();)B)BHC_55Z_aealau)v)vwww "222{S ))*G*N*Nq*Q*QRRR+1DK((((((2001DfkRWY]YdYmFnFnooooo1Q3<//- x"(-y1~"F"FKX1}}/7 , {x (();)B)BHC_55Z_aealau)v)vwww "222{S ))*G*N*Nq*Q*QRRR+1DK((((((2001DfkRWY]YdYmFnFnooooo1Q3:--+ q#]5)AaC.AA!DF{{-G-O * {q (()?)?@ZUZ\`\g\n)o)oppp "000{P ))*D*K*KA*N*NOOO)/DK&&&&&&000%K'9$+:L'MNNPPPPP1Q3<//- x%}UIacNCCAFH1}}/J8/T , {x (();)B)BHC_55Z_aealau)v)vwww "222{S ))*G*N*Nq*Q*QRRR+1DK((((((200'K':4;;O'PQQSSSSS1Q3;..QqS>%AAA{*n889KMlmmmmm+n889KMlmmmmm889KMlmmmmmqs^'FFF*/DK').DK&{I (()GHHH445GIhiiiiiqs^'FFF*.DK'{M (()KLLL445GIhiiiiiqs^'FFF)-DK&{L (()JKKK445GIhiiiiiqs^'BBB{W ++,UVVVDqs^';;;26DK/{D (()BCCC445GI]^^^^^qs^'<<<27DK/{F (()DEEE445GI^_____qs^':::{U ++,STTTDqs^'999&*DKO{B (()@AAA445GI[\\\\\qs^':::&+DKO{D (()BCCC445GI\]]]]]qs^':::{U ++,STTTDqs^'999&*DKO{B (()@AAA445GI[\\\\\qs^':::&+DKO{D (()BCCC445GI\]]]]] ;:1Q3#33300+aSMM#####1Q3#444;@K$$%>???&&$&?????1Q3#666;0K$$Y///,0)))1Q3#555;/K$$X...,1)))1Q3#555%(1Q3%8%8";]K$$%@%G%GHZ%[%[\\\\\]]1Q3#666'*9QqS>':':$;`K$$%A%H%HI]%^%^_____``1Q3:--QqS>%999K22444{5 ((444445FH\]]]]]qs^'<<<K33555{6 ((555445FH]^^^^^qs^'999K22444K33555{7 ((666445FHZ[[[[[{d ))*F*M*MdS\]^]_]_S`NaNa*b*bcccccdd;eK%%&G&N&NtT]^_^`^`TaObOb&c&cdddddee{ V ##$B$I$I)$T$TUUUUU V Vsf*1C D3)AD..D31H IAII8AL<< NAN  N9AQ== SAS  SrJr)F)rtrurvrwrgrrorrrrrerfrcrKrRrPrrs H H H HF888(555VVVV 5 5 5 5H   "7%7%7%vQQQ WWW&~V~V~V~V~VrRr__main__zrfc2217://localhost:7000rz{} z write... shello z read: {} ) __future__rrrrrrr ImportError urllib.parseparserqueuerserial.serialutilrrrrrr DEBUGINFOWARNINGERRORrrbNOPDMBRKIPAOAYTECELGArarrrrr5r6rrrrrrrrrrrr|r}rrrrrrrrrxrzSERVER_FLOWCONTROL_SUSPENDSERVER_FLOWCONTROL_RESUMESERVER_SET_LINESTATE_MASKSERVER_SET_MODEMSTATE_MASKrRFC2217_ANSWER_MAPrrrrrr@rArrJrKrrErFSET_CONTROL_REQ_FLOW_SETTING_IN"SET_CONTROL_USE_NO_FLOW_CONTROL_IN!SET_CONTROL_USE_SW_FLOW_CONTOL_IN!SET_CONTROL_USE_HW_FLOW_CONTOL_IN SET_CONTROL_USE_DCD_FLOW_CONTROL SET_CONTROL_USE_DTR_FLOW_CONTROL SET_CONTROL_USE_DSR_FLOW_CONTROLLINESTATE_MASK_TIMEOUTLINESTATE_MASK_SHIFTREG_EMPTYLINESTATE_MASK_TRANSREG_EMPTYLINESTATE_MASK_BREAK_DETECTLINESTATE_MASK_FRAMING_ERRORLINESTATE_MASK_PARTIY_ERRORLINESTATE_MASK_OVERRUN_ERRORLINESTATE_MASK_DATA_READYrZrVrSrOrrrrr:r<r PARITY_NONE PARITY_ODD PARITY_EVEN PARITY_MARK PARITY_SPACErdictrr STOPBITS_ONESTOPBITS_ONE_POINT_FIVE STOPBITS_TWOrrr]r`rdrTrUrVrWobjectrYryrrrtsyssstdoutr7rkflushr1rrKrRrPrs z'&&&&&  $OOOO$$$########$LLLL ))))))))))))))))] L ]                         !"$##$%%!%#-/3113!  '")")")%")%,"$+!$+!#* #* #*  " "      q    "T!P!P5G5M5M5O5O!P!P!PPP  "A  #d"R"R6I6O6O6Q6Q"R"R"RRR       #CNCNCNCNCN6CNCNCNLDpDpDpDpDp6DpDpDpNiGiGiGiGiGZiGiGiG^QVQVQVQVQV&QVQVQVj  zJJJ)622AJV]]1%%&&&J\"""GGJGGIIIJ\((33444GGIIIIIs! //8 AA