
    s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y)    N)	TypedDict   idoffsetsizereturnc                     | j                  t        dd      |j                  t        dd      z   |j                  t        dd      z   S NlittleFsigned)to_bytes	ID_LENGTHMESSAGE_OFFSET_LENGTHMESSAGE_SIZE_LENGTH)r   r   r   s      </DATA/.local/lib/python3.12/site-packages/wslink/chunking.py_encode_headerr      sK    
Ix6
///%/
H	I
--+Xe-
D	E    headerc                     t         j                  | t        t         dd      }t         j                  | t        t        t
        z    dd      }t         j                  | 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	
 	  F >>$'<?R'RS  D
 vtr   messagemax_sizec              #     K   t        |       }|dk(  r|nt        |t        z
  d      }t        j	                  t        j                  t              dd      }d}||k  r(t        |||      }| |||z    }||z    ||z  }||k  r'y y w)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%-]zH}<TVW8X	++I6	OBF
:
FJ72B)BC}$$"" :
s   BBBc                   "    e Zd ZU eed<   eed<   y)PendingMessagereceived_sizecontentN)__name__
__module____qualname__r   __annotations__	bytearray r   r   r+   r+   ?   s    r   r+   c                   T    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y)
	UnChunkerpending_messagesmax_message_sizec                 n    i | _         t        t        j                  j	                  dd            | _        y )NWSLINK_AUTH_MSG_SIZE512)r6   r   osenvirongetr7   selfs    r   __init__zUnChunker.__init__M   s'     " #BJJNN3I5$Q Rr   c                     || _         y N)r7   )r?   r   s     r   set_max_message_sizezUnChunker.set_max_message_sizeQ   s
     $r   c                     i | _         y rB   r6   r>   s    r   release_pending_messagesz"UnChunker.release_pending_messagesT   
     "r   chunkr   Nc                 T   |d t          |t         d  }}t        |      \  }}}| j                  j                  |      }|U|| j                  kD  r!d| d| j                   d| d}t        |      t        dt        |            }|| j                  |<   |t        |d         k7  r| j                  |= d| d	}t        |      t        |      }	t        |d         }
||
|||	z    |d
xx   |	z  cc<   |d
   |k\  r0|d   }| j                  |= t        j                  t        |            S y )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   se    %n} 5u]^7L!/!7FJ//33B7"D111-bT 2&&*&;&;%< =''1l!5 
 !o%,:)>O )8D!!"% _Y788%%b);B4?uvCS/!=)!/)"<=7DVf|34(L8(?+z9*95L%%b)??5#677r   )r.   r/   r0   dictrP   r+   r1   r   r@   rC   rF   rV   r3   r   r   r5   r5   I   s?    5.011S%#$5 $UT\ $r   r5   c                   @    e Zd ZU eed<   eed<   ej                  ed<   y)StreamPendingMessager,   r&   unpackerN)r.   r/   r0   r   r1   rN   Unpackerr3   r   r   rY   rY   ~   s    Or   rY   c                   J    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
y)	StreamUnChunkerr6   c                     i | _         y rB   rE   r>   s    r   r@   zStreamUnChunker.__init__   rG   r   c                      y rB   r3   )r?   _sizes     r   rC   z$StreamUnChunker.set_max_message_size   s    r   c                     i | _         y rB   rE   r>   s    r   rF   z(StreamUnChunker.release_pending_messages   rG   r   rH   r   Nc                    |d t          |t         d  }}t        |      \  }}}| j                  j                  |      }|1t	        d|t        j                  |            }|| j                  |<   ||d   k7  r'| j                  |= d| d|d    d| d}t        |      ||d	   k7  r'| j                  |= d
| d|d	    d| d}t        |      t        |      }	|dxx   |	z  cc<   |d   }
|
j                  |       d }t        j                  t
        j                        5  |
j                         }d d d        |/| j                  |= |d   |k  rd| d| d|d    d}t        |      |S # 1 sw Y   <xY w)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} 5u]^7L!/!7FJ//33B7"2% ))*EO
 )8D!!"% __55%%b);B4 @%%4_%E$F G%%+HA/ 
 S/! 66%%b)PQSPT U##2<#@"A B##-,a1 
 S/!=)(L8(":.m$  !2!23#??,L 4 #%%b)/*< UUWTX Y''1l 3''6'G&HK 
 !o%% 43s   !E--E6)r.   r/   r0   rW   rP   rY   r1   r@   rC   rF   rV   r3   r   r   r]   r]      s9    5"66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j9 H Hr   