U
    cc                  6   @   s  d dl Z d dlZd dlZd dlmZ d dlmZmZ d dlm	Z	 d dl
mZmZ edd\ZZZZZZZZZZZZZZZZZZZ Z!edd	\Z"Z#Z$Z%Z&ed
d\Z'Z(d Z)edd\Z*Z+Z,Z-Z.Z/Z0Z1dddddddddg	Z2dZ3dZ4dZ5dZ6dZ7dZ8dZ9ededededed ed!ed"ed#ed$ed%ed&ed'ed(ed)ed*ed+ed,ed-e d.e!d/e"d0e#d1e$d2e%d3e&d4e'd5e(d6iZ:G d7d8 d8e;Z<G d9d: d:e=Z>dS );    N)util)asbytesDEBUG)Message)byte_chrbyte_ord      e   j         	   ZSuccesszEnd of filezNo such filezPermission deniedZFailurezBad messagezNo connectionzConnection lostzOperation unsupported                   initversionopenclosereadwritelstatfstatZsetstatZfsetstatZopendirZreaddirremovemkdirrmdirrealpathstatrenamereadlinksymlinkstatushandledatanameattrsextendedZextended_replyc                   @   s   e Zd ZdS )	SFTPErrorN)__name__
__module____qualname__ r/   r/   1/tmp/pip-unpacked-wheel-rglolp_m/paramiko/sftp.pyr+   x   s   r+   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )BaseSFTPc                 C   s   t d| _d | _d| _d S )Nzparamiko.sftpF)r   Z
get_loggerloggersockultra_debug)selfr/   r/   r0   __init__}   s    zBaseSFTP.__init__c                 C   sL   |  ttdt |  \}}|tkr0tdtd|d d d }|S )N>IIncompatible sftp protocolr   r   )	_send_packetCMD_INITstructpack_VERSION_read_packetCMD_VERSIONr+   unpack)r5   tr'   r   r/   r/   r0   _send_version   s    zBaseSFTP._send_versionc                 C   sf   |   \}}|tkrtdtd|d d d }ddg}t }|t |j|  | 	t
| |S )Nr8   r7   r   r   z
check-filezmd5,sha1)r>   r:   r+   r;   r@   r   Zadd_intr=   addr9   r?   )r5   rA   r'   r   Zextension_pairsmsgr/   r/   r0   _send_server_version   s    

zBaseSFTP._send_server_versionc                 G   s   | j j||f|  d S )N)r2   log)r5   levelrD   argsr/   r/   r0   _log   s    zBaseSFTP._logc                 C   sH   t |dkrD| j|}|dkr&t |t |kr6d S ||d  }q d S )Nr   )lenr3   sendEOFError)r5   outnr/   r/   r0   
_write_all   s    zBaseSFTP._write_allc                 C   s   t  }|dkrt| jtjrTt| jgg g d\}}}t|dkr| j|}q`qn| j|}t|dkrrt ||7 }|t|8 }q|S )Nr   g?)bytes
isinstancer3   socketselectrJ   recvrL   )r5   rN   rM   r   r   errxr/   r/   r0   	_read_all   s    zBaseSFTP._read_allc                 C   sP   t |}tdt|d t| | }| jrB| tt	|d | 
| d S )Nr7   r   zOUT: )r   r;   r<   rJ   r   r4   rI   r   r   format_binaryrO   )r5   rA   packetrM   r/   r/   r0   r9      s
     zBaseSFTP._send_packetc                 C   s   |  d}t|d rtdtd|d }|  |}| jrR| tt	|d |dkrvt|d }||dd  fS dt
 fS )Nr   r   zGarbage packet receivedr7   zIN: r   )rW   r   r+   r;   r@   r4   rI   r   r   rX   rP   )r5   rV   sizer'   rA   r/   r/   r0   r>      s    

zBaseSFTP._read_packetN)r,   r-   r.   r6   rB   rE   rI   rO   rW   r9   r>   r/   r/   r/   r0   r1   |   s   

r1   )?rS   rR   r;   Zparamikor   Zparamiko.commonr   r   Zparamiko.messager   Zparamiko.py3compatr   r   ranger:   r?   ZCMD_OPENZ	CMD_CLOSEZCMD_READZ	CMD_WRITEZ	CMD_LSTATZ	CMD_FSTATZCMD_SETSTATZCMD_FSETSTATZCMD_OPENDIRZCMD_READDIRZ
CMD_REMOVEZ	CMD_MKDIRZ	CMD_RMDIRZCMD_REALPATHZCMD_STATZ
CMD_RENAMEZCMD_READLINKZCMD_SYMLINKZ
CMD_STATUSZ
CMD_HANDLEZCMD_DATAZCMD_NAMEZ	CMD_ATTRSZCMD_EXTENDEDZCMD_EXTENDED_REPLYZSFTP_OKZSFTP_EOFZSFTP_NO_SUCH_FILEZSFTP_PERMISSION_DENIEDZSFTP_FAILUREZSFTP_BAD_MESSAGEZSFTP_NO_CONNECTIONZSFTP_CONNECTION_LOSTZSFTP_OP_UNSUPPORTEDZ	SFTP_DESCZSFTP_FLAG_READZSFTP_FLAG_WRITEZSFTP_FLAG_APPENDZSFTP_FLAG_CREATEZSFTP_FLAG_TRUNCZSFTP_FLAG_EXCLr=   Z	CMD_NAMES	Exceptionr+   objectr1   r/   r/   r/   r0   <module>   s   
                           