o
    Žõ±jÇy  ã                   @   sX  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
 d dlmZ d dlT d dlmZ d dlmZ d dlmZ d dlT d d	lmZ d dlT d dlT d dlT d dlT d dlT d dlT d dlT d dlT d d
lm Z  d dl!m"Z" de#fdd„Z$G dd„ de j%ƒZ&eG dd„ dƒƒZ'eG dd„ dƒƒZ(eG dd„ dƒƒZ)G dd„ dƒZ*dS )é    N)Ú	dataclassÚfield)ÚPath)Úlogger)Ú*)Ú
SMBCommand)ÚNTStatus)Ú
SMBMessage)ÚSMB2Message)ÚFileAttributes)ÚFileInfoClassÚlinux_filetimec                 C   s   t | d d ƒS )Nl    !l
 i€–˜ )Úint)r   © r   ú‘/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/server/serverconnection.pyÚconvert_to_ft   s   r   c                   @   s   e Zd ZdZdZdZdZdS )ÚSMBConnectionStatusÚNEGOTIATINGÚSESSIONSETUPÚRUNNINGÚCLOSEDN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r       s
    r   c                   @   s4   e Zd ZU dZeed< dZeed< dZe	j
ed< dS )Ú	FileEntryNÚfile_idÚpathÚhandle)r   r   r   r   r   Ú__annotations__r   r   r   ÚioÚFileIOr   r   r   r   r   &   s   
 r   c                   @   sL   e Zd ZU eed�Zeeef ed< dZ	e
ed< dZeed< dZeed< dS )Ú	TreeEntry©Údefault_factoryÚfile_entriesNÚhostnamer   Útree_id)r   r   r   r   Údictr$   r   r   r   r%   Ústrr   r   r&   r   r   r   r   r!   ,   s
   
 r!   c                   @   sH   e Zd ZU eed�Zee ed< dZe	ed< dZ
eed< dZeed< dS )	ÚDirEnumStater"   Úentriesr   Úindexr   ÚpatternNÚ
info_class)r   r   r   r   Úlistr*   r(   r   r+   r   r,   r-   r   r   r   r   r   r)   3   s
   
 r)   c                   @   sÊ   e Zd Ze ¡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Z	dd„ Z
d%dd„Zdd„ Zdd„ Zdefdd„Zdefdd„Zdefdd„Zdefdd„Zdefdd„Zdefdd „Zejfd!ed"efd#d$„ZdS )&ÚSMBServerConnectionc                 C   s  || _ | j  |¡| _|| _| j j| _|| _d | _d | _| j j	| _
d| _d| _tj| _i | _i | _i | _i | _d| _| j j| _| j j| _| j j| _| j j| _d| _d| _d| _d| _d| _d| _d| _t j!| _"d| _#t$j%| _&| j
du rz|  j&t$j'O  _&d| _(d | _)d| _i | _*d S )NFé
   r   Té   )+ÚsettingsÚcreate_new_gssapiÚgssapiÚconnection_idÚpreferred_dialectsÚsupported_dialectsÚ
connectionÚincoming_taskÚselected_dialectÚRequireSigningÚsigning_requiredÚencryption_requiredÚlast_treeidr   r   ÚstatusÚOutstandingResponsesEventÚOutstandingRequestsÚOutstandingResponsesÚpending_tableÚSequenceWindowÚMaxTransactSizeÚMaxReadSizeÚMaxWriteSizeÚ
ServerGuidÚSupportsFileLeasingÚSupportsMultiCreditÚSupportsDirectoryLeasingÚSupportsMultiChannelÚSupportsPersistentHandlesÚSupportsEncryptionÚClientCapabilitiesÚNegotiateCapabilitiesÚ	LARGE_MTUÚServerCapabilitiesÚClientSecurityModeÚNegotiateSecurityModeÚSMB2_NEGOTIATE_SIGNING_ENABLEDÚServerSecurityModeÚSMB2_NEGOTIATE_SIGNING_REQUIREDÚ	SessionIdÚ
SessionKeyÚ%_SMBServerConnection__treeid_to_entry)Úselfr2   r8   r5   Úshutdown_evtr   r   r   Ú__init__=   sH   







zSMBServerConnection.__init__c                 Ã   s   �t  |  ¡ ¡| _| jS ©N)ÚasyncioÚcreate_taskÚ#_SMBServerConnection__handle_smb_inr9   ©r[   r   r   r   Úruns   s   €zSMBServerConnection.runc              
   Ã   s�   �z%|   d¡I d H  | jd ur| j ¡  | jd ur$| j ¡ I d H  W d S W d S  tyG } zt ¡  |   d| ¡I d H  W Y d }~d S d }~ww )Nz[INF] Stopping connectionú[ERR] %s)Úprintr9   Úcancelr8   ÚcloseÚ	ExceptionÚ	tracebackÚ	print_exc)r[   Úer   r   r   Ústopw   s   €


ÿ"€þzSMBServerConnection.stopc                 Ã   s6   �| j jd ur| j  d| j› d|› �¡I d H  d S d S )Nz[SMBSERVERCONN][z] )r2   Úlog_callbackr5   )r[   Úmsgr   r   r   re   ‚   s   €$ÿzSMBServerConnection.printc                 C   s   |  j d7  _ | j S ©Nr1   )r>   rb   r   r   r   Úget_new_tree_id†   s   z#SMBServerConnection.get_new_tree_idc                 Ã   s
  ��zz�zI| j  ¡ 2 �z?3 dH W }|du r �n4|d dk r&td|d  ƒ‚|d dkr0tdƒ‚|d dkr:tdƒ‚|d dkrïzt |¡}|  d	| ¡I dH  W n tya } ztd
ƒ‚d}~ww | jtjkrq|  	|¡I dH  n~| jtj
kr€|  |¡I dH  no| jtjkrï|jjtjkr–|  |¡I dH  nY|jjtjkr¦|  |¡I dH  nI|jjtjkr¶|  |¡I dH  n9|jjtjkrÆ|  |¡I dH  n)|jjtjkrÖ|  |¡I dH  n|jjtjkræ|  |¡I dH  n	td|jj ƒ q
|d dk�r&t |¡}|  d	| ¡I dH  | jtjk�r|jjtjk�r|  	|¡I dH  n	td|jj ƒ q
t  dd|jj! ¡ |jj!| j"v �rJ| j"|jj!  #¡ I dH  | j"|jj!= q
6 W n% t$j%�ya   Y W |  #¡ I dH  dS    t& '¡  Y W |  #¡ I dH  dS W |  #¡ I dH  dS |  #¡ I dH  w )z±
		Waits from SMB message bytes from the transport in_queue, and fills the connection table.
		This function started automatically when calling connect.
		Pls don't touch it.
		Nr   éü   zUnknown SMB packet type %séý   z2SMB2_COMPRESSED_DATA_HEADER is not implemented yetz7SMB2_COMPRESSED_TRANSFORM_HEADER is not implemented yetéþ   z[PACKET] %sz;Failed to parse SMB data. Probably not implemented feature.z SMB2 command not implemented! %séÿ   z.SMBv1 message recieved! This is unexpected! %sr1   z*__handle_smb_in got new message with Id %s)(r8   Úreadrh   r
   Ú
from_bytesre   r?   r   r   Ú	negotiater   Úsession_setupr   ÚheaderÚCommandÚSMB2CommandÚTREE_CONNECTÚtree_connectÚCREATEÚcreateÚIOCTLÚioctlÚECHOÚechoÚQUERY_DIRECTORYÚquery_directoryÚCLOSErg   r	   r   ÚSMB_COM_NEGOTIATEr   ÚlogÚ	MessageIdrC   rl   r_   ÚCancelledErrorri   rj   )r[   Úmsg_datarn   rk   r   r   r   Ú__handle_smb_inŠ   s|   €
€ÿ
€€Ç€;ý€" z#SMBServerConnection.__handle_smb_inNc              
   Ã   sf  �z–| j tjkrLt|tƒrd}|  jd7  _nd|j_|jjdu r%d|j_| j|j_	| j}|  jd7  _t
 ¡ | j|< | j | ¡ ¡I dH  ||dfW S |jjtjur_| j|j_	|  jd7  _| j|j_|jjsld|j_| j tjkr||jjdu r|d|j_|jj	}t
 ¡ | j|< | j | ¡ ¡I dH  ||dfW S  ty² } zt ¡  dd|fW  Y d}~S d}~ww )zp
		Sends an SMB message to teh remote endpoint.
		msg: SMB2Message or SMBMessage
		Returns: MessageId integer
		r   r1   Né   )r?   r   r   Ú
isinstancer	   rD   ry   ÚCreditChargeÚ	CreditReqr‰   r_   ÚEventr@   r8   ÚwriteÚto_bytesrz   r{   ÚCANCELrX   r   rh   ri   rj   )r[   rn   Úcompression_cbÚ
message_idrk   r   r   r   ÚsendSMBÓ   s@   €



€þzSMBServerConnection.sendSMBc              
   Ã   s\  �z•t |tƒrd|jjv st |tƒr”tƒ }tƒ |_| j|j_tj	|j_
d|j_| j|j_| j|j_| j|j_| j|j_| j|j_tj ¡ |j_tj ¡ |j_| j ¡ |j_d|j_g |j_tƒ |_tj|j_t j!|j_"d|j_#|  $|¡I d H  tj	| _%t&j'| jv | _(t&j)| jv | _*t&j+| jv | _,t-j.| _/W d S  t0y­ } zt1 2¡  W Y d }~d S d }~ww )Nz	SMB 2.???r   r1   )3rŽ   r	   ÚcommandÚDialectsr
   ÚNEGOTIATE_REPLYrV   ÚSecurityModeÚNegotiateDialectsÚSMB202ÚDialectRevisionÚNegotiateContextCountrH   rR   ÚCapabilitiesrE   rF   rG   ÚdatetimeÚutcnowÚ
SystemTimeÚServerStartTimer4   Úget_mechtypes_listÚSecurityBufferÚNegotiateContextOffsetÚNegotiateContextListÚSMB2Header_SYNCry   r{   Ú	NEGOTIATErz   ÚSMB2HeaderFlagÚSMB2_FLAGS_SERVER_TO_REDIRÚFlagsr�   r—   r:   rP   ÚMULTI_CHANNELrL   ÚLEASINGrI   rQ   rJ   r   r   r?   rh   ri   rj   )r[   ÚreqÚreplyrk   r   r   r   rw     sB   € 








€ÿzSMBServerConnection.negotiatec              
   Ã   s  �d }�z0d}| j dkr|  j d7  _ |dk�r2tƒ }tƒ |_d|j_z‡|  d¡I d H  | j |jj¡I d H \|j_}}|  d|jj||f ¡I d H  |d urQ|‚|du r©|jjd u r©tƒ }tƒ |_tj	|j_| j 
¡ I d H \|j_}|d ury|‚tƒ |_tj|j_tj|j_| j |j_ d|j_d|j_tj|j_|  |¡I d H  tj| _W W dS W n tyÄ } zt|ƒ d¡d	kr¾tƒ ‚|‚d }~ww |d
u rñtƒ |_tj|j_tj|j_| j |j_ d|j_d|j_tj |j_|  |¡I d H  |du �r/tƒ |_tj|j_tj|j_| j |j_ d|j_d|j_tj|j_|j jtj!O  _d|j_|  |¡I d H  tj| _W dS W d S  t�yƒ } zB|  d| ¡I d H  tƒ |_tj|j_tj|j_|j jtj!O  _| j |j_ d|j_d|j_tj"|j_|  |¡I d H  W Y d }~dS d }~ww )Né   r   r1   z![INF] Calling authenticate_serverz&[INF] Authenticate results: %s, %s, %sF)FNÚPreauthéÿÿÿÿTr�   )TNrd   )#rX   r
   ÚSESSION_SETUP_REPLYr˜   ÚSessionFlagsre   r4   Úauthenticate_serverÚBufferÚSMB2_SESSION_FLAG_IS_GUESTÚauthenticate_server_finishedr©   ry   r{   ÚSESSION_SETUPrz   r«   r¬   r­   r�   r�   r   ÚSUCCESSÚStatusr—   r   r   r?   rh   r(   ÚfindÚSMBKerberosPreauthFailedÚMORE_PROCESSING_REQUIREDÚSMB2_FLAGS_SIGNEDÚACCESS_DENIED)r[   rn   ÚerrÚmaxiterr±   Úto_continuerk   r   r   r   rx   *  sš   €

 




€€û








µL



€ôz!SMBServerConnection.session_setuprn   c              
   Ã   sÀ  �zÇt  t|j¡}tƒ }tƒ |_tj|j_	t
j|j_| j|j_d|j_|jj|j_tj|j_tƒ |_z|j d¡^}}}}}td| ƒ t|ƒ W n tyU   |j}Y nw | ¡  d¡rctj|j_ntj|j_tj|j_tj |j_!t"j#|j_$d }| j%j& '¡ D ]\}}	| (¡ | (¡ kr‘t|	ƒ} nq|d u r¬tj)|j_|  *|tj|jtj)¡I d H  W d S |  +¡ }
|
|j_,t-d ||
d�| j.|
< |  /|¡I d H  W d S  tyß } zt0 1¡  W Y d }~d S d }~ww )Nr1   ú\zTREE_CONNECT: %szIPC$)r%   r   r&   )2ÚtypingÚcastÚTREE_CONNECT_REQr˜   r
   r©   ry   r{   r|   rz   r«   r¬   r­   rX   r�   r�   r   r¼   r½   ÚTREE_CONNECT_REPLYr   Úsplitre   rh   ÚupperÚendswithÚ	ShareTypeÚPIPEÚDISKÚ
ShareFlagsÚSMB2_SHAREFLAG_MANUAL_CACHINGÚTreeCapabilitiesÚSMB2_SHARE_CAP_NONEr    ÚFileAccessMaskÚGENERIC_ALLÚMaximalAccessr2   ÚsharesÚitemsÚlowerÚBAD_NETWORK_NAMEÚsendSMB2rp   ÚTreeIdr!   rZ   r—   ri   rj   )r[   rn   r˜   r±   Ú_Ú
share_nameÚrestÚmappedÚkÚvr&   rk   r   r   r   r}   ‹  sV   €




ÿ



þ
€ÿz SMBServerConnection.tree_connectc              
   Ã   s&  �zzt  t|j¡}|jtjkrytƒ }tƒ |_t	j
|j_tj|j_| j|j_d|j_|jj|j_tj|j_|jj|j_tƒ |_|j|j_|j|j_|j|j_|j|j_d|j_d|j_|j|j_|j|j_d|j_|  |t	j
|jtj¡I d H  W d S W d S  t y’ } zt! "¡  W Y d }~d S d }~ww )Nr1   r   ó    )#rÇ   rÈ   Ú	IOCTL_REQr˜   ÚCtlCodeÚFSCTL_DFS_GET_REFERRALSr
   r©   ry   r{   r€   rz   r«   r¬   r­   rX   r�   r�   r   ÚFS_DRIVER_REQUIREDr½   r‰   Ú	messageIdÚIOCTL_REPLYÚFileIdÚInputOffsetÚ
InputCountÚOutputOffsetÚOutputCountÚ	Reserved2r¸   rÜ   rh   ri   rj   ©r[   rn   r˜   r±   rk   r   r   r   r�   ¼  s:   €









"ê€ÿzSMBServerConnection.ioctlc              
   Ã   sB  ��z†t  t|j¡}d }|jd u r¥| j|jj j}t	d|j
 ƒ | ¡ r(| ¡ s/td|j
 ƒ‚tƒ }tƒ |_tj|j_tj|j_| j|j_d|j_|jj|j_tj|j_tƒ |_tj|j_tj |j_t!j"|j_!t#| $¡ j%ƒ|j_&t#| $¡ j'ƒ|j_(t#| $¡ j)ƒ|j_*t#| $¡ j)ƒ|j_+d|j_,d|j_-t.j/|j_.d|j_0d|j_1d|j_2nÓ|jj| jvr´td|jj ƒ‚| j|jj }|d u rÇtd|jj ƒ‚|j}|j}|t3|ƒ 4|¡ }| ¡ sàtd| ƒ‚| 5¡ sêtd| ƒ‚| 5¡ �rd}	t6|d	ƒ}t7|||	d
�}
|
|j8|jj0< | $¡ }tƒ }tƒ |_tj|j_tj|j_| j|j_d|j_|jj|j_tj|j_tƒ |_tj|j_tj |j_t!j"|j_!t#|j%ƒ|j_&t#|j'ƒ|j_(t#|j)ƒ|j_*t#|j)ƒ|j_+|j9|j_,|j9|j_-t.j:|j_.|
j;|j_0d|j_1d|j_2|  <|tj|jtj¡I d H  W d S  t�y  } zt= >¡  W Y d }~d S d }~ww )NzOPENING SHARE %szShare %s does not existr1   r   úTree ID %s not foundz#Tree entry for Tree ID %s not foundzFile %s does not existzFile %s is not a fileÚrb)r   r   r   )?rÇ   rÈ   Ú
CREATE_REQr˜   ÚNamerZ   ry   rÝ   r   re   ÚnameÚexistsÚis_dirrh   r
   r©   r{   r~   rz   r«   r¬   r­   rX   r�   r�   r   r¼   r½   ÚCREATE_REPLYÚOplockLevelÚSMB2_OPLOCK_LEVEL_NONEÚCreateOptionsÚFILE_WRITE_THROUGHÚCreateActionÚFILE_CREATEDr   ÚstatÚst_ctimeÚCreationTimeÚst_atimeÚLastAccessTimeÚst_mtimeÚLastWriteTimeÚ
ChangeTimeÚAllocationSizeÚ	EndofFiler   ÚFILE_ATTRIBUTE_DIRECTORYrë   ÚCreateContextsOffsetÚCreateContextsLengthr   Úrelative_toÚis_fileÚopenr   r$   Úst_sizeÚFILE_ATTRIBUTE_NORMALr   rÜ   ri   rj   )r[   rn   r˜   r   Úsharer±   ÚteÚ	file_nameÚ
local_pathr   ÚfeÚfstatrk   r   r   r   r   Ú  s˜   €






















"€ÿzSMBServerConnection.createc           &   
   Ã   s  ��zgt  t|j¡}|jj| jvrtd|jj ƒ‚| j|jj }|j}|}|j	r+|j	nd}|dv r3d}t
| dƒs;i | _|jj|jf}tj|jv sS|| jvsStj|jv r–g }| ¡ D ]0}	|	j}
zddlm} dd l}| ||ƒ|
¡ssW qYW n tyƒ   |dvr�Y qYY nw | |
¡ qYt|d||jd�| j|< | j| }g }|j|jd … D �]Ã}
||
 }	|	 ¡ }tt|jƒƒ}tt|j ƒƒ}tt|j!ƒƒ}tt|j!ƒƒ}|	 "¡ rÒdn|j#}|	 "¡ rÛdn|j#}|	 "¡ råt$j%nt$j&}|
 'd	¡}d
}|dj(dddd�7 }|dj(dddd�7 }||j(dddd�7 }||j(dddd�7 }||j(dddd�7 }||j(dddd�7 }||j(dddd�7 }||j(dddd�7 }||j)j(dddd�7 }|jt*j+k�rl|t,|ƒj(dddd�7 }|dj(dddd�7 }|| }nã|jt*j-k�r„|t,|ƒj(dddd�7 }|| }nË|jt*j.k�rÈ|t,|ƒj(dddd�7 }|dj(dddd�7 }|dj(dddd�7 }|dj(dddd�7 }|d7 }|dj(dddd�7 }|| }n‡|jt*j/k�rút0|ddƒ}||j(dddd�7 }|t,|ƒj(dddd�7 }|dj(dddd�7 }|| }nU|jt*j1k�rN|t,|ƒj(dddd�7 }|dj(dddd�7 }|dj(dddd�7 }|dj(dddd�7 }|d7 }|dj(dddd�7 }t0|ddƒ}||j(dddd�7 }|| }nq¥t,|ƒd dk�rd|ddt,|ƒd   7 }| |¡ q¥|j2�rq|j2nd}d
}d}t3|ƒD ]m\}}t,|ƒ}|d d@ }|| } t,|ƒ}!|!| |k�rš nOd}"|d t,|ƒk �rºt,||d  ƒ}#|!| |  |# |k�rºd}"||7 }|d7 }|"�ræt4|ƒ}|j(dddd�||!|!d …< t5|ƒ}| �rä|d|  7 }�q{	 �q{| j|7  _t6ƒ }$t7ƒ |$_t8j9|$j_:t;j<|$j_| j=|$j_=|jj|$j_d|$j_>|jj?�r|jj?nd|$j_?t,|ƒdk�s2|dk�rL|jt,|jƒk�rLt@jA|$j_BtCƒ |$_|  D|t8j9|$jt@jA¡I d H  W d S t@jE|$j_BtFƒ |$_||$j_G|  D|t8j9|$jt@jE¡I d H  W d S  t�y� }% ztH I¡  W Y d }%~%d S d }%~%ww )Nrò   r   )z\ rÆ   Ú.z. Ú_dir_enum_stater   )Úglob2re)r   N)r*   r+   r,   r-   z	utf-16-lerä   é   ÚlittleF)Úsignedé   Tr1   s                           é   Úst_inoó    iÿÿ  é   iøÿÿÿ)JrÇ   rÈ   ÚQUERY_DIRECTORY_REQr˜   ry   rÝ   rZ   rh   r   ÚFileNameÚhasattrr  rë   ÚQueryDirectoryFlagÚSMB2_RESTART_SCANSr­   ÚSMB2_REOPENÚiterdirrö   Úaiosmb.commons.utils.glob2rer  ÚreÚmatchÚappendr)   ÚFileInformationClassr*   r+   r   r   r   r  r  r  rø   r  r   r
  r  Úencoder“   Úvaluer   ÚFileFullDirectoryInformationÚlenÚFileDirectoryInformationÚFileBothDirectoryInformationÚFileIdFullDirectoryInformationÚgetattrÚFileIdBothDirectoryInformationÚOutputBufferLengthÚ	enumerateÚ	bytearrayÚbytesr
   r©   r{   r„   rz   r«   r¬   rX   r�   r�   r   ÚNO_MORE_FILESr½   ÚERROR_REPLYrÜ   r¼   ÚQUERY_DIRECTORY_REPLYÚDatari   rj   )&r[   rn   r˜   r  r  Ú	base_pathr,   Ú	state_keyr*   Úchildrö   r  r+  ÚstateÚstÚcreation_timeÚlast_access_timeÚlast_write_timeÚchange_timeÚallocation_sizeÚend_of_fileÚattrsÚfilename_bytesÚfixedÚentryr   Úmax_lenÚbufferÚemittedÚiÚcur_lenÚ
padded_lenÚpad_lenÚ	start_posÚcan_chain_nextÚnext_lenr±   rk   r   r   r   r…   3  s  €
"ÿÿÿ






€


*
"
"€ÿz#SMBServerConnection.query_directoryc              
   Ã   sè  �zÛt  t|j¡}tƒ }tƒ |_tj|j_	t
j|j_| j|j_|jj|j_d|j_|jj|j_tj|j_tƒ |_tj|j_d|j_d }|jj| jv r^| j|jj }|j|jv r^|j |j¡}|rt|jrtz|j ¡  W n	 tys   Y nw tj|jv rÒ|d urÒ|j  !¡ }t"t#|j$ƒƒ|j_%t"t#|j&ƒƒ|j_'t"t#|j(ƒƒ|j_)t"t#|j(ƒƒ|j_*|j  +¡ r®dn|j,|j_-|j  +¡ rºdn|j,|j_.|j  +¡ rÇt/j0nt/j1j2|j_/tj|j_|  3|¡I d H  W d S  tyó } zt4 5¡  W Y d }~d S d }~ww )Nr1   r   )6rÇ   rÈ   Ú	CLOSE_REQr˜   r
   r©   ry   r{   r†   rz   r«   r¬   r­   rX   rÝ   r�   r�   r   r¼   r½   ÚCLOSE_REPLYÚ	CloseFlagÚNONEÚReservedrZ   rë   r$   Úpopr   rg   rh   Ú SMB2_CLOSE_FLAG_POSTQUERY_ATTRIBr   r   r   r   r  r  r  r  r  r  r  rø   r  r  r	  r   r
  r  r0  r—   ri   rj   )r[   rn   r˜   r±   r  r  rD  rk   r   r   r   rg   Ø  sR   €





ÿ

€ÿzSMBServerConnection.closec              
   Ã   sÄ   �zIt  t|j¡}tƒ }tƒ |_tj|j_	t
j|j_| j|j_|jjr'|jjnd|j_|jjr3|jjnd|j_tj|j_tƒ |_|  |¡I d H  W d S  tya } zt ¡  W Y d }~d S d }~ww ro   )rÇ   rÈ   ÚECHO_REQr˜   r
   r©   ry   r{   r‚   rz   r«   r¬   r­   rX   r�   r�   r   r¼   r½   Ú
ECHO_REPLYr—   rh   ri   rj   rñ   r   r   r   rƒ     s"   €



€ÿzSMBServerConnection.echoÚorgiginatorr˜   c                 Ã   s�   �t d|jj› �ƒ tƒ }tƒ |_|jj|j_||j_tj|j_| j	|j_	|jj
|j_
|jjr3|jjnd|j_||j_||_|  |¡I d H  d S )Nz,[DEBUG] sending SMB2 message with MessageId r1   )re   ry   r‰   r
   r©   rz   r«   r¬   r­   rX   r�   r�   r½   r˜   r—   )r[   rb  r˜   r±   r?   Úreplymsgr   r   r   rÜ     s   €

zSMBServerConnection.sendSMB2r^   )r   r   r   r_   r‘   r]   rc   rl   re   rp   ra   r—   rw   rx   r
   r}   r�   r   r…   rg   rƒ   r   r¼   r{   rÜ   r   r   r   r   r/   <   s$    6
I1&a1Y &*r/   )+Úenumr   r_   r¡   ri   rÇ   Údataclassesr   r   Úpathlibr   Úaiosmbr   Úaiosmb.commons.exceptionsÚ!aiosmb.protocol.smb.command_codesr   Úaiosmb.wintypes.ntstatusr   Úaiosmb.protocol.smb.messager	   Úaiosmb.protocol.smb.commandsÚaiosmb.protocol.smb2.messager
   Ú*aiosmb.protocol.smb2.commands.tree_connectÚaiosmb.protocol.smb2.commandsÚaiosmb.protocol.smb2.headersÚ"aiosmb.protocol.smb2.command_codesÚaiosmb.protocol.commonÚ.aiosmb.wintypes.dtyp.constrcuted_security.guidÚ*aiosmb.protocol.smb2.commands.sessionsetupÚ$aiosmb.protocol.smb2.commands.createÚ#aiosmb.wintypes.fscc.FileAttributesr   Ú-aiosmb.wintypes.fscc.structures.fileinfoclassr   r   r   ÚEnumr   r   r!   r)   r/   r   r   r   r   Ú<module>   sD    