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    