3 \`Z@sFddlZddlZddlZddlmZdgZdZdZe dgZ e dgZ e dgZ e dgZ e d gZe dgZe d gZe d gZe d gZe d gZe dgZe dgZe dgZe dgZe dgZe dgZe dgZe dgZe dgZe dgZe dgZe dgZe dgZ e dgZ!e dgZ"e dgZ#e dgZ$e dgZ%e dgZ&e d gZ'e d!gZ(e d"gZ)e d#gZ*e d$gZ+e d%gZ,e d&gZ-e d'gZ.e d(gZ/e d)gZ0e d*gZ1e dgZ2e d+gZ3e d,gZ4e d-gZ5e d.gZ6e d/gZ7e d0gZ8e d1gZ9e d2gZ:e d3gZ;e d4gZe d7gZ?e d8gZ@e d9gZAe d:gZBe d;gZCe dgZFe d?gZGe d@gZHe dAgZIe dBgZJe dCgZKe dDgZLe dEgZMe dFgZNe dGgZOe dgZPe dgZQeRedHrejSZTnejUZTGdIddZVdJdKZWeXdLkrBeWdS)MN) monotonicTelnet  !"#$%&'()*+,-./01 PollSelectorc@seZdZddejfddZdejfddZddZd d Zd d Z d dZ ddZ ddZ ddZ d;ddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd|jx$|j r,|j r,|j|jq W|j}d|_|S)NrI)rorRrSrx)rYr}rZrZr[ read_someSs zTelnet.read_somecCs6|jx$|j r,|jr,|j|jq W|jS)N)rorS sock_availrxry)rYrZrZr[read_very_eagerbs  zTelnet.read_very_eagercCs>|jx,|j r4|j r4|jr4|j|jq W|jS)N)rorRrSrrxry)rYrZrZr[ read_eagerps  zTelnet.read_eagercCs|j|jS)N)rory)rYrZrZr[ read_lazy~szTelnet.read_lazycCs,|j}d|_| r(|jr(|j r(td|S)NrIztelnet connection closed)rRrSrPEOFError)rYr}rZrZr[rys zTelnet.read_very_lazycCs|j}d|_|S)NrI)rV)rYr}rZrZr[ read_sb_dataszTelnet.read_sb_datacCs ||_dS)N)rW)rYcallbackrZrZr[set_option_negotiation_callbacksz&Telnet.set_option_negotiation_callbackc CsXddg}yx|jr |j}|jsj|tkr0q|dkr:q|tkrZ||j|||j<qn|j|7_qt|jdkr(|ttt t fkr|j|7_qd|_|tkr||j|||j<nh|t krd|_d|_ n&|t krd|_|j |d|_ d|d<|jr|j|j|tn|jdt|qt|jdkr|jdd}d|_|}|ttfkr|jd|tkrrdptd t||jr|j|j||n|jjtt |q|t t fkr|jd|t krd pd t||jr|j|j||q|jjtt|qWWn"tk r2d|_d|_YnX|j|d|_|j |d|_ dS) NrIrrzIAC %d not recognizedrz IAC %s %dDODONTWILLWONT)rP rawq_getcharrTtheNULLrirUrnrrrrSBrVSErWrONOOPTrdordrkrrR)rYr}ccmdoptrZrZr[rosh  zTelnet.process_rawqcCsZ|js|j|jrt|j|j|jd}|jd|_|jt|jkrVd|_d|_|S)NrrIr)rPrxrSrrQrn)rYrrZrZr[rs zTelnet.rawq_getcharcCsL|jt|jkrd|_d|_|jjd}|jd|| |_|j||_dS)NrIr2zrecv %r)rQrnrPrOZrecvrdrS)rYr}rZrZr[rxs  zTelnet.fill_rawqc Cs.t}|j|tjt|jdSQRXdS)Nr)rrrsrtruboolrv)rYrrZrZr[rszTelnet.sock_availcCstjdkr|jdSt}|j|tj|jtjtjxx|jD]\}}|j |kry |j }Wnt k rt ddSX|rtj j|jdtj jqH|j tjkrHtjjjd}|sdS|j|qHWq>WWdQRXdS)NZwin32z(*** Connection closed by remote host ***ascii)sysplatform mt_interactrrrsrtrustdinrvZfileobjrrrcstdoutrmdecodeflushreadlineencode)rYrkeyZeventstextlinerZrZr[interacts,     zTelnet.interactcCs@ddl}|j|jfx$tjj}|s(P|j|jdqWdS)Nrr)_threadstart_new_threadlistenerrrrrmr)rYrrrZrZr[r1s zTelnet.mt_interactc CsVxPy |j}Wntk r*tddSX|rDtjj|jdqtjjqWdS)Nz(*** Connection closed by remote host ***r)rrrcrrrmrr)rYdatarZrZr[r;s zTelnet.listenerc CsPd}|dd}tt|}x8|D]0}t||ds"|s@ddl}|j||||<q"W|dk rht|}t}|j|tj x|j s|j xP|D]H}||j |j }|r|j} |j d| } |j | d|_ ||| fSqW|dk r|j|} |t}| s|dkrPnq|jqWWdQRX|j} | rF|j rFtdd| fS)Nsearchrr)rangernhasattrrecompilerqrrrsrtrurSrorrRrbrvrxryr) rYlistrNrindicesr|r~rmerZreadyrZrZr[expectHsB         z Telnet.expectcCs|S)NrZ)rYrZrZr[ __enter__szTelnet.__enter__cCs |jdS)N)r_)rYtypevalue tracebackrZrZr[__exit__szTelnet.__exit__)N)N)!__name__ __module__ __qualname__r^Z_GLOBAL_DEFAULT_TIMEOUTr\rXr`rdrfr_rgrhrmrrrrrrryrrrorrxrrrrrrrrZrZrZr[rs:7  %    H  8cCsd}x0tjddr4tjddkr4|d}tjd=qWd}tjddrRtjd}d}tjddrtjd}y t|}Wn tk rtj|d}YnXt(}|j||j||dd|j WdQRXdS) Nrrz-dZ localhostrZtcpg?)rN) rargvint ValueErrorr^Z getservbynamerrfrXr)rKrLrMZportstrZtnrZrZr[tests$     r__main__)Yrr^rtZtimerrq__all__rJr]bytesrirrrrrrZNOPZDMZBRKZIPZAOZAYTZECZELZGArZBINARYZECHOZRCPZSGAZNAMSZSTATUSZTMZRCTEZNAOLZNAOPZNAOCRDZNAOHTSZNAOHTDZNAOFFDZNAOVTSZNAOVTDZNAOLFDZXASCIIZLOGOUTZBMZDETZSUPDUPZ SUPDUPOUTPUTZSNDLOCZTTYPEZEORZTUIDZOUTMRKZTTYLOCZ VT3270REGIMEZX3PADZNAWSZTSPEEDZLFLOWZLINEMODEZXDISPLOCZ OLD_ENVIRONZAUTHENTICATIONZENCRYPTZ NEW_ENVIRONZTN3270EZXAUTHCHARSETZRSPZCOM_PORT_OPTIONZSUPPRESS_LOCAL_ECHOZTLSZKERMITZSEND_URLZ FORWARD_XZ PRAGMA_LOGONZ SSPI_LOGONZPRAGMA_HEARTBEATZEXOPLrrrHrrZSelectSelectorrrrrZrZrZr[$s                                                                          }