o
    Žõ±jø  ã                   @   s^   d dl Z d dlZd dlmZ d dlmZ G dd„ dejƒZG dd„ dejƒZG dd	„ d	ƒZ	dS )
é    N)Ú
SMBCommand)ÚNTStatusc                   @   s,   e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
ÚSMBHeaderFlagsEnumé   é   é   é   é   é    é@   é€   N)Ú__name__Ú
__module__Ú__qualname__ÚSMB_FLAGS_LOCK_AND_READ_OKÚSMB_FLAGS_BUF_AVAILÚReservedÚSMB_FLAGS_CASE_INSENSITIVEÚSMB_FLAGS_CANONICALIZED_PATHSÚSMB_FLAGS_OPLOCKÚSMB_FLAGS_OPBATCHÚSMB_FLAGS_REPLY© r   r   ú�/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/protocol/smb/header.pyr      s    r   c                   @   s0   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )ÚSMBHeaderFlags2Enumr   r   r   r   i   i   i    i @  i €  N)r   r   r   ÚSMB_FLAGS2_LONG_NAMESÚSMB_FLAGS2_EASÚ!SMB_FLAGS2_SMB_SECURITY_SIGNATUREÚSMB_FLAGS2_IS_LONG_NAMEÚSMB_FLAGS2_EXTENDED_SECURITYÚSMB_FLAGS2_DFSÚSMB_FLAGS2_PAGING_IOÚSMB_FLAGS2_NT_STATUSÚSMB_FLAGS2_UNICODEr   r   r   r   r      s    r   c                   @   sJ   e Zd Zdd„ Zedd„ ƒZedd„ ƒZedd	d
„ƒZdd„ Zdd„ Z	dS )Ú	SMBHeaderc                 C   sR   d| _ d | _d | _d | _d | _d| _d| _d| _d| _d| _	d| _
d| _d| _d S )Nó   ÿSMBr   ó           iÿÿ  )ÚProtocolÚCommandÚStatusÚFlagsÚFlags2ÚPIDHighÚSecurityFeaturesÚ	Signaturer   ÚTIDÚPIDLowÚUIDÚ	MessageId)Úselfr   r   r   Ú__init__   s   
zSMBHeader.__init__c                 C   s   t  t | ¡¡S )N)r$   Úfrom_bufferÚioÚBytesIO)Úbbuffr   r   r   Ú
from_bytes.   s   zSMBHeader.from_bytesc                 C   sN  t ƒ }|  d¡|_|jdksJ dƒ‚ttj|  d¡ddd�ƒ|_ttj|  d¡ddd�ƒ|_t	tj|  d¡ddd�ƒ|_
ttj|  d¡ddd�ƒ|_tj|  d¡ddd�|_tj|jv rc|  d	¡|_n|  d	¡|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_|S )
Nr   r%   zSMBv1 Header Magic incorrect!r   ÚlittleF©Ú	byteorderÚsignedr   r   )r$   Úreadr'   r   Úintr9   r(   r   r)   r   r*   r   r+   r,   r   r-   r.   r   r/   r0   r1   r2   )ÚbuffÚhdrr   r   r   r5   2   s"   zSMBHeader.from_bufferr   Nc                 C   s~   t ƒ }d|_| |_||_||_||_|	|_tj|jv r'|d u r#t	dƒ‚||_
n|d ur.||_d|_||_|
|_||_||_|S )Nr%   zSSMB_FLAGS2_SMB_SECURITY_SIGNATURE is present but SecurityFeatures was not supplied!r   )r$   r'   r(   r)   r*   r+   r,   r   r   Ú	Exceptionr-   r.   r   r/   r0   r1   r2   )ÚcommandÚstatusÚflagsÚflags2ÚuidÚmidÚtidÚsecurityfeaturesÚ	signatureÚpidhighÚpidlowrA   r   r   r   Ú	constructI   s&   zSMBHeader.constructc                 C   s   | j }|| jjjdddd�7 }|| jjjdddd�7 }|| jjdddd�7 }|| jjjdddd�7 }|| jjdddd�7 }| jd urH|| j7 }n| j	d urS|| j	7 }n|d7 }|| j
jdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|| jjdddd�7 }|S )Nr   r:   Fr;   r   r   r&   )r'   r(   ÚvalueÚto_bytesr)   r*   r+   r,   r-   r.   r   r/   r0   r1   r2   ©r3   Útr   r   r   rP   c   s"   

zSMBHeader.to_bytesc                 C   s°   d}|d| j j 7 }|dt| jƒ 7 }|dt| jƒ 7 }|d| j 7 }|d| jd ur/| j ¡ nd 7 }|d| j 7 }|d	| j	 7 }|d
| j
 7 }|d| j 7 }|d| j 7 }|S )Nz===SMBHeader===
zCommand: %s
zFlags:   %s
zFlags2:  %s
zPIDHigh: %s
zSecurityFeatures: %s
ÚNONEzReserved: %s
z	TID: %s
zPIDLow: %s
z	UID: %s
z	MID: %s
)r(   ÚnameÚreprr*   r+   r,   r-   Úhexr   r/   r0   r1   r2   rQ   r   r   r   Ú__repr__w   s    zSMBHeader.__repr__)r   r   r   NNr   r   )
r   r   r   r4   Ústaticmethodr9   r5   rN   rP   rW   r   r   r   r   r$      s    

r$   )
r6   ÚenumÚ!aiosmb.protocol.smb.command_codesr   Úaiosmb.wintypes.ntstatusr   ÚIntFlagr   r   r$   r   r   r   r   Ú<module>   s    