o
    ji                     @   s   d dl Z d dlZd dlmZ d dlT d dlT d dlT G dd dZG dd dZG dd	 d	Z	i 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eeeeee e!e"e#e$e%e&dZ'dS )    N)NTStatus)*c                   @   6   e Zd Zd
ddZedd Zedd Zdd	 ZdS )SMB2CompressionNc                 C      || _ || _d S Nheaderdataselfr	   r
    r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/protocol/smb2/message.py__init__
      
zSMB2Compression.__init__c                 C      t t| S r   )r   from_bufferioBytesIObbuffr   r   r   
from_bytes      zSMB2Compression.from_bytesc                 C   T   t  }|  }| d}| |d |dkrt| |_ntd| |  |_|S )N   r      z+Unknown packet type for SMB2Compression! %s)	r   tellreadseek SMB2Header_COMPRESSION_TRANSFORMr   r	   	Exceptionr
   buffmsgpostr   r   r   r         

zSMB2Compression.from_bufferc                 C      | j  }|| j7 }|S r   r	   to_bytesr
   r   r%   r   r   r   r)          

zSMB2Compression.to_bytesNN__name__
__module____qualname__r   staticmethodr   r   r)   r   r   r   r   r   	       


r   c                   @   r   )SMB2TransformNc                 C   r   r   r   r   r   r   r   r   &   r   zSMB2Transform.__init__c                 C   r   r   )r3   r   r   r   r   r   r   r   r   *   r   zSMB2Transform.from_bytesc                 C   r   )Nr   r      z)Unknown packet type for SMB2Transform! %s)	r3   r   r   r   SMB2Header_TRANSFORMr   r	   r    r
   r!   r   r   r   r   .   r&   zSMB2Transform.from_bufferc                 C   r'   r   r(   r*   r   r   r   r)   <   r+   zSMB2Transform.to_bytesr,   r-   r   r   r   r   r3   %   r2   r3   c                   @   sR   e Zd ZddefddZedd ZedddZed	d
 Zdd Z	dd Z
dS )SMB2MessageNr	   c                 C   r   r   )r	   command)r   r	   r7   r   r   r   r   B   r   zSMB2Message.__init__c                 C   s   t t| | S r   )r6   r   r   r   r   r   r   r   r   F   s   zSMB2Message.from_bytesc              
   C   sh  t  }t| |_tj|jjv r| dd t| |_|jj	t
jkrXtj|jjv rX|jj	t
jkr8|jjjdksX|  }tj| ddd}| |d |dkrXt| |_|S tj|jjv rr|jjtjkrrt|dd  |_|S |jjj}ztj|jjv r|d7 }n|d	7 }t| | |_W |S  ty } zdd l}|  t| |_W Y d }~|S d }~ww )
Nr   SESSION_SETUP   little)	byteorder	   @   _REPLY_REQ)r6   SMB2Header_SYNCr   r	   SMB2HeaderFlagSMB2_FLAGS_ASYNC_COMMANDFlagsr   SMB2Header_ASYNCStatusr   SUCCESSSMB2_FLAGS_SERVER_TO_REDIRMORE_PROCESSING_REQUIREDCommandnamer   intr   r   ERROR_REPLYr7   SMB2CommandREAD
READ_REPLYcommand2objectr    	traceback	print_excSMB2NotImplementedCommand)r"   r   r#   r$   structure_size	classnameerQ   r   r   r   r   J   s<   

zSMB2Message.from_bufferc                 C   sB   |   }| dtj ttj| dddd}| |tj dS )zL
		jumping to the header flags and check if the AYSNC command flag is set
		      r:   F)r;   signedN)r   r   r   SEEK_SETrA   rK   r   r   )r"   r$   flagsr   r   r   isAsynct   s
   zSMB2Message.isAsyncc                 C   s   | j  }|| j 7 }|S r   )r	   r)   r7   r*   r   r   r   r)      s   
zSMB2Message.to_bytesc                 C   s$   d}|t | j7 }|t | j7 }|S )Nz== SMBv2 Message ==)reprr	   r7   r*   r   r   r   __repr__   s   zSMB2Message.__repr__r,   r   )r.   r/   r0   r@   r   r1   r   r   r\   r)   r^   r   r   r   r   r6   A   s    
)

r6   NEGOTIATE_REQNEGOTIATE_REPLYSESSION_SETUP_REQSESSION_SETUP_REPLYTREE_CONNECT_REQTREE_CONNECT_REPLY
CREATE_REQCREATE_REPLYREAD_REQrO   QUERY_INFO_REPLYQUERY_INFO_REQQUERY_DIRECTORY_REQQUERY_DIRECTORY_REPLYTREE_DISCONNECT_REPLYTREE_DISCONNECT_REQECHO_REQ)
ECHO_REPLY
LOGOFF_REQLOGOFF_REPLYrL   	CLOSE_REQCLOSE_REPLYWRITE_REPLY	WRITE_REQFLUSH_REPLY	FLUSH_REQ	IOCTL_REQIOCTL_REPLY)(enumr   aiosmb.wintypes.ntstatusr   aiosmb.protocol.smb2.headersaiosmb.protocol.smb2.commands"aiosmb.protocol.smb2.command_codesr   r3   r6   r_   r`   ra   rb   rc   rd   re   rf   rg   rO   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rL   rr   rs   rt   ru   rv   rw   rx   ry   rP   r   r   r   r   <module>   sr    J	
