
    hc                        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Nf = 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

lalalalzINVITE 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       \/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/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   [    FF"Q#aDVE7se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    FF""Q#aDVE7seD	
 	aD(Iug'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    FF"Q#aDVE7seD	
 	aDWUGuE	
 	aDWUG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[    FF'Q#aDVE7se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    FF#Q#aD%4(IIw3%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    
 FF+,Q#aDIIeQ7	

 	IIeQ?	

 	IIe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KK$$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    KK),	E5!'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    LLd#	E5!	$c*	6"JJL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'    LL'?@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    JJL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%JJL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    GGM"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    
 GGIT*%%$:S:S9T%UX*QK	"$Q	
 	!Z02D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     GGIT*'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    
 GGIQ''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%(AJJL--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93?
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 	
 ll1o   ! vy)*c,-
DA WS_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%	 *63H"M"B(=rB$b*?D;%e,	,
'G4" $'#3#3G#< 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    }}SWW\=>>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    zz+-((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>      4993C3CTK3Pr   )r   Proxyproxyr  locatorr  sendMessager+   s   `r   r,   ProxyTests.setUp  s4    YY{+
)^

	!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   KK),	E3779-6689	E3779-6689	E5!	D01	I23

##AJJL2CDTYY+))A,D)L1)958,IIe	
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    KK),	E3779-6689	E5!	D01	I23

##AJJL2CD))A,IIe)+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    LL	E3779-6689

##AJJL2CDTYY+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    LL	E377;/88:;	E377<d;DDFG

##AJJL2CDTYY+))A,$))TYY/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    LL	E377;/88:;	E377:ENNPQ

##AJJL2CDTYY+))A,$))TYY/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    AHHQKr   r1  r6   r   )r   r   r   r   r:   r"  gotResponser,  r7   rM   r;   getrm   )r   r   r>   addrr'   s       @r   testResponseToUsProxyTests.testResponseToUs-  s    LL	E377;/88:;!7



##AJJL2CDQ#A$QYY]]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    KK),	E3779-6689	E377;/88:;

##AJJL2F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    KK),	E3779-6689	D01+-



##AJJL2CDTYY+))A,$))TYY/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==@

djj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/    mm))002FAHHJ 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    KK
$:;	D45	I89	E377<099;<

##AJJL2F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    KK
$:;	D45	Is#	E377<099;<	Is#

##AJJL2F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,$))TYY/1EF%5),I+JK4+E*FG9-0I/JK =22OOC		) 4Q 78<TTUT]]00115--%%e,)BCJJ))GGU);<
 	
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,$))TYY/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MM!<<>			'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115TYY+))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    KK
O4	D45	I89	E377<099;<

##AJJL2FGTYY+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    KK
$:;	D+,	I89	E377<099;<

##AJJL2FGTYY+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    ggu95JJ))#.1k*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    ggv,>?JJ))#.1k*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==@

djj0!++Atzz[Qh!++At{{kROO##%**OO##%**
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    mm))002FAHHJ 3  !>!>?  !>!>?""B8,,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QVVS)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    OO##%**KK
$:;	D45	I59:	E377;Q7@@BCGG4+=+=a+@A1	
 KK  	*
 	
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    OO##%**KK
$:;	D45	I59:	E377;QdCLLNO%%$:O:O9P%QX*QK	"$Q	
 	!Z02DEGG4+=+=a+@A1	
 KK  	*
 	
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1x   1@."" .2 S\\? ? ?
 S\\) ) )
bI"" bIJl)) l^.SXX .F!! Fm  "!"s   G GG