
    )j                         d dl Z d dlZd dlZd dlmZ d dlZdZd ZeZeez   Z	eZ
e	e
z   ZeZee
z   ez   ZdedededefdZd	edeeeef         fd
ZdedefdZ G d de          Z G d d          Z G d de          Z G d d          ZdS )    N)	TypedDict   idoffsetsizereturnc                     |                      t          dd          |                     t          dd          z   |                     t          dd          z   S NlittleFsigned)to_bytes	ID_LENGTHMESSAGE_OFFSET_LENGTHMESSAGE_SIZE_LENGTH)r   r   r   s      I/DATA/AppData/hermes/venv/lib/python3.11/site-packages/wslink/chunking.py_encode_headerr      sT    
Ix66
///%/
H
H	I
--+Xe-
D
D	E    headerc                 F   t                               | t          t                   dd          }t                               | t          t          t
          z            dd          }t                               | t          t          t          z            dd          }|||fS r
   )int
from_bytesID_LOCATIONr   MESSAGE_OFFSET_LOCATIONr   MESSAGE_SIZE_LOCATIONr   )r   r   r   r   s       r   _decode_headerr      s    	{9$% 
 
 
B
 ^^#&=@U&UU	
 	   F >>$'<?R'RRS   D
 vtr   messagemax_sizec              #   D  K   t          |           }|dk    r|nt          |t          z
  d          }t                              t          j        t                    dd          }d}||k     r2t          |||          }| |||z            }||z   V  ||z  }||k     0d S d S )Nr      r   Fr   )	lenmaxHEADER_LENGTHr   r   secretstoken_bytesr   r   )r   r   
total_sizemax_content_sizer   r   r   chunk_contents           r   generate_chunksr)   0   s      WJ%-]]zzH}<TVW8X8X	+I66	O	OBF
:

FJ772B)B BC}$$$$"" :





r   c                   $    e Zd ZU eed<   eed<   dS )PendingMessagereceived_sizecontentN)__name__
__module____qualname__r   __annotations__	bytearray r   r   r+   r+   ?   s*         r   r+   c                   \    e Zd ZU eeef         ed<   eed<   d Zd Z	d Z
dededz  fd	ZdS )
	UnChunkerpending_messagesmax_message_sizec                 x    i | _         t          t          j                            dd                    | _        d S )NWSLINK_AUTH_MSG_SIZE512)r6   r   osenvirongetr7   selfs    r   __init__zUnChunker.__init__M   s1     " #BJNN3I5$Q$Q R Rr   c                     || _         d S N)r7   )r?   r   s     r   set_max_message_sizezUnChunker.set_max_message_sizeQ   s     $r   c                     i | _         d S rB   r6   r>   s    r   release_pending_messagesz"UnChunker.release_pending_messagesT        "r   chunkr   Nc                    |d t                    |t           d          }}t          |          \  }}}| j                            |          }|S|| j        k    r d| d| j         d| d}t          |          t          dt          |                    }|| j        |<   |t          |d                   k    r| j        |= d| d	}t          |          t          |          }	t          |d                   }
||
|||	z   <   |d
xx         |	z  cc<   |d
         |k    r1|d         }| j        |= t          j        t          |                    S d S )NzTotal size for message z6 exceeds the allocation limit allowed.
Maximum size = ,
Received size = .r   )r,   r-   r-   z'Total size in chunk header for message z6 does not match total size declared by previous chunk.r,   )r#   r   r6   r=   r7   
ValueErrorr+   r2   r!   
memoryviewmsgpackunpackbbytes)r?   rH   r   r(   r   r   r&   pending_messagemsgcontent_sizecontent_viewfull_messages               r   process_chunkzUnChunker.process_chunkW   s    %n}n 5u]^^7L!/!7!7FJ/33B77"D1115b 5 5&*&;5 5'15 5 5 
 !oo%,:)>)>  O )8D!"% _Y78888%b)vBvvvCS//!=))!/)"<==7DVf|334(((L8(((?+z99*95L%b)?5#6#6777tr   )r.   r/   r0   dictrP   r+   r1   r   r@   rC   rF   rV   r3   r   r   r5   r5   I   s         5.01111S S S% % %# # #$5 $UT\ $ $ $ $ $ $r   r5   c                   8    e Zd ZU eed<   eed<   ej        ed<   dS )StreamPendingMessager,   r&   unpackerN)r.   r/   r0   r   r1   rN   Unpackerr3   r   r   rY   rY   ~   s6         OOOr   rY   c                   R    e Zd ZU eeef         ed<   d Zd Zd Z	dededz  fdZ
dS )	StreamUnChunkerr6   c                     i | _         d S rB   rE   r>   s    r   r@   zStreamUnChunker.__init__   rG   r   c                     d S rB   r3   )r?   _sizes     r   rC   z$StreamUnChunker.set_max_message_size   s    r   c                     i | _         d S rB   rE   r>   s    r   rF   z(StreamUnChunker.release_pending_messages   rG   r   rH   r   Nc                 P   |d t                    |t           d          }}t          |          \  }}}| j                            |          }|/t	          d|t          j        |                    }|| j        |<   ||d         k    r)| j        |= d| d|d          d| d}t          |          ||d	         k    r)| j        |= d
| d|d	          d| d}t          |          t          |          }	|dxx         |	z  cc<   |d         }
|
	                    |           d }t          j        t
          j                  5  |
                                }d d d            n# 1 swxY w Y   |5| j        |= |d         |k     r!d| d| d|d          d}t          |          |S )Nr   )max_buffer_size)r,   r&   rZ   r,   z)Received an unexpected chunk for message z.
Expected offset = z,
Received offset = rK   r&   z>Received an unexpected total size in chunk header for message z.
Expected size = rJ   rZ   z>Received a parsable payload shorter than expected for message )r#   r   r6   r=   rY   rN   r[   rL   r!   feed
contextlibsuppress	OutOfDataunpack)r?   rH   r   r(   r   r   r&   rQ   rR   rS   rZ   rU   s               r   rV   zStreamUnChunker.process_chunk   s    %n}n 5u]^^7L!/!7!7FJ/33B77"2% )*EEE  O
 )8D!"% __555%b)/B / /%4_%E/ /%+/ / / 
 S//! 666%b)1QS 1 1#2<#@1 1#-1 1 1 
 S//!=))(((L8(((":.m$$$ !233 	- 	-#??,,L	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- #%b)/*<<KUW K K'1K K'6'GK K K 
 !oo%s   E$$E(+E()r.   r/   r0   rW   rP   rY   r1   r@   rC   rF   rV   r3   r   r   r]   r]      s         5"667777# # #  # # #<5 <UT\ < < < < < <r   r]   )re   r;   r$   typingr   rN   UINT32_LENGTHr   r   r   r   r   r   r#   r   rP   r   tupler   r)   r+   r5   rY   r]   r3   r   r   <module>rl      s       				        	%	1 % /2GG # 114GGs C s u    5 U3S=%9    *#U #c # # # #    Y   2 2 2 2 2 2 2 2j    9   H H H H H H H H H Hr   