Project

General

Profile

Sip audio session » History » Version 20

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