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    $