
    a                        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/Z0Z1g dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9i 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!d'e"d(e#d)e$d*e%d+e&d,e'd-e(d.i
Z: G d/ d0e;      Z< G d1 d2e=      Z>y)3    N)util)asbytesDEBUG)Message)byte_chrbyte_ord      e   j         	   )	SuccesszEnd of filezNo such filezPermission deniedFailurezBad messagezNo connectionzConnection lostzOperation unsupported                   initversionopenclosereadwritelstatfstatsetstatfsetstatopendirreaddirremovemkdirrmdirrealpathstatrenamereadlinksymlinkstatushandledatanameattrsextendedextended_replyc                       e Zd Zy)	SFTPErrorN)__name__
__module____qualname__     -lib/python3.12/site-packages/paramiko/sftp.pyr4   r4   x   s    r9   r4   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
BaseSFTPc                 T    t        j                  d      | _        d | _        d| _        y )Nzparamiko.sftpF)r   
get_loggerloggersockultra_debug)selfs    r:   __init__zBaseSFTP.__init__}   s!    ooo6	 r9   c                     | j                  t        t        j                  dt                     | j                         \  }}|t        k7  rt        d      t        j                  d|d d       d   }|S )N>IIncompatible sftp protocolr   r   )	_send_packetCMD_INITstructpack_VERSION_read_packetCMD_VERSIONr4   unpack)rB   tr.   r   s       r:   _send_versionzBaseSFTP._send_version   se    (FKKh$?@##%4899--d2Ah/2 r9   c                    | j                         \  }}|t        k7  rt        d      t        j                  d|d d       d   }ddg}t               }|j                  t                |j                  |  | j                  t        |       |S )NrF   rE   r   r   z
check-filezmd5,sha1)rL   rH   r4   rI   rN   r   add_intrK   addrG   rM   )rB   rO   r.   r   extension_pairsmsgs         r:   _send_server_versionzBaseSFTP._send_server_version   s     ##%4=899--d2Ah/2'4iH!+s+r9   c                 @     | j                   j                  ||g|  y )N)r?   log)rB   levelrU   argss       r:   _logzBaseSFTP._log   s    s*T*r9   c                     t        |      dkD  rM| j                  j                  |      }|dk  r
t               |t        |      k(  ry ||d  }t        |      dkD  rMy )Nr   )lenr@   sendEOFError)rB   outns      r:   
_write_allzBaseSFTP._write_all   sY    #hl		s#AAvj CH}ab'C #hl 	r9   c                    t               }|dkD  rt        | j                  t        j                        rS	 t	        j                  | j                  gg g d      \  }}}t        |      dkD  r| j                  j                  |      }nR| j                  j                  |      }t        |      dk(  r
t               ||z  }|t        |      z  }|dkD  r|S )Nr   g?)bytes
isinstancer@   socketselectr]   recvr_   )rB   ra   r`   r   r   errxs          r:   	_read_allzBaseSFTP._read_all   s    g!e$))V]]3 '-}}dii["b#'N$D%4y1} IINN1-	  IINN1%1v{j 1HCQKA% !e& 
r9   c                 
   t        |      }t        j                  dt        |      dz         t	        |      z   |z   }| j
                  r*| j                  t        t        j                  |d             | j                  |       y )NrE   r	   zOUT: )r   rI   rJ   r]   r   rA   r[   r   r   format_binaryrb   )rB   rO   packetr`   s       r:   rG   zBaseSFTP._send_packet   sa    kk$Fa08A;>GIIeT//W=>r9   c                 b   | j                  d      }t        |d         rt        d      t        j                  d|      d   }| j                  |      }| j
                  r*| j                  t        t        j                  |d             |dkD  rt        |d         }||dd  fS dt               fS )Nr   r   zGarbage packet receivedrE   zIN: r	   )rk   r   r4   rI   rN   rA   r[   r   r   rm   rd   )rB   rj   sizer.   rO   s        r:   rL   zBaseSFTP._read_packet   s    NN1 AaD>566}}T1%a(~~d#IIeT//f=>!8a!Ad12h;%'zr9   N)r5   r6   r7   rC   rP   rV   r[   rb   rk   rG   rL   r8   r9   r:   r<   r<   |   s*    !+.r9   r<   )?rg   rf   rI   paramikor   paramiko.commonr   r   paramiko.messager   paramiko.py3compatr   r   rangerH   rM   CMD_OPEN	CMD_CLOSECMD_READ	CMD_WRITE	CMD_LSTAT	CMD_FSTATCMD_SETSTATCMD_FSETSTATCMD_OPENDIRCMD_READDIR
CMD_REMOVE	CMD_MKDIR	CMD_RMDIRCMD_REALPATHCMD_STAT
CMD_RENAMECMD_READLINKCMD_SYMLINK
CMD_STATUS
CMD_HANDLECMD_DATACMD_NAME	CMD_ATTRSCMD_EXTENDEDCMD_EXTENDED_REPLYSFTP_OKSFTP_EOFSFTP_NO_SUCH_FILESFTP_PERMISSION_DENIEDSFTP_FAILURESFTP_BAD_MESSAGESFTP_NO_CONNECTIONSFTP_CONNECTION_LOSTSFTP_OP_UNSUPPORTED	SFTP_DESCSFTP_FLAG_READSFTP_FLAG_WRITESFTP_FLAG_APPENDSFTP_FLAG_CREATESFTP_FLAG_TRUNCSFTP_FLAG_EXCLrK   	CMD_NAMES	Exceptionr4   objectr<   r8   r9   r:   <module>r      s  &     * $ 10 
!RL+:?S/ 7Z8Y%*3_ "!
 
!QK	
	   f f w	
 f w w w  *    w w  *!" f#$ *ffw*(7	>		 	Yv Yr9   