ó
    ×›‘hšc  ã                   ó¾  • S r SSKJrJr  SSKJrJr  SSKJr  SSK	J
r
   SSKJr  SSKJr  S	S
R!                  SS5      -   rSR!                  SS5      rSR!                  SS5      rSR!                  SS5      rSR!                  SS5      rSR!                  SS5      rSR!                  SS5      rSR!                  SS5      r " S S5      r " S S\
R4                  5      r " S S\5      r " S S\
R4                  5      r " S S\
R4                  5      r " S S\
R4                  5      r " S  S!\
R4                  5      r \" \RB                  5       " S" S#5      5       r"\" \RB                  5       " S$ S%5      5       r# " S& S'\
R4                  5      r$ " S( S)\
R4                  5      r% " S* S+\RL                  5      r' " S, S-\
R4                  5      r(g! \ a    Sr GNµf = f).z(
Session Initialization Protocol tests.
é    )ÚcheckersÚportal)ÚdeferÚreactor)Úsip)Úunittest)ÚAsyncioSelectorReactorN)Úimplementerz


z?INVITE sip:foo SIP/2.0
From: mo
To: joe
Content-Length: 4

abcdÚ
z
z-INVITE sip:foo SIP/2.0
From: mo
To: joe

1234zHINVITE sip:foo SIP/2.0
From: mo
To: joe
Content-Length: 4

1234

lalalalz½INVITE sip:foo SIP/2.0
From: mo
To: joe
Content-Length: 0

INVITE sip:loop SIP/2.0
From: foo
To: bar
Content-Length: 4

abcdINVITE sip:loop SIP/2.0
From: foo
To: bar
Content-Length: 4

1234z4SIP/2.0 200 OK
From:  foo
To:bar
Content-Length: 0

z.INVITE sip:foo SIP/2.0
f: mo
t: joe
l: 4

abcdz=INVITE sip:foo SIP/2.0
Via: SIP/2.0/UDP 10.0.0.1:5060;rport

aý  SIP/2.0 200 OK
Via: SIP/2.0/UDP server10.biloxi.com
    ;branch=z9hG4bKnashds8;received=192.0.2.3
Via: SIP/2.0/UDP bigbox3.site3.atlanta.com
    ;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2
Via: SIP/2.0/UDP pc33.atlanta.com
    ;branch=z9hG4bK776asdhds ;received=192.0.2.1
To: Bob <sip:bob@biloxi.com>;tag=a6c85cf
From: Alice <sip:alice@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710@pc33.atlanta.com
CSeq: 314159 INVITE
Contact: <sip:bob@192.0.2.4>
Content-Type: application/sdp
Content-Length: 0

c                   ó   • \ rS rSrS rSrg)Ú	TestRealmé~   c                 ó*   • [         R                  S S 4$ )Nc                  ó   • g ©N© r   ó    ÚYC:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/test/test_sip.pyÚ<lambda>Ú)TestRealm.requestAvatar.<locals>.<lambda>€   s   € ¨4r   )r   ÚIContact)ÚselfÚavatarIdÚmindÚ
interfacess       r   ÚrequestAvatarÚTestRealm.requestAvatar   s   € Ü�|‰|˜T¡<Ð/Ð/r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   Ú__static_attributes__r   r   r   r   r   ~   s   † õ0r   r   c                   óP   • \ 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)ÚMessageParsingTestséƒ   c                 óp   • / U l         [        R                  " U R                   R                  5      U l        g r   )Úlr   ÚMessagesParserÚappendÚparser©r   s    r   ÚsetUpÚMessageParsingTests.setUp„   s#   € ØˆŒÜ×(Ò(¨¯©¯©Ó7ˆ�r   c                 ón   • U R                   R                  U5        U R                   R                  5         g r   ©r*   ÚdataReceivedÚdataDone)r   Úmessages     r   ÚfeedMessageÚMessageParsingTests.feedMessageˆ   s$   € Ø�‰× Ñ  Ô)Ø�‰×ÑÕr   c                 ó8  • U R                  UR                  U5        U R                  UR                  R                  5       U5        U R                  UR                  U5        U R                  UR
                  U5        U R                  UR                  S5        g)z
Validate Requests.
é   N)ÚassertEqualÚmethodÚuriÚtoStringÚheadersÚbodyÚfinished)r   Úmr8   r9   r;   r<   s         r   ÚvalidateMessageÚ#MessageParsingTests.validateMessageŒ   so   € ð 	×Ñ˜Ÿ™ 6Ô*Ø×Ñ˜Ÿ™Ÿ™Ó)¨3Ô/Ø×Ñ˜Ÿ™ GÔ,Ø×Ñ˜Ÿ™ Ô&Ø×Ñ˜Ÿ™ QÕ'r   c           	      óº   • U R                   nU R                  [        5        U R                  [	        U5      S5        U R                  US   SSS/S/S/S.S	5        g ©
Nr6   r   ÚINVITEúsip:fooÚmoÚjoeÚ4©ÚfromÚtozcontent-lengthÚabcd)r'   r3   Úrequest1r7   Úlenr?   ©r   r'   s     r   Ú
testSimpleÚMessageParsingTests.testSimple–   ó[   € Ø�F‰FˆØ×ÑœÔ"Ø×Ñœ˜Q› Ô#Ø×ÑØˆa‰DØØØ�V E 7¸s¸eÑDØõ	
r   c           	      ó  • U R                   nU R                  [        5        U R                  [        5        U R	                  [        U5      S5        U R                  US   SSS/S/S/S.S	5        U R                  US
   SSS/S/S.S5        g )Né   r   rC   rD   rE   rF   rG   rH   rK   r6   )rI   rJ   Ú1234)r'   r3   rL   Úrequest2r7   rM   r?   rN   s     r   ÚtestTwoMessagesÚ#MessageParsingTests.testTwoMessages¢   s‘   € Ø�F‰FˆØ×ÑœÔ"Ø×ÑœÔ"Ø×Ñœ˜Q› Ô#Ø×ÑØˆa‰DØØØ�V E 7¸s¸eÑDØô	
ð 	×ÑØˆa‰D�(˜I°°¸u¸gÑ'FÈõ	
r   c           	      óº   • U R                   nU R                  [        5        U R                  [	        U5      S5        U R                  US   SSS/S/S/S.S	5        g )
Nr6   r   rC   rD   rE   rF   rG   rH   rT   )r'   r3   Úrequest3r7   rM   r?   rN   s     r   ÚtestGarbageÚMessageParsingTests.testGarbage²   rQ   r   c           	      ó6  • U R                   nU R                  [        5        U R                  [	        U5      S5        U R                  US   SSS/S/S/S.S	5        U R                  US
   SSS/S/S/S.S5        U R                  US   SSS/S/S/S.S5        g )Né   r   rC   rD   rE   rF   Ú0rH   Ú r6   zsip:loopÚfooÚbarrG   rK   rS   rT   )r'   r3   Úrequest4r7   rM   r?   rN   s     r   ÚtestThreeInOneÚ"MessageParsingTests.testThreeInOne¾   s»   € Ø�F‰FˆØ×ÑœÔ"Ø×Ñœ˜Q› Ô#Ø×ÑØˆa‰DØØØ�V E 7¸s¸eÑDØô	
ð 	×ÑØˆa‰DØØØ�W U GÀ¸uÑEØô	
ð 	×ÑØˆa‰DØØØ�W U GÀ¸uÑEØõ	
r   c           	      óº   • U R                   nU R                  [        5        U R                  [	        U5      S5        U R                  US   SSS/S/S/S.S	5        g rB   )r'   r3   Úrequest_shortr7   rM   r?   rN   s     r   Ú	testShortÚMessageParsingTests.testShortØ   s[   € Ø�F‰FˆØ×ÑœÔ'Ø×Ñœ˜Q› Ô#Ø×ÑØˆa‰DØØØ�V E 7¸s¸eÑDØõ	
r   c                 ó¬  • U R                   nU R                  [        5        U R                  [	        U5      S5        US   nU R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S/S/S/S.5        U R                  UR                  S	5        U R                  UR                  S5        g )
Nr6   r   éÈ   ÚOKr`   ra   r^   rH   r_   )
r'   r3   Ú	response1r7   rM   ÚcodeÚphraser;   r<   r=   ©r   r'   r>   s      r   ÚtestSimpleResponseÚ&MessageParsingTests.testSimpleResponseä   s¬   € Ø�F‰FˆØ×ÑœÔ#Ø×Ñœ˜Q› Ô#Øˆa‰DˆØ×Ñ˜Ÿ™ Ô%Ø×Ñ˜Ÿ™ 4Ô(Ø×ÑØ�I‰I  °¨wÈ3È%ÑPô	
ð 	×Ñ˜Ÿ™ Ô$Ø×Ñ˜Ÿ™ QÕ'r   c                 óR  • U R                   nU R                  [        5        U R                  [	        U5      S5        US   nU R                  UR
                  S   S   S5        U R                  UR
                  S   S   S5        U R                  UR
                  S   S   S5        g)	z^
A header may be split across multiple lines.  Subsequent lines begin
with C{" "} or C{"\t"}.
r6   r   ÚviazHSIP/2.0/UDP server10.biloxi.com;branch=z9hG4bKnashds8;received=192.0.2.3zVSIP/2.0/UDP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2rS   zHSIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds ;received=192.0.2.1N)r'   r3   Úresponse_multiliner7   rM   r;   ro   s      r   Útest_multiLineÚ"MessageParsingTests.test_multiLineñ   s©   € ð
 �F‰FˆØ×ÑÔ+Ô,Ø×Ñœ˜Q› Ô#Øˆa‰DˆØ×ÑØ�I‰I�eÑ˜QÑð7ô	
ð
 	×ÑØ�I‰I�eÑ˜QÑð?ô	
ð
 	×ÑØ�I‰I�eÑ˜QÑð:õ	
r   )r'   r*   N)r   r   r    r!   r,   r3   r?   rO   rV   rZ   rc   rg   rp   ru   r"   r   r   r   r$   r$   ƒ   s4   † ò8òò(ò

ò
ò 

ò
ò4

ò(õ
r   r$   c                   ó   • \ rS rSrSrS rSrg)Ú%MessageParsingFeedDataCharByCharTestsi  z1
Same as base class, but feed data char by char.
c                 ó€   • U H  nU R                   R                  U5        M      U R                   R                  5         g r   r/   )r   r2   Úcs      r   r3   Ú1MessageParsingFeedDataCharByCharTests.feedMessage  s.   € ÛˆAØ�K‰K×$Ñ$ QÖ'ñ à�‰×ÑÕr   r   N)r   r   r    r!   Ú__doc__r3   r"   r   r   r   rx   rx     s   † ñõr   rx   c                   ó&   • \ rS rSrS rS rS rSrg)ÚMakeMessageTestsi  c                 ó–   • [         R                  " SS5      nUR                  SS5        U R                  UR	                  5       S5        g )NrC   rD   r`   ra   z$INVITE sip:foo SIP/2.0
Foo: bar

)r   ÚRequestÚ	addHeaderr7   r:   ©r   Úrs     r   ÚtestRequestÚMakeMessageTests.testRequest  s7   € Ü�KŠK˜ )Ó,ˆØ	�‰�E˜5Ô!Ø×Ñ˜Ÿ™›Ð'SÕTr   c                 óÜ   • [         R                  " SS5      nUR                  SS5        UR                  SS5        UR                  S5        U R	                  UR                  5       S5        g )	Nrj   rk   r`   ra   zContent-LengthrG   rT   z3SIP/2.0 200 OK
Foo: bar
Content-Length: 4

1234)r   ÚResponser�   ÚbodyDataReceivedr7   r:   r‚   s     r   ÚtestResponseÚMakeMessageTests.testResponse  sW   € Ü�LŠL˜˜dÓ#ˆØ	�‰�E˜5Ô!Ø	�‰Ð$ cÔ*Ø	×Ñ˜6Ô"Ø×ÑØ�J‰J‹LÐWõ	
r   c                 óp   • [         R                  " S5      nU R                  UR                  5       S5        g )Nrj   zSIP/2.0 200 OK

)r   r‡   r7   r:   r‚   s     r   ÚtestStatusCodeÚMakeMessageTests.testStatusCode%  s'   € Ü�LŠL˜ÓˆØ×Ñ˜Ÿ™›Ð'?Õ@r   r   N)r   r   r    r!   r„   r‰   rŒ   r"   r   r   r   r~   r~     s   † òUò

õAr   r~   c                   óP   • \ 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)ÚViaTestsi*  c                 óŒ   • UR                  5       nU R                  U[        R                  " U5      R                  5       5        g r   )r:   r7   r   ÚparseViaHeader)r   ÚvÚss      r   ÚcheckRoundtripÚViaTests.checkRoundtrip+  s1   € Ø�J‰J‹LˆØ×Ñ˜œC×.Ò.¨qÓ1×:Ñ:Ó<Õ=r   c                 ó@  • [         R                  " S5      n[         R                  " S5      nU R                  UR                  UR                  5        U R                  UR                  UR                  5        U R                  UR
                  UR
                  5        g )NzSIP/2.0/UDP 192.168.1.1:5060z SIP/2.0/UDP     192.168.1.1:5060)r   r‘   r7   Ú	transportÚhostÚport)r   Úv1Úv2s      r   ÚtestExtraWhitespaceÚViaTests.testExtraWhitespace/  sl   € Ü×ÒÐ >Ó?ˆÜ×ÒÐ BÓCˆØ×Ñ˜Ÿ™ r§|¡|Ô4Ø×Ñ˜Ÿ™ "§'¡'Ô*Ø×Ñ˜Ÿ™ "§'¡'Õ*r   c                 óÀ  • Sn[         R                  " U5      nU R                  UR                  S5        U R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  5       S	5        U R!                  U5        g
)z3
Test parsing a Via header with one of everything.
zVSIP/2.0/UDP first.example.com:4000;ttl=16;maddr=224.2.0.1 ;branch=a7c6a8dlze (Example)ÚUDPzfirst.example.comi   é   z	224.2.0.1Ú
a7c6a8dlzer   zKSIP/2.0/UDP first.example.com:4000;ttl=16;branch=a7c6a8dlze;maddr=224.2.0.1N)r   r‘   r7   r—   r˜   r™   ÚassertIsNoneÚrportÚ
rportValueÚassertFalseÚrportRequestedÚttlÚmaddrÚbranchÚhiddenr:   r”   ©r   r“   r’   s      r   Útest_complexÚViaTests.test_complex6  s  € ð
,ð 	
ô ×Ò˜qÓ!ˆØ×Ñ˜Ÿ™ eÔ,Ø×Ñ˜Ÿ™Ð!4Ô5Ø×Ñ˜Ÿ™ Ô&Ø×Ñ˜!Ÿ'™'Ô"Ø×Ñ˜!Ÿ,™,Ô'Ø×Ñ˜×)Ñ)Ô*Ø×Ñ˜Ÿ™ Ô#Ø×Ñ˜Ÿ™ +Ô.Ø×Ñ˜Ÿ™ <Ô0Ø×Ñ˜Ÿ™ 1Ô%Ø×ÑØ�J‰J‹Lð8ô	
ð
 	×Ñ˜AÕr   c                 ó¸  • Sn[         R                  " U5      nU R                  UR                  S5        U R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  5        U R                  UR!                  5       S5        U R#                  U5        g)z#
Test parsing a simple Via header.
zSIP/2.0/UDP example.com;hiddenrŸ   úexample.coméÄ  z#SIP/2.0/UDP example.com:5060;hiddenN)r   r‘   r7   r—   r˜   r™   r¢   r£   r¤   r¥   r¦   r§   r¨   r©   Ú
assertTruerª   r:   r”   r«   s      r   Útest_simpleÚViaTests.test_simpleP  sø   € ð -ˆÜ×Ò˜qÓ!ˆØ×Ñ˜Ÿ™ eÔ,Ø×Ñ˜Ÿ™ Ô/Ø×Ñ˜Ÿ™ Ô&Ø×Ñ˜!Ÿ'™'Ô"Ø×Ñ˜!Ÿ,™,Ô'Ø×Ñ˜×)Ñ)Ô*Ø×Ñ˜!Ÿ%™%Ô Ø×Ñ˜!Ÿ'™'Ô"Ø×Ñ˜!Ÿ(™(Ô#Ø�‰˜Ÿ™Ô!Ø×Ñ˜Ÿ™›Ð'LÔMØ×Ñ˜AÕr   c                 óR   • [         R                  " S5      nU R                  U5        g )Nr¯   )r   ÚViar”   ©r   r’   s     r   ÚtestSimplerÚViaTests.testSimplerc  s   € Ü�GŠG�MÓ"ˆØ×Ñ˜AÕr   c                 óâ  • [         R                  " SSS9nU R                  U R                  /S9nU R	                  [        U5      S5        U R	                  US   S   S5        U R	                  US   S	   [        5        U R	                  UR                  5       S
5        U R                  UR                  5        U R                  UR                  5        U R                  UR                  5        g)zd
Setting rport to True is deprecated, but still produces a Via header
with the expected properties.
úfoo.barT©r£   ©ÚoffendingFunctionsr6   r   r2   ú+rport=True is deprecated since Twisted 9.0.ÚcategoryúSIP/2.0/UDP foo.bar:5060;rportN)r   rµ   ÚflushWarningsÚtest_deprecatedRPortr7   rM   ÚDeprecationWarningr:   r±   r£   r¦   r¢   r¤   )r   r’   Úwarningss      r   rÂ   ÚViaTests.test_deprecatedRPortg  sÈ   € ô
 �GŠG�I TÑ*ˆà×%Ñ%¸$×:SÑ:SÐ9TÐ%ÐUˆØ×Ñœ˜X›¨Ô*Ø×ÑØ�Q‰K˜	Ñ"Ð$Qô	
ð 	×Ñ˜ !™ ZÑ0Ô2DÔEà×Ñ˜Ÿ™›Ð'GÔHØ�‰˜Ÿ™Ô Ø�‰˜×(Ñ(Ô)Ø×Ñ˜!Ÿ,™,Õ'r   c                 óÚ   • [         R                  " SSS9nU R                  UR                  5       S5        U R	                  UR
                  5        U R                  UR                  5        g)zE
An rport setting of None should insert the parameter with no value.
rº   Nr»   rÀ   )r   rµ   r7   r:   r±   r¦   r¢   r¤   r¶   s     r   Ú
test_rportÚViaTests.test_rportz  sO   € ô �GŠG�I TÑ*ˆØ×Ñ˜Ÿ™›Ð'GÔHØ�‰˜×(Ñ(Ô)Ø×Ñ˜!Ÿ,™,Õ'r   c                 ó  • [         R                  " SSS9nU R                  UR                  5       S5        U R	                  UR
                  5        U R                  UR                  S5        U R                  UR                  S5        g)zS
An rport numeric setting should insert the parameter with the number
value given.
rº   r6   r»   z SIP/2.0/UDP foo.bar:5060;rport=1N)r   rµ   r7   r:   r¥   r¦   r¤   r£   r¶   s     r   Útest_rportValueÚViaTests.test_rportValueƒ  sg   € ô
 �GŠG�I QÑ'ˆØ×Ñ˜Ÿ™›Ð'IÔJØ×Ñ˜×)Ñ)Ô*Ø×Ñ˜Ÿ™ qÔ)Ø×Ñ˜Ÿ™ !Õ$r   c                 óª  • Sn[         R                  " U5      nU R                  UR                  S5        U R                  UR                  S5        U R                  UR
                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  5       R                  S5      S5        g )	Nz8SIP/2.0/UDP 10.0.0.1:5060;received=22.13.1.5;rport=12345rŸ   ú10.0.0.1r°   z	22.13.1.5i90  zrport=12345éÿÿÿÿ)r   r‘   r7   r—   r˜   r™   Úreceivedr£   ÚassertNotEqualr:   Úfindr«   s      r   ÚtestNATÚViaTests.testNATŽ  sœ   € ØFˆÜ×Ò˜qÓ!ˆØ×Ñ˜Ÿ™ eÔ,Ø×Ñ˜Ÿ™ Ô,Ø×Ñ˜Ÿ™ Ô&Ø×Ñ˜Ÿ™ [Ô1Ø×Ñ˜Ÿ™ %Ô(à×Ñ˜AŸJ™J›L×-Ñ-¨mÓ<¸bÕAr   c                 ót   • Sn[         R                  " U5      nU R                  UR                  5       U5        g)zJ
Parsing and serializing Via headers with unknown parameters should work.
z?SIP/2.0/UDP example.com:5060;branch=a12345b;bogus;pie=deliciousN)r   r‘   r7   r:   r«   s      r   Útest_unknownParamsÚViaTests.test_unknownParams™  s0   € ð NˆÜ×Ò˜qÓ!ˆØ×Ñ˜Ÿ™› qÕ)r   r   N)r   r   r    r!   r”   rœ   r¬   r²   r·   rÂ   rÇ   rÊ   rÒ   rÕ   r"   r   r   r   r�   r�   *  s5   † ò>ò+òò4ò&ò(ò&(ò	%ò	Bõ*r   r�   c                   ó    • \ rS rSrS rS rSrg)ÚURLTestsi¢  c                 ó~   • S H7  nU R                  [        R                  " U5      R                  5       U5        M9     g )N)zsip:j.doe@big.comz&sip:j.doe:secret@big.com;transport=tcpz!sip:j.doe@big.com?subject=projectzsip:example.com)r7   r   ÚparseURLr:   )r   Úurls     r   ÚtestRoundtripÚURLTests.testRoundtrip£  s2   € ó
ˆCð ×ÑœSŸ\š\¨#Ó.×7Ñ7Ó9¸3Ö?ò
r   c                 ó¨   • Sn[         R                  " U5      nSSSSSSSS	S
SSS/4SSSS.44 H   u  p4U R                  [        X#5      U5        M"     g )Nzesip:user:pass@hosta:123;transport=udp;user=phone;method=foo;ttl=12;maddr=1.2.3.4;blah;goo=bar?a=b&c=d)ÚusernameÚuser)ÚpasswordÚpass)r˜   Úhosta)r™   é{   )r—   Úudp)ÚusertypeÚphone)r8   r`   )r§   é   )r¨   ú1.2.3.4ÚotherÚblahzgoo=barr;   ÚbÚd)Úarz   )r   rÚ   r7   Úgetattr)r   r“   rÛ   Úkr’   s        r   ÚtestComplexÚURLTests.testComplex¬  st   € ð8ð 	
ô �lŠl˜1‹oˆà Ø ØØØ Ø!ØØØ Ø�v˜yÐ)Ð*Ø˜c¨Ñ,Ð-ó
‰DˆAð ×ÑœW S›_¨aÖ0ò
r   r   N)r   r   r    r!   rÜ   rñ   r"   r   r   r   rØ   rØ   ¢  s   † ò@õ1r   rØ   c                   ó   • \ rS rSrS rSrg)Ú
ParseTestsiÂ  c           
      ó
  • SSS0 4SSS0 4SSS0 4SSS0 4SS	SS
SS.44 Ha  u  pp4[         R                  " U5      u  pVnU R                  X%5        U R                  UR                  5       U5        U R                  Xt5        Mc     g )Nz""A. G. Bell" <sip:foo@example.com>z
A. G. Bellzsip:foo@example.comzAnon <sip:foo@example.com>ÚAnonr_   z<sip:foo@example.com>z)foo <sip:foo@example.com>;tag=bar;foo=bazr`   ra   Úbaz)Útagr`   )r   ÚparseAddressr7   r:   )r   ÚaddressÚnameÚurlsÚparamsÚgnameÚgurlÚgparamss           r   ÚtestParseAddressÚParseTests.testParseAddressÃ  s®   € ð 5ØØ%Øð	ð *¨6Ð3HÈ"ÐMØ" BÐ(=¸rÐBØ$ bÐ*?ÀÐDà;ØØ%Ø eÑ,ð	ó,
Ñ'ˆG˜4ô" $'×#3Ò#3°GÓ#<Ñ ˆE˜Ø×Ñ˜TÔ)Ø×Ñ˜TŸ]™]›_¨dÔ3Ø×Ñ˜WÖ-ò),
r   r   N)r   r   r    r!   r  r"   r   r   r   rô   rô   Â  s   † õ.r   rô   c                   ó   • \ rS rSrS rSrg)ÚDummyLocatoriÛ  c                 óT   • [         R                  " [        R                  " SSS95      $ )Nú
server.comr°   ©r™   )r   Úsucceedr   ÚURL©r   Ú
logicalURLs     r   Ú
getAddressÚDummyLocator.getAddressÝ  s   € Ü�}Š}œSŸWšW \¸Ñ=Ó>Ð>r   r   N©r   r   r    r!   r  r"   r   r   r   r  r  Û  s   † õ?r   r  c                   ó   • \ rS rSrS rSrg)ÚFailingLocatoriá  c                 ó>   • [         R                  " [        5       5      $ r   )r   ÚfailÚLookupErrorr
  s     r   r  ÚFailingLocator.getAddressã  s   € Ü�zŠzœ+›-Ó(Ð(r   r   Nr  r   r   r   r  r  á  s   † õ)r   r  c                   óJ   • \ 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)Ú
ProxyTestsiç  c                 ó¦   ^ • [         R                  " S5      T l        [        5       T R                  l        / T l        U 4S jT R                  l        g )Nú	127.0.0.1c                 ó<   >• TR                   R                  X45      $ r   ©Úsentr)   ©ÚdestÚmsgr   s     €r   r   Ú"ProxyTests.setUp.<locals>.<lambda>ì  ó   ø€ °4·9±9×3CÑ3CÀTÀKÔ3Pr   )r   ÚProxyÚproxyr  Úlocatorr  ÚsendMessager+   s   `r   r,   ÚProxyTests.setUpè  s4   ø€ Ü—Y’Y˜{Ó+ˆŒ
Ü)›^ˆ�
‰
ÔØˆŒ	Ü!Pˆ�
‰
Õr   c                 ól  • [         R                  " SS5      nUR                  S[         R                  " S5      R	                  5       5        UR                  S[         R                  " S5      R	                  5       5        UR                  SS5        UR                  SS	5        UR                  S
S5        U R
                  R                  UR	                  5       S5        U R                  [        U R                  5      S5        U R                  S   u  p#U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  R	                  5       S5        U R                  UR                  S5        U R                  UR                  S   / SQ5        g )NrC   rD   rs   ré   z1.2.3.5r`   ra   rJ   ú<sip:joe@server.com>Úcontactz<sip:joe@1.2.3.5>©ré   r°   r6   r   r°   r  )úSIP/2.0/UDP 127.0.0.1:5060úSIP/2.0/UDP 1.2.3.4:5060zSIP/2.0/UDP 1.2.3.5:5060)r   r€   r�   rµ   r:   r"  ÚdatagramReceivedr7   rM   r  r™   r˜   r9   r8   r;   ©r   rƒ   r  r>   s       r   ÚtestRequestForwardÚProxyTests.testRequestForwardî  s6  € Ü�KŠK˜ )Ó,ˆØ	�‰�Eœ3Ÿ7š7 9Ó-×6Ñ6Ó8Ô9Ø	�‰�Eœ3Ÿ7š7 9Ó-×6Ñ6Ó8Ô9Ø	�‰�E˜5Ô!Ø	�‰�DÐ0Ô1Ø	�‰�IÐ2Ô3Ø�
‰
×#Ñ# A§J¡J£LÐ2CÔDØ×Ñœ˜TŸY™Y›¨Ô+Ø—)‘)˜A‘,‰ˆØ×Ñ˜Ÿ™ DÔ)Ø×Ñ˜Ÿ™ LÔ1Ø×Ñ˜Ÿ™Ÿ™Ó)¨9Ô5Ø×Ñ˜Ÿ™ 8Ô,Ø×ÑØ�I‰I�eÑòõ	
r   c                 ó¾  • [         R                  " SS5      nUR                  S[         R                  " S5      R	                  5       5        UR                  SS5        UR                  SS5        UR                  S	S
5        U R
                  R                  UR	                  5       S5        U R                  S   u  p#U R                  UR                  S   SS/5        g )NrC   rD   rs   ré   r`   ra   rJ   r'  r(  z<sip:joe@1.2.3.4>©z1.1.1.1r°   r   r*  z)SIP/2.0/UDP 1.2.3.4:5060;received=1.1.1.1)
r   r€   r�   rµ   r:   r"  r,  r  r7   r;   r-  s       r   ÚtestReceivedRequestForwardÚ%ProxyTests.testReceivedRequestForward  s«   € Ü�KŠK˜ )Ó,ˆØ	�‰�Eœ3Ÿ7š7 9Ó-×6Ñ6Ó8Ô9Ø	�‰�E˜5Ô!Ø	�‰�DÐ0Ô1Ø	�‰�IÐ2Ô3Ø�
‰
×#Ñ# A§J¡J£LÐ2CÔDØ—)‘)˜A‘,‰ˆØ×ÑØ�I‰I�eÑØ)Ð+VÐWõ	
r   c                 ó6  • [         R                  " S5      nUR                  S[         R                  " S5      R	                  5       5        U R
                  R                  UR	                  5       S5        U R                  [        U R                  5      S5        g )Nrj   rs   úfoo.comr1  r   )
r   r‡   r�   rµ   r:   r"  r,  r7   rM   r  r‚   s     r   ÚtestResponseWrongViaÚProxyTests.testResponseWrongVia  sc   € ä�LŠL˜ÓˆØ	�‰�Eœ3Ÿ7š7 9Ó-×6Ñ6Ó8Ô9Ø�
‰
×#Ñ# A§J¡J£LÐ2CÔDØ×Ñœ˜TŸY™Y›¨Õ+r   c                 ó†  • [         R                  " S5      nUR                  S[         R                  " S5      R	                  5       5        UR                  S[         R                  " SSS9R	                  5       5        U R
                  R                  UR	                  5       S5        U R                  [        U R                  5      S5        U R                  S	   u  p#U R                  UR                  UR                  4S
5        U R                  UR                  S5        U R                  UR                  S   S/5        g )Nrj   rs   r  ú
client.coméÒ  r  r1  r6   r   )r9  r:  zSIP/2.0/UDP client.com:1234)r   r‡   r�   rµ   r:   r"  r,  r7   rM   r  r˜   r™   rm   r;   r-  s       r   ÚtestResponseForwardÚProxyTests.testResponseForward  sã   € Ü�LŠL˜ÓˆØ	�‰�Eœ3Ÿ7š7 ;Ó/×8Ñ8Ó:Ô;Ø	�‰�Eœ3Ÿ7š7 <°dÑ;×DÑDÓFÔGØ�
‰
×#Ñ# A§J¡J£LÐ2CÔDØ×Ñœ˜TŸY™Y›¨Ô+Ø—)‘)˜A‘,‰ˆØ×Ñ˜$Ÿ)™) T§Y¡YÐ/Ð1EÔFØ×Ñ˜Ÿ™ Ô%Ø×Ñ˜Ÿ™ 5Ñ)Ð,IÐ+JÕKr   c                 ó  • [         R                  " S5      nUR                  S[         R                  " S5      R	                  5       5        UR                  S[         R                  " SSS9R	                  5       5        U R
                  R                  UR	                  5       S5        U R                  [        U R                  5      S5        U R                  S	   u  p#U R                  UR                  UR                  4S
5        g )Nrj   rs   r  rÍ   r9  )rÏ   r1  r6   r   ©r9  r°   )r   r‡   r�   rµ   r:   r"  r,  r7   rM   r  r˜   r™   r-  s       r   ÚtestReceivedResponseForwardÚ&ProxyTests.testReceivedResponseForward$  s²   € Ü�LŠL˜ÓˆØ	�‰�Eœ3Ÿ7š7 ;Ó/×8Ñ8Ó:Ô;Ø	�‰�Eœ3Ÿ7š7 :¸ÑE×NÑNÓPÔQØ�
‰
×#Ñ# A§J¡J£LÐ2CÔDØ×Ñœ˜TŸY™Y›¨Ô+Ø—)‘)˜A‘,‰ˆØ×Ñ˜$Ÿ)™) T§Y¡YÐ/Ð1EÕFr   c                 ó  ^• [         R                  " S5      nUR                  S[         R                  " S5      R	                  5       5        / mU4S jU R
                  l        U R
                  R                  UR	                  5       S5        U R                  [        T5      S5        TS   u  p#U R                  [        UR                  R                  S/ 5      5      S5        U R                  UR                  S5        g )Nrj   rs   r  c                  ó&   >• TR                  U 5      $ r   )r)   )rî   r'   s    €r   r   Ú-ProxyTests.testResponseToUs.<locals>.<lambda>1  s   ø€ ¨A¯H©H°Q¬Kr   r1  r6   r   )r   r‡   r�   rµ   r:   r"  ÚgotResponser,  r7   rM   r;   Úgetrm   )r   rƒ   r>   Úaddrr'   s       @r   ÚtestResponseToUsÚProxyTests.testResponseToUs-  s´   ø€ Ü�LŠL˜ÓˆØ	�‰�Eœ3Ÿ7š7 ;Ó/×8Ñ8Ó:Ô;ØˆÜ!7ˆ�
‰
ÔØ�
‰
×#Ñ# A§J¡J£LÐ2CÔDØ×Ñœ˜Q› Ô#Ø�A‘$‰ˆØ×Ñœ˜QŸY™YŸ]™]¨5°"Ó5Ó6¸Ô:Ø×Ñ˜Ÿ™ Õ%r   c                 óŽ  • [         R                  " SS5      nUR                  S[         R                  " S5      R	                  5       5        UR                  S[         R                  " S5      R	                  5       5        U R
                  R                  UR	                  5       S5        U R                  U R                  / 5        g )NrC   rD   rs   ré   r  r>  )	r   r€   r�   rµ   r:   r"  r,  r7   r  r‚   s     r   ÚtestLoopÚProxyTests.testLoop8  s�   € Ü�KŠK˜ )Ó,ˆØ	�‰�Eœ3Ÿ7š7 9Ó-×6Ñ6Ó8Ô9Ø	�‰�Eœ3Ÿ7š7 ;Ó/×8Ñ8Ó:Ô;Ø�
‰
×#Ñ# A§J¡J£LÐ2FÔGØ×Ñ˜Ÿ™ BÕ'r   c                 óx  • [         R                  " SS5      nUR                  S[         R                  " S5      R	                  5       5        UR                  SS5        [        5       U R                  l        U R                  R                  UR	                  5       S5        U R                  [        U R                  5      S5        U R                  S	   u  p#U R                  UR                  UR                  4S5        U R                  UR                  S
5        U R                  UR                  S   S/5        g )NrC   rD   rs   ré   rJ   r'  r)  r6   r   i”  r+  )r   r€   r�   rµ   r:   r  r"  r#  r,  r7   rM   r  r˜   r™   rm   r;   r-  s       r   ÚtestCantForwardRequestÚ!ProxyTests.testCantForwardRequest?  sá   € Ü�KŠK˜ )Ó,ˆØ	�‰�Eœ3Ÿ7š7 9Ó-×6Ñ6Ó8Ô9Ø	�‰�DÐ0Ô1Ü+Ó-ˆ�
‰
ÔØ�
‰
×#Ñ# A§J¡J£LÐ2CÔDØ×Ñœ˜TŸY™Y›¨Ô+Ø—)‘)˜A‘,‰ˆØ×Ñ˜$Ÿ)™) T§Y¡YÐ/Ð1BÔCØ×Ñ˜Ÿ™ Ô%Ø×Ñ˜Ÿ™ 5Ñ)Ð,FÐ+GÕHr   )r"  r  N)r   r   r    r!   r,   r.  r2  r6  r;  r?  rG  rJ  rM  r"   r   r   r   r  r  ç  s3   † òQò
ò.
ò,ò	LòGò	&ò(õ
Ir   r  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g)ÚRegistrationTestsiL  c                 óþ   ^ • [         R                  " SS9T l        [         R                  " S5      T l        T R                  =T R                  l        T R                  l        / T l        U 4S jT R                  l        g )Nr  ©r˜   úbell.example.comc                 ó<   >• TR                   R                  X45      $ r   r  r  s     €r   r   Ú)RegistrationTests.setUp.<locals>.<lambda>R  r   r   )r   ÚRegisterProxyr"  ÚInMemoryRegistryÚregistryr#  r  r$  r+   s   `r   r,   ÚRegistrationTests.setUpM  sW   ø€ Ü×&Ò&¨KÑ8ˆŒ
Ü×,Ò,Ð-?Ó@ˆŒØ37·=±=Ð@ˆ�
‰
Ô˜dŸj™jÔ0ØˆŒ	Ü!Pˆ�
‰
Õr   c                 ó‚   • U R                   R                  R                  5        H  u  pUR                  5         M     U ?g r   )rX  ÚusersÚvaluesÚcancelr"  )r   rí   r9   s      r   ÚtearDownÚRegistrationTests.tearDownT  s/   € Ø—m‘m×)Ñ)×0Ñ0Ö2‰FˆAØ�H‰HŽJñ 3à‰Jr   c                 ó6  • [         R                  " SS5      nUR                  SS5        UR                  SS5        UR                  S[         R                  " S5      R	                  5       5        U R
                  R                  UR	                  5       S	5        g )
NÚREGISTERúsip:bell.example.comrJ   úsip:joe@bell.example.comr(  úsip:joe@client.com:1234rs   r9  r>  ©r   r€   r�   rµ   r:   r"  r,  r‚   s     r   ÚregisterÚRegistrationTests.registerY  sl   € Ü�KŠK˜
Ð$:Ó;ˆØ	�‰�DÐ4Ô5Ø	�‰�IÐ8Ô9Ø	�‰�Eœ3Ÿ7š7 <Ó0×9Ñ9Ó;Ô<Ø�
‰
×#Ñ# A§J¡J£LÐ2FÕGr   c                 óZ  • [         R                  " SS5      nUR                  SS5        UR                  SS5        UR                  S[         R                  " S5      R	                  5       5        UR                  S	S
5        U R
                  R                  UR	                  5       S5        g )Nra  rb  rJ   rc  r(  Ú*rs   r9  Úexpiresr^   r>  re  r‚   s     r   Ú
unregisterÚRegistrationTests.unregister`  sy   € Ü�KŠK˜
Ð$:Ó;ˆØ	�‰�DÐ4Ô5Ø	�‰�I˜sÔ#Ø	�‰�Eœ3Ÿ7š7 <Ó0×9Ñ9Ó;Ô<Ø	�‰�I˜sÔ#Ø�
‰
×#Ñ# A§J¡J£LÐ2FÕGr   c                 ó¸  • U R                  5         U R                  S   u  pU R                  UR                  UR                  4S5        U R                  UR
                  S5        U R                  UR                  S   S/5        U R                  UR                  S   S/5        U R                  UR                  S   S	/5        [        [        5      [        :w  a-  U R                  [        UR                  S
   S   5      S;   5        U R                  [        U R                  R                  5      S5        U R                  R                  S   u  p4U R                  UR                  5       S	5        U R                   R"                  R%                  [&        R(                  " SSS95      nUR+                  S 5        UR+                  U R                  S5        U$ )Nr   r>  rj   rs   úSIP/2.0/UDP client.com:5060rJ   rc  r(  úsip:joe@client.com:5060rj  )i  i  i  i  r6   rF   rS  ©rß   r˜   c                 ó2   • U R                   U R                  4$ r   ©r˜   r™   )Údesturls    r   r   Ú0RegistrationTests.testRegister.<locals>.<lambda>{  s   €  w§|¡|°W·\±\Ñ&Br   )rf  r  r7   r˜   r™   rm   r;   Útyper   r	   r±   ÚintrM   rX  r[  r:   r"  r#  r  r   r	  ÚaddCallback)r   r  r>   Údcr9   rí   s         r   ÚtestRegisterÚRegistrationTests.testRegisterh  st  € Ø�‰ŒØ—)‘)˜A‘,‰ˆØ×Ñ˜$Ÿ)™) T§Y¡YÐ/Ð1EÔFØ×Ñ˜Ÿ™ Ô%Ø×Ñ˜Ÿ™ 5Ñ)Ð,IÐ+JÔKØ×Ñ˜Ÿ™ 4™Ð+EÐ*FÔGØ×Ñ˜Ÿ™ 9Ñ-Ð0IÐ/JÔKô ”‹=Ô2Ó2Ø�O‰OœC §	¡	¨)Ñ 4°QÑ 7Ó8Ð<TÑTÔUØ×Ñœ˜TŸ]™]×0Ñ0Ó1°1Ô5Ø—-‘-×%Ñ% eÑ,‰ˆØ×Ñ˜Ÿ™›Ð)BÔCØ�J‰J×Ñ×)Ñ)Ü�GŠG˜UÐ);Ñ<ó
ˆð 	
�‰ÑBÔCØ	�‰�d×&Ñ&Ð(<Ô=Øˆr   c                 ó:  • U R                  5         U R                  5         U R                  S   u  pU R                  UR                  UR
                  4S5        U R                  UR                  S5        U R                  UR                  S   S/5        U R                  UR                  S   S/5        U R                  UR                  S   S	/5        U R                  UR                  S
   S/5        U R                  U R                  R                  0 5        g )Nr6   r>  rj   rs   rn  rJ   rc  r(  ro  rj  r^   )
rf  rk  r  r7   r˜   r™   rm   r;   rX  r[  ©r   r  r>   s      r   ÚtestUnregisterÚ RegistrationTests.testUnregister  sá   € Ø�‰ŒØ�‰ÔØ—)‘)˜A‘,‰ˆØ×Ñ˜$Ÿ)™) T§Y¡YÐ/Ð1EÔFØ×Ñ˜Ÿ™ Ô%Ø×Ñ˜Ÿ™ 5Ñ)Ð,IÐ+JÔKØ×Ñ˜Ÿ™ 4™Ð+EÐ*FÔGØ×Ñ˜Ÿ™ 9Ñ-Ð0IÐ/JÔKØ×Ñ˜Ÿ™ 9Ñ-°¨uÔ5Ø×Ñ˜Ÿ™×,Ñ,¨bÕ1r   c                 óÔ   • [        5       n[        R                  " U5      n[        R                  " 5       nUR                  SS5        UR                  U5        X R                  l        g )NzuserXname@127.0.0.1Ú	passXword)r   r   ÚPortalr   Ú'InMemoryUsernamePasswordDatabaseDontUseÚaddUserÚregisterCheckerr"  )r   rƒ   Úprz   s       r   Ú	addPortalÚRegistrationTests.addPortal‹  sL   € Ü‹KˆÜ�MŠM˜!ÓˆÜ×<Ò<Ó>ˆØ	�	‰	Ð'¨Ô5Ø	×Ñ˜!ÔØ�
‰
Õr   c                 óF  • U R                  5         U R                  5         U R                  [        U R                  R
                  5      S5        U R                  [        U R                  5      S5        U R                  S   u  pU R                  UR                  S5        g )Nr   r6   i‘  )r†  rf  r7   rM   rX  r[  r  rm   r|  s      r   ÚtestFailedAuthenticationÚ*RegistrationTests.testFailedAuthentication“  so   € Ø�‰ÔØ�‰Œà×Ñœ˜TŸ]™]×0Ñ0Ó1°1Ô5Ø×Ñœ˜TŸY™Y›¨Ô+Ø—)‘)˜A‘,‰ˆØ×Ñ˜Ÿ™ Õ%r   c                 ó€  • [         R                  " SS5      nUR                  SS5        UR                  SS5        UR                  S[         R                  " S5      R	                  5       5        U R
                  R                  UR	                  5       S	5        U R                  [        U R                  5      S
5        g )Nra  zsip:wrong.comrJ   rc  r(  rd  rs   r9  r>  r   ©
r   r€   r�   rµ   r:   r"  r,  r7   rM   r  r‚   s     r   ÚtestWrongDomainRegisterÚ)RegistrationTests.testWrongDomainRegisterœ  sƒ   € Ü�KŠK˜
 OÓ4ˆØ	�‰�DÐ4Ô5Ø	�‰�IÐ8Ô9Ø	�‰�Eœ3Ÿ7š7 <Ó0×9Ñ9Ó;Ô<Ø�
‰
×#Ñ# A§J¡J£LÐ2FÔGØ×Ñœ˜TŸY™Y›¨Õ+r   c                 ó€  • [         R                  " SS5      nUR                  SS5        UR                  SS5        UR                  S[         R                  " S5      R	                  5       5        U R
                  R                  UR	                  5       S	5        U R                  [        U R                  5      S
5        g )Nra  rb  rJ   zsip:joe@foo.comr(  rd  rs   r9  r>  r   rŒ  r‚   s     r   ÚtestWrongToDomainRegisterÚ+RegistrationTests.testWrongToDomainRegister¤  s„   € Ü�KŠK˜
Ð$:Ó;ˆØ	�‰�DÐ+Ô,Ø	�‰�IÐ8Ô9Ø	�‰�Eœ3Ÿ7š7 <Ó0×9Ñ9Ó;Ô<Ø�
‰
×#Ñ# A§J¡J£LÐ2FÔGØ×Ñœ˜TŸY™Y›¨Õ+r   c                 óÆ   • U R                  5         [        R                  " SSS9nU R                  R                  R                  U5      nU R                  U[        5        U$ )NrF   r5  rp  ©rf  r   r	  r"  r#  r  ÚassertFailurer  ©r   rÛ   rí   s      r   ÚtestWrongDomainLookupÚ'RegistrationTests.testWrongDomainLookup¬  sJ   € Ø�‰ŒÜ�gŠg˜u¨9Ñ5ˆØ�J‰J×Ñ×)Ñ)¨#Ó.ˆØ×Ñ˜1œkÔ*Øˆr   c                 óÆ   • U R                  5         [        R                  " SSS9nU R                  R                  R                  U5      nU R                  U[        5        U$ )NÚjanerS  rp  r“  r•  s      r   ÚtestNoContactLookupÚ%RegistrationTests.testNoContactLookup³  sK   € Ø�‰ŒÜ�gŠg˜vÐ,>Ñ?ˆØ�J‰J×Ñ×)Ñ)¨#Ó.ˆØ×Ñ˜1œkÔ*Øˆr   )r"  rX  r  N)r   r   r    r!   r,   r^  rf  rk  ry  r}  r†  r‰  r�  r�  r–  rš  r"   r   r   r   rP  rP  L  sA   † òQòò
HòHòò.
2òò&ò,ò,òõr   rP  c                   ó    • \ rS rSrS rS rSrg)ÚClienti»  c                 ó„   • [         R                  R                  U 5        / U l        [        R
                  " 5       U l        g r   )r   ÚBaseÚ__init__rÏ   r   ÚDeferredÚdeferredr+   s    r   r   ÚClient.__init__¼  s)   € Ü�‰×Ñ˜$ÔØˆŒÜŸšÓ(ˆ�r   c                 ó„   • U R                   R                  U5        U R                  R                  U R                   5        g r   )rÏ   r)   r¢  Úcallback)r   ÚresponserF  s      r   Úhandle_responseÚClient.handle_responseÁ  s*   € Ø�‰×Ñ˜XÔ&Ø�‰×Ñ˜tŸ}™}Õ-r   )r¢  rÏ   N)r   r   r    r!   r   r§  r"   r   r   r   r�  r�  »  s   † ò)õ
.r   r�  c                   ó,   • \ rS rSrS rS rS rS rSrg)Ú	LiveTestsiÆ  c                 ó  • [         R                  " SS9U l        [         R                  " S5      U l        U R                  =U R                  l        U R                  l        [        R                  " SU R                  SS9U l        [        5       U l
        [        R                  " SU R                  SS9U l        U R                  R                  5       R                  U R                  R                  5       R                  4U l        g )Nr  rR  rS  r   )Ú	interface)r   rV  r"  rW  rX  r#  r   Ú	listenUDPÚ
serverPortr�  ÚclientÚ
clientPortÚgetHostr˜   r™   ÚserverAddressr+   s    r   r,   ÚLiveTests.setUpÇ  s¶   € Ü×&Ò&¨KÑ8ˆŒ
Ü×,Ò,Ð-?Ó@ˆŒØ37·=±=Ð@ˆ�
‰
Ô˜dŸj™jÔ0Ü!×+Ò+¨A¨t¯z©zÀ[ÑQˆŒÜ“hˆŒÜ!×+Ò+¨A¨t¯{©{ÀkÑRˆŒà�O‰O×#Ñ#Ó%×*Ñ*Ø�O‰O×#Ñ#Ó%×*Ñ*ð
ˆÕr   c                 óR  • U R                   R                  R                  5        H  u  pUR                  5         M     [        R
                  " U R                  R                  5      n[        R
                  " U R                  R                  5      n[        R                  " X4/5      $ r   )
rX  r[  r\  r]  r   ÚmaybeDeferredr°  ÚstopListeningr®  ÚgatherResults)r   rí   r9   Úd1Úd2s        r   r^  ÚLiveTests.tearDownÓ  sq   € Ø—m‘m×)Ñ)×0Ñ0Ö2‰FˆAØ�H‰HŽJñ 3ä× Ò  §¡×!>Ñ!>Ó?ˆÜ× Ò  §¡×!>Ñ!>Ó?ˆÜ×"Ò" B 8Ó,Ð,r   c                 ó  ^ • T R                   R                  5       R                  n[        R                  " SS5      nUR                  SS5        UR                  SSU-  5        UR                  S[        R                  " SUS	9R                  5       5        T R                  R                  [        R                  " ST R                  S
   S9U5        T R                  R                  nU 4S jnUR                  U5        U$ )Nra  rb  rJ   rc  r(  úsip:joe@127.0.0.1:%drs   r  r  r6   rr  c                 ó~   >• TR                  [        U 5      S5        U S   nTR                  UR                  S5        g ©Nr6   r   rj   ©r7   rM   rm   ©rÏ   rƒ   r   s     €r   ÚcheckÚ%LiveTests.testRegister.<locals>.checkå  ó4   ø€ Ø×ÑœS ›]¨AÔ.Ø˜‘ˆAØ×Ñ˜QŸV™V SÕ)r   )r°  r±  r™   r   r€   r�   rµ   r:   r¯  r$  r	  r²  r¢  rw  )r   r…  rƒ   rí   rÁ  s   `    r   ry  ÚLiveTests.testRegisterÚ  sÇ   ø€ Ø�O‰O×#Ñ#Ó%×*Ñ*ˆÜ�KŠK˜
Ð$:Ó;ˆØ	�‰�DÐ4Ô5Ø	�‰�IÐ5¸Ñ9Ô:Ø	�‰�Eœ3Ÿ7š7 ;°QÑ7×@Ñ@ÓBÔCØ�‰×ÑÜ�GŠG˜¨4×+=Ñ+=¸aÑ+@ÑAÀ1ô	
ð �K‰K× Ñ ˆõ	*ð
 	
�‰�eÔØˆr   c           	      óØ  ^ • T R                   R                  5       R                  n[        R                  " SS5      nUR                  SS5        UR                  SSU-  5        UR                  S[        R                  " SUS	S
9R                  5       5        T R                  T R                  /S9nT R                  [        U5      S5        T R                  US   S   S5        T R                  US   S   [        5        T R                  R                  [        R                  " ST R                   S   S9U5        T R                  R"                  nU 4S jnUR%                  U5        U$ )a8  
rport is allowed without a value, apparently because server
implementors might be too stupid to check the received port
against 5060 and see if they're equal, and because client
implementors might be too stupid to bind to port 5060, or set a
value on the rport parameter they send if they bind to another
port.
ra  rb  rJ   rc  r(  r¼  rs   r  T)r™   r£   r¼   r6   r   r2   r¾   r¿   rr  c                 ó~   >• TR                  [        U 5      S5        U S   nTR                  UR                  S5        g r¾  r¿  rÀ  s     €r   rÁ  Ú)LiveTests.test_amoralRPort.<locals>.check  rÃ  r   )r°  r±  r™   r   r€   r�   rµ   r:   rÁ   Útest_amoralRPortr7   rM   rÃ   r¯  r$  r	  r²  r¢  rw  )r   r…  rƒ   rÄ   rí   rÁ  s   `     r   rÈ  ÚLiveTests.test_amoralRPortí  s4  ø€ ð �O‰O×#Ñ#Ó%×*Ñ*ˆÜ�KŠK˜
Ð$:Ó;ˆØ	�‰�DÐ4Ô5Ø	�‰�IÐ5¸Ñ9Ô:Ø	�‰�Eœ3Ÿ7š7 ;°Q¸dÑC×LÑLÓNÔOØ×%Ñ%¸$×:OÑ:OÐ9PÐ%ÐQˆØ×Ñœ˜X›¨Ô*Ø×ÑØ�Q‰K˜	Ñ"Ð$Qô	
ð 	×Ñ˜ !™ ZÑ0Ô2DÔEØ�‰×ÑÜ�GŠG˜¨4×+=Ñ+=¸aÑ+@ÑAÀ1ô	
ð �K‰K× Ñ ˆõ	*ð
 	
�‰�eÔØˆr   )r¯  r°  r"  rX  r²  r®  N)	r   r   r    r!   r,   r^  ry  rÈ  r"   r   r   r   rª  rª  Æ  s   † ò

ò-òõ&r   rª  ))r|   Útwisted.credr   r   Útwisted.internetr   r   Útwisted.protocolsr   Útwisted.trialr   Útwisted.internet.asyncioreactorr	   ÚBaseExceptionÚzope.interfacer
   ÚreplacerL   rU   rY   rb   rl   rf   Úrequest_nattedrt   r   ÚTestCaser$   rx   r~   r�   rØ   rô   ÚILocatorr  r  r  rP  rŸ  r�  rª  r   r   r   Ú<module>rÕ     s-  ðñ
÷ *ß +Ý !Ý "ð"ÝFõ 'ð ð÷ 	‰Øˆfó	ñ	ð 	ð÷ 	‰Øˆ&ó	ð	 	ð÷ ‰7Øˆ&óð 	ð÷ 	‰Øˆ&ó	ð 	ð(÷
 �GØˆ&óð 
ð÷ 	‰Øˆ&ó	ð ð÷ �GØˆ&óð	 ð÷ �gØˆ&óð ÷(0ñ 0ô
E
˜(×+Ñ+ô E
ôPÐ,?ô ôA�x×(Ñ(ô Aô(u*ˆx× Ñ ô u*ôp1ˆx× Ñ ô 1ô@.�×"Ñ"ô .ñ2 ˆS�\‰\Ó÷?ð ?ó ð?ñ
 ˆS�\‰\Ó÷)ð )ó ð)ô
bI�×"Ñ"ô bIôJl˜×)Ñ)ô lô^.ˆS�X‰Xô .ôF�×!Ñ!õ Føðm ó "Ø!Óð"ús    G ÇGÇG