ó
    ð›‘hº@  ã                   ó¾  • S SK Jr  S SKr\R                  " 5         S SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJr  S S	KJr  S S
KJrJrJr  S SKJr   S SKJr  S SKJr   " S S\R8                  5      r " S S\R8                  5      r " S S\R8                  5      r " S S\R8                  5      r  " S S\R8                  5      r!g! \ a	    S SKJr   N~f = f)é    )ÚMockN)Úwildcards2patterns)ÚWebSocketServerFactory)ÚWebSocketServerProtocol)ÚWebSocketClientProtocol)ÚTransportDetails©ÚConnectingRequest)ÚFailure)ÚConnectionDoneÚConnectionAbortedÚConnectionLost)Úunittest)ÚStringTransport)ÚFakeTransportc                   ó<   • \ rS rSrSrS rS rS rS rS r	S r
S	rg
)ÚExceptionHandlingTestsé1   zR
Tests that we format various exception variations properly during
connectionLost
c                 ó¨   • [        5       U l        [        5       U l        U R                  U R                  l        [	        5       U R                  l        g ©N)r   Úfactoryr   Úprotor   Úlog©Úselfs    ÚjC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\autobahn/twisted/test/test_tx_protocol.pyÚsetUpÚExceptionHandlingTests.setUp7   s3   € Ü-Ó/ˆŒÜ,Ó.ˆŒ
Ø!Ÿ\™\ˆ�
‰
ÔÜ›ˆ�
‰
�ó    c                 óè   • U R                   R                  U R                   R                  U R                   R                  U R                   R                  4 H  nUc  M  UR                  5         M     g r   ©r   ÚautoPingPendingCallÚautoPingTimeoutCallÚopenHandshakeTimeoutCallÚcloseHandshakeTimeoutCallÚcancel©r   Úcalls     r   ÚtearDownÚExceptionHandlingTests.tearDown=   óS   € à—
‘
×.Ñ.Ø—
‘
×.Ñ.Ø—
‘
×3Ñ3Ø—
‘
×4Ñ4ó	
ˆDð ÓØ—‘–ò
r   c           	      óZ  • U R                   R                  5         U R                   R                  [        [	        5       5      5        SR                  U R                   R                  R                   Vs/ s H  n[        US   5      PM     sn5      nU R                  SU;   5        g s  snf )NÚ é   zclosed cleanly)
r   Ú_connectionMadeÚconnectionLostr   r   Újoinr   Ú
mock_callsÚstrÚ
assertTrue©r   ÚxÚmessagess      r   Útest_connection_doneÚ+ExceptionHandlingTests.test_connection_doneG   sy   € à�
‰
×"Ñ"Ô$à�
‰
×!Ñ!¤'¬.Ó*:Ó";Ô<à—8‘8°·
±
·±×0IÒ0IÓJÒ0I¨1œS  1¡žYÑ0IÑJÓKˆØ�‰Ð(¨HÑ4Õ5ùò Kó   Á4B(c           	      óZ  • U R                   R                  5         U R                   R                  [        [	        5       5      5        SR                  U R                   R                  R                   Vs/ s H  n[        US   5      PM     sn5      nU R                  SU;   5        g s  snf )Nr-   r.   z	 aborted )
r   r/   r0   r   r   r1   r   r2   r3   r4   r5   s      r   Útest_connection_abortedÚ.ExceptionHandlingTests.test_connection_abortedP   sy   € à�
‰
×"Ñ"Ô$à�
‰
×!Ñ!¤'Ô*;Ó*=Ó">Ô?à—8‘8°·
±
·±×0IÒ0IÓJÒ0I¨1œS  1¡žYÑ0IÑJÓKˆØ�‰˜ xÑ/Õ0ùò Kr:   c           	      óZ  • U R                   R                  5         U R                   R                  [        [	        5       5      5        SR                  U R                   R                  R                   Vs/ s H  n[        US   5      PM     sn5      nU R                  SU;   5        g s  snf )Nr-   r.   ú
 was lost ©
r   r/   r0   r   r   r1   r   r2   r3   r4   r5   s      r   Útest_connection_lostÚ+ExceptionHandlingTests.test_connection_lostY   sx   € à�
‰
×"Ñ"Ô$à�
‰
×!Ñ!¤'¬.Ó*:Ó";Ô<à—8‘8°·
±
·±×0IÒ0IÓJÒ0I¨1œS  1¡žYÑ0IÑJÓKˆØ�‰˜¨Ñ0Õ1ùò Kr:   c           
      ó¢  • U R                   R                  5         U R                   R                  [        [	        S5      5      5        SR                  U R                   R                  R                   Vs/ s H   n[        US   5      [        US   5      -   PM"     sn5      nU R                  SU;   5        U R                  SU;   5        g s  snf )NÚ	greetingsr-   r.   é   r?   r@   r5   s      r   Útest_connection_lost_argÚ/ExceptionHandlingTests.test_connection_lost_argb   s˜   € à�
‰
×"Ñ"Ô$à�
‰
×!Ñ!¤'¬.¸Ó*EÓ"FÔGà—8‘8¸D¿J¹J¿N¹N×<UÒ<UÓVÒ<U°qœS  1¡›Y¬¨Q¨q©T«Ô2Ñ<UÑVÓWˆØ�‰˜¨Ñ0Ô1Ø�‰˜ xÑ/Õ0ùò Ws   Á5'C©r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r)   r8   r<   rA   rF   Ú__static_attributes__© r   r   r   r   1   s%   † ñò
 òò6ò1ò2õ1r   r   c                   ó   • \ rS rSrSrS rSrg)ÚHixie76RejectionTestsém   z8
Hixie-76 should not be accepted by an Autobahn server.
c                 ó&  • [        5       n[        5       n[        5       nX#l        Xl        SnSUl        UR                  5         XCl        UR                  5         U R                  SUR                  5        U R                  SUR                  5        g)z?
A handshake from a client only supporting Hixie-76 will fail.
sè   GET /demo HTTP/1.1
Host: example.com
Connection: Upgrade
Sec-WebSocket-Key2: 12998 5 Y3 1  .P00
Sec-WebSocket-Protocol: sample
Upgrade: WebSocket
Sec-WebSocket-Key1: 4 @1  46546xW%0l 1 5
Origin: http://example.com

^n:ds[4Ur   s   HTTP/1.1 400s   Hixie76 protocol not supportedN)r   r   r   r   Ú	transportÚopenHandshakeTimeoutr/   ÚdataÚprocessHandshakeÚassertInÚ_written)r   ÚtÚfÚpÚhttp_requests        r   Útest_handshake_failsÚ*Hixie76RejectionTests.test_handshake_failsq   sw   € ô ‹OˆÜ"Ó$ˆÜ#Ó%ˆØŒ	ØŒð Uˆà!"ˆÔØ	×ÑÔØŒØ	×ÑÔØ�‰�o q§z¡zÔ2Ø�‰Ð7¸¿¹ÕDr   rO   N)rI   rJ   rK   rL   rM   r^   rN   rO   r   r   rQ   rQ   m   s   † ñõEr   rQ   c                   ó`   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rSrg)ÚWebSocketOriginMatchingé†   z<
Test that we match Origin: headers properly, when asked to
c                 óD  • [        5       U l        U R                  R                  SS/S9  [        5       U l        [        5       U R                  l        U R                  U R                  l        [        5       U R                  l        U R                  R                  5         g )Nz127.0.0.1:*z*.example.com:*©ÚallowedOrigins©
r   r   ÚsetProtocolOptionsr   r   r   rT   r   ÚfailHandshaker/   r   s    r   r   ÚWebSocketOriginMatching.setUp‹   su   € Ü-Ó/ˆŒØ�‰×'Ñ'Ø)Ð+<Ð=ð 	(ñ 	
ô -Ó.ˆŒ
Ü.Ó0ˆ�
‰
ÔØ!Ÿ\™\ˆ�
‰
ÔÜ#'£6ˆ�
‰
Ô Ø�
‰
×"Ñ"Õ$r   c                 óè   • U R                   R                  U R                   R                  U R                   R                  U R                   R                  4 H  nUc  M  UR                  5         M     g r   r!   r'   s     r   r)   Ú WebSocketOriginMatching.tearDown–   r+   r   c                 óV  • SR                  / SQ5      U R                  l        U R                  R                  5         U R	                  U R                  R
                  R                  S5        U R                  R
                  R                  S   S   S   nU R	                  SU;   5        g )Nó   
)	ó   GET /ws HTTP/1.1ó   Host: www.example.comó   Sec-WebSocket-Version: 13s,   Origin: http://www.example.com.malicious.comó,   Sec-WebSocket-Extensions: permessage-deflateó+   Sec-WebSocket-Key: tXAxWFUqnhi86Ajj7dRY5g==ó   Connection: keep-alive, Upgradeó   Upgrade: websocketrm   úHandshake should have failedr   r.   únot allowed)r1   r   rV   ÚconsumeDatar4   rh   Úcalledr2   ©r   Úargs     r   Útest_match_full_originÚ.WebSocketOriginMatching.test_match_full_origin    s�   € Ø!Ÿ,™,ò 
(
ó 
ˆ�
‰
Œð 	�
‰
×ÑÔ à�‰˜Ÿ
™
×0Ñ0×7Ñ7Ð9WÔXØ�j‰j×&Ñ&×1Ñ1°!Ñ4°QÑ7¸Ñ:ˆØ�‰˜¨Ñ,Õ-r   c                 ó@  • U R                   R                  S/S9  U R                   R                  U R                  l        U R                   R                  U R                  l        SU R                   l        SR                  / SQ5      U R                  l        U R                  R                  5         U R                  U R                  R                  R                  S5        U R                  R                  R                  S   S   S   nU R                  S	U;   5        g )
Nzhttp://*.example.com:*rd   Frm   ©	rn   ro   rp   s   Origin: https://www.example.comrq   rr   rs   rt   rm   ru   r   r.   rv   )r   rg   ÚallowedOriginsPatternsr   re   ÚisSecurer1   rV   rw   r4   rh   rx   r2   ry   s     r   Útest_match_wrong_scheme_originÚ6WebSocketOriginMatching.test_match_wrong_scheme_origin²   sÜ   € ð 	�‰×'Ñ'Ø4Ð5ð 	(ñ 	
ð -1¯L©L×,OÑ,Oˆ�
‰
Ô)Ø$(§L¡L×$?Ñ$?ˆ�
‰
Ô!ð !&ˆ�‰ÔØ!Ÿ,™,ò 
(
ó 
ˆ�
‰
Œð 	�
‰
×ÑÔ à�‰˜Ÿ
™
×0Ñ0×7Ñ7Ð9WÔXØ�j‰j×&Ñ&×1Ñ1°!Ñ4°QÑ7¸Ñ:ˆØ�‰˜¨Ñ,Õ-r   c                 ó   • SU R                   l        SU R                   l        SR                  / SQ5      U R                  l        U R                  R                  5         U R                  U R                  R                  R                  S5        g )NTé»  rm   r~   úHandshake should have succeeded)
r   r€   Úportr1   r   rV   rw   ÚassertFalserh   rx   r   s    r   Útest_match_origin_secure_schemeÚ7WebSocketOriginMatching.test_match_origin_secure_schemeÎ   sf   € Ø $ˆ�‰ÔØˆ�‰ÔØ!Ÿ,™,ò 
(
ó 
ˆ�
‰
Œð 	�
‰
×ÑÔ à×Ñ˜Ÿ™×1Ñ1×8Ñ8Ð:[Õ\r   c                 óT  • U R                   R                  S/S9  SU R                   l        SU R                   l        SR	                  / SQ5      U R
                  l        U R
                  R                  5         U R                  U R
                  R                  R                  S5        g)	z!
Test the examples from the docs
z*://*.example.com:*rd   Tr„   rm   )	rn   ro   rp   ó   Origin: http://www.example.comrq   rr   rs   rt   rm   r…   N)r   rg   r€   r†   r1   r   rV   rw   r‡   rh   rx   r   s    r   Ú'test_match_origin_documentation_exampleÚ?WebSocketOriginMatching.test_match_origin_documentation_exampleà   s‡   € ð 	�‰×'Ñ'Ø1Ð2ð 	(ñ 	
ð !%ˆ�‰ÔØˆ�‰ÔØ!Ÿ,™,ò 
(
ó 
ˆ�
‰
Œð 	�
‰
×ÑÔ à×Ñ˜Ÿ™×1Ñ1×8Ñ8Ð:[Õ\r   c           	      ó€   • SSK JnJn  [        S/5      nS H$  nU R	                  U" U" U5      SSU5      U5        M&     g)z.
All the example origins from RFC6454 (3.2.1)
r   ©Ú_is_same_originÚ_url_to_originz*example.com:*)zhttp://example.com/zhttp://example.com:80/zhttp://example.com/path/filezhttp://example.com/;semi=truez//example.com/zhttp://@example.comÚhttpéP   N)Úautobahn.websocket.protocolr�   r‘   r   r4   ©r   r�   r‘   ÚpolicyÚurls        r   Útest_match_origin_examplesÚ2WebSocketOriginMatching.test_match_origin_examplesø   sC   € ÷
 	PÜ#Ð%5Ð$6Ó7ˆó+ˆCð �O‰O™O©N¸3Ó,?ÀÈÈVÓTÐVYÖZò+r   c           	      ó~   • SSK JnJn  [        S/5      nS H#  nU R	                  U" U" U5      SSU5      5        M%     g)z9
All the example 'not-same' origins from RFC6454 (3.2.1)
r   r�   úexample.com)zhttp://ietf.org/zhttp://example.org/zhttps://example.com/zhttp://example.com:8080/zhttp://www.example.com/r’   r“   N)r”   r�   r‘   r   r‡   r•   s        r   Ú"test_match_origin_counter_examplesÚ:WebSocketOriginMatching.test_match_origin_counter_examples	  s@   € ÷
 	PÜ# ] OÓ4ˆó/ˆCð ×Ñ™_©^¸CÓ-@À&È"ÈfÓUÖVò/r   c                 óì   • SSK JnJn  [        S/5      nU R	                  U" U" S5      SSU5      5        U R                  U" U" S5      SSU5      5        U R                  U" U" S	5      SSU5      5        g )
Nr   r�   zhttp://*example.com:80zhttp://example.com:80r’   r“   zhttp://example.com:81éQ   zhttps://example.com:80)r”   r�   r‘   r   r4   r‡   )r   r�   r‘   r–   s       r   Útest_match_origin_edgeÚ.WebSocketOriginMatching.test_match_origin_edge  s~   € çOÜ#Ð%=Ð$>Ó?ˆà�‰Ù™NÐ+BÓCÀVÈRÐQWÓXô	
ð 	×ÑÙ™NÐ+BÓCÀVÈRÐQWÓXô	
ð 	×ÑÙ™NÐ+CÓDÀfÈbÐRXÓYõ	
r   c                 óp   • SSK Jn  U R                  U" S5      S5        U R                  U" S5      S5        g )Nr   ©r‘   zhttp://example.com)r’   r›   r“   zhTTp://example.com©r”   r‘   ÚassertEqual©r   r‘   s     r   Útest_origin_from_urlÚ,WebSocketOriginMatching.test_origin_from_url%  s=   € Ý>ð 	×ÑÙÐ/Ó0Ø'ô	
ð
 	×ÑÙÐ/Ó0Ø'õ	
r   c                 ó@   • SSK Jn  U R                  SU" S5      5        g )Nr   r£   Únullzfile:///etc/passwdr¤   r¦   s     r   Útest_origin_fileÚ(WebSocketOriginMatching.test_origin_file3  s   € Ý>Ø×Ñ˜¡Ð0DÓ!EÕFr   c                 óD  • SSK JnJn  U R                  SU" S5      5        U R	                  U" U" S5      SS/ 5      5        U R	                  U" U" S5      SS/ 5      5        U R	                  U" U" S5      SS/ 5      5        U R	                  U" U" S5      S S/ 5      5        g )Nr   r�   rª   r’   r“   ÚhttpsÚ )r”   r�   r‘   r¥   r‡   )r   r�   r‘   s      r   Útest_origin_nullÚ(WebSocketOriginMatching.test_origin_null7  s¤   € ßOØ×Ñ˜¡°Ó!7Ô8Ø×ÑÙ™N¨6Ó2°F¸BÀÓCô	
ð 	×ÑÙ™N¨6Ó2°G¸RÀÓDô	
ð 	×ÑÙ™N¨6Ó2°B¸¸BÓ?ô	
ð 	×ÑÙ™N¨6Ó2°D¸"¸bÓAõ	
r   rH   N)rI   rJ   rK   rL   rM   r   r)   r{   r�   rˆ   rŒ   r˜   rœ   r    r§   r«   r°   rN   rO   r   r   ra   ra   †   sH   † ñò	%òò.ò$.ò8]ò$]ò0[ò"Wò
ò
òGõ
r   ra   c                   ó*   • \ rS rSrSrS rS rS rSrg)ÚWebSocketXForwardedForiH  zJ
Test that (only) a trusted X-Forwarded-For can replace the peer address.
c                 ó@  • [        5       U l        U R                  R                  SS9  [        5       U l        [        5       U R                  l        U R                  U R                  l        [        5       U R                  l        U R                  R                  5         g )NrE   )ÚtrustXForwardedForrf   r   s    r   r   ÚWebSocketXForwardedFor.setUpM  so   € Ü-Ó/ˆŒØ�‰×'Ñ'Ø ð 	(ñ 	
ô -Ó.ˆŒ
Ü.Ó0ˆ�
‰
ÔØ!Ÿ\™\ˆ�
‰
ÔÜ#'£6ˆ�
‰
Ô Ø�
‰
×"Ñ"Õ$r   c                 óè   • U R                   R                  U R                   R                  U R                   R                  U R                   R                  4 H  nUc  M  UR                  5         M     g r   r!   r'   s     r   r)   ÚWebSocketXForwardedFor.tearDownX  r+   r   c                 óÊ   • SR                  / SQ5      U R                  l        U R                  R                  5         U R	                  U R                  R
                  SS5        g )Nrm   )
rn   ro   r‹   rp   rq   rr   rs   rt   s0   X-Forwarded-For: 1.2.3.4, 2.3.4.5, 111.222.33.44rm   z2.3.4.5zQThe second address in X-Forwarded-For should have been picked as the peer address)r1   r   rV   rw   ÚassertEqualsÚpeerr   s    r   Útest_trusted_addressesÚ-WebSocketXForwardedFor.test_trusted_addressesb  sL   € Ø!Ÿ,™,ò (
ó ˆ�
‰
Œð 	�
‰
×ÑÔ à×ÑØ�J‰J�O‰O˜YØ_õ	ar   rH   N)	rI   rJ   rK   rL   rM   r   r)   r¼   rN   rO   r   r   r³   r³   H  s   † ñò	%òõar   r³   c                   ó0   • \ rS rSrSrS rS rS rS rSr	g)	ÚOnConnectingTestsiv  z®
Tests related to onConnecting callback

These tests are testing generic behavior, but are somewhat tied to
'a framework' so we're just testing using Twisted-specifics here.
c                 óØ  ^• Sm " U4S jS[         5      nU" 5       n[        5       Ul        UR                  5       nU R	                  U5        U R                  [        UR                  R                  5      S:„  5        Sn[        [        UR                  R                  5      5       H-  nT[        UR                  R                  U   5      ;   d  M+  SnM/     U R                  US5        g )Nz	bad stuffc                   ó8   >• \ rS rSrSrSr\" 5       rU 4S jrSr	g)ÚDOnConnectingTests.test_on_connecting_client_fails.<locals>.TestProtoi‚  NTc                 ó   >• [        T5      er   )ÚRuntimeError)r   Útransport_detailsÚ	MAGIC_STRs     €r   ÚonConnectingÚQOnConnectingTests.test_on_connecting_client_fails.<locals>.TestProto.onConnecting‡  s   ø€ Ü" 9Ó-Ð-r   rO   )
rI   rJ   rK   rL   ÚstateÚwasCleanr   r   rÇ   rN   )rÆ   s   €r   Ú	TestProtorÂ   ‚  s   ø† ØˆEØˆHÙ“&ˆC÷.ð .r   rË   r   FTz!MAGIC_STR not found when expected)r   r   rT   ÚstartHandshakeÚsuccessResultOfr4   Úlenr   r2   Úranger3   )r   rË   r   ÚdÚmagic_foundÚirÆ   s         @r   Útest_on_connecting_client_failsÚ1OnConnectingTests.test_on_connecting_client_fails~  s¸   ø€ àˆ	÷	.Ô/ô 	.ñ “ˆÜ'›/ˆŒØ× Ñ Ó"ˆØ×Ñ˜QÔà�‰œ˜EŸI™I×0Ñ0Ó1°AÑ5Ô6ØˆÜ”s˜5Ÿ9™9×/Ñ/Ó0Ö1ˆAØœC §	¡	× 4Ñ 4°QÑ 7Ó8Õ8Ø"’ñ 2ð 	�‰˜Ð%HÕIr   c                 óv  •  " S S[         5      nU" 5       n[        5       Ul        [        5       Ul        UR                  5         UR                  5       nU R                  U5      nU R                  SUR                  5        U R                  SUR                  5        U R                  SUR                  5        g )Nc                   ó<   • \ rS rSrSrSr/ rSrSr\	" 5       r
S rSrg)ÚFOnConnectingTests.test_on_connecting_client_success.<locals>.TestProtoi˜  NTé   é   c                 ó   • [        SSSS9$ )Nr›   r„   ú/ws©Úhostr†   Úresourcer	   )r   rÅ   s     r   rÇ   ÚSOnConnectingTests.test_on_connecting_client_success.<locals>.TestProto.onConnecting   s   € Ü(Ø&ØØ"ñð r   rO   )rI   rJ   rK   rL   rÉ   rÊ   ÚperMessageCompressionOffersÚversionrU   r   r   rÇ   rN   rO   r   r   rË   r×   ˜  s)   † ØˆEØˆHØ*,Ð'ØˆGØ#$Ð Ù“&ˆCõr   rË   r›   r„   rÛ   )r   r   rT   r   r   r/   rÌ   rÍ   r¥   rÝ   r†   rÞ   )r   rË   r   rÐ   Úreqs        r   Ú!test_on_connecting_client_successÚ3OnConnectingTests.test_on_connecting_client_success–  s�   € ô	Ô/ô 	ñ “ˆÜ'›/ˆŒÜ›ˆŒØ×ÑÔà× Ñ Ó"ˆØ×"Ñ" 1Ó%ˆØ×Ñ˜¨¯©Ô1Ø×Ñ˜˜cŸh™hÔ'Ø×Ñ˜ §¡Õ-r   c                 óN   • [        [         R                  SS0 S9n[        U5        g )Nr›   F)Úchannel_typer»   Ú	is_secureÚ
channel_id)r   ÚCHANNEL_TYPE_FUNCTIONr3   )r   Údetailss     r   Útest_str_transportÚ$OnConnectingTests.test_str_transport²  s'   € Ü"Ü)×?Ñ?ØØØñ	
ˆô 	ˆG�r   c                 ó0   • [        SSSS9n[        U5        g )Nr›   Ú1234rÛ   rÜ   )r
   r3   )r   râ   s     r   Útest_str_connectingÚ%OnConnectingTests.test_str_connecting¼  s   € Ü ]¸È%ÑPˆäˆC�r   rO   N)
rI   rJ   rK   rL   rM   rÓ   rã   rë   rï   rN   rO   r   r   r¿   r¿   v  s   † ñòJò0.ò8õr   r¿   )"Úunittest.mockr   ÚtxaioÚuse_twistedÚautobahn.utilr   Úautobahn.twisted.websocketr   r   r   Úautobahn.wamp.typesr   Úautobahn.websocket.typesr
   Útwisted.python.failurer   Útwisted.internet.errorr   r   r   Útwisted.trialr   Útwisted.internet.testingr   ÚImportErrorÚtwisted.test.proto_helpersÚautobahn.testutilr   ÚTestCaser   rQ   ra   r³   r¿   rO   r   r   Ú<module>r      sÂ   ðõ6 ã Ø × Ò Ô å ,Ý =Ý >Ý >Ý 0Ý 6Ý *÷ñ å "ð;Ý8õ ,ô91˜X×.Ñ.ô 91ôxE˜H×-Ñ-ô Eô2
˜h×/Ñ/ô 
ôD+a˜X×.Ñ.ô +aô\I˜×)Ñ)õ IøðU
 ó ;ß:ð;ús   ÁC ÃCÃC