
    aDg#                     l    d Z ddlZddlmZmZmZ  G d de      Z G d de      Zej                  eiZ
y)	z>
wsproto/extensions
~~~~~~~~~~~~~~~~~~

WebSocket extensions.
    N   )CloseReasonOpcodeRsvBitsc                   @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zy)
	ExtensionNc                      yNF selfs    R/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/wsproto/extensions.pyenabledzExtension.enabled   s        c                      y Nr   r   s    r   offerzExtension.offer       r   c                      y r   r   r   r   s     r   acceptzExtension.accept   r   r   c                      y r   r   r   s     r   finalizezExtension.finalize   r   r   c                     t        ddd      S r
   )r   )r   protoopcodersvpayload_lengths        r   frame_inbound_headerzExtension.frame_inbound_header   s    ueU++r   c                     |S r   r   r   r   datas      r   frame_inbound_payload_dataz$Extension.frame_inbound_payload_data    s    r   c                      y r   r   )r   r   fins      r   frame_inbound_completez Extension.frame_inbound_complete#   r   r   c                 
    ||fS r   r   )r   r   r   r   r"   r%   s         r   frame_outboundzExtension.frame_outbound&   s    T{r   )__name__
__module____qualname__namer   r   r   r   r   r#   r&   r(   r   r   r   r   r      s/    D,r   r   c                   j    e Zd ZdZdZdZ	 	 	 	 ddZd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zy)PerMessageDeflatezpermessage-deflate   Nc                     || _         || j                  }|| _        || _        || j                  }|| _        d | _        d | _        d | _        d | _	        d| _
        y r
   )client_no_context_takeoverDEFAULT_CLIENT_MAX_WINDOW_BITSclient_max_window_bitsserver_no_context_takeoverDEFAULT_SERVER_MAX_WINDOW_BITSserver_max_window_bits_compressor_decompressor_inbound_is_compressible_inbound_compressed_enabled)r   r1   r3   r4   r6   s        r   __init__zPerMessageDeflate.__init__0   sr     +E'!)%)%H%H"&<#*D'!)%)%H%H"&<#!(,% $( r   c                 d    |t         j                  t         j                  t         j                  fv S r   )r   TEXTBINARYCONTINUATION)r   r   s     r   _compressible_opcodez&PerMessageDeflate._compressible_opcodeK   s"    &++v}}f6I6IJJJr   c                     | j                   S r   )r;   r   s    r   r   zPerMessageDeflate.enabledN   s    }}r   c                     d| j                   z  d| j                  z  g}| j                  r|j                  d       | j                  r|j                  d       dj                  |      S )Nclient_max_window_bits=%dserver_max_window_bits=%dr1   r4   ; )r3   r6   r1   appendr4   join)r   
parameterss     r   r   zPerMessageDeflate.offerQ   sf    '$*E*EE'$*E*EE


 **:;**:;yy$$r   c                    |j                  d      D cg c]  }|j                          }}|dd  D ]  }|j                  d      rd| _        |j                  d      rd| _        5|j                  d      r2t        |j                  dd      d   j                               | _        x|j                  d      st        |j                  dd      d   j                               | _         d| _        y c c}w 	N;r   r1   Tr4   r3   =r6   )	splitstrip
startswithr1   r4   intr3   r6   r;   )r   r   bbitsbits        r   r   zPerMessageDeflate.finalize^   s    #(;;s#34a	448 	PC~~:;26/ <=26/ 89.1#))C2CA2F2L2L2N.O+ 89.1#))C2CA2F2L2L2N.O+	P  5s   C7c                 (   d }d }|j                  d      D cg c]  }|j                          }}|dd  D ]  }|j                  d      rd| _        |j                  d      rd| _        5|j                  d      r>d|v r-t        |j                  dd      d   j                               }w| j                  }|j                  d      sd|v r-t        |j                  dd      d   j                               }| j                  } ||fS c c}w rK   )rN   rO   rP   r1   r4   rQ   r3   r6   )r   paramsr3   r6   rR   rS   rT   s          r   _parse_paramszPerMessageDeflate._parse_paramsl   s   !%!%#)<<#45a	558 	IC~~:;26/ <=26/ 89#:-031B11E1K1K1M-N*-1-H-H* 89#:-031B11E1K1K1M-N*-1-H-H*	I  &'===# 6s   Dc                 F   | j                  |      \  }}d| _        g }| j                  r|j                  d       ||j                  d|z         || _        | j
                  r|j                  d       ||j                  d|z         || _        dj                  |      S )NTr1   rD   r4   rE   rF   )rW   r;   r1   rG   r3   r4   r6   rH   )r   r   r3   r6   rI   s        r   r   zPerMessageDeflate.accept   s    9=9K9KE9R6 6
**:;!-9<RRS*@D'**:;!-9<RRS*@D'yy$$r   c                    |j                   r |j                         rt        j                  S |j                   r"|t        j
                  u rt        j                  S | j                  |      | _        | j                  |j                   | _        | j                  rc| j                  sJ |j                  r| j                  }n| j                  }| j                  $t        j                  t        |             | _        t!        ddd      S )NTF)rsv1	iscontrolr   PROTOCOL_ERRORr   r@   rA   r9   r:   clientr6   r3   r8   zlibdecompressobjrQ   r   )r   r   r   r   r   rS   s         r   r   z&PerMessageDeflate.frame_inbound_header   s    88((*---88&"5"55---(,(A(A&(I%##+'*xxD$''4444<<66D66D%%-)-););SYJ)GD&tUE**r   c                     | j                   r| j                  s|S 	 | j                  j                  t	        |            S # t
        j                  $ r t        j                  cY S w xY wr   )	r:   r9   r8   
decompressbytesr^   errorr   INVALID_FRAME_PAYLOAD_DATAr!   s      r   r#   z,PerMessageDeflate.frame_inbound_payload_data   sW    ''t/L/LK	:%%00t==zz 	:999	:s   #A   #A&%A&c                    |sy | j                   sd | _        y | j                  sd | _        y 	 | j                  j                  d      }|| j                  j	                         z  }|j                  r| j                  }n| j                  }|rd | _        d | _        |S # t
        j                  $ r t        j                  cY S w xY w)Ns     )r9   r:   r8   ra   flushr^   rc   r   rd   r]   r4   r1   )r   r   r%   r"   no_context_takeovers        r   r&   z(PerMessageDeflate.frame_inbound_complete   s    ,,'+D$'''+D$	:%%001DEDD&&,,..D <<"&"A"A"&"A"A!%D#'  zz 	:999	:s   8B #CCc                    | j                  |      s||fS |t        j                  urt        dg|dd   }| j                  {|t        j                  usJ |j
                  r| j                  }n| j                  }t        j                  t        j                  t        j                  t        |             | _        | j                  j                  t        |            }|r_|| j                  j                  t        j                         z  }|d d }|j
                  r| j"                  }n| j$                  }|rd | _        ||fS )NTr   )rA   r   r@   r   r7   r]   r3   r6   r^   compressobjZ_DEFAULT_COMPRESSIONDEFLATEDrQ   compressrb   rf   Z_SYNC_FLUSHr1   r4   )r   r   r   r   r"   r%   rS   rg   s           r   r(   z PerMessageDeflate.frame_outbound   s#   ((0;,,,$)QR)C#!4!4444||2222#//**DMMCI: D ((t5D$$**4+<+<==D9D||&*&E&E#&*&E&E#"#' T{r   c                 .   d| j                   z  g}| j                  r|j                  d       |j                  d| j                  z         | j                  r|j                  d       dj                  |      }d| j                  j                  d|dS )	NrD   r1   rE   r4   rF   < >)r3   r1   rG   r6   r4   rH   	__class__r)   )r   descrs     r   __repr__zPerMessageDeflate.__repr__   s|    ,t/J/JJK**LL56043N3NNO**LL56		%  NN33U;;r   )FNFN)r)   r*   r+   r,   r2   r5   r<   rA   r   r   r   rW   r   r   r#   r&   r(   ru   r   r   r   r.   r.   *   s_    D%'"%'" $)##(#6K%>.%(+*:8B
<r   r.   )__doc__r^   frame_protocolr   r   r   objectr   r.   r,   SUPPORTED_EXTENSIONSr   r   r   <module>rz      sD     8 8 8R<	 R<r *..0AB r   