
    Vh\                     >   d Z ddlZddlZddlZddlZddlZddlZddlZddl	m
Z ddlmZ ddlmZmZ ddlmZ ddlmZ ddlmZmZmZmZmZmZmZmZ ddlm Z  ddl!m"Z"m#Z#m$Z$m%Z% dd	l&m'Z'm(Z(  G d
 dejR                        Z* G d de(jV                        Z,da-da.da/da0d Z1d Z2d Z3 G d de#jh                        Z5 G d dejl                        Z6 G d dejn                        Z7 G d dejp                        Z8 G d dejr                        Z:e;dk(  r e2        yy)z2
Implementation module for the `tkconch` command.
    N)ListTuple)error)isInKnownHosts)channelcommon
connection
forwardingkeyssession	transportuserauth)tkvt100)deferprotocolreactor	tksupport)logusagec                   *    e Zd Zd Zd Zd Zd Zd Zy)TkConchMenuc                 *   t        j                  j                  | g|i | | j                  j	                  d       t        j
                         | _        | j                  j                  d       t        j                  | ddd      j                  ddd       t        j                  |       | _        | j                  j                  d	d	dd
       t        j                  | ddd      j                  dd	d       t        j                  |       | _        | j                  j                  d	d	d	d
       t        j                  | ddd      j                  ddd       t        j                  |       | _        | j                  j                  d	d	dd
       t        j                  | ddd      j                  ddd       t        j                  |       | _        | j                  j                  d	d	dd
       t        j                  | ddd      j                  ddd       t        j                  |       | _        | j                  j                  d	dd
       t        j                   | | j"                  d      j                  ddd
       t        j                  | d      j                  ddd       t        j$                  | dd      | _        | j&                  j                  d	d	dd
       t        j                   | d| j(                        j                  dd       t        j                   | d| j*                        j                  dd       t        j                  |       | _        | j,                  j                  d	dd
       t        j                  | d      j                  ddd
       t        j                  |       | _        | j.                  j                  d	dd
       t        j                  | d       j                  ddd
       t        j0                  | d!| j                  d"      | _        | j2                  j                  d	d#       t        j0                  | d$| j                  d%"      | _        | j4                  j                  dd#       t        j                  | d&      j                  ddd'd
       t        j                  | ddd(      j                  dd)d       t        j                  | d*+      | _        | j6                  j                  d	d	d)d
       t        j                  | ddd,      j                  dd-d       t        j                  | d.+      | _        | j8                  j                  d	d	d-d
       t        j                  | ddd/      j                  dd0d       t        j                  | d1+      | _        | j:                  j                  d	d	d0d
       t        j                   | d2| j<                        j                  ddd3d
       | j?                  ddd45       | jA                  d	dd	5       | j                  jC                  d6tD        jF                         y )7NTkConchlocalwleftHostname)anchorjustifytext   )columnrowsticky   nesw)r"   
columnspanr#   r$   PortUsername   Command   Identity   Browse)commandr    zPort Forwarding)r       r   )heightwidthAdd)r    r0      )r"   r#   Remove   HostLocal)r    variablevalue	   RemoteremotezAdvanced Options
   Cipher   cipher)nameMAC   maczEscape Char   escapezConnect!   @   )weightminsizeWM_DELETE_WINDOW)$TkinterFrame__init__mastertitle	StringVarlocalRemoteVarsetLabelgridEntryhostportuserr0   identityButtongetIdentityFileListboxforwards
addForwardremoveForwardforwardPortforwardHostRadiobuttonlocalForwardremoteForwardrB   rF   rH   	doConnectgrid_rowconfiguregrid_columnconfigurer   sysexit)selfargsparamss      M/home/dcms/DCMS/lib/python3.12/site-packages/twisted/conch/scripts/tkconch.pyrP   zTkConchMenu.__init__'   s   t5d5f5)$%//1(d3ZHMM!C 	N 	
 MM$'			aA1VDd3VDII!C 	J 	
 MM$'			aA1VDd3ZHMM!C 	N 	
 MM$'			aA1VDd3YGLL!C 	M 	
 }}T*qaGd3ZHMM!C 	N 	
  d+!6:tT%9%9INN!F 	O 	
 	d!2388qQT8UQa@!qHt%AFFaUVFWt(D4F4FGLL! 	M 	
 #==.QAf=d(--QAf-M"==.QAf=d(--QAf-M#//w)<)<G
 	aQ/$00x$*=*=X
 	qa0d!34996 	: 	
 	d3XFKK"S 	L 	
 mmDx8aRGd3UCHH"S 	I 	
 ==E2Q1"VDd3]KPP"S 	Q 	
 mmDx8aRGt*dnnEJJ6 	K 	

 	qB7!!!Aq!9/:    c                     t        j                         }|rU| j                  j                  dt        j
                         | j                  j                  t        j
                  |       y y Nr   )tkFileDialogaskopenfilenamer\   deleterN   ENDinsert)rm   rs     rp   r^   zTkConchMenu.getIdentityFile   sH    ((*MM  GKK0MM  a0 rq   c                    | j                   j                         }| j                   j                  dt        j                         | j
                  j                         }| j
                  j                  dt        j                         | j                  j                         dk(  r1| j                  j                  t        j                  d| d|        y | j                  j                  t        j                  d| d|        y )Nr   r   L::R:)	rc   getrv   rN   rw   rd   rT   r`   rx   )rm   rZ   rY   s      rp   ra   zTkConchMenu.addForward   s    ##%7;;/##%7;;/""$/MM  4&$.@AMM  4&$.@Arq   c                 z    | j                   j                         }|r| j                   j                  |d          y y rs   )r`   curselectionremove)rm   curs     rp   rb   zTkConchMenu.removeForward   s2    mm((*MM  Q( rq   c                    d}| j                   j                         t        d<   | j                  j                         t        d<   | j                  j                         t        d<   | j
                  j                         t        d<   | j                  j                         }| j                  j                         }| j                  j                         }|r7|t        j                  v r|gt        _
        nt        j                  dd       d}|r9|t        j                  v r|gt        _        n|rt        j                  dd	       d}|r||d
k(  r
d t        d<   nm|d   dk(  r0t        |      dk(  r"t        t!        |d         dz
        t        d<   n5t        |      dk(  r
|t        d<   n|rt        j                  dd|z         d}| j"                  j                         r7t        j$                  j'                  | j"                  j                                | j(                  j                  dt*        j,                        D ];  }|d   dk(  rt        j/                  |dd         $t        j1                  |dd         = dt        d   v r*t        d   j3                  dd      \  t        d<   t        d<   t        d   r	t        d   s|rt        j                  dd       d}|rm| j4                  j7                          | j4                  j9                          t        d   r?t:        j<                  }t?        j@                  t:        jB                         |t:        _        nt?        jD                          tF        t>        _$        t        j$                  sddgt        _        t        d   }tK        t        d   xs d      }t?        jL                  ||f       tO        jP                  ||tS                      tT        j4                  jW                          tT        j4                  jY                  dj[                  t        d   t        d                y | j]                          y )Nr!   rY   rZ   r[   r0   r   zBad cipher.r   zBad MAC.nonerH   ^r%   rJ   zBad escape character '%s'.L@zMissing host or username.r   z~/.ssh/id_rsaz~/.ssh/id_dsa   z{}@{} - TkConch)/rY   r~   optionsrZ   r[   r0   rB   rF   rH   SSHClientTransportsupportedCipherstkMessageBox	showerrorsupportedMACslenchrordr\   	identitysappendr`   rN   rw   opt_localforwardopt_remoteforwardsplitrQ   quitdestroyrk   stdoutr   startLoggingstderrdiscardLogshandleErrordeferrintmsgr   
connectTCPSSHClientFactoryframe	deiconifyrR   formatfocus)	rm   finishedrB   rF   rH   linerealoutrY   rZ   s	            rp   rh   zTkConchMenu.doConnect   sB   ))--/))--/))--/!\\--/	"hhlln"+<<<7=h"3&&y-@(666475"0&&y*=$(!c!c&kQ&6$'F1I(;$<!V!$*!&&y2NQW2WX==$$T]]%6%6%89MM%%a5 	4DAw#~((ab2))$qr(3		4 '&/!/6v/D/DS!/L,GFOWV_wvH""9.IJHKKKK!u~**  ,$
!$CJ$$%4o$F!6?Dwv,"-DGGT4L!tT+;+=>LL""$LL!(('&/J JJLrq   N)__name__
__module____qualname__rP   r^   ra   rb   rh    rq   rp   r   r   &   s    \;|1B)
Frq   r   c                      e Zd ZU dZg dg dg dg dg dg dg dg d	gZg d
g dg dg dg dg dg dg dgZej                  j                  Z	ej                  j                  Z ej                  dg ej                  e	D  cg c]  }|j                          c}}        ej                  eD  cg c]  }|j                          c}}        ej                   d       ej                   d      d ej"                          ej                   d       ej                   dd      g      Zg Zee   ed<   g Zeeeeeef   f      ed<   g Zeeeeeef   f      ed<   d Zd Zd  Zd! Zd" Zy#c c}} w c c}} w )$GeneralOptionsz,Usage:    tkconch [options] host [command]
 )r[   lNzLog in using this user name.)r\   iz~/.ssh/identityz&Identity for public key authentication)rH   e~z(Set escape character; ``none'' = disable)rB   cNzSelect encryption algorithm.)macsmNz.Specify MAC algorithms for protocol version 2.)rZ   pNz7Connect to this port.  Server must be on the same port.)localforwardr   Nz<listen-port:host:port   Forward local port to remote address)remoteforwardRNz<listen-port:host:port   Forward remote port to local address)ttytz-Tty; allocate a tty even if command is given.)nottyTzDo not allocate a tty.)versionVzDisplay version number only.)compressCzEnable compression.)noshellNz"Do not execute a shell or command.)	subsystemsz-Invoke command (mandatory) as SSH2 subsystem.)r   vzLog to stderr)ansilogaz!Print the received data to stdout)r   r   zlisten-port:host:port)descr)rB   r   r   r   r0   argumentT)r   repeat)mutuallyExclusive
optActionsextraActionsr   localForwardsremoteForwardsc                 :    | j                   j                  |       y N)r   r   )rm   r   s     rp   opt_identityzGeneralOptions.opt_identity  s    a rq   c                     |j                  d      \  }}}t        |      }t        |      }| j                  j                  |||ff       y Nr|   )r   r   r   r   )rm   f	localPort
remoteHost
remotePorts        rp   r   zGeneralOptions.opt_localforward   sF    ,-GGCL)	:z	N	_
!!9z:.F"GHrq   c                     |j                  d      \  }}}t        |      }t        |      }| j                  j                  |||ff       y r   )r   r   r   r   )rm   r   r   connHostconnPorts        rp   r   z GeneralOptions.opt_remoteforward&  sF    )*&
Hh_
x=""J80D#EFrq   c                 ,    dgt         j                  dd y )Nzlibr   r!   )r   supportedCompressionsrm   s    rp   opt_compresszGeneralOptions.opt_compress,  s    9?0015rq   c                 \    |r |d   | d<   dj                  |dd        | d<   y d| d<   d| d<   y )Nr   rY    r!   r0    )join)rm   rn   s     rp   	parseArgszGeneralOptions.parseArgs/  s<    7DL!hhtABx0DODL DOrq   N) r   r   r   synopsisoptParametersoptFlagsr   r   r   _ciphersr   _macsr   CompletionsCompleteListdecode	CompleterCompleteUserAtHostcompDatar   r   str__annotations__r   r   r   r   r   r   r   r   r   ).0r   s   00rp   r   r      s   H 	<VH=MV	
	
M, 	F080>K%=	H ++<<H((66E u  +,(e((h)G!((*)GH&E&&E'Bq
'BC+EOO2IJ,U__3JK	
 %E$$&EOO),EOO*T:
H ItCy79M4c5c?23498:NDsE#s(O345:!IGA!E *H'Bs   E86E>r   c                     t         j                  rt        d      t        j                         g }|ffd	}|t         _        t         j                  |        t         j                  j                          S )Nzcan't ask 2 questions at once!c                    | sy | dk(  rt        j                          | dk(  rDt        j                  d       dj	                  |      }~d t        _        j                  |       y dt        |       cxk  rdk  r-n n*|j                  |        rt        j                  |        y y t        |       dk(  r+|r(rt        j                  d       |j                          y y y )	Nz
r          r7   z )	r   stopr   writer   callbackr   r   pop)chrespstrespdechos      rp   gotCharz!deferredAskFrame.<locals>.gotCharE  s    <LLN:KKWWT]F!ENJJv3r7 S KKOB W\dK(HHJ #\rq   )r   r   
ValueErrorr   Deferredr   canvasfocus_force)questionr  r  r  r  s    `  @rp   deferredAskFramer  ?  sY    ~~9::AD * EN	KK	LLHrq   c            
      t   t         j                  dd  } d| v r'| j                  d      }| ||dz    | z   } | |dz   |dz   = | d d  D ]2  }	 | j                  |      }|d d dk(  r| |dz      d   dk7  rg | ||dz    4 t	        j
                         }|j                          t	        j                         }t        |      a	t        j                  t        j                  t        j                  d       t               a	 t        j                  |        t        j+                         D ]G  \  }}|s	t-        t        |      st/        t        |      j1                  t        j2                  |       I t        j4                  D ]?  \  }\  }	}
t        j6                  j1                  t        j2                  d
| d|	 d|
        A g t        _        t        j8                  D ]?  \  }\  }	}
t        j6                  j1                  t        j2                  d| d|	 d|
        A g t        _        t;        j<                  |d       a|jA                  dt:        jB                  t>        jD                  z  dz   t:        jF                  t>        jH                  z  dz   fz         t>        j                  t        j                         tK        jL                  |       |j                          t        d   r	t        d   sdt        d   v rt        jO                          n|jQ                          tS        jT                          t        j(                  tV               y # t        $ r Y w xY w# t         j"                  $ rB}t%        d	|z         t        j'                          t        j(                  d       Y d }~d }~ww xY w)Nr!   z-lr%   r,   z-or   -)sidefillexpandz	ERROR: %sr{   r|   r}   )r   z%dx%dr*   )r  rY   r[   r   ),rk   argvindexr  rN   TkwithdrawToplevelr   menupackTOPBOTHr   r   parseOptionsr   
UsageErrorprintopt_helprl   itemshasattrgetattrrx   rw   r   r`   r   r   
VT100Framer   geometry	fontWidthr3   
fontHeightr2   r   installrh   mainloopr   run
exitStatus)rn   r   argroottopukr   r   rhrps              rp   r'  r'  `  s   88AB<Dt|JJtAA%QQAw 	

3A2Aw$4A;q>S#8"$QQ	 ::<DMMO



CsDII7;;W\\!I<GT"
  41q!D!##GKK34 ,, >8BW[[Bqc2$at*<=>G-- >8BW[[Bqc2$at*<=>Gtd3EMMu{{*Q.0B0BU\\0QTU0U
V	W 
JJGKKJ dMMOGFOwv0FKKMHHZI  		  kAos*   /M;M" 	MM"N757N22N7c                      ddl m}  dat        j                  | j                                t        j                           )Nr   failurer%   )twisted.pythonr2  r(  r   errFailurer   r   r1  s    rp   r   r     s+    & JGGGOOLLN	rq   c                   "    e Zd ZdZd Zd Zd Zy)r   Tc                 ,    t        j                          y r   )r   r   r   s    rp   stopFactoryzSSHClientFactory.stopFactory  s    rq   c                     t               S r   )r   )rm   addrs     rp   buildProtocolzSSHClientFactory.buildProtocol  s    !##rq   c                 d    t        j                  dd|j                   d|j                          y )Nr   zConnection Failed, Reason:
 z: )r   showwarningtyper;   )rm   	connectorreasons      rp   clientConnectionFailedz'SSHClientFactory.clientConnectionFailed  s+      +FKK=6<<.I	
rq   N)r   r   r   noisyr8  r;  rA  r   rq   rp   r   r     s    E$
rq   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)r   c                     d||fz  a y )NzDconch:	Remote side disconnected with error code %i
conch:	reason: %s)r(  )rm   codedescs      rp   receiveErrorzSSHClientTransport.receiveError  s     VTl 	rq   c                 T    d||fz  a t        j                  j                  | ||       y )Nz>conch:	Sending disconnect with error code %i
conch:	reason: %s)r(  r   r   sendDisconnect)rm   rE  r@  s      rp   rI  z!SSHClientTransport.sendDisconnect  s3     PVn 	 	$$33D$Grq   c                 L    |s	t         d   rt        j                  d|z         y y )Nr   zReceived Debug Message: %s)r   r   r   )rm   alwaysDisplaymessagelangs       rp   receiveDebugzSSHClientTransport.receiveDebug  s"    GENGG07:; +rq   c                    t        t        d   |dd i      }|dk(  rt        j                  d      S |dk(  r(t        j                  t        j                  d            S t        d   | j                  j                         j                  k(  rt        d   }t        d   }nvdj                  t        d   | j                  j                         j                        }dj                  t        d   | j                  j                         j                        }t        j                  |      d   }d	j                  |d
dd|   |      }|dz  }t        |d      j                  | j                  |||      S )NrY   zknown-hostsr!   r%   bad host keyz{} ({})z{},{}r   zNThe authenticity of host '{}' can't be established.
{} key fingerprint is {}.DSARSAs   ssh-dsss   ssh-rsaz9
Are you sure you want to continue connecting (yes/no)? )r   r   r   succeedfailr   
ConchErrorr   getPeerrY   r   r   getNSr  addCallback_cbVerifyHostKey)rm   pubKeyfingerprintgoodKeyrY   khHostkeyTypequess           rp   verifyHostKeyz SSHClientTransport.verifyHostKey  sC   
 !&=$:OPa<==##\::e..~>??v$.."8"8":"?"??v  ''9O9O9Q9V9VW 9O9O9Q9V9VWll6*1-G#V"6w?  QQD#D!,88%%vvw rq   c           	      t   |j                         dvr(t        dd      j                  | j                  |||      S |j                         dk(  r*t        j                  d       t        j                  d      	 t        j                  d|dd	d
d|   d       t        t        j                  j                  d      d      5 }t        j                  |      }|j                  d| d| d|        d d d        y # 1 sw Y   y xY w# t        $ r% t        j                           t        j                  w xY w)N)yesnozPlease type  'yes' or 'no': r!   rd  zHost key verification failed.
rP  zWarning: Permanently added 'z' (rQ  rR  rS  z) to the list of known hosts.
z~/.ssh/known_hostsr   
r   )lowerr  rY  rZ  r   r   r   rV  openospath
expanduserbase64	b64encodeBaseExceptionr   r   )rm   ansr[  r^  r_  known_hosts
encodedKeys          rp   rZ  z#SSHClientTransport._cbVerifyHostKey  s   99;m+#$BAFRR%%vvw  99;$KK;<"">22	#KK 5A'JL
 bgg(()=>D H#--f5
!!Bvhay*"FGH H H  	#JJL"""	#s+   9AD	 0C=4D	 =DD	 D	 	.D7c                     t         d   r
t         d   }nt        j                         }| j                  t	        |t                            y )Nr[   )r   getpassgetuserrequestServiceSSHUserAuthClientSSHConnection)rm   r[   s     rp   connectionSecurez#SSHClientTransport.connectionSecure  s6    6?6?D??$D-dMODErq   N)	r   r   r   rG  rI  rN  ra  rZ  rw  r   rq   rp   r   r     s"    
H<
:#*Frq   r   c                   <    e Zd ZU g Zee   ed<   ddZd Zd Z	d Z
y)ru  	usedFilesNc                 d    |s#dj                  | j                  t        d         }t        |d      S )Nz{}@{}'s password: rY   r   )r   r[   r   r  )rm   prompts     rp   getPasswordzSSHUserAuthClient.getPassword  s,    )00GFOLF**rq   c                    t         j                  D cg c]  }|| j                  vs| }}|sy |d   }t        j                  |       | j                  j                  |       t        j                  j                  |      }|dz  }t        j                  j                  |      sy 	 t        j                  j                  |      j                         S c c}w # t        $ r | j                         cY S w xY w)Nr   z.pub)r   r   ry  r   r   r   rh  ri  rj  existsr   KeyfromFileblobrm  getPublicKey)rm   xfilesfiles       rp   r  zSSHUserAuthClient.getPublicKey  s    #--Iq$..1HIIQxd#ww!!$'ww~~d#	'88$$T*//11 J  	'$$&&	's   CC*,C C87C8c                    t         j                  j                  | j                  d         }t         j                  j	                  |      sy 	 t        j                  t        j                  j                  |      j                        S # t        j                  $ rY}|j                  d   dk(  r=d| j                  d   z  }t        |d      j                  | j                  d      cY d }~S Y d }~y d }~ww xY w)Nr   zencrypted key with no passwordEnter passphrase for key '%s': )rh  ri  rj  ry  r~  r   rT  r   r  r  	keyObjectBadKeyErrorrn   r  rY  _cbGetPrivateKey)rm   r  r   r{  s       rp   getPrivateKeyzSSHUserAuthClient.getPrivateKey  s    ww!!$.."45ww~~d#	Y==!2!24!8!B!BCC 	Yvvay<<:T^^B=OO'2>>t?T?TVWXX =	Ys   ;B
 
C6A	C1&C61C6c                 f   t         j                  j                  | j                  d         }	 t        j
                  j                  ||      j                  S # t        j                  $ rD |dk(  r d| j                  d   z  }t        |d      j                  | j                  |dz         cY S w xY w)Nr  )passwordr%   r  r   r!   )rh  ri  rj  ry  r   r  r  r  r  r  rY  r  )rm   rn  countr  r{  s        rp   r  z"SSHUserAuthClient._cbGetPrivateKey  s    ww!!$.."45	88$$TC$8BBB 	z69KKF#FA.::%%uqy 		s   *A AB0/B0r   )r   r   r   ry  r   r   r   r|  r  r  r  r   rq   rp   ru  ru    s%    ItCy+
' 	Y
rq   ru  c                       e Zd Zd Zy)rv  c           	         t         d   s| j                  t                      t         j                  rQt         j                  D ]>  \  }}t	        j
                  |t        j                  | |t        j                               @ t         j                  rvt         j                  D ]b  \  }}t        j                  dj                  ||             t        j                  d|f      }| j                  d|       || j                  |<   d y y )Nr   z&asking for remote forwarding for {}:{}z0.0.0.0ztcpip-forward)r   openChannel
SSHSessionr   r   	listenTCPr
   SSHListenForwardingFactory SSHListenClientForwardingChannelr   r   r   r   packGlobal_tcpip_forwardsendGlobalRequest)rm   r   hostportr   datas        rp   serviceStartedzSSHConnection.serviceStarted-  s    y!Z\*  '.'<'< #	8!!99h
(S(S !!(/(>(> ;$
H<CC"H
 "::Iz;RS&&=2:##J/; "rq   N)r   r   r   r  r   rq   rp   rv  rv  ,  s    ;rq   rv  c                   @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)r  s   sessionc                 4   d| _         t        j                         }t        d   r| j                  |_        n| j                  |_        | j                  |_        |j
                  t        _
        t        j                  j                          t        d   r9| j                  j                  | dt        j                   t        d                nt        d   rt        d   rVt"        j$                  j'                  dd      }d	}t        j(                  ||d
      }| j                  j                  | d|       | j                  j                  | dt        j                   t        d                n|t        d   sVt"        j$                  j'                  dd      }d	}t        j(                  ||d
      }| j                  j                  | d|       | j                  j                  | dd       | j                  j*                  j*                  j-                  d       y )Nr!   rH   r   s	   subsystemr0   r   TERMxterm)   P   r   r   r   s   pty-reqexecr   s   shellrq   )
escapeModer   SSHSessionClientr   handleInputdataReceivedr   sendEOFconnectionLostr   r   r  r	  connsendRequestr   NSrh  environr~   packRequest_pty_reqr   setTcpNoDelay)rm   foor   termwinSize
ptyReqDatas         rp   channelOpenzSSHSession.channelOpenG  s    $$&8!--AN!ZZAN<<  ";II!!$fii	@R6STYu~zz~~fg6($88wK
		%%dJ
CII!!$		'):L0MN7#zz~~fg6($88wK
		%%dJ
CII!!$#6		%%33A6rq   c                 ^   |dv rd| _         | j                  |       y | j                   dk(  r|t        d   k(  rd| _         y | j                   dk(  rd| _         |dk(  r*t        j                  d       t        j                          y |dk(  r7t        j                  t        j                         t        j                         y |dk(  r:t        j                  d	       | j                  j                  j                          y | j                  d
|z          y d| _         | j                  |       y )N)re  r   r!   rH   r%   .zdisconnecting from escaper   zrekeying connectionr   r   )r  r   r   r   r   r   r   rh  killgetpidsignalSIGSTOPr  r   sendKexInit)rm   chars     rp   r  zSSHSession.handleInputh  s    <DOJJt__!dgh.?&?DO__!DOs{34		V^^4-.		##//1JJsTz"DOJJtrq   c                     |j                  d      }t        d   rt        t        |             t        j                  |       y )Nzutf-8r   )r   r   r  reprr   r   rm   r  s     rp   r  zSSHSession.dataReceived  s0    {{7#9$t*Drq   c                     |t         j                  k(  r_t        j                  dt	        |      z         t
        j                  j                  |       t
        j                  j                          y y )Nzgot %s stderr data)	r	   EXTENDED_DATA_STDERRr   r   r   rk   r   r   flush)rm   r   r  s      rp   extReceivedzSSHSession.extReceived  sM    
///GG(3t945JJT"JJ 0rq   c                 j    t        j                  d       t        j                  j	                          y )Nzgot eof)r   r   rk   stdincloser   s    rp   eofReceivedzSSHSession.eofReceived  s    			rq   c                     t        j                  d| z         t        | j                  j                        dk(  rt        j                          y y )Nz	closed %sr!   )r   r   r   r  channelsr   r   r   s    rp   closedzSSHSession.closed  s8    d"#tyy!!"a'LLN (rq   c                     t        t        j                  d|      d         at	        j
                  dt        z         y )Nz>Lr   zexit status: %s)r   structunpackr(  r   r   r  s     rp   request_exit_statuszSSHSession.request_exit_status  s.    tT2156
!J./rq   c                 :    | j                   j                  |        y r   )r  r  r   s    rp   r  zSSHSession.sendEOF  s    		$rq   N)r   r   r   rC   r  r  r  r  r  r  r  r  r   rq   rp   r  r  D  s0    D7B4
0
 rq   r  __main__)<__doc__rk  rr  rh  r  r  rk   tkinterrN   tkinter.filedialog
filedialogrt   tkinter.messagebox
messageboxr   typingr   r   twisted.conchr   twisted.conch.client.defaultr   twisted.conch.sshr   r   r	   r
   r   r   r   r   twisted.conch.uir   twisted.internetr   r   r   r   r3  r   r   rO   r   Optionsr   r   r  r(  r   r  r'  r   ClientFactoryr   r   ru  rv  
SSHChannelr  r   r   rq   rp   <module>r     s  

   	   
  ) )   7	 	 	 % @ @ %z'-- zzR!U]] R!l 
B0f

x-- 
 LF55 LF^-22 -`;J,, ;0Y ## Y x zE rq   