o
    Žõ±j£  ã                   @   sN   d dl Z d dlmZ d dlmZ d dlmZ G dd„ deƒZG dd„ dƒZdS )	é    N)Ú	UniClient)Ú
Packetizer)ÚMSRPCRespHeaderc                   @   s.   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
S )ÚDCERPCPacketizeréÿÿ  c                 C   s   t  | |¡ || _d| _d S )Nó    )r   Ú__init__Úbuffer_sizeÚ	in_buffer)Úselfr	   © r   ú‘/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/dcerpc/v5/transport/tcp.pyr      s   
zDCERPCPacketizer.__init__c                 c   sb   � t | jƒdkr/t| jƒ}t | jƒ|d kr-| jd |d … }| j|d d … | _|V  qd S d S )Né   Úfrag_len)Úlenr
   r   )r   Úresponse_headerÚmsg_datar   r   r   Úprocess_buffer   s   €
ùzDCERPCPacketizer.process_bufferc                 C  sN   �t |ƒ| jkr"d}	 |||| j … }|sd S |V  |t |ƒ7 }q|V  d S ©Nr   )r   r	   )r   ÚdataÚoffsetÚtoSendr   r   r   Údata_out   s   €û
zDCERPCPacketizer.data_outc                 C  s6   �|d u r|V  |  j |7  _ |  ¡ D ]}|V  qd S ©N)r
   r   )r   r   Úpacketr   r   r   Údata_in"   s   €ÿzDCERPCPacketizer.data_inN)r   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r      s
    

r   c                   @   s>   e Zd Zdd„ Zdd„ Zdd„ Zddd	„Zd
d„ Zdd„ ZdS )ÚDCERPCTCPTransportc                 C   s&   || _ d | _d | _d | _t ¡ | _d S r   )ÚtargetÚclientÚ
connectionÚreader_taskÚasyncioÚQueueÚpackets)r   r    r   r   r   r   +   s
   zDCERPCTCPTransport.__init__c              
   Ã   sj   �z| j d ur| j  ¡ I d H  | jd ur| j ¡  W d S W d S  ty4 } z
d |fW  Y d }~S d }~ww r   )r"   Úcloser#   ÚcancelÚ	Exception)r   Úer   r   r   Ú
disconnect3   s   €

ÿ€ÿzDCERPCTCPTransport.disconnectc                 Ã   sh   �z'| j  ¡ 2 z3 d H W }| j |¡I d H  |d u s t|ƒdkr$ W d S q6 W d S  tjy3   Y d S w r   )r"   Úreadr&   Úputr   r$   ÚCancelledError)r   r   r   r   r   Ú__reader>   s   €ÿþÿzDCERPCTCPTransport.__readerr   c              
   Ã   sH   �z| j  |¡I d H  W dS  ty# } z
d|fW  Y d }~S d }~ww )N)NNF)r"   Úwriter)   )r   r   ÚforceWriteAndxÚ	forceRecvr*   r   r   r   ÚsendG   s   €€ÿzDCERPCTCPTransport.sendc              
   Ã   sJ   �z| j  ¡ I d H }|d fW S  ty$ } z
d |fW  Y d }~S d }~ww r   )r&   Úgetr)   )r   Úxr   r*   r   r   r   ÚrecvN   s   €
€ÿzDCERPCTCPTransport.recvc                 Ã   s8   �t ƒ }t| j|ƒ}| ¡ I d H | _t |  ¡ ¡| _d S r   )	r   r   r    Úconnectr"   r$   Úcreate_taskÚ_DCERPCTCPTransport__readerr#   )r   Ú
packetizerr!   r   r   r   r7   U   s
   €zDCERPCTCPTransport.connectN)r   r   )	r   r   r   r   r+   r9   r3   r6   r7   r   r   r   r   r   *   s    
	r   )	r$   Úasysocks.unicomm.clientr   Ú#asysocks.unicomm.common.packetizersr   Úaiosmb.dcerpc.v5.rpcrtr   r   r   r   r   r   r   Ú<module>   s    $