Sip audio session

Version 18 (Adrian Georgescu, 04/16/2009 09:38 am)

1 1 Adrian Georgescu
== sip_audio_session ==
2 2 Adrian Georgescu
[[TOC(SipTesting*, sip_*, xcap*,depth=2)]]
3 1 Adrian Georgescu
4 1 Adrian Georgescu
=== Description ===
5 1 Adrian Georgescu
6 1 Adrian Georgescu
This script can be used for interactive audio session or for scripting alarms. The script returns appropriate shell response codes for failed or successful sessions. The script can be setup to auto answer and auto hangup after predefined number of seconds, detects SIP negative response codes, missing ACK and the lack of RTP media after a session has been established.
7 6 Adrian Georgescu
8 10 Adrian Georgescu
[[Image(http://www.tech-invite.com/img/cf3665/cf3665-32.gif)]]
9 1 Adrian Georgescu
10 1 Adrian Georgescu
Source code: [source:scripts/sip_audio_session.py scripts/sip_audio_session.py]
11 1 Adrian Georgescu
12 1 Adrian Georgescu
{{{
13 5 Adrian Georgescu
adigeo@ag-oxygen:~$sip_audio_session --help
14 17 Adrian Georgescu
Usage: sip_audio_session [options] [user@domain]
15 1 Adrian Georgescu
16 17 Adrian Georgescu
This script can sit idle waiting for an incoming audio session, or initiate an
17 17 Adrian Georgescu
outgoing audio session to a SIP address. The program will close the session
18 17 Adrian Georgescu
and quit when Ctrl+D is pressed.
19 1 Adrian Georgescu
20 1 Adrian Georgescu
Options:
21 1 Adrian Georgescu
  -h, --help            show this help message and exit
22 5 Adrian Georgescu
  -a NAME, --account=NAME
23 5 Adrian Georgescu
                        The account name to use for any outgoing traffic. If
24 5 Adrian Georgescu
                        not supplied, the default account will be used.
25 17 Adrian Georgescu
  -c [FILE], --config-file=[FILE]
26 1 Adrian Georgescu
                        The path to a configuration file to use. This
27 5 Adrian Georgescu
                        overrides the default location of the configuration
28 5 Adrian Georgescu
                        file.
29 17 Adrian Georgescu
  -s, --trace-sip       Dump the raw contents of incoming and outgoing SIP
30 17 Adrian Georgescu
                        messages.
31 17 Adrian Georgescu
  -j, --trace-pjsip     Print PJSIP logging output.
32 17 Adrian Georgescu
  -n, --trace-notifications
33 17 Adrian Georgescu
                        Print all notifications (disabled by default).
34 5 Adrian Georgescu
  -S, --disable-sound   Disables initializing the sound card.
35 17 Adrian Georgescu
  --auto-answer         Interval after which to answer an incoming session
36 1 Adrian Georgescu
                        (disabled by default). If the option is specified but
37 17 Adrian Georgescu
                        the interval is not, it defaults to 0 (accept the
38 17 Adrian Georgescu
                        session as soon as it starts ringing).
39 17 Adrian Georgescu
  --auto-hangup         Interval after which to hang up an established session
40 17 Adrian Georgescu
                        (applies only to outgoing sessions, disabled by
41 17 Adrian Georgescu
                        default). If the option is specified but the interval
42 17 Adrian Georgescu
                        is not, it defaults to 0 (hangup the session as soon
43 17 Adrian Georgescu
                        as it connects).
44 17 Adrian Georgescu
  -D, --daemonize       Enabled running this program as a deamon. Note that
45 17 Adrian Georgescu
                        this forces --disable-sound and --auto-answer.
46 17 Adrian Georgescu
47 1 Adrian Georgescu
}}}
48 1 Adrian Georgescu
49 1 Adrian Georgescu
50 1 Adrian Georgescu
=== Example for incoming session ===
51 1 Adrian Georgescu
52 1 Adrian Georgescu
{{{
53 7 Adrian Georgescu
adigeo@ag-imac3:~$sip_audio_session
54 7 Adrian Georgescu
Using account 31208005169@ag-projects.com
55 1 Adrian Georgescu
Available control keys:
56 1 Adrian Georgescu
  h: hang-up the active session
57 1 Adrian Georgescu
  r: toggle audio recording
58 1 Adrian Georgescu
  t: toggle SIP trace on the console
59 7 Adrian Georgescu
  j: toggle PJSIP trace on the console
60 1 Adrian Georgescu
  <> : adjust echo cancellation
61 1 Adrian Georgescu
  SPACE: hold/on-hold
62 1 Adrian Georgescu
  Ctrl-d: quit the program
63 1 Adrian Georgescu
  ?: display this help message
64 7 Adrian Georgescu
Succesfully registered using contact "sip:cwntuzyl@192.168.1.6:61163"
65 1 Adrian Georgescu
Detected NAT type: Port Restricted
66 7 Adrian Georgescu
Incoming audio session from ""Adrian G." <sip:31208005169@ag-projects.com>", do you want to accept? (y/n)
67 7 Adrian Georgescu
Session established, using "PCMU" codec at 8000Hz
68 7 Adrian Georgescu
Audio RTP endpoints 192.168.1.6:50132 <-> 85.17.186.7:53358
69 7 Adrian Georgescu
Remote SIP User Agent is "CSCO/7"
70 7 Adrian Georgescu
Session ended by remote party.
71 7 Adrian Georgescu
Session duration was 3 seconds
72 7 Adrian Georgescu
73 1 Adrian Georgescu
}}}
74 1 Adrian Georgescu
75 1 Adrian Georgescu
=== Example for outgoing session ===
76 1 Adrian Georgescu
77 1 Adrian Georgescu
{{{
78 7 Adrian Georgescu
adigeo@ag-imac3:~$sip_audio_session ag@ag-projects.com
79 7 Adrian Georgescu
Using account 31208005169@ag-projects.com
80 8 Adrian Georgescu
Initiating SIP session from "Adrian G." <sip:31208005169@ag-projects.com> to 
81 8 Adrian Georgescu
sip:ag@ag-projects.com via udp:81.23.228.150:5060 ...
82 1 Adrian Georgescu
Available control keys:
83 1 Adrian Georgescu
  h: hang-up the active session
84 1 Adrian Georgescu
  r: toggle audio recording
85 1 Adrian Georgescu
  t: toggle SIP trace on the console
86 7 Adrian Georgescu
  j: toggle PJSIP trace on the console
87 1 Adrian Georgescu
  <> : adjust echo cancellation
88 1 Adrian Georgescu
  SPACE: hold/on-hold
89 1 Adrian Georgescu
  Ctrl-d: quit the program
90 1 Adrian Georgescu
  ?: display this help message
91 7 Adrian Georgescu
Succesfully registered using contact "sip:ztomvpis@192.168.1.6:61215"
92 1 Adrian Georgescu
Ringing...
93 1 Adrian Georgescu
Session established, using "speex" codec at 32000Hz
94 7 Adrian Georgescu
Audio RTP endpoints 192.168.1.6:50374 <-> 81.23.228.129:52156
95 7 Adrian Georgescu
Remote SIP User Agent is "sip2sip-0.9.0-pjsip-1.0.2-trunk-r2553"
96 7 Adrian Georgescu
Detected NAT type: Port Restricted
97 7 Adrian Georgescu
Ending session...
98 7 Adrian Georgescu
Session ended by local party.
99 7 Adrian Georgescu
Session duration was 12 seconds
100 1 Adrian Georgescu
}}}
101 11 Adrian Georgescu
102 11 Adrian Georgescu
103 11 Adrian Georgescu
=== Example for bonjour mode ===
104 11 Adrian Georgescu
105 11 Adrian Georgescu
In bonjour mode no server is used. This mode is useful for serverless ad-hoc LAN operation. 
106 11 Adrian Georgescu
107 11 Adrian Georgescu
> The actual bonjour protocol that uses multicast DNS to broadcast the contact SIP URIs is not implemented.
108 11 Adrian Georgescu
109 11 Adrian Georgescu
[[Image(http://www.tech-invite.com/img/cf3665/cf3665-31.gif)]]
110 11 Adrian Georgescu
111 12 Adrian Georgescu
'''Called party'''
112 12 Adrian Georgescu
113 1 Adrian Georgescu
{{{
114 12 Adrian Georgescu
adigeo@ag-imac3:~$sip_audio_session -a bonjour@local
115 11 Adrian Georgescu
Using account bonjour@local
116 12 Adrian Georgescu
Listening on "sip:wjnrczhi@192.168.1.6:57624;transport=tls"
117 12 Adrian Georgescu
Listening on "sip:wjnrczhi@192.168.1.6:57623;transport=tcp"
118 12 Adrian Georgescu
Listening on "sip:wjnrczhi@192.168.1.6:61994"
119 11 Adrian Georgescu
Available control keys:
120 11 Adrian Georgescu
  h: hang-up the active session
121 11 Adrian Georgescu
  r: toggle audio recording
122 1 Adrian Georgescu
  t: toggle SIP trace on the console
123 1 Adrian Georgescu
  j: toggle PJSIP trace on the console
124 11 Adrian Georgescu
  <> : adjust echo cancellation
125 11 Adrian Georgescu
  SPACE: hold/on-hold
126 11 Adrian Georgescu
  Ctrl-d: quit the program
127 11 Adrian Georgescu
  ?: display this help message
128 12 Adrian Georgescu
Incoming audio session from "sip:imdyzosg@192.168.1.6", do you want to accept? (y/n)
129 1 Adrian Georgescu
Session established, using "speex" codec at 32000Hz
130 12 Adrian Georgescu
Audio RTP endpoints 192.168.1.6:50276 <-> 192.168.1.6:50100
131 1 Adrian Georgescu
RTP audio stream is encrypted
132 1 Adrian Georgescu
Remote SIP User Agent is "sip2sip-0.9.0-pjsip-1.0.2-trunk-r2553"
133 12 Adrian Georgescu
Session ended by remote party.
134 11 Adrian Georgescu
Session duration was 5 seconds
135 11 Adrian Georgescu
}}}
136 11 Adrian Georgescu
137 12 Adrian Georgescu
'''Calling party'''
138 12 Adrian Georgescu
139 11 Adrian Georgescu
{{{
140 12 Adrian Georgescu
adigeo@ag-imac3:~$sip_audio_session -a bonjour@local "sip:wjnrczhi@192.168.1.6:57624;transport=tls"
141 1 Adrian Georgescu
Using account bonjour@local
142 12 Adrian Georgescu
Listening on "sip:imdyzosg@192.168.1.6:57626;transport=tls"
143 12 Adrian Georgescu
Listening on "sip:imdyzosg@192.168.1.6:57625;transport=tcp"
144 12 Adrian Georgescu
Listening on "sip:imdyzosg@192.168.1.6:62008"
145 12 Adrian Georgescu
Initiating SIP session from sip:imdyzosg@192.168.1.6 to sip:wjnrczhi@192.168.1.6:57624;transport=tls via tls:192.168.1.6:57624 ...
146 11 Adrian Georgescu
Available control keys:
147 11 Adrian Georgescu
  h: hang-up the active session
148 11 Adrian Georgescu
  r: toggle audio recording
149 11 Adrian Georgescu
  t: toggle SIP trace on the console
150 11 Adrian Georgescu
  j: toggle PJSIP trace on the console
151 11 Adrian Georgescu
  <> : adjust echo cancellation
152 11 Adrian Georgescu
  SPACE: hold/on-hold
153 11 Adrian Georgescu
  Ctrl-d: quit the program
154 11 Adrian Georgescu
  ?: display this help message
155 12 Adrian Georgescu
Ringing...
156 11 Adrian Georgescu
Session established, using "speex" codec at 32000Hz
157 12 Adrian Georgescu
Audio RTP endpoints 192.168.1.6:50100 <-> 192.168.1.6:50276
158 11 Adrian Georgescu
RTP audio stream is encrypted
159 11 Adrian Georgescu
Remote SIP User Agent is "sip2sip-0.9.0-pjsip-1.0.2-trunk-r2553"
160 12 Adrian Georgescu
Ending session...
161 12 Adrian Georgescu
Session ended by local party.
162 1 Adrian Georgescu
Session duration was 5 seconds
163 1 Adrian Georgescu
}}}
164 14 Adrian Georgescu
165 14 Adrian Georgescu
166 15 Adrian Georgescu
=== Alarm system ===
167 14 Adrian Georgescu
168 16 Adrian Georgescu
sip_audio_session script can be used for end-to-end testing of a SIP service. To setup the alarm system start periodically a caller script from a monitoring software using the following arguments:
169 14 Adrian Georgescu
  {{{
170 14 Adrian Georgescu
sip_audio_session --auto-hangup user@domain
171 14 Adrian Georgescu
  }}}
172 14 Adrian Georgescu
173 16 Adrian Georgescu
Where the user@domain has been configured as the SIP account of the listener, can be an answering machine on the PSTN network. The caller script hangs up after each call. The shell return code can be used to determine if the session setup has failed. The failure can be caused by timeout, a negative response code or lack of RTP media after the SIP session has been established.
174 18 Adrian Georgescu
175 18 Adrian Georgescu
To receive calls and answer them automatically you can also use sip_audio_session script as follows:
176 18 Adrian Georgescu
177 18 Adrian Georgescu
  {{{
178 18 Adrian Georgescu
sip_audio_session --daemonize
179 18 Adrian Georgescu
  }}}
180 18 Adrian Georgescu
181 18 Adrian Georgescu
You must run the script as user root. The --daemonize option puts the client in the background and the logging goes to /var/log/syslog. The program saves its pid file to /var/run/sip_audio_session.pid.