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. |