K i1UddlmZddlZddlZddlZddlZddlZddlZddlm Z m Z ddl m Z m Z ddlmZmZ ddlmZgdZGd d ej,Zej0Zej4Zej8Zej<Zej@Z!ejDZ#eeefZ$ee!e#fZ%Gd d ej,Z&e&jNd e&jPde&jRde&jTde&jVde&jXde&jZde&j\de&j^de&j`de&jbde&jdde&jfde&jhde&jjdiZ6de7d<e&jNe&jPe&jRe&jTe&jZe&j\e&j^e&j`e&jbe&jde&jfe&jhh Z8e&jNe&jPe&jVhZ9e:e;e|jr0 t t |jj}d }nd}t||jkDr$|jdzdz }|dd |zdz|| dz}djt#d|||g}|jj$d |d|dS#tt f$rw|j}t||jdzkDr3|jdzdz dz}dj|dd |zd || dg}d jd|D}d}YwxYw)zE Return a human-readable representation of a frame. Nz byters continuedr(rs c3$K|]}|d yw02xNr'.0bytes r) z Frame.__str__..s=dtCjM=textc3$K|]}|d ywrMr'rOs r)rRz Frame.__str__..sA$4* ArSbinaryz''z...z, z [])lenr>r@r=rreprbytesdecoder MAX_LOG_SIZEjoinrstrrparseUnicodeDecodeErrorAttributeErrorfiltername)selfcodinglength non_finalr>rVcutmetadatas r)__str__z Frame.__str__s_  N#5s499~/B(LM((B ;;' !dii(//12D [[I %YYF6{T..!33((A-1a76)AG#4k63$%="QR88=f==D [[H $u{{499-.D YY "E$)),3356D t9t(( (##q(1,C !c'?U*T3$%[8D99VD669*EFG++""#1TF"XJa88!'7 "v;!2!2a!77,,1A5!;C XXviC'8+vsde}&UVFxxA&AA!  "s.G==BJJN)max_size extensionsc#K|dEd{}tjd|\}}|dzrdnd}|dzrdnd} |dzrdnd} |d zrdnd} t|d z} |dzrdnd|k7r t d |d z}|dk(r)|dEd{}tjd|\}n-|d k(r(|dEd{}tjd|\}|||kDr t |||r|dEd{}||Ed{}|r t |}|| ||| | | }|g}t|D]}|j||}|j|S7Q#t$r} t d | d} ~ wwxYw7777~w)a Parse a WebSocket frame. This is a generator-based coroutine. Args: read_exact: Generator-based coroutine that reads the requested bytes or raises an exception if there isn't enough data. mask: Whether the frame should be masked i.e. whether the read happens on the server side. max_size: Maximum payload size in bytes. extensions: List of extensions, applied in reverse order. Raises: EOFError: If the connection is closed without a full WebSocket frame. PayloadTooBig: If the frame's payload size exceeds ``max_size``. ProtocolError: If the frame contains incorrect values. rN!BBTF@ zinvalid opcodezincorrect masking~!Hrz!Q)rk) structunpackr ValueErrorr r r reversedr[check)cls read_exactmaskrkrlr>head1head2r@rArBrCr=excrf mask_bytesframe extensions r)r_z Frame.parses:%Q-'}}UD1 uj(dez)tuz)tuz)tu ;EJ./FJ&DEd : 34 4# S=(m+D dD1IV s](m+D dD1IV  FX$51 1 $.qM1J%V,, dJ/DFD#tT48  J!*- ?I$$UX$>E ?   W( ; 01s : ;,, 2-sw FEAFE",F E? -F9F:writerxpacksecrets token_bytesr getvalue) rdrrlroutputrrrfrr>s r) serializezFrame.serializesm$  J# *I##D)D * 88Z!YYzA /!YYzA /"YYzA /kk   # TYY C< LLUE56>B C e^ LLVUECKH I LLVUECKH I  ,,Q/J LL $ dii4D99D T  r(c|js|js |jr td|jt vr;t |jdkDr td|js tdyy)z Check that reserved bits and opcode have acceptable values. Raises: ProtocolError: If a reserved bit or the opcode is invalid. zreserved bits must be 0}zcontrol frame too longzfragmented control frameN) rArBrCr r=rrXr>r@rds r)r|z Frame.checkOsh 99 TYY 9: : ;;, &499~##$<==88#$>?? 'r(returnr^) r~z-Callable[[int], Generator[None, None, bytes]]rr?rkz int | Nonerl%Sequence[extensions.Extension] | NonerzGenerator[None, None, Frame])rr?rlrrrZrNone)rrrr __annotations__r@rArBrCintosenvirongetr\rj classmethodr_rr|r'r(r)rr|s N --CD$D$D$rzz~~&?FGL09d $<@ GAG G  G : G &GGZ=A 9!9!: 9!  9!v@r(rcPeZdZUdZded<ded<d dZed dZd dZdd Z y )rz Code and reason for WebSocket close frames. Attributes: code: Close code. reason: Close reason. rcoder^reasoncd|jcxkrdkrnnd}n;d|jcxkrdkrnnd}n tj|jd}|jd|d}|jr|d |j}|S) zU Return a human-readable representation of a close code and reason. i registeredz private useunknownz ()rK)rr;rr)rd explanationresults r)rjz Close.__str__os| 499 #t #&K TYY % %'K155diiKKII;b Q/ ;;xq .F r(ct|dk\rItjd|dd\}|ddj}|||}|j |St|dk(r|t j dStd)z Parse the payload of a close frame. Args: data: Payload of the close frame. Raises: ProtocolError: If data is ill-formed. UnicodeDecodeError: If the reason isn't valid UTF-8. rrvNrrGzclose frame too short)rXrxryr[r|rr/r )r}r>rrcloses r)r_z Close.parses} t9>mmD$r(3GT!"X__&Ff%E KKML Y!^y//4 4 78 8r(c|jtjd|j|jj zS)z: Serialize the payload of a close frame. rv)r|rxrrrrrs r)rzClose.serializes4 {{4+dkk.@.@.BBBr(c|jtvs-d|jcxkrdkstdtdyy)z Check that the close code has a valid value for a close frame. Raises: ProtocolError: If the close code is invalid. rrzinvalid status codeN)rEXTERNAL_CLOSE_CODESr rs r)r|z Close.checksH 11TTYY5M5M 56 66N 56 66N1r(Nr)r>rZrr)rrZr) rrrr rrjrr_rr|r'r(r)rras7 I K$99.C 7r(rr)C __future__r dataclassesenumrrrrxcollections.abcrrtypingrr exceptionsr r speedupsr ImportErrorutils__all__IntEnumr r!r r"rr#rr$rr%rr&rrrrr+r,r-r.r/r0r1r2r3r4r5r6r7r8r9r;rrOK_CLOSE_CODESrZ bytearray memoryview BytesLike dataclassrrrGrlr'r(r)rsr"  /"4"$  )T\\) ++ ++ MM << ++ ++* ')  .d , .  2 =  = 8  2 0 !!#8 . 0 0 = ?+,       !!     "   9j (  a@a@a@H H7H7H7X{ "!!"sI!! I0/I0