Ë
    oj¢†  ã                   óü  — 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Zddl	Z	ddl
Z
ddlmZmZmZmZ ddlmZmZmZ ddlmZmZmZmZ ddlmZmZmZmZ ddlmZ ddl m!Z!m"Z"m#Z# dd	l$m%Z%  G d
„ dejL                  «      Z'd„ Z(d„ Z)d„ Z*d„ Z+d„ Z, G d„ d«      Z- G d„ dej\                  «      Z/ e0e/de/jb                  «        G d„ dejd                  «      Z2 G d„ dejf                  «      Z4e5dk(  r e(«        yy)z0
Implementation module for the I{cftp} command.
é    N)ÚListÚOptionalÚTextIOÚUnion)ÚconnectÚdefaultÚoptions)ÚchannelÚcommonÚ
connectionÚfiletransfer)ÚdeferÚreactorÚstdioÚutils)Úbasic)ÚfailureÚlogÚusage)ÚFilePathc                   óÐ   — e Zd ZU dZdZg d¢g d¢g d¢g d¢gZeeeee	e
f            ed<    ej                  dd	i ej                  «        ej                  d
¬«      g¬«      Zdd„Zy)ÚClientOptionszˆUsage:   cftp [options] [user@]host
         cftp [options] [user@]host[:dir[/]]
         cftp [options] [user@]host[:file [localfile]]
zncftp is a client for logging into a remote machine and executing commands to send and receive file information)Ú
buffersizeÚBi €  z0Size of the buffer to use for sending/receiving.)Ú	batchfileÚbNz-File to read commands from, or '-' for stdin.)ÚrequestsÚRé   z6Number of requests to make before waiting for a reply.)Ú	subsystemÚsÚsftpz'Subsystem/server program to connect to.ÚoptParametersr   z,Size of send/receive buffer (default: 32768)z
local file)Údescr)ÚdescriptionsÚextraActionsNc                 ó‚   — d| d<   d|v r,|j                  dd«      \  }| d<   | d   j                  d«       || d<   || d<   y )NÚ Ú
remotePathú:é   ú/ÚhostÚ	localPath)ÚsplitÚrstrip)Úselfr-   r.   s      ú</usr/lib/python3/dist-packages/twisted/conch/scripts/cftp.pyÚ	parseArgszClientOptions.parseArgs5   sS   € Øˆˆ\ÑØ�$‰;Ø'+§z¡z°#°qÓ'9Ñ$ˆD�$�|Ñ$Ø�Ñ×%Ñ% cÔ*ØˆˆV‰Ø%ˆˆ[Òó    ©N)Ú__name__Ú
__module__Ú__qualname__ÚsynopsisÚlongdescr#   r   r   r   ÚstrÚintÚ__annotations__r   ÚCompletionsÚCompleteUserAtHostÚCompleteFilesÚcompDatar3   © r4   r2   r   r      s�   … ð€Hð
	Bð ò 	WÚQÚVÚMð	<€M�4˜˜X e¨C°¨H¡oÑ6Ñ7Ñ8ó ð !ˆu× Ñ Ø"Ð$RÐSà$ˆE×$Ñ$Ó&ØˆE×Ñ lÔ3ð
ô€Hô&r4   r   c                  ó.  — t         j                  dd  } d| v r'| j                  d«      }| ||dz    | z   } | |dz   |dz   …= t        «       }	  |j                  | «       |d   r?t         j                  }t        j                  t         j                  «       |t         _	        nt        j                  «        t        |«       t        j                   «        y # t
        j                  $ r-}t        d|z  «       t        j                  d«       Y d }~Œ³d }~ww xY w)Nr+   z-lé   é   z	ERROR: %sr   )ÚsysÚargvÚindexr   ÚparseOptionsr   Ú
UsageErrorÚprintÚexitÚstdoutr   ÚstartLoggingÚstderrÚdiscardLogsÚ	doConnectr   Úrun)ÚargsÚir	   ÚuÚrealouts        r2   rR   rR   >   sá   € Ü�8‰8�A�Bˆ<€DØˆt�|Ø�J‰J�tÓˆØ�A˜˜A™ˆ Ñ%ˆØ��Q‘˜˜Q™�ÐÜ‹o€GðØˆ×Ñ˜TÔ"ð ˆu‚~Ü—*‘*ˆÜ×ÑœŸ™Ô$ØŒ�
ä�‰ÔÜˆgÔÜ‡K�K…Møô ×Ñò Üˆk˜A‰oÔÜ�‰��‰ûðús   Á
C ÃDÃ'#DÄDc                  óž   — da 	 t        j                  «        t	        j
                  t        j                  «       «       ‚ # t        $ r Y Œ3w xY w)NrD   )Ú
exitStatusr   ÚstopÚBaseExceptionr   Úerrr   ÚFailurerB   r4   r2   ÚhandleErrorr]   T   sA   € à€JðÜ�‰Œô ‡G�GŒG�O‰OÓÔØ	øô ò Ùðús   „A  Á 	AÁAc                 óª  — d| d   v r| d   j                  dd«      \  | d<   | d<   | d   }| d   st        j                  «       | d<   | d   sd| d<   nt        | d   «      | d<   | d   }| d   }t	        «       }| |_        t        j                  }t        j                  | d   | |«      }t        j                  ||| ||«      j                  t        «       y )Nú@r-   r+   ÚuserÚporté   )r/   ÚgetpassÚgetuserr<   ÚSSHConnectionr	   r   ÚverifyHostKeyÚSSHUserAuthClientr   Ú
addErrbackÚ_ebExit)r	   r-   ra   ÚconnÚvhkÚuaos         r2   rQ   rQ   _   sÕ   € Ø
ˆg�f‰oÑØ+2°6©?×+@Ñ+@ÀÀaÓ+HÑ(ˆ�‰˜ ™Ø�6‰?€DØ�6Š?Ü!Ÿ/™/Ó+ˆ�‰Ø�6Š?Øˆ�Šä˜g f™oÓ.ˆ�‰Ø�6‰?€DØ�6‰?€DÜ‹?€DØ€D„LÜ
×
Ñ
€CÜ
×
#Ñ
# G¨F¡O°W¸dÓ
C€CÜ‡O�O�D˜$ ¨¨cÓ2×=Ñ=¼gÕFr4   c                 óÒ   — t        | j                  d«      r| j                  j                  }nt        | «      }t        |«       	 t	        j
                  «        y # t        $ r Y y w xY w)NÚvalue)Úhasattrrn   r;   rK   r   rY   rZ   )Úfr!   s     r2   ri   ri   r   sM   € Üˆq�w‰w˜Ô Ø�G‰G�M‰M‰ä�‹FˆÜ	ˆ!„HðÜ�‰�øÜò Ùðús   ÁA Á	A&Á%A&c                   ó   — y r5   rB   )rS   s    r2   Ú_ignorerr   ~   s   € Ør4   c                   ó   — e Zd Zd„ Zd„ Zy)ÚFileWrapperc                 ón   — || _         d| _        |j                  dd«       |j                  «       | _        y )Nç        r   rD   )rp   ÚtotalÚseekÚtellÚsize©r1   rp   s     r2   Ú__init__zFileWrapper.__init__ƒ   s*   € ØˆŒØˆŒ
Ø	�‰ˆq�!ŒØ—F‘F“Hˆ�	r4   c                 ó.   — t        | j                  |«      S r5   )Úgetattrrp   )r1   Úattrs     r2   Ú__getattr__zFileWrapper.__getattr__‰   s   € Ü�t—v‘v˜tÓ$Ð$r4   N)r6   r7   r8   r|   r€   rB   r4   r2   rt   rt   ‚   s   „ òó%r4   rt   c                   óˆ  — e Zd ZeZdZdZeZd?d„Zd„ Z	d„ Z
d„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd@d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d „ Z$dAd!„Z%d"„ Z&d#„ Z'd$„ Z(d%„ Z)d&„ Z*d'„ Z+d(„ Z,d)„ Z-d*„ Z.d+„ Z/d,„ Z0d-„ Z1d.„ Z2d/„ Z3d0„ Z4e4Z5d1„ Z6d2„ Z7d3„ Z8d4„ Z9d5„ Z:d6„ Z;d7„ Z<d8„ Z=d9„ Z>d:„ Z?d;„ Z@d<„ ZAd=„ ZBd>„ ZCy)BÚStdioClientzcftp> ó   
Nc                 óN   — || _         d| _        || _        | xr dxs d| _        y )Nr(   r+   r   )ÚclientÚcurrentDirectoryÚfileÚuseProgressBar)r1   r…   rp   s      r2   r|   zStdioClient.__init__•   s+   € ØˆŒØ "ˆÔØˆŒ	Ø#$˜uš{¨Ò0¨qˆÕr4   c                 ól   — | j                   j                  d«      j                  | j                  «       y )Nr(   )r…   ÚrealPathÚaddCallbackÚ_cbSetCurDir©r1   s    r2   ÚconnectionMadezStdioClient.connectionMade›   s%   € Ø�‰×Ñ˜RÓ ×,Ñ,¨T×->Ñ->Õ?r4   c                 ó2   — || _         | j                  «        y r5   )r†   Ú_newLine©r1   Úpaths     r2   rŒ   zStdioClient._cbSetCurDirž   s   € Ø $ˆÔØ�‰�r4   c                 óz   — t        |t        «      r|j                  d«      }| j                  j	                  |«      S )Núutf-8)Ú
isinstancer;   ÚencodeÚ	transportÚwrite)r1   Úmsgs     r2   Ú_writeToTransportzStdioClient._writeToTransport¢   s/   € Ü�cœ3ÔØ—*‘*˜WÓ%ˆCØ�~‰~×#Ñ# CÓ(Ð(r4   c                 óô  — | j                   j                  j                  ry t        |t        «      r|j                  d«      }t        j                  d|z  «       |j                  «       }|s| j                  «        y | j                  r|j                  d«      rd| _        |dd  }nd| _        | j                  |«      }|�7|j                  | j                  «       |j!                  | j"                  «       y y )Nr”   zgot line %sú-r+   r   )r…   r—   ÚlocalClosedr•   ÚbytesÚdecoder   r™   Úlstripr�   r‡   Ú
startswithÚignoreErrorsÚ_dispatchCommandr‹   Ú
_cbCommandrh   Ú
_ebCommand)r1   ÚlineÚds      r2   ÚlineReceivedzStdioClient.lineReceived§   sÂ   € Ø�;‰;× Ñ ×,Ò,ØÜ�dœEÔ"Ø—;‘;˜wÓ'ˆDÜ�‰� Ñ$Ô%Ø�{‰{‹}ˆÙØ�M‰MŒOØØ�9Š9˜Ÿ™¨Ô-Ø !ˆDÔØ˜˜�8‰Dà !ˆDÔØ×!Ñ! $Ó'ˆØˆ=Ø�M‰M˜$Ÿ/™/Ô*Ø�L‰L˜Ÿ™Õ)ð r4   c                 óò  — d|v r&|j                  dd«      \  }}|j                  «       }n|d}}|j                  d«      r&| j                  }|dd  dz   |z   j	                  «       }n8|j                  «       }t        j                  d|z  «       t        | d|z  d «      }|�t        j                  ||«      S d|z  }| j                  t        j                  t        |«      «      «       | j                  «        y )Nú r+   r(   ú!zlooking up cmd %szcmd_%szNo command called `%s')r/   r    r¡   Úcmd_EXECÚstripÚupperr   r™   r~   r   ÚmaybeDeferredr¥   r   r\   ÚNotImplementedErrorr�   )r1   r¦   ÚcommandÚrestrp   ÚerrMsgs         r2   r£   zStdioClient._dispatchCommand»   sÜ   € Ø�$‰;Ø ŸJ™J s¨AÓ.‰MˆG�TØ—;‘;“=‰Dà  "�TˆGØ×Ñ˜cÔ"Ø—‘ˆAØ˜A˜B�K #Ñ%¨Ñ,×3Ñ3Ó5‰Dà—m‘m“oˆGÜ�G‰GÐ'¨'Ñ1Ô2Ü˜˜h¨Ñ0°$Ó7ˆAØˆ=Ü×&Ñ& q¨$Ó/Ð/à-°Ñ9ˆFØ�O‰OœGŸO™OÔ,?ÀÓ,GÓHÔIØ�M‰M�Or4   c                 ó$  — t        j                  |«       |j                  t        t        j
                  t        t        «      }|t        k(  r!| j                  | j                  d«      «       y |t        j
                  k(  rAd|j                  j                  |j                  j                  fz  }| j                  |«       y |t        t        fv rAd|j                  j                  |j                  j                  fz  }| j                  |«       y y )Nr(   zremote error %i: %s
zlocal error %i: %s
)r   r™   Útrapr°   r   Ú	SFTPErrorÚOSErrorÚIOErrorrš   Úcmd_HELPrn   ÚcodeÚmessageÚerrnoÚstrerror)r1   rp   Úer³   s       r2   Ú_printFailurezStdioClient._printFailureÏ   sÄ   € Ü�‰�Œ
Ø�F‰FÔ&¬×(>Ñ(>ÄÌÓQˆØÔ#Ò#Ø×"Ñ" 4§=¡=°Ó#4Õ5Ø”,×(Ñ(Ò(Ø,°·±·±¸a¿g¹g¿o¹oÐ/NÑNˆFØ×"Ñ" 6Õ*Ø”7œGÐ$Ñ$Ø+¨q¯w©w¯}©}¸a¿g¹g×>NÑ>NÐ.OÑOˆFØ×"Ñ" 6Õ*ð %r4   c                 ó†  — | j                   j                  j                  ry | j                  | j                  «       d| _        | j                  rr| j                  j                  «       }|s%| j                   j                  j                  «        y | j                  |«       | j                  |j                  «       «       y y )Nr   )r…   r—   r�   rš   Úpsr¢   r‡   ÚreadlineÚloseConnectionr¨   r­   )r1   Úls     r2   r�   zStdioClient._newLineÛ   s‹   € Ø�;‰;× Ñ ×,Ò,ØØ×Ñ˜tŸw™wÔ'ØˆÔØ�9Š9Ø—	‘	×"Ñ"Ó$ˆAÙØ—‘×%Ñ%×4Ñ4Õ6à×&Ñ& qÔ)Ø×!Ñ! !§'¡'£)Õ,ð r4   c                 óÐ   — |�Tt        |t        «      r|j                  d«      }| j                  |«       |j	                  d«      s| j                  d«       | j                  «        y )Nr”   rƒ   )r•   r;   r–   rš   Úendswithr�   )r1   Úresults     r2   r¤   zStdioClient._cbCommandè   sQ   € ØÐÜ˜&¤#Ô&ØŸ™ wÓ/�Ø×"Ñ" 6Ô*Ø—?‘? 5Ô)Ø×&Ñ& uÔ-Ø�‰�r4   c                 ó¾   — | j                  |«       | j                  r0| j                  s$| j                  j                  j                  «        | j                  «        y r5   )r¿   r‡   r¢   r…   r—   rÃ   r�   r{   s     r2   r¥   zStdioClient._ebCommandñ   s>   € Ø×Ñ˜1ÔØ�9Š9˜T×.Ò.Ø�K‰K×!Ñ!×0Ñ0Ô2Ø�‰�r4   c                 ó`  — | j                  |«      \  }}|j                  d«      s|dz  }|xr* t        j                  j	                  | j
                  |«      xs d}| j                  j                  |«      }|j                  | j                  «       |j                  | j                  «       |S )Nr,   r(   )Ú_getFilenamerÆ   Úosr’   Újoinr†   r…   ÚopenDirectoryr‹   Ú_cbCdrh   r¥   )r1   r’   r²   ÚnewPathr§   s        r2   Úcmd_CDzStdioClient.cmd_CD÷   sˆ   € Ø×&Ñ& tÓ,‰
ˆˆdØ�}‰}˜SÔ!Ø�C‰KˆDØÒDœ2Ÿ7™7Ÿ<™<¨×(=Ñ(=¸tÓDÒJÈˆØ�K‰K×%Ñ% gÓ.ˆØ	�‰�d—j‘jÔ!Ø	�‰�T—_‘_Ô%Øˆr4   c                 ó¦   — |j                  «        | j                  j                  |j                  «      }|j	                  | j
                  «       |S r5   )Úcloser…   rŠ   Únamer‹   Ú	_cbCurDir)r1   Ú	directoryr§   s      r2   rÎ   zStdioClient._cbCd  s9   € Ø�‰ÔØ�K‰K× Ñ  §¡Ó0ˆØ	�‰�d—n‘nÔ%Øˆr4   c                 ó   — || _         y r5   ©r†   r‘   s     r2   rÔ   zStdioClient._cbCurDir  s
   € Ø $ˆÕr4   c                 óà   — |j                  d d«      \  }}| j                  |«      \  }}t        |«      }| j                  j	                  |«      }|j                  | j                  ||¬«       |S )Nr+   )Úgrp©r/   rÊ   r<   r…   ÚgetAttrsr‹   Ú_cbSetUsrGrp)r1   r²   rÙ   r’   r§   s        r2   Ú	cmd_CHGRPzStdioClient.cmd_CHGRP
  ód   € Ø—J‘J˜t QÓ'‰	ˆˆTØ×&Ñ& tÓ,‰
ˆˆdÜ�#‹hˆØ�K‰K× Ñ  Ó&ˆØ	�‰�d×'Ñ'¨°3ˆÔ7Øˆr4   c                 óÖ   — |j                  d d«      \  }}| j                  |«      \  }}t        |d«      }| j                  j	                  |d|i«      }|j                  t        «       |S )Nr+   é   Úpermissions)r/   rÊ   r<   r…   ÚsetAttrsr‹   rr   )r1   r²   Úmodr’   r§   s        r2   Ú	cmd_CHMODzStdioClient.cmd_CHMOD  sa   € Ø—J‘J˜t QÓ'‰	ˆˆTØ×&Ñ& tÓ,‰
ˆˆdÜ�#�q‹kˆØ�K‰K× Ñ  ¨°sÐ';Ó<ˆØ	�‰”gÔØˆr4   c                 óà   — |j                  d d«      \  }}| j                  |«      \  }}t        |«      }| j                  j	                  |«      }|j                  | j                  ||¬«       |S )Nr+   )ÚusrrÚ   )r1   r²   ræ   r’   r§   s        r2   Ú	cmd_CHOWNzStdioClient.cmd_CHOWN  rÞ   r4   c                 ó´   — i }|d uxr |xs |d   |d<   |d uxr |xs |d   |d<   | j                   j                  ||«      }|j                  t        «       |S )NÚuidÚgid)r…   râ   r‹   rr   )r1   Úattrsr’   ræ   rÙ   Únewr§   s          r2   rÜ   zStdioClient._cbSetUsrGrp"  sd   € ØˆØ �oÒ.¨3Ò>°%¸±,ˆˆE‰
Ø �oÒ.¨3Ò>°%¸±,ˆˆE‰
Ø�K‰K× Ñ   sÓ+ˆØ	�‰”gÔØˆr4   c                 óè  — | j                  |«      \  }}d|v sd|v rg|r4| j                  |«      \  }}t        j                  j                  |«      syd}| j	                  |«      }|j                  | j                  |«       |S |r| j                  |«      \  }}n"t        j                  j                  |«      d   }t        j                  ||f«       t        |dd«      }t        | j                  «      j                  |«      }| j                  j                  |j                  t         j"                  i «      }|j                  | j$                  |«       |j'                  | j(                  |«       |S )NÚ*ú?z'Wildcard get with non-directory target.r4   r+   Úwbr   )rÊ   rË   r’   ÚisdirÚ_remoteGlobr‹   Ú_cbGetMultipler/   r   r™   Úopenr   r†   Úchildr…   ÚopenFiler   ÚFXF_READÚ_cbGetOpenFilerh   Ú
_ebCloseLf)r1   r²   ÚremoteÚlocalr§   Úlfr’   s          r2   Úcmd_GETzStdioClient.cmd_GET*  s/  € Ø×(Ñ(¨Ó.‰ˆ�Ø�&‰=˜C 6™MÙØ"×/Ñ/°Ó5‘��tÜ—w‘w—}‘} UÔ+ØDà�Ø× Ñ  Ó(ˆAØ�M‰M˜$×-Ñ-¨uÔ5ØˆHÙØ×+Ñ+¨DÓ1‰KˆE‘4ä—G‘G—M‘M &Ó)¨!Ñ,ˆEÜ�‰�˜�Ô Ü�%˜˜qÓ!ˆÜ˜×-Ñ-Ó.×4Ñ4°VÓ<ˆØ�K‰K× Ñ  §¡¬L×,AÑ,AÀ2ÓFˆØ	�‰�d×)Ñ)¨2Ô.Ø	�‰�T—_‘_ bÔ)Øˆr4   c                 ó(   — | j                  d ||«      S r5   )Ú_cbGetMultipleNext)r1   Úfilesrû   s      r2   ró   zStdioClient._cbGetMultipleB  s   € à×&Ñ& t¨U°EÓ:Ð:r4   c                 óè  — t        |t        j                  «      r| j                  |«       n5|r3| j	                  |«       |j                  d«      s| j	                  d«       |sy |j                  d«      d   }t        t        j                  j                  |t        j                  j                  |«      d   «      dd«      }t        | j                  «      j                  |«      }| j                  j!                  |j                  t"        j$                  i «      }|j'                  | j(                  |«       |j+                  | j,                  |«       |j/                  | j0                  ||«       |S )Nú
r   r+   rð   )r•   r   r\   r¿   rš   rÆ   Úpoprô   rË   r’   rÌ   r/   r   r†   rõ   r…   rö   r   r÷   r‹   rø   rh   rù   ÚaddBothrÿ   )r1   Úresr   rû   rp   rü   r’   r§   s           r2   rÿ   zStdioClient._cbGetMultipleNextF  s  € Ü�cœ7Ÿ?™?Ô+Ø×Ñ˜sÕ#ÙØ×"Ñ" 3Ô'Ø—<‘< Ô%Ø×&Ñ& tÔ,ÙØØ�I‰I�a‹L˜‰OˆÜ”"—'‘'—,‘,˜u¤b§g¡g§m¡m°AÓ&6°qÑ&9Ó:¸DÀ!ÓDˆÜ˜×-Ñ-Ó.×4Ñ4°QÓ7ˆØ�K‰K× Ñ  §¡¬L×,AÑ,AÀ2ÓFˆØ	�‰�d×)Ñ)¨2Ô.Ø	�‰�T—_‘_ bÔ)Ø	�	‰	�$×)Ñ)¨5°%Ô8Øˆr4   c                 ó&   — |j                  «        |S r5   )rÒ   )r1   rp   rü   s      r2   rù   zStdioClient._ebCloseLfX  s   € Ø
�‰Œ
Øˆr4   c                 óX   — |j                  «       j                  | j                  ||«      S r5   )rÛ   r‹   Ú_cbGetFileSize)r1   Úrfrü   s      r2   rø   zStdioClient._cbGetOpenFile\  s#   € Ø�{‰{‹}×(Ñ(¨×)<Ñ)<¸bÀ"ÓEÐEr4   c           
      ó~  — t        j                  |d   «      s/|j                  «        |j                  «        d|j                  z  S |d   |_        | j
                  j                  j                  j                  d   }| j
                  j                  j                  j                  d   }d|_	        g }g }| j                  j                  «       }t        |«      D ]*  }	| j                  d|||d||«      }
|j                  |
«       Œ, t        j                   |d	¬
«      }|j#                  | j$                  ||«       |S )Nrá   zCan't get non-regular file: %srz   r   r   rv   r(   r   r+   ©ÚfireOnOneErrback)ÚstatÚS_ISREGrÒ   rÓ   rz   r…   r—   rj   r	   rw   r   ÚsecondsÚrangeÚ
_cbGetReadÚappendr   ÚDeferredListr‹   Ú
_cbGetDone)r1   rë   r	  rü   Ú
bufferSizeÚnumRequestsÚdListÚchunksÚ	startTimerT   r§   Údls               r2   r  zStdioClient._cbGetFileSize_  s  € Ü�|‰|˜E -Ñ0Ô1Ø�H‰HŒJØ�H‰HŒJØ3°b·g±gÑ=Ð=Ø˜‘-ˆŒØ—[‘[×*Ñ*×/Ñ/×7Ñ7¸ÑEˆ
Ø—k‘k×+Ñ+×0Ñ0×8Ñ8¸ÑDˆØˆŒØˆØˆØ—L‘L×(Ñ(Ó*ˆ	Ü�{Ó#ò 	ˆAØ—‘  B¨¨F°A°zÀ9ÓMˆAØ�L‰L˜�Oð	ô ×Ñ ¸Ô:ˆØ
�‰�t—‘¨¨BÔ/Øˆ	r4   c                 óD  — d}|D ]J  }|dk(  r y ||d   k7  r4|j                  |«      }|j                  |||d   f«       ||d   |z
  fc S |d   }ŒL t        | j                  j                  j
                  j                  d   «      }|j                  |||z   f«       ||fS )Nr   Úeofr+   r   )rH   Úinsertr<   r…   r—   rj   r	   r  )r1   r  ÚendÚchunkrT   ÚbufSizes         r2   Ú_getNextChunkzStdioClient._getNextChunkr  s±   € ØˆØò 	ˆEØ�eŠ|ÙØ�e˜A‘hŠØ—L‘L Ó'�Ø—‘˜a # u¨Q¡x Ô1Ø˜U 1™X¨™^Ð,Ò,Ø˜‘(‰Cð	ô �d—k‘k×+Ñ+×0Ñ0×8Ñ8¸ÑFÓGˆØ�‰�s˜C '™MÐ*Ô+Ø�Wˆ~Ðr4   c           	      ó   — |rwt        |t        j                  «      r]t        j                  d|z  «       |}|j                  t        «       |j                  |||z   f«      }	||	= |j                  |	|df«       nÍ|rËt        j                  dt        |«      z  «       |j                  |«       |j                  |«       t        |«      |k7  r\t        j                  dt        |«      |fz  «       |j                  |||z   f«      }	||	= |j                  |	||t        |«      z   f«       |xj                  t        |«      z  c_        | j                  r| j                  ||«       | j                  |«      }
|
sy |
\  }}t        j                  d|||z   fz  «       |j!                  ||«      }|j#                  | j$                  ||||||«       |S )Nzget read err: %sr  zget read data: %iz#got less than we asked for: %i < %izasking for %i -> %i)r•   r   r\   r   r™   rµ   ÚEOFErrorrH   r  Úlenrx   r˜   rw   rˆ   Ú_printProgressBarr!  Ú	readChunkr  r  )r1   Údatar	  rü   r  Ústartrz   r  ÚreasonrT   r  Úlengthr§   s                r2   r  zStdioClient._cbGetRead€  s‹  € Ù”J˜t¤W§_¡_Ô5Ü�G‰GÐ&¨Ñ-Ô.ØˆFØ�K‰KœÔ!Ø—‘˜e U¨T¡\Ð2Ó3ˆAØ�q�	Ø�M‰M˜!˜e U˜^Õ,ÙÜ�G‰GÐ'¬#¨d«)Ñ3Ô4Ø�G‰G�EŒNØ�H‰H�TŒNÜ�4‹y˜DÒ Ü—‘Ð=ÄÀTÃÈDÐ@QÑQÔRØ—L‘L %¨°©Ð!6Ó7�Ø˜1�IØ—‘˜a %¨´°T³Ñ):Ð!;Ô<Ø�HŠHœ˜D›	Ñ!�HØ×ÒØ×"Ñ" 2 yÔ1Ø×"Ñ" 6Ó*ˆÙØà!‰MˆE�6Ü�‰Ð%¨°¸±Ð(?Ñ?Ô@Ø�L‰L˜ Ó'ˆØ	�	‰	�$—/‘/ 2 r¨6°5¸&À)ÔLØˆr4   c                 óÞ   — t        j                  d«       |j                  «        |j                  «        | j                  r| j	                  d«       d|j
                  › d|j
                  › �S )Nzget doner  úTransferred ú to )r   r™   rÒ   rˆ   rš   rÓ   ©r1   Úignoredr	  rü   s       r2   r  zStdioClient._cbGetDonež  sR   € Ü�‰�
ÔØ
�‰Œ
Ø
�‰Œ
Ø×ÒØ×"Ñ" 4Ô(Ø˜bŸg™g˜Y d¨2¯7©7¨)Ð4Ð4r4   c                 ó¤  — | j                  |«      \  }}d|v sd|v rj|r?| j                  |«      \  }}t        j                  j                  | j                  |«      }nd}t        j
                  |«      }| j                  ||«      S |r| j                  |«      \  }}n"t        j                  j                  |«      d   }| j                  ||«      S )a#  
        Do an upload request for a single local file or a globing expression.

        @param rest: Requested command line for the PUT command.
        @type rest: L{str}

        @return: A deferred which fires with L{None} when transfer is done.
        @rtype: L{defer.Deferred}
        rî   rï   r(   r+   )	rÊ   rË   r’   rÌ   r†   ÚglobÚ_putMultipleFilesr/   Ú_putSingleFile)r1   r²   rû   rú   r   s        r2   Úcmd_PUTzStdioClient.cmd_PUT¦  sÁ   € ð ×'Ñ'¨Ó-‰ˆˆtð �%‰<˜3 %™<ÙØ#×0Ñ0°Ó6‘�˜ÜŸ™Ÿ™ d×&;Ñ&;¸VÓD‘à�ä—I‘I˜eÓ$ˆEØ×)Ñ)¨%°Ó8Ð8ñ Ø#×0Ñ0°Ó6‘�™äŸ™Ÿ™ uÓ-¨aÑ0�Ø×&Ñ& u¨fÓ5Ð5r4   c                 ó.   — | j                  d|g|d¬«      S )aB  
        Perform an upload for a single file.

        @param local: Path to local file.
        @type local: L{str}.

        @param remote: Remote path for the request relative to current working
            directory.
        @type remote: L{str}

        @return: A deferred which fires when transfer is done.
        NT)Úsingle©Ú_cbPutMultipleNext)r1   rû   rú   s      r2   r3  zStdioClient._putSingleFileÅ  s    € ð ×&Ñ& t¨e¨W°fÀTÐ&ÓJÐJr4   c                 ó(   — | j                  d||«      S )aV  
        Perform an upload for a list of local files.

        @param files: List of local files.
        @type files: C{list} of L{str}.

        @param remote: Remote path for the request relative to current working
            directory.
        @type remote: L{str}

        @return: A deferred which fires when transfer is done.
        Nr7  )r1   r   rú   s      r2   r2  zStdioClient._putMultipleFilesÔ  s   € ð ×&Ñ& t¨U°FÓ;Ð;r4   c                 óæ  — t        |t        j                  «      r| j                  |«       nV|rTt        |t        «      r|j                  d«      }| j                  |«       |j                  d«      s| j                  d«       d}|r%|s#	 |j                  d«      }t        |d«      }|r|sŒ#|sy|r|}nZt        j                  j                  |«      d   }t        j                  j                  ||«      }t        j                   |||f«       | j#                  |«      }	|	j%                  | j&                  ||«       |	S # t        $ r( | j                  t        j                  «       «       d}Y ŒÈw xY w)aˆ  
        Perform an upload for the next file in the list of local files.

        @param previousResult: Result form previous file form the list.
        @type previousResult: L{str}

        @param files: List of local files.
        @type files: C{list} of L{str}

        @param remotePath: Remote path for the request relative to current
            working directory.
        @type remotePath: L{str}

        @param single: A flag which signals if this is a transfer for a single
            file in which case we use the exact remote path
        @type single: L{bool}

        @return: A deferred which fires when transfer is done.
        r”   rƒ   Nr   Úrbr+   )r•   r   r\   r¿   r;   r–   rš   rÆ   r  rô   rZ   rË   r’   r/   rÌ   r   r™   Ú_putRemoteFiler  r8  )
r1   ÚpreviousResultr   r)   r6  ÚcurrentFileÚlocalStreamrú   rÓ   r§   s
             r2   r8  zStdioClient._cbPutMultipleNextã  s<  € ô( �n¤g§o¡oÔ6Ø×Ñ˜~Õ.ÙÜ˜.¬#Ô.Ø!/×!6Ñ!6°wÓ!?�Ø×"Ñ" >Ô2Ø!×*Ñ*¨5Ô1Ø×&Ñ& uÔ-àˆÙ™Kð#Ø#Ÿi™i¨›l�Ü" ;°Ó5�ñ šKñ ØáØ‰Fä—7‘7—=‘= Ó-¨aÑ0ˆDÜ—W‘W—\‘\ *¨dÓ3ˆFÜ�G‰G�T˜6 :Ð.Ô/à×Ñ ¨VÓ4ˆØ	�	‰	�$×)Ñ)¨5°*Ô=Øˆøô# !ò #Ø×"Ñ"¤7§?¡?Ó#4Ô5Ø"’ð#ús   Â
D? Ä?.E0Å/E0c                 óh  — t         j                  j                  | j                  |«      }t        j
                  t        j                  z  t        j                  z  }| j                  j                  ||i «      }|j                  | j                  |«       |j                  | j                  |«       |S )aW  
        Do an upload request.

        @param localStream: Local stream from where data is read.
        @type localStream: File like object.

        @param remotePath: Remote path for the request relative to current working directory.
        @type remotePath: L{str}

        @return: A deferred which fires when transfer is done.
        )rË   r’   rÌ   r†   r   Ú	FXF_WRITEÚ	FXF_CREATÚ	FXF_TRUNCr…   rö   r‹   Ú_cbPutOpenFilerh   rù   )r1   r?  r)   rú   Úflagsr§   s         r2   r<  zStdioClient._putRemoteFile  s‚   € ô —‘—‘˜d×3Ñ3°ZÓ@ˆÜ×&Ñ&¬×)?Ñ)?Ñ?Ä,×BXÑBXÑXˆØ�K‰K× Ñ  ¨°Ó3ˆØ	�‰�d×)Ñ)¨;Ô7Ø	�‰�T—_‘_ kÔ2Øˆr4   c                 ó¤  — | j                   j                  j                  j                  d   }| j                  rt        |«      }g }g }| j                  j                  «       }t        |«      D ]+  }| j                  d ||||«      }|sŒ|j                  |«       Œ- t        j                  |d¬«      }	|	j                  | j                  ||«       |	S )Nr   r+   r  )r…   r—   rj   r	   rˆ   rt   r   r  r  Ú_cbPutWriter  r   r  r‹   Ú
_cbPutDone)
r1   r	  rü   r  r  r  r  rT   r§   r  s
             r2   rD  zStdioClient._cbPutOpenFile+  s·   € Ø—k‘k×+Ñ+×0Ñ0×8Ñ8¸ÑDˆØ×ÒÜ˜R“ˆBØˆØˆØ—L‘L×(Ñ(Ó*ˆ	Ü�{Ó#ò 	 ˆAØ× Ñ   r¨2¨v°yÓAˆAÚØ—‘˜Q•ð	 ô ×Ñ ¸Ô:ˆØ
�‰�t—‘¨¨BÔ/Øˆ	r4   c                 óV  — | j                  |«      }|\  }}|j                  |«       |j                  |«      }	| j                  r0|xj                  t        |	«      z  c_        | j                  ||«       |	r3|j                  ||	«      }
|
j                  | j                  ||||«       |
S y r5   )
r!  rx   Úreadrˆ   rw   r$  r%  Ú
writeChunkr‹   rG  )r1   r/  r	  rü   r  r  r  r(  rz   r'  r§   s              r2   rG  zStdioClient._cbPutWrite:  s“   € Ø×"Ñ" 6Ó*ˆØ‰ˆˆtØ
�‰�ŒØ�w‰w�t‹}ˆØ×ÒØ�HŠHœ˜D›	Ñ!�HØ×"Ñ" 2 yÔ1ÙØ—‘˜e TÓ*ˆAØ�M‰M˜$×*Ñ*¨B°°F¸IÔFØˆHàr4   c                 ó´   — |j                  «        |j                  «        | j                  r| j                  d«       d|j                  › d|j                  › �S )Nr  r,  r-  )rÒ   rˆ   rš   rÓ   r.  s       r2   rH  zStdioClient._cbPutDoneI  sF   € Ø
�‰Œ
Ø
�‰Œ
Ø×ÒØ×"Ñ" 4Ô(Ø˜bŸg™g˜Y d¨2¯7©7¨)Ð4Ð4r4   c                 ó.   — t        j                  |«       y r5   )rË   Úchdirr‘   s     r2   Úcmd_LCDzStdioClient.cmd_LCDP  s   € Ü
�‰��r4   c                 óÚ   ‡ — ‰ j                  |«      \  }}‰ j                  |«      \  }}t        ˆ fd„||f«      \  }}‰ j                  j                  ||«      j	                  t
        «      S )Nc                 óX   •— t         j                  j                  ‰j                  | «      S r5   ©rË   r’   rÌ   r†   ©Úxr1   s    €r2   ú<lambda>z$StdioClient.cmd_LN.<locals>.<lambda>W  ó   ø€ ”b—g‘g—l‘l 4×#8Ñ#8¸!Ó<€ r4   )rÊ   Úmapr…   ÚmakeLinkr‹   rr   )r1   r²   ÚlinkpathÚ
targetpaths   `   r2   Úcmd_LNzStdioClient.cmd_LNS  si   ø€ Ø×*Ñ*¨4Ó0‰ˆ�$Ø×,Ñ,¨TÓ2Ñˆ
�DÜ"Û<¸xÈÐ>Tó 
Ñˆ�*ð �{‰{×#Ñ# H¨jÓ9×EÑEÄgÓNÐNr4   c                 ó&  — g }|j                  «       }|rn|d   ri|d   d   dk(  r^|j                  d«      dd  }|D ]2  }|dk(  r |j                  d«       Œ|dk(  sŒ! |j                  d«       Œ4 |r|d   r|d   d   dk(  rŒ^dj                  |«      }| j	                  |«      \  }}|s| j
                  d	z   }n*t        j                  j                  | j
                  |«      }| j                  |«      }|j                  | j                  |«       |S )
Nr   rœ   r+   rÄ   ÚverboseÚaÚallrª   r,   )r/   r  r  rÌ   rÊ   r†   rË   r’   rò   r‹   Ú_cbDisplayFiles)r1   r²   r	   ÚoptsÚor’   ÚfullPathr§   s           r2   Úcmd_LSzStdioClient.cmd_LS[  s  € ð ˆØ�z‰z‹|ˆÙ�t˜A’w 4¨¡7¨1¡:°Ò#4Ø—8‘8˜A“;˜q˜r�?ˆDØò *�Ø˜’8Ø"�G—N‘N 9Õ-Ø˜#“XØ"�G—N‘N 5Õ)ð	*ñ �t˜A’w 4¨¡7¨1¡:°Ó#4ð �x‰x˜‹~ˆØ×&Ñ& tÓ,‰
ˆˆdÙØ×,Ñ,¨sÑ2‰Hä—w‘w—|‘| D×$9Ñ$9¸4Ó@ˆHØ×Ñ˜XÓ&ˆØ	�‰�d×*Ñ*¨GÔ4Øˆr4   c                 ó
  — |j                  «        d|vr$|D �cg c]  }|d   j                  d«      rŒ|‘Œ }}d|v r|D �cg c]  }|d   ‘Œ	 }}n|D �cg c]  }|d   ‘Œ	 }}|sy dj                  |«      S c c}w c c}w c c}w )Nr_  r   ó   .r]  r+   rƒ   )Úsortr¡   rÌ   )r1   r   r	   rp   Úliness        r2   r`  zStdioClient._cbDisplayFilest  sŒ   € Ø�
‰
ŒØ˜ÑØ %ÖC˜1¨Q¨q©T¯_©_¸TÕ-B’QÐCˆEÐCØ˜ÑØ#(Ö)˜a�Q�q“TÐ)ˆEÑ)à#(Ö)˜a�Q�q“TÐ)ˆEÐ)ÙØà—:‘:˜eÓ$Ð$ùò Dùâ)ùâ)s   ™A6³A6ÁA;ÁB c                 óÜ   — | j                  |«      \  }}t        j                  j                  | j                  |«      }| j
                  j                  |i «      j                  t        «      S r5   )	rÊ   rË   r’   rÌ   r†   r…   ÚmakeDirectoryr‹   rr   ©r1   r’   r²   s      r2   Ú	cmd_MKDIRzStdioClient.cmd_MKDIR�  sR   € Ø×&Ñ& tÓ,‰
ˆˆdÜ�w‰w�|‰|˜D×1Ñ1°4Ó8ˆØ�{‰{×(Ñ(¨¨rÓ2×>Ñ>¼wÓGÐGr4   c                 óÚ   — | j                  |«      \  }}t        j                  j                  | j                  |«      }| j
                  j                  |«      j                  t        «      S r5   )	rÊ   rË   r’   rÌ   r†   r…   ÚremoveDirectoryr‹   rr   rk  s      r2   Ú	cmd_RMDIRzStdioClient.cmd_RMDIR†  sP   € Ø×&Ñ& tÓ,‰
ˆˆdÜ�w‰w�|‰|˜D×1Ñ1°4Ó8ˆØ�{‰{×*Ñ*¨4Ó0×<Ñ<¼WÓEÐEr4   c                 ó4   — t        j                  d|z  «       y )Nzmkdir %s©rË   Úsystemr‘   s     r2   Ú
cmd_LMKDIRzStdioClient.cmd_LMKDIR‹  s   € Ü
�	‰	�*˜tÑ#Õ$r4   c                 óÚ   — | j                  |«      \  }}t        j                  j                  | j                  |«      }| j
                  j                  |«      j                  t        «      S r5   )	rÊ   rË   r’   rÌ   r†   r…   Ú
removeFiler‹   rr   rk  s      r2   Úcmd_RMzStdioClient.cmd_RMŽ  sP   € Ø×&Ñ& tÓ,‰
ˆˆdÜ�w‰w�|‰|˜D×1Ñ1°4Ó8ˆØ�{‰{×%Ñ% dÓ+×7Ñ7¼Ó@Ð@r4   c                 ó4   — t        j                  d|z  «       y )Nzls %srq  )r1   r²   s     r2   Úcmd_LLSzStdioClient.cmd_LLS“  s   € Ü
�	‰	�'˜D‘.Õ!r4   c                 óÚ   ‡ — ‰ j                  |«      \  }}‰ j                  |«      \  }}t        ˆ fd„||f«      \  }}‰ j                  j                  ||«      j	                  t
        «      S )Nc                 óX   •— t         j                  j                  ‰j                  | «      S r5   rR  rS  s    €r2   rU  z(StdioClient.cmd_RENAME.<locals>.<lambda>š  rV  r4   )rÊ   rW  r…   Ú
renameFiler‹   rr   )r1   r²   ÚoldpathÚnewpaths   `   r2   Ú
cmd_RENAMEzStdioClient.cmd_RENAME–  sh   ø€ Ø×)Ñ)¨$Ó/‰ˆ�Ø×)Ñ)¨$Ó/‰ˆ�ÜÛ<¸wÈÐ>Pó
Ñˆ�ð �{‰{×%Ñ% g¨wÓ7×CÑCÄGÓLÐLr4   c                 óL   — | j                   j                  j                  «        y r5   )r…   r—   rÃ   ©r1   r/  s     r2   Úcmd_EXITzStdioClient.cmd_EXITž  s   € Ø�‰×Ñ×,Ñ,Õ.r4   c                 óz   — d| j                   j                  z  }t        |t        «      r|j	                  d«      }|S )NzSFTP version %ir”   )r…   Úversionr•   r;   r–   )r1   r/  rƒ  s      r2   Úcmd_VERSIONzStdioClient.cmd_VERSION£  s3   € Ø# d§k¡k×&9Ñ&9Ñ9ˆÜ�gœsÔ#Ø—n‘n WÓ-ˆGØˆr4   c                  ó   — y)Nae  Available commands:
cd path                         Change remote directory to 'path'.
chgrp gid path                  Change gid of 'path' to 'gid'.
chmod mode path                 Change mode of 'path' to 'mode'.
chown uid path                  Change uid of 'path' to 'uid'.
exit                            Disconnect from the server.
get remote-path [local-path]    Get remote file.
help                            Get a list of available commands.
lcd path                        Change local directory to 'path'.
lls [ls-options] [path]         Display local directory listing.
lmkdir path                     Create local directory.
ln linkpath targetpath          Symlink remote file.
lpwd                            Print the local working directory.
ls [-l] [path]                  Display remote directory listing.
mkdir path                      Create remote directory.
progress                        Toggle progress bar.
put local-path [remote-path]    Put local file.
pwd                             Print the remote working directory.
quit                            Disconnect from the server.
rename oldpath newpath          Rename remote file.
rmdir path                      Remove remote directory.
rm path                         Remove remote file.
version                         Print the SFTP version.
?                               Synonym for 'help'.
rB   r€  s     r2   r¹   zStdioClient.cmd_HELP©  s   € ðr4   c                 ó   — | j                   S r5   r×   r€  s     r2   Úcmd_PWDzStdioClient.cmd_PWDÄ  s   € Ø×$Ñ$Ð$r4   c                 ó*   — t        j                  «       S r5   )rË   Úgetcwdr€  s     r2   Úcmd_LPWDzStdioClient.cmd_LPWDÇ  s   € Ü�y‰y‹{Ðr4   c                 óT   — | j                    | _         d| j                   xr dxs dz  S )Nz%ssing progess bar.ÚUzNot u)rˆ   r€  s     r2   Úcmd_PROGRESSzStdioClient.cmd_PROGRESSÊ  s.   € Ø"&×"5Ñ"5Ð5ˆÔØ$¨×(;Ñ(;Ò(CÀÒ(NÀwÑOÐOr4   c                 óÒ   — | j                   j                  t        j                  «       «      d   }|sd}|rd|g}t	        j
                  ||d¬«      S t        j                  |«       y)zb
        Run C{rest} using the user's shell (or /bin/sh if they do not have
        one).
        é   z/bin/shz-cr+   )ÚerrortooN)Ú_pwdÚgetpwnamrc   rd   r   ÚgetProcessOutputrË   rr  )r1   r²   ÚshellÚcmdss       r2   r¬   zStdioClient.cmd_EXECÎ  sY   € ð
 —	‘	×"Ñ"¤7§?¡?Ó#4Ó5°aÑ8ˆÙØˆEÙØ˜$�<ˆDÜ×)Ñ)¨%°ÀÔBÐBä�I‰I�eÕr4   c                 ó¶  — t        j                  d|z  «       t        j                  j	                  |«      \  }}d|v sd|v rd}nd}|rX|sV| j
                  j                  |«      }|j                  | j                  d«       |j                  | j                  ||«       |S | j
                  j                  |«      }|j                  | j                  |«       |S )Nzlooking up %srî   rï   r+   r   r(   )r   r™   rË   r’   r/   r…   rÍ   r‹   Ú_cbOpenListrh   Ú_ebNotADirectory)r1   rc  ÚheadÚtailr1  r§   s         r2   rò   zStdioClient._remoteGlobÞ  s¹   € Ü�‰� (Ñ*Ô+Ü—W‘W—]‘] 8Ó,‰
ˆˆdØ�$‰;˜# ™+Ø‰DàˆDÙ™à—‘×)Ñ)¨(Ó3ˆAØ�M‰M˜$×*Ñ*¨BÔ/Ø�L‰L˜×.Ñ.°°dÔ;ð ˆð —‘×)Ñ)¨$Ó/ˆAØ�M‰M˜$×*Ñ*¨DÔ1Øˆr4   c                 óf   — g }|j                  «       }|j                  | j                  |||«       |S r5   )rJ  r  Ú_cbReadFile)r1   rÕ   r1  r   r§   s        r2   r—  zStdioClient._cbOpenListï  s0   € ØˆØ�N‰NÓˆØ	�	‰	�$×"Ñ" E¨9°dÔ;Øˆr4   c                 ót   — | j                   j                  |«      }|j                  | j                  |«       |S r5   )r…   rÍ   r‹   r—  )r1   r)  r’   r1  r§   s        r2   r˜  zStdioClient._ebNotADirectoryõ  s/   € Ø�K‰K×%Ñ% dÓ+ˆØ	�‰�d×&Ñ&¨Ô-Øˆr4   c           	      ó°  — t        |t        j                  «      s�|rL |j                  d«      }|j	                  |D �cg c]  }t        j
                  |d   |«      sŒ|‘Œ  c}«       n|j	                  |«       |j                  «       }|j                  | j                  |||«       |S |}|j                  t        «       |j                  «        |S c c}w )Nr”   r   )r•   r   r\   r–   ÚextendÚfnmatchrJ  r  rœ  rµ   r#  rÒ   )r1   r   ÚmatchedFilesrÕ   r1  rp   r§   r)  s           r2   rœ  zStdioClient._cbReadFileú  s«   € Ü˜%¤§¡Ô1ÙØ"�t—{‘{ 7Ó+�Ø×#Ñ#°Ö$U¨1¼¿¹ÈÈ1ÉÈtÕ9T¢QÒ$UÕVà×#Ñ# EÔ*Ø—‘Ó ˆAØ�I‰I�d×&Ñ&¨°iÀÔFØˆHàˆFØ�K‰KœÔ!Ø�O‰OÔØÐùò %Vs   ¾CÁCc                 óB   — g d¢}|D ]  \  }}||kD  sŒ n d|z  z  z   S )N))l           ÚPB)l        ÚTB)i   @ÚGB)i   ÚMB)i   ÚkB)r+   r   z%.1frB   )r1   rz   Ú_abbrevsÚfactorÚsuffixs        r2   Ú_abbrevSizezStdioClient._abbrevSize
  s>   € ò
ˆð 'ò 	‰NˆF�FØ�f‹}Ùð	ð ˜ ™Ñ'¨&Ñ0Ð0r4   c                 ó®   — |dkD  r4t        |dz  «      }|d|z  z  }t        |dz  «      }|d|z  z  }d|||fz  S t        |dz  «      }|d|z  z  }d||fz  S )Ni  é<   z%i:%02i:%02iz	%02i:%02i)r<   )r1   ÚtÚhoursÚminss       r2   Ú_abbrevTimezStdioClient._abbrevTime  sy   € ØˆtŠ8Ü˜˜D™“MˆEØ�˜‘ÑˆAÜ�q˜2‘v“;ˆDØ��d‘‰NˆAØ! U¨D°!Ð$4Ñ4Ð4ä�q˜2‘v“;ˆDØ��d‘‰NˆAØ $¨ Ñ*Ð*r4   c                 óx  — | j                   j                  «       |z
  }|j                  }	 t        j                  dt        j                  dt        j                  d«      «      }|dk(  rd}n||z  }|r|j                  |z
  |z  }nd}|j                  }|j                  r||j                  z  dz  }	nd}	d|	| j                  |«      | j                  |«      | j                  |«      fz  }
|d	   t        |«      t        |
«      z   d	z   z
  d
z  }d|› |› |
› �}| j                  |«       y# t        $ r ddg}Y ŒÔw xY w)aë  
        Update a console progress bar on this L{StdioClient}'s transport, based
        on the difference between the start time of the operation and the
        current time according to the reactor, and appropriate to the size of
        the console window.

        @param f: a wrapper around the file which is being written or read
        @type f: L{FileWrapper}

        @param startTime: The time at which the operation being tracked began.
        @type startTime: L{float}
        Ú4Hr   Ú12345679NéP   rv   éd   z%3i%% %s %sps %s r+   rª   ú)r   r  rw   ÚstructÚunpackÚfcntlÚioctlÚttyÚ
TIOCGWINSZr·   rz   rÓ   r«  r±  r$  rš   )r1   rp   r  Údiffrw   ÚwinSizeÚspeedÚtimeLeftÚfrontÚ
percentageÚbackÚspacesr±   s                r2   r%  zStdioClient._printProgressBar&  sA  € ð �|‰|×#Ñ#Ó%¨	Ñ1ˆØ—‘ˆð	!Ü—m‘m D¬%¯+©+°a¼¿¹ÈÓ*TÓUˆGð �3Š;Ø‰Eà˜D‘LˆEÙØŸ™ ™¨%Ñ/‰HàˆHØ—‘ˆØ�6Š6Ø !§&¡&™.¨CÑ/‰JàˆJØ"ØØ×Ñ˜UÓ#Ø×Ñ˜UÓ#Ø×Ñ˜XÓ&ð	&
ñ 
ˆð ˜!‘*¤ E£
¬S°«YÑ 6¸Ñ :Ñ;¸sÑBˆØ�u�g˜f˜X d VÐ,ˆØ×Ñ˜wÕ'øô/ ò 	!Ø˜R�jŠGð	!ús   «9D) Ä)D9Ä8D9c                 ó6  — |j                  «       }|sy|d   dv r·g }t        |«      }	 t        dt        |«      «      D ]�  }||   }||d   k(  r8dj	                  |«      dj	                  ||dz   d «      j                  «       fc S |dk(  r0||= ||   dvrt        d	||   › �«      ‚|j                  ||   «       Œ}|j                  ||   «       Œ’ 	 |j                  dd«      }t        |«      dk(  r|d   dfS |d   |d   fS # t        $ r t        d
«      ‚w xY w)aW  
        Parse line received as command line input and return first filename
        together with the remaining line.

        @param line: Arguments received from command line input.
        @type line: L{str}

        @return: Tupple with filename and rest. Return empty values when no path was not found.
        @rtype: C{tupple}
        )r(   r(   r   z'"r+   r(   Nú\z'"\zbad quote: \zunterminated quote)	r­   Úlistr  r$  rÌ   r    Ú
IndexErrorr  r/   )r1   r¦   ÚretrT   Úcs        r2   rÊ   zStdioClient._getFilenameP  s;  € ð �z‰z‹|ˆÙØØ�‰7�eÑØˆCÜ˜“:ˆDð7Ü˜q¤# d£)Ó,ò 
,�AØ˜Q™�AØ˜D ™G’|Ø!Ÿw™w s›|¨R¯W©W°T¸!¸a¹%¸'°]Ó-C×-JÑ-JÓ-LÐLÒLØ˜dšØ  ˜GØ ™7¨'Ñ1Ü",¨}¸TÀ!¹W¸IÐ-FÓ"GÐGØŸ
™
 4¨¡7Õ+àŸ
™
 4¨¡7Õ+ñ
,ð �j‰j˜˜qÓ!ˆÜˆs‹8�qŠ=Ø�q‘6˜2�:Ðà�q‘6˜3˜q™6�>Ð!øô ò 7Ü Ð!5Ó6Ð6ð7ús   ©AD ÂAD ÄDr5   )NN)F)Dr6   r7   r8   Úpwdr‘  rÁ   Ú	delimiterr   r|   rŽ   rŒ   rš   r¨   r£   r¿   r�   r¤   r¥   rÐ   rÎ   rÔ   rÝ   rä   rç   rÜ   rý   ró   rÿ   rù   rø   r  r!  r  r  r4  r3  r2  r8  r<  rD  rG  rH  rO  r[  rd  r`  rl  ro  rs  rv  rx  r~  r�  Úcmd_QUITr„  r¹   r‡  rŠ  r�  r¬   rò   r—  r˜  rœ  r«  r±  r%  rÊ   rB   r4   r2   r‚   r‚   �   sO  „ Ø€Dà	€BØ€Ià€Gó1ò@òò)ò
*ò(ò(
+ò-òòòòò%òòòóòò0;òò$òFòò&òò<5ò6ò>Kò<ó3òjò&òò5òòOòò2%òHò
Fò
%òAò
"òMò/ð €Hòòò6%òòPòò ò"òò
 ò 1ò 
+ò((óT#"r4   r‚   zcmd_?c                   ó   — e Zd Zd„ Zy)re   c                 ó6   — | j                  t        «       «       y r5   )ÚopenChannelÚ
SSHSessionr�   s    r2   ÚserviceStartedzSSHConnection.serviceStartedz  s   € Ø×Ñœ›Õ&r4   N)r6   r7   r8   rÓ  rB   r4   r2   re   re   y  s   „ ó'r4   re   c                   ó|   — e Zd ZU dZeed<   ej                  Zeed<   d„ Z	d„ Z
dededd	fd
„Zd„ Zd„ Zd„ Zd„ Zd„ Zy	)rÒ  s   sessionrÓ   rO   c                 ó”  — t        j                  d| j                  z  «       | j                  j                  d   j                  d«      rd}nd}| j                  j                  | |t        j                  | j                  j                  d   «      d¬«      }|j                  | j                  «       |j                  t        «       y )Nzsession %s openr    r,   Úexecr+   )Ú	wantReply)r   r™   Úidrj   r	   r¡   ÚsendRequestr   ÚNSr‹   Ú_cbSubsystemrh   ri   )r1   ÚfooÚrequestr§   s       r2   ÚchannelOpenzSSHSession.channelOpen‚  sš   € Ü�‰Ð! D§G¡GÑ+Ô,Ø�9‰9×Ñ˜[Ñ)×4Ñ4°SÔ9Ø‰Gà!ˆGØ�I‰I×!Ñ!Ø�'œ6Ÿ9™9 T§Y¡Y×%6Ñ%6°{Ñ%CÓDÐPQð "ó 
ˆð 	
�‰�d×'Ñ'Ô(Ø	�‰”WÕr4   c                 ó†  — t        j                  «       | _        | j                  j                  | «       | j                  j                  | _        d }| j
                  j                  d   r)| j
                  j                  d   }|dk7  rt        |«      }t        j                  t        | j                  |«      «      | _        y )Nr   rœ   )r   ÚFileTransferClientr…   ÚmakeConnectionÚdataReceivedrj   r	   rô   r   Ú
StandardIOr‚   )r1   rÇ   rp   Úfns       r2   rÛ  zSSHSession._cbSubsystemŽ  sŽ   € Ü"×5Ñ5Ó7ˆŒØ�‰×"Ñ" 4Ô(Ø ŸK™K×4Ñ4ˆÔØˆØ�9‰9×Ñ˜[Ò)Ø—‘×"Ñ" ;Ñ/ˆBØ�SŠyÜ˜“H�Ü×%Ñ%¤k°$·+±+¸qÓ&AÓBˆ�
r4   r®  r'  ÚreturnNc                 óø   — |t         j                  k(  rgt        j                  dt	        |«      z  «       | j
                  j                  |j                  dd«      «       | j
                  j                  «        y y )Nzgot %s stderr datar”   Úbackslashreplace)	r   ÚEXTENDED_DATA_STDERRr   r™   r$  rO   r˜   rŸ   Úflush)r1   r®  r'  s      r2   ÚextReceivedzSSHSession.extReceived™  s]   € Ø”
×/Ñ/Ò/Ü�G‰GÐ(¬3¨t«9Ñ4Ô5ðl �K‰K×Ñ˜dŸk™k¨'Ð3EÓFÔGØ�K‰K×ÑÕðq 0r4   c                 ób   — t        j                  d«       | j                  j                  «        y )Nzgot eof)r   r™   r   ÚloseWriteConnectionr�   s    r2   ÚeofReceivedzSSHSession.eofReceivedÔ  s   € Ü�‰�	ÔØ�
‰
×&Ñ&Õ(r4   c                 ój   — t        j                  d| z  «       | j                  j                  | «       y )Nzremote side closed %s)r   r™   rj   Ú	sendCloser�   s    r2   ÚcloseReceivedzSSHSession.closeReceivedØ  s&   € Ü�‰Ð'¨$Ñ.Ô/Ø�	‰	×Ñ˜DÕ!r4   c                 óL   — 	 t        j                  «        y # t        $ r Y y w xY wr5   )r   rY   rZ   r�   s    r2   ÚclosedzSSHSession.closedÜ  s"   € ð	Ü�L‰L�NøÜò 	Ùð	ús   ‚ —	#¢#c                 ó8   — | j                   j                  «        y r5   )r   ÚpauseProducingr�   s    r2   ÚstopWritingzSSHSession.stopWritingâ  s   € Ø�
‰
×!Ñ!Õ#r4   c                 ó8   — | j                   j                  «        y r5   )r   ÚresumeProducingr�   s    r2   ÚstartWritingzSSHSession.startWritingå  s   € Ø�
‰
×"Ñ"Õ$r4   )r6   r7   r8   rÓ   rž   r=   rF   rO   r   rÞ  rÛ  r<   rê  rí  rð  rò  rõ  rø  rB   r4   r2   rÒ  rÒ  ~  sY   … Ø€Dˆ%ÓØ—Z‘Z€FˆFÓò
ò	Cð9 ˜Sð 9 ¨ð 9 °$ó 9 òv)ò"òò$ó%r4   rÒ  Ú__main__)6Ú__doc__rº  r   rc   r1  rË   rÌ  r  r¸  rF   r¼  Útypingr   r   r   r   Útwisted.conch.clientr   r   r	   Útwisted.conch.sshr
   r   r   r   Útwisted.internetr   r   r   r   Útwisted.protocolsr   Útwisted.pythonr   r   r   Útwisted.python.filepathr   ÚConchOptionsr   rR   r]   rQ   ri   rr   rt   ÚLineReceiverr‚   Úsetattrr¹   re   Ú
SSHChannelrÒ  r6   rB   r4   r2   ú<module>r     sé   ðñ
ó Û Û Û Û 	Û 
Û Û Û 
Û 
ß 0Ó 0ç :Ñ :ß GÓ Gß 9Ó 9Ý #ß .Ñ .Ý ,ô&�G×(Ñ(ô &òDò,
òGò&	ò	÷%ñ %ôf"�%×$Ñ$ô f"ñR ˆ�W˜k×2Ñ2Ô 3ô'�J×,Ñ,ô 'ô
h%�×#Ñ#ô h%ðV ˆzÒÙ…Eð r4   