Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F7159489
updatetest5.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Referenced Files
None
Subscribers
None
updatetest5.py
View Options
#!/usr/bin/env python
# Copyright (C) 2008 AG Projects
#
"""
This test simulates a call setup with an updated reply from the callee:
- The caller sends an INVITE
- The callee replies with a provisional response containg SDP e.g. 183
- Both parties start sending media
- Media flows for 5 seconds
- Media stops
- The callee sends another 183 with new port and to-tag (e.g. when the first PSTN gateway failed)
- Both parties start sending media
- Media flows for 5 seconds
- Media stops
- The callee sends a 200 OK with a new port
- Media flows again for 5 seconds
- The caller sends a BYE
"""
from
common
import
*
def
caller_update
(
protocol
,
session
,
caller_media
,
callee_media
):
print
"doing update for caller"
defer
=
session
.
do_update
(
protocol
,
"caller"
,
"request"
,
False
)
defer
.
addCallback
(
callee_update
,
protocol
,
session
,
caller_media
,
callee_media
)
return
defer
def
callee_update
(
callee_addr
,
protocol
,
session
,
caller_media
,
callee_media
):
print
"doing update for callee"
defer
=
session
.
do_update
(
protocol
,
"callee"
,
"reply"
,
False
)
defer
.
addCallback
(
do_media
,
callee_addr
,
protocol
,
session
,
caller_media
,
callee_media
)
return
defer
def
do_media
((
caller_ip
,
caller_ports
),
(
callee_ip
,
callee_ports
),
protocol
,
session
,
caller_media
,
callee_media
):
print
"starting media for both parties"
session
.
caller
.
start_media
(
caller_ip
,
caller_ports
)
session
.
callee
.
start_media
(
callee_ip
,
callee_ports
)
defer
=
DeferredList
([
caller_media
,
callee_media
])
defer
.
addCallback
(
wait
,
protocol
,
session
,
callee_ip
,
callee_ports
)
return
defer
def
wait
(
result
,
protocol
,
session
,
callee_ip
,
callee_ports
):
print
"got media, waiting 5 seconds"
defer
=
Deferred
()
defer
.
addCallback
(
stop_media
,
protocol
,
session
,
callee_ip
,
callee_ports
)
reactor
.
callLater
(
5
,
defer
.
callback
,
None
)
return
defer
def
stop_media
(
result
,
protocol
,
session
,
callee_ip
,
callee_ports
):
print
"stopping media"
defer
=
DeferredList
([
session
.
caller
.
stop_media
(),
session
.
callee
.
stop_media
()])
defer
.
addCallback
(
change_callee_prov
,
protocol
,
session
,
callee_ip
,
callee_ports
)
return
defer
def
change_callee_prov
(
result
,
protocol
,
session
,
callee_ip
,
callee_ports
):
print
"sending new provisional update for callee"
session
.
callee
.
tag
=
"newtotag"
caller_media
=
session
.
caller
.
set_media
([(
"audio"
,
40000
,
"sendrecv"
,
""
)])
callee_media
=
session
.
callee
.
set_media
([(
"audio"
,
50010
,
"sendrecv"
,
""
)])
media_defer
=
DeferredList
([
caller_media
,
callee_media
])
defer
=
session
.
do_update
(
protocol
,
"callee"
,
"reply"
,
False
)
defer
.
addCallback
(
start_new_media_prov
,
protocol
,
session
,
media_defer
,
callee_ip
,
callee_ports
)
return
defer
def
start_new_media_prov
((
caller_ip
,
caller_ports
),
protocol
,
session
,
media_defer
,
callee_ip
,
callee_ports
):
print
"starting new media"
session
.
caller
.
start_media
(
caller_ip
,
caller_ports
)
session
.
callee
.
start_media
(
callee_ip
,
callee_ports
)
media_defer
.
addCallback
(
wait2
,
protocol
,
session
,
callee_ip
,
callee_ports
)
return
media_defer
def
wait2
(
result
,
protocol
,
session
,
callee_ip
,
callee_ports
):
print
"got new media, waiting 5 seconds"
defer
=
Deferred
()
defer
.
addCallback
(
stop_media_prov
,
protocol
,
session
,
callee_ip
,
callee_ports
)
reactor
.
callLater
(
5
,
defer
.
callback
,
None
)
return
defer
def
stop_media_prov
(
result
,
protocol
,
session
,
callee_ip
,
callee_ports
):
print
"stopping media"
defer
=
DeferredList
([
session
.
caller
.
stop_media
(),
session
.
callee
.
stop_media
()])
defer
.
addCallback
(
change_callee
,
protocol
,
session
,
callee_ip
,
callee_ports
)
return
defer
def
change_callee
(
result
,
protocol
,
session
,
callee_ip
,
callee_ports
):
print
"sending new update for callee"
caller_media
=
session
.
caller
.
set_media
([(
"audio"
,
40000
,
"sendrecv"
,
""
)])
callee_media
=
session
.
callee
.
set_media
([(
"audio"
,
50020
,
"sendrecv"
,
""
)])
media_defer
=
DeferredList
([
caller_media
,
callee_media
])
defer
=
session
.
do_update
(
protocol
,
"callee"
,
"reply"
,
True
)
defer
.
addCallback
(
start_new_media
,
protocol
,
session
,
media_defer
,
callee_ip
,
callee_ports
)
return
defer
def
start_new_media
((
caller_ip
,
caller_ports
),
protocol
,
session
,
media_defer
,
callee_ip
,
callee_ports
):
print
"starting new media"
session
.
caller
.
start_media
(
caller_ip
,
caller_ports
)
session
.
callee
.
start_media
(
callee_ip
,
callee_ports
)
media_defer
.
addCallback
(
wait3
,
protocol
,
session
)
return
media_defer
def
wait3
(
result
,
protocol
,
session
):
print
"got new media, waiting 5 seconds"
defer
=
Deferred
()
defer
.
addCallback
(
kthxbye
,
protocol
,
session
)
reactor
.
callLater
(
5
,
defer
.
callback
,
None
)
return
defer
def
kthxbye
(
result
,
protocol
,
session
):
print
"sending remove"
return
session
.
do_remove
(
protocol
,
"caller"
)
def
disconnect
(
result
,
connector
):
print
"disconnecting"
connector
.
disconnect
()
reactor
.
callLater
(
1
,
reactor
.
stop
)
def
catch_all_err
(
failure
):
print
failure
if
__name__
==
"__main__"
:
caller
=
Endpoint
(
"Alice <alice@example.com>"
,
"Caller UA"
,
True
)
caller_media
=
caller
.
set_media
([(
"audio"
,
40000
,
"sendrecv"
,
""
)])
callee
=
Endpoint
(
"Bob <bob@example.com>"
,
"Callee UA"
,
False
)
callee_media
=
callee
.
set_media
([(
"audio"
,
50000
,
"sendrecv"
,
""
)])
session
=
Session
(
caller
,
callee
)
connector
,
defer
=
connect_to_dispatcher
()
defer
.
addCallback
(
caller_update
,
session
,
caller_media
,
callee_media
)
defer
.
addCallback
(
disconnect
,
connector
)
defer
.
addErrback
(
catch_all_err
)
reactor
.
run
()
File Metadata
Details
Attached
Mime Type
text/x-python
Expires
Sat, Nov 23, 6:16 AM (1 d, 4 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3408924
Default Alt Text
updatetest5.py (5 KB)
Attached To
Mode
rMP Mediaproxy
Attached
Detach File
Event Timeline
Log In to Comment