Project

General

Profile

Sip audio session » History » Version 19

Adrian Georgescu, 07/23/2009 01:42 PM

1 1 Adrian Georgescu
== sip_audio_session ==
2 2 Adrian Georgescu
[[TOC(SipTesting*, sip_*, xcap*,depth=2)]]
3 1 Adrian Georgescu
4
=== Description ===
5
6
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
Source code: [source:scripts/sip_audio_session.py scripts/sip_audio_session.py]
11
12
{{{
13 19 Adrian Georgescu
adigeo@ag-imac3:~$sip_audio_session -h
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
outgoing audio session to a SIP address. The program will close the session
18
and quit when Ctrl+D is pressed.
19 1 Adrian Georgescu
20
Options:
21
  -h, --help            show this help message and exit
22 5 Adrian Georgescu
  -a NAME, --account=NAME
23
                        The account name to use for any outgoing traffic. If
24
                        not supplied, the default account will be used.
25 19 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
                        file.
29 17 Adrian Georgescu
  -s, --trace-sip       Dump the raw contents of incoming and outgoing SIP
30
                        messages.
31
  -j, --trace-pjsip     Print PJSIP logging output.
32
  -n, --trace-notifications
33
                        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 1 Adrian Georgescu
                        session as soon as it starts ringing).
39
  --auto-hangup         Interval after which to hang up an established session
40 19 Adrian Georgescu
                        (disabled by default). If the option is specified but
41
                        the interval is not, it defaults to 0 (hangup the
42
                        session as soon as it connects).
43
  -b, --batch           Run the program in batch mode: reading input from the
44
                        console is disabled and the option --auto-answer is
45
                        implied. This is particularly useful when running this
46
                        script in a non-interactive environment.
47
  -D, --daemonize       Enable running this program as a deamon. This option
48
                        implies --disable-sound, --auto-answer and --batch.
49 1 Adrian Georgescu
}}}
50
51
52
=== Example for incoming session ===
53
54
{{{
55 19 Adrian Georgescu
adigeo@ag-imac3:~$sip_audio_session 
56 1 Adrian Georgescu
Using account 31208005169@ag-projects.com
57 19 Adrian Georgescu
Logging SIP trace to file "/Users/adigeo/.sipclient/logs/sip_trace.txt"
58
Logging PJSIP trace to file "/Users/adigeo/.sipclient/logs/pjsip_trace.txt"
59
Available audio input devices: Built-in Input, Built-in Microphone, Logitech Wireless Headset
60
Available audio output devices: Built-in Output, Logitech Wireless Headset
61
Using audio input device: Built-in Microphone
62
Using audio output device: Built-in Output
63
Using audio alert device: Built-in Output
64
65 1 Adrian Georgescu
Available control keys:
66 19 Adrian Georgescu
  s: toggle SIP trace on the console
67
  j: toggle PJSIP trace on the console
68
  n: toggle notifications trace on the console
69
  p: toggle printing RTP statistics on the console
70 1 Adrian Georgescu
  h: hang-up the active session
71
  r: toggle audio recording
72 19 Adrian Georgescu
  <>: adjust echo cancellation
73
  SPACE: hold/unhold
74 1 Adrian Georgescu
  Ctrl-d: quit the program
75
  ?: display this help message
76
77 19 Adrian Georgescu
2009-07-23 13:40:02 Registered contact "sip:oedtbzgw@192.168.1.6:50361" for sip:31208005169@ag-projects.com at 81.23.228.129:5060;transport=udp (expires in 600 seconds).
78
Other registered contacts:
79
  sip:froghdmq@192.168.1.6:50334 (expires in 547 seconds)
80
  sip:31208005169@192.168.1.123:5060 (expires in 234 seconds)
81
  sip:zegoxqlw@192.168.1.6:50298 (expires in 468 seconds)
82
  sip:31208005169@192.168.1.1;uniq=5B2860C44383A3D6705629A7E1FB8 (expires in 813 seconds)
83
Detected NAT type: Port Restricted
84
Incoming audio session from 'sip:31208005169@ag-projects.com', do you want to accept? (y/n)
85
Audio session established using "speex" codec at 32000Hz
86
Audio RTP endpoints 80.101.96.20:50406 <-> 81.23.228.150:52916
87
RTP audio stream is encrypted
88
Remote SIP User Agent is "sipsimple 0.9.1"
89
Audio session ended by remote party
90
Call duration was 4 seconds
91 8 Adrian Georgescu
}}}
92
93 1 Adrian Georgescu
=== Example for outgoing session ===
94
95
{{{
96
adigeo@ag-imac3:~$sip_audio_session ag@ag-projects.com
97 7 Adrian Georgescu
Using account 31208005169@ag-projects.com
98 19 Adrian Georgescu
Logging SIP trace to file "/Users/adigeo/.sipclient/logs/sip_trace.txt"
99
Logging PJSIP trace to file "/Users/adigeo/.sipclient/logs/pjsip_trace.txt"
100
Available audio input devices: Built-in Input, Built-in Microphone, Logitech Wireless Headset
101
Available audio output devices: Built-in Output, Logitech Wireless Headset
102
Using audio input device: Built-in Microphone
103
Using audio output device: Built-in Output
104
Using audio alert device: Built-in Output
105
106 7 Adrian Georgescu
Available control keys:
107 19 Adrian Georgescu
  s: toggle SIP trace on the console
108
  j: toggle PJSIP trace on the console
109
  n: toggle notifications trace on the console
110
  p: toggle printing RTP statistics on the console
111 1 Adrian Georgescu
  h: hang-up the active session
112 11 Adrian Georgescu
  r: toggle audio recording
113 19 Adrian Georgescu
  <>: adjust echo cancellation
114
  SPACE: hold/unhold
115 11 Adrian Georgescu
  Ctrl-d: quit the program
116
  ?: display this help message
117 19 Adrian Georgescu
118
Initiating SIP audio session from 'sip:31208005169@ag-projects.com' to 'sip:ag@ag-projects.com' via sip:81.23.228.150:5060;transport=udp...
119
Audio session established using "speex" codec at 32000Hz
120
Audio RTP endpoints 80.101.96.20:50400 <-> 81.23.228.150:53734
121
RTP audio stream is encrypted
122
Ending audio session...
123
Audio session ended by local party
124
Call duration was 5 seconds
125 12 Adrian Georgescu
}}}
126 11 Adrian Georgescu
127 12 Adrian Georgescu
128
=== Example for bonjour mode ===
129
130 11 Adrian Georgescu
In bonjour mode no server is used. This mode is useful for serverless ad-hoc LAN operation. 
131
132
> The actual bonjour protocol that uses multicast DNS to broadcast the contact SIP URIs is not implemented.
133 1 Adrian Georgescu
134
[[Image(http://www.tech-invite.com/img/cf3665/cf3665-31.gif)]]
135 11 Adrian Georgescu
136
'''Called party'''
137
138
{{{
139 12 Adrian Georgescu
adigeo@ag-imac3:~$sip_audio_session -a bonjour@local
140 1 Adrian Georgescu
Using account bonjour@local
141 12 Adrian Georgescu
Listening on "sip:wjnrczhi@192.168.1.6:57624;transport=tls"
142 1 Adrian Georgescu
Listening on "sip:wjnrczhi@192.168.1.6:57623;transport=tcp"
143
Listening on "sip:wjnrczhi@192.168.1.6:61994"
144 12 Adrian Georgescu
Available control keys:
145 11 Adrian Georgescu
  h: hang-up the active session
146
  r: toggle audio recording
147
  t: toggle SIP trace on the console
148 12 Adrian Georgescu
  j: toggle PJSIP trace on the console
149
  <> : adjust echo cancellation
150 11 Adrian Georgescu
  SPACE: hold/on-hold
151 12 Adrian Georgescu
  Ctrl-d: quit the program
152 1 Adrian Georgescu
  ?: display this help message
153 12 Adrian Georgescu
Incoming audio session from "sip:imdyzosg@192.168.1.6", do you want to accept? (y/n)
154
Session established, using "speex" codec at 32000Hz
155
Audio RTP endpoints 192.168.1.6:50276 <-> 192.168.1.6:50100
156
RTP audio stream is encrypted
157 11 Adrian Georgescu
Remote SIP User Agent is "sip2sip-0.9.0-pjsip-1.0.2-trunk-r2553"
158
Session ended by remote party.
159
Session duration was 5 seconds
160
}}}
161
162
'''Calling party'''
163
164
{{{
165
adigeo@ag-imac3:~$sip_audio_session -a bonjour@local "sip:wjnrczhi@192.168.1.6:57624;transport=tls"
166 12 Adrian Georgescu
Using account bonjour@local
167 11 Adrian Georgescu
Listening on "sip:imdyzosg@192.168.1.6:57626;transport=tls"
168 12 Adrian Georgescu
Listening on "sip:imdyzosg@192.168.1.6:57625;transport=tcp"
169 11 Adrian Georgescu
Listening on "sip:imdyzosg@192.168.1.6:62008"
170
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 ...
171 12 Adrian Georgescu
Available control keys:
172
  h: hang-up the active session
173 1 Adrian Georgescu
  r: toggle audio recording
174
  t: toggle SIP trace on the console
175 14 Adrian Georgescu
  j: toggle PJSIP trace on the console
176
  <> : adjust echo cancellation
177 15 Adrian Georgescu
  SPACE: hold/on-hold
178 14 Adrian Georgescu
  Ctrl-d: quit the program
179 16 Adrian Georgescu
  ?: display this help message
180 14 Adrian Georgescu
Ringing...
181
Session established, using "speex" codec at 32000Hz
182
Audio RTP endpoints 192.168.1.6:50100 <-> 192.168.1.6:50276
183
RTP audio stream is encrypted
184 16 Adrian Georgescu
Remote SIP User Agent is "sip2sip-0.9.0-pjsip-1.0.2-trunk-r2553"
185 18 Adrian Georgescu
Ending session...
186
Session ended by local party.
187
Session duration was 5 seconds
188
}}}
189
190
191
=== Alarm system ===
192
193 1 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:
194
  {{{
195
sip_audio_session --auto-hangup user@domain
196
  }}}
197
198
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.
199
200
To receive calls and answer them automatically you can also use sip_audio_session script as follows:
201
202
  {{{
203
sip_audio_session --daemonize
204
  }}}
205
206
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.