1
from sign.test.test_sip import FakeClockTestCase, TestRealm, PermissiveChecker
3
from twisted import cred
4
from twisted.internet import reactor
6
exampleInvite = """INVITE sip:bob@proxy2.org SIP/2.0\r
7
Via: SIP/2.0/UDP client.com:5060;branch=z9hG4bK74bf9\r
9
From: Alice <sip:alice@proxy1.org>;tag=9fxced76sl\r
10
To: Bob <sip:bob@proxy2.org>\r
11
Call-ID: 3848276298220188511@client.com\r
13
Contact: <sip:alice@client.com>\r
16
o=alice 2890844526 2890844526 IN IP4 server.com\r
20
m=audio 49172 RTP/AVP 0\r
21
a=rtpmap:0 PCMU/8000\r
27
Via: SIP/2.0/UDP client.com:5060;branch=z9hG4bK74bf9;received=10.0.0.1\r
28
From: Alice <sip:alice@proxy1.org>;tag=9fxced76sl\r
29
To: Bob <sip:bob@proxy2.org>;tag=314159\r
30
Call-ID: 3848276298220188511@client.com\r
31
Contact: <sip:bob@server.com>\r
36
response200 = """SIP/2.0 200 OK\r
37
Via: SIP/2.0/UDP client.com:1234;branch=z9hG4bK74bf9\r
38
From: Alice <sip:alice@proxy1.org>;tag=9fxced76sl\r
39
To: Bob <sip:bob@proxy2.org>\r
40
Call-ID: 3848276298220188511@client.com\r
42
Contact: <sip:alice@client.com>\r
45
o=bob 2890844527 2890844527 IN IP4 server.com\r
49
m=audio 3456 RTP/AVP 0\r
50
a=rtpmap:0 PCMU/8000\r
54
ACK sip:bob@proxy2.org SIP/2.0\r
55
Via: SIP/2.0/UDP client.com:5060;branch=z9hG4bK74b76\r
57
Route: sip:proxy2.org:5060;lr\r
58
From: Alice <sip:alice@proxy1.org>;tag=9fxced76sl\r
59
To: Bob <sip:bob@proxy2.org>;tag=314159\r
60
Call-ID: 3848276298220188511@client.com\r
66
BYE sip:alice@proxy1.org SIP/2.0\r
67
Via: SIP/2.0/UDP server.com:5060;branch=z9hG4bKnashds7\r
69
Route: sip:proxy2.org:5060;lr\r
70
Route: sip:proxy1.org:5060;lr\r
71
From: Bob <sip:bob@proxy2.org>;tag=314159\r
72
To: Alice <sip:alice@proxy1.org>;tag=9fxced76sl\r
73
Call-ID: 3848276298220188511@client.com\r
80
Via: SIP/2.0/UDP server.com:5060;branch=z9hG4bKnashds7;received=10.0.0.2\r
81
From: Bob <sip:bob@proxy2.org>;tag=314159\r
82
To: Alice <sip:alice@proxy1.org>;tag=9fxced76sl\r
83
Call-ID: 3848276298220188511@client.com\r
88
class CallTerminateTest(FakeClockTestCase):
91
r = TestRealm("server.com")
92
p = cred.portal.Portal(r)
93
p.registerChecker(PermissiveChecker())
94
self.uas = sip.Terminator()
96
self.sip = sip.SIPTransport(self.uas, ["server.com"], 5060)
97
self.sip.sendMessage = lambda dest, msg: self.sent.append((dest, msg))
98
self.testMessages = []
99
self.parser = sip.MessagesParser(self.testMessages.append)
101
self.clock.advance(33)
103
self.clock.advance(33)
106
def assertMsgEqual(self, first, second):
107
self.testMessages[:] = []
108
self.parser.dataReceived(first)
109
self.parser.dataDone()
110
self.parser.dataReceived(second)
111
self.parser.dataDone()
112
self.assertEqual(self.testMessages[0], self.testMessages[1])
114
def testCallTermination(self):
115
self.sip.datagramReceived(exampleInvite, ('10.0.0.1', 5060))
117
self.assertEquals(len(self.sent), 2)
118
self.assertMsgEqual(self.sent[0], response180)
119
self.assertMsgEqual(self.sent[1], response200)
121
self.sip.datagramReceived(ackRequest, ('10.0.0.1', 5060))
122
self.assertEquals(len(self.sent), 0)
123
self.sip.datagramReceived(byeRequest, ('10.0.0.1', 5060))
124
self.assertEquals(len(self.sent), 1)
125
self.assertMsgEqual(self.sent[1], byeResponse)