... | ... |
@@ -154,19 +154,20 @@ sbc.isDisconnected() / sbc.isNoReply() / sbc.isRinging() / sbc.isConnected() / s |
154 | 154 |
Actions |
155 | 155 |
------- |
156 | 156 |
sbc.profileSet(profile_variable, value) - set SBC profile options |
157 |
- *** only meaningful in 'start' event (later, most profile options are not used any more) *** |
|
158 |
- profile_variables: To, RURI, FROM, Call-ID, next_hop, RURI_host, refuse_with, |
|
159 |
- outbound_proxy, force_outbound_proxy = "yes" | "no, |
|
157 |
+ *** only meaningful in 'start' event (later, most profile options |
|
158 |
+ are not used any more) *** |
|
159 |
+ profile_variables: To, RURI, FROM, Call-ID, next_hop, RURI_host, |
|
160 |
+ refuse_with, outbound_proxy, force_outbound_proxy = "yes" | "no, |
|
160 | 161 |
aleg_outbound_proxy, aleg_force_outbound_proxy = "yes" | "no, |
161 |
- next_hop_1st_req = "yes" | "no, patch_ruri_next_hop = "yes" | "no, |
|
162 |
- aleg_next_hop, |
|
163 |
- append_headers, append_headers_req, |
|
164 |
- rtprelay_enabled = "yes" | "no, |
|
165 |
- force_symmetric_rtp = "yes" | "no, aleg_force_symmetric_rtp = "yes" | "no, |
|
166 |
- msgflags_symmetric_rtp = "yes" | "no, |
|
167 |
- rtprelay_transparent_seqno = "yes" | "no, rtprelay_transparent_ssrc = "yes" | "no, |
|
168 |
- rtprelay_interface, aleg_rtprelay_interface, |
|
169 |
- rtprelay_dtmf_detection = "yes" | "no, rtprelay_dtmf_filtering = "yes" | "no |
|
162 |
+ next_hop_1st_req = "yes" | "no, patch_ruri_next_hop = "yes" | "no, |
|
163 |
+ aleg_next_hop, append_headers, append_headers_req, |
|
164 |
+ rtprelay_enabled = "yes" | "no, force_symmetric_rtp = "yes" | "no, |
|
165 |
+ aleg_force_symmetric_rtp = "yes" | "no, msgflags_symmetric_rtp = |
|
166 |
+ "yes" | "no, rtprelay_transparent_seqno = "yes" | "no, |
|
167 |
+ rtprelay_transparent_ssrc = "yes" | "no, |
|
168 |
+ rtprelay_interface, aleg_rtprelay_interface, |
|
169 |
+ rtprelay_dtmf_detection = "yes" | "no, rtprelay_dtmf_filtering = |
|
170 |
+ "yes" | "no, message_filter, message_list |
|
170 | 171 |
|
171 | 172 |
sbc.stopCall(string cause) - stop both call legs |
172 | 173 |
|
... | ... |
@@ -144,10 +144,13 @@ Conditions |
144 | 144 |
---------- |
145 | 145 |
call leg events (don't work in non-call SBC DSMs) |
146 | 146 |
|
147 |
-sbc.isALeg |
|
147 |
+sbc.isALeg - is A leg of the call |
|
148 | 148 |
|
149 |
-sbc.isOnHold |
|
149 |
+sbc.isOnHold - is on hold |
|
150 | 150 |
|
151 |
+sbc.isDisconnected() / sbc.isNoReply() / sbc.isRinging() / sbc.isConnected() / sbc.isDisconnecting() |
|
152 |
+ call leg status |
|
153 |
+ |
|
151 | 154 |
Actions |
152 | 155 |
------- |
153 | 156 |
sbc.profileSet(profile_variable, value) - set SBC profile options |
... | ... |
@@ -177,7 +180,8 @@ sbc.putOnHold() - put this call leg on hold |
177 | 180 |
|
178 | 181 |
sbc.resumeHeld() - resume from hold |
179 | 182 |
|
180 |
-sbc.getSBCCallStatus(varname) - get sbc call status into $varname |
|
183 |
+sbc.getSBCCallStatus(varname) - get sbc call status into $varname: |
|
184 |
+ Disconnected/NoReply/Ringing/Connected/Disconnecting/Unknown |
|
181 | 185 |
|
182 | 186 |
sbc.relayReliableEvent(paramlist, processed_paramlist, unprocessed_paramlist) - relay reliable Event |
183 | 187 |
if processed (#processed=true in other leg), event is sent back with processed_paramlist parameters, |
... | ... |
@@ -214,6 +214,8 @@ sbc.addCallee(string mode, string varname) |
214 | 214 |
|
215 | 215 |
$varname.outbound_proxy - outbound proxy in new call |
216 | 216 |
$varname.outbound_interface - outbound interface used for new call |
217 |
+ $varname.rtp_interface - rtp interface used for new call |
|
218 |
+ |
|
217 | 219 |
|
218 | 220 |
$varname.transparent_dlg_id - "yes" or "no": use transparent dlg IDs for new call; default no |
219 | 221 |
- "no" very much advised if current leg was connected before! |
... | ... |
@@ -213,8 +213,7 @@ sbc.addCallee(string mode, string varname) |
213 | 213 |
$varname.next_hop_fixed - fixed next hop |
214 | 214 |
|
215 | 215 |
$varname.outbound_proxy - outbound proxy in new call |
216 |
- $varname.outbound_proxy - outbound proxy in new call |
|
217 |
- $varname.outbound_proxy - outbound proxy in new call |
|
216 |
+ $varname.outbound_interface - outbound interface used for new call |
|
218 | 217 |
|
219 | 218 |
$varname.transparent_dlg_id - "yes" or "no": use transparent dlg IDs for new call; default no |
220 | 219 |
- "no" very much advised if current leg was connected before! |
... | ... |
@@ -207,6 +207,15 @@ sbc.addCallee(string mode, string varname) |
207 | 207 |
$varname.remote_party - remote party (To) in new call |
208 | 208 |
$varname.hdrs - headers in outgoing INVITE |
209 | 209 |
$varname.outbound_proxy - outbound proxy in new call |
210 |
+ $varname.next_hop - next hop |
|
211 |
+ $varname.next_hop_1st_req - next hop for 1st req, "true" or "false" |
|
212 |
+ $varname.next_hop_patch_ruri - patch ruri with next hop, "true" or "false" |
|
213 |
+ $varname.next_hop_fixed - fixed next hop |
|
214 |
+ |
|
215 |
+ $varname.outbound_proxy - outbound proxy in new call |
|
216 |
+ $varname.outbound_proxy - outbound proxy in new call |
|
217 |
+ $varname.outbound_proxy - outbound proxy in new call |
|
218 |
+ |
|
210 | 219 |
$varname.transparent_dlg_id - "yes" or "no": use transparent dlg IDs for new call; default no |
211 | 220 |
- "no" very much advised if current leg was connected before! |
212 | 221 |
otherwise local tag in current leg will be overwritten on reply |
also removed dsm sbc mute/unmute functions, as they need to use other proper functions
... | ... |
@@ -226,8 +226,4 @@ sbc.addToMediaProcessor - add sbc session to media processor (no playlist s |
226 | 226 |
|
227 | 227 |
sbc.removeFromMediaProcessor - remove sbc session from media processor |
228 | 228 |
|
229 |
-sbc.pauseRtpStreams(bool pause_a, bool pause_b) - pause A/B streams: drop received packets |
|
230 |
-sbc.resumeRtpStreams(bool resume_a, bool resume_b) - resume A/B streams: process received packets |
|
231 |
- |
|
232 |
-sbc.muteRtpStreams(bool mute_a, bool mute_b) - mute A/B streams: don't send packets |
|
233 |
-sbc.unmuteRtpStreams(bool unmute_a, bool unmute_b) - unmute A/B streams: do send packets |
|
229 |
+sbc.streamsSetReceiving(bool receiving_a, bool receiving_b) - pause A/B streams: drop received packets |
... | ... |
@@ -78,7 +78,7 @@ sipRequest - in dialog request |
78 | 78 |
sipReply - in dialog reply |
79 | 79 |
Reply parameters (#sip_reason, #sip_code, ...) |
80 | 80 |
|
81 |
-LegStateChange |
|
81 |
+legStateChange |
|
82 | 82 |
#SBCCallStatus - sbc call status (Disconnected, NoReply, Ringing, Connected, Disconnecting, Unknown) |
83 | 83 |
|
84 | 84 |
#reason == "SipRequest" |
... | ... |
@@ -24,12 +24,14 @@ Configuration Example: |
24 | 24 |
cc_dsm_module=cc_dsm |
25 | 25 |
cc_dsm_app_bundle=sbc |
26 | 26 |
cc_dsm_start_diag=test_sbc |
27 |
+ cc_dsm_config.myvar=myfinalvalue |
|
27 | 28 |
dsm.conf |
28 | 29 |
conf_dir=etc/sbc_dsm |
29 | 30 |
etc/sbc_dsm/sbc.conf |
30 | 31 |
diag_path=./etc/sbc_dsm |
31 | 32 |
load_diags=test_sbc |
32 | 33 |
mod_path=../apps/dsm/mods/lib/ |
34 |
+ myvar=willbeshadowed |
|
33 | 35 |
etc/sbc_dsm/test_sbc.dsm |
34 | 36 |
import(mod_sbc); |
35 | 37 |
initial state START; |
... | ... |
@@ -44,6 +46,9 @@ Variables |
44 | 46 |
--------- |
45 | 47 |
$config.* config set variables |
46 | 48 |
|
49 |
+ variables set by call control instantiation, may shadow config set variables |
|
50 |
+ (see configuration example above) |
|
51 |
+ |
|
47 | 52 |
Parameters |
48 | 53 |
---------- |
49 | 54 |
#StopProcessing = "true" -> stop call processing |
... | ... |
@@ -200,6 +200,11 @@ sbc.addCallee(string mode, string varname) |
200 | 200 |
$varname.remote_party - remote party (To) in new call |
201 | 201 |
$varname.hdrs - headers in outgoing INVITE |
202 | 202 |
$varname.outbound_proxy - outbound proxy in new call |
203 |
+ $varname.transparent_dlg_id - "yes" or "no": use transparent dlg IDs for new call; default no |
|
204 |
+ - "no" very much advised if current leg was connected before! |
|
205 |
+ otherwise local tag in current leg will be overwritten on reply |
|
206 |
+ in other leg |
|
207 |
+ |
|
203 | 208 |
e.g. set($b.local_party="sip:ftb@192.168.5.110:5080"); |
204 | 209 |
set($b.remote_party="sip:neu@192.168.5.110:5088"); |
205 | 210 |
sbc.addCallee(var, b); |
* frafos/1.6-dev: (27 commits)
b2b calls quick hack: make RelayController accessible from derrived classes
sbc: keep original CSeq to support authentication case with Asterisk
sbc: allow to preserve media session when disconnecting
core: disable blacklist for in-dialog requests
sip: disable blacklist lookup if TR_FLAG_DISABLE_BL flag is set
sip: do not insert into blacklist if duration == 0
sbc: added active registration counter
b2b media b/f: do not try to set relay with empty remote address
AmRtpStream b/f: do not set mute together with hold
core: CPS limiter Calls-per-sec limiting capability, similar to the maximum number of calls limiter. There is a "soft limit" that is intended to use by the applications: if the app uses async processing and detects that the incoming workload is too much for the currenti capacity (which can depend on for example the remote DB engine's load), it can slewi it back to some percent of the current CPS; then when the circumstances are restored it can switch the CPS limit back to the configuration (or XMLRPC/stats interface) mandated value.
sbc: use non-hold SDP if possible when adding new callee
sbc: new event for asynchronous held call resume
b2b media cleanup: remove unused methods
sbc b/f: create hold request cleaner way
sbc b/f: signalize hold/resume request before creating the hold/resume request itself
webconference: add lonely_user_timer option
sbc b/f: apply remote SDP again if RTP mode changed during OA exchange
b2b media b/f: do not clear audio when removed from media processor
core: b/f: make get_header_keyvalue_single() case-insensitive as specified in RFC3261 7.3.1
sbc: improved hold handling
...
Conflicts:
apps/sbc/CallLeg.cpp
core/AmB2BMedia.h
... | ... |
@@ -53,8 +53,8 @@ Events (Conditions) |
53 | 53 |
------------------- |
54 | 54 |
|
55 | 55 |
general: |
56 |
- Request parameters: #method, #r_uri, #from, #to and #hdrs |
|
57 |
- Reply parameters: #sip_reason, #sip_code, #from, #to and #hdrs |
|
56 |
+ Request parameters: #method, #r_uri, #from, #to, #from_tag, #to_tag, #callid and #hdrs |
|
57 |
+ Reply parameters: #sip_reason, #sip_code, #from, #to, #from_tag, #to_tag, #callid and #hdrs |
|
58 | 58 |
|
59 | 59 |
start - on startup of call control DSM |
60 | 60 |
|
... | ... |
@@ -205,6 +205,10 @@ sbc.addCallee(string mode, string varname) |
205 | 205 |
set($b.remote_party="sip:neu@192.168.5.110:5088"); |
206 | 206 |
sbc.addCallee(var, b); |
207 | 207 |
|
208 |
+ mode=="ltag" - existing call referenced by ltag |
|
209 |
+ $varname.ltag - ltag of call to reconnect |
|
210 |
+ $varname.hdrs - headers in outgoing INVITE (optional) |
|
211 |
+ |
|
208 | 212 |
sbc.enableRelayDTMFReceiving(bool rcv_dtmf) - enable receiving of RTP DTMF in relayed stream (RTP_Relay mode) |
209 | 213 |
note: session needs to be processed by media processor as well (sbc.addToMediaProcessor()) |
210 | 214 |
so that DTMF is processed and passed up to the application (key event). |
... | ... |
@@ -209,6 +209,12 @@ sbc.enableRelayDTMFReceiving(bool rcv_dtmf) - enable receiving of RTP DTMF in r |
209 | 209 |
note: session needs to be processed by media processor as well (sbc.addToMediaProcessor()) |
210 | 210 |
so that DTMF is processed and passed up to the application (key event). |
211 | 211 |
|
212 |
-sbc.addToMediaProcessor - add sbc session to media processor (no playlist set etc) |
|
212 |
+sbc.addToMediaProcessor - add sbc session to media processor (no playlist set etc) |
|
213 | 213 |
|
214 | 214 |
sbc.removeFromMediaProcessor - remove sbc session from media processor |
215 |
+ |
|
216 |
+sbc.pauseRtpStreams(bool pause_a, bool pause_b) - pause A/B streams: drop received packets |
|
217 |
+sbc.resumeRtpStreams(bool resume_a, bool resume_b) - resume A/B streams: process received packets |
|
218 |
+ |
|
219 |
+sbc.muteRtpStreams(bool mute_a, bool mute_b) - mute A/B streams: don't send packets |
|
220 |
+sbc.unmuteRtpStreams(bool unmute_a, bool unmute_b) - unmute A/B streams: do send packets |
... | ... |
@@ -157,6 +157,7 @@ sbc.profileSet(profile_variable, value) - set SBC profile options |
157 | 157 |
msgflags_symmetric_rtp = "yes" | "no, |
158 | 158 |
rtprelay_transparent_seqno = "yes" | "no, rtprelay_transparent_ssrc = "yes" | "no, |
159 | 159 |
rtprelay_interface, aleg_rtprelay_interface, |
160 |
+ rtprelay_dtmf_detection = "yes" | "no, rtprelay_dtmf_filtering = "yes" | "no |
|
160 | 161 |
|
161 | 162 |
sbc.stopCall(string cause) - stop both call legs |
162 | 163 |
|
... | ... |
@@ -203,3 +204,11 @@ sbc.addCallee(string mode, string varname) |
203 | 204 |
e.g. set($b.local_party="sip:ftb@192.168.5.110:5080"); |
204 | 205 |
set($b.remote_party="sip:neu@192.168.5.110:5088"); |
205 | 206 |
sbc.addCallee(var, b); |
207 |
+ |
|
208 |
+sbc.enableRelayDTMFReceiving(bool rcv_dtmf) - enable receiving of RTP DTMF in relayed stream (RTP_Relay mode) |
|
209 |
+ note: session needs to be processed by media processor as well (sbc.addToMediaProcessor()) |
|
210 |
+ so that DTMF is processed and passed up to the application (key event). |
|
211 |
+ |
|
212 |
+sbc.addToMediaProcessor - add sbc session to media processor (no playlist set etc) |
|
213 |
+ |
|
214 |
+sbc.removeFromMediaProcessor - remove sbc session from media processor |
... | ... |
@@ -160,7 +160,10 @@ sbc.profileSet(profile_variable, value) - set SBC profile options |
160 | 160 |
|
161 | 161 |
sbc.stopCall(string cause) - stop both call legs |
162 | 162 |
|
163 |
-sbc.disconnect(bool hold_remote) - disconnect this call leg |
|
163 |
+sbc.disconnect(bool hold_remote) - disconnect this call leg from the other B2B call. |
|
164 |
+ The SIP call is not ended (use dlg.bye() to end the SIP dialog). |
|
165 |
+ |
|
166 |
+sbc.sendDisconnectEvent(bool hold_remote) - send an event to this call leg to disconnect |
|
164 | 167 |
|
165 | 168 |
sbc.putOnHold - put this call leg on hold |
166 | 169 |
|
... | ... |
@@ -186,3 +189,17 @@ sbc.relayReliableEvent(paramlist, processed_paramlist, unprocessed_paramlist) - |
186 | 189 |
logParams(3); |
187 | 190 |
set(#processed="true"); |
188 | 191 |
} -> RUN; |
192 |
+ |
|
193 |
+ |
|
194 |
+sbc.addCallee(string mode, string varname) |
|
195 |
+ add a callee leg |
|
196 |
+ |
|
197 |
+ mode=="var" - new call properties set through variable struct (all optional) |
|
198 |
+ $varname.local_party - local party (From) in new call |
|
199 |
+ $varname.remote_party - remote party (To) in new call |
|
200 |
+ $varname.hdrs - headers in outgoing INVITE |
|
201 |
+ $varname.outbound_proxy - outbound proxy in new call |
|
202 |
+ $varname.rtp_mode - RTP mode in new call ("RTP_Direct", "RTP_Relay", "RTP_Transcoding") |
|
203 |
+ e.g. set($b.local_party="sip:ftb@192.168.5.110:5080"); |
|
204 |
+ set($b.remote_party="sip:neu@192.168.5.110:5088"); |
|
205 |
+ sbc.addCallee(var, b); |
... | ... |
@@ -1,4 +1,44 @@ |
1 | 1 |
|
2 |
+DSM applications for SBC |
|
3 |
+------------------------ |
|
4 |
+The "dsm" call control module implements together with mod_sbc an DSM |
|
5 |
+layer on top of the SBC, so that custom SBC call flows can be implemented |
|
6 |
+using DSM script. |
|
7 |
+ |
|
8 |
+Most of the call related DSM actions (handling audio with playFile, recordFile etc) |
|
9 |
+do not work in SBC DSMs. |
|
10 |
+ |
|
11 |
+DSM scripts for SBC are configured in a separate application bundle |
|
12 |
+(a .conf file in dsm.conf conf_dir=...), set in the call control variable |
|
13 |
+"app_bundle" and started up with the DSM set in the call control variable |
|
14 |
+"start_diag". |
|
15 |
+ |
|
16 |
+Configuration Example: |
|
17 |
+ sbc.conf: |
|
18 |
+ profiles=cc_dsm |
|
19 |
+ load_cc_plugins=cc_dsm |
|
20 |
+ active_profile=cc_dsm |
|
21 |
+ cc_dsm.sbcprofile.conf: |
|
22 |
+ RURI=sip:test@192.168.5.110:5088 |
|
23 |
+ call_control=cc_dsm |
|
24 |
+ cc_dsm_module=cc_dsm |
|
25 |
+ cc_dsm_app_bundle=sbc |
|
26 |
+ cc_dsm_start_diag=test_sbc |
|
27 |
+ dsm.conf |
|
28 |
+ conf_dir=etc/sbc_dsm |
|
29 |
+ etc/sbc_dsm/sbc.conf |
|
30 |
+ diag_path=./etc/sbc_dsm |
|
31 |
+ load_diags=test_sbc |
|
32 |
+ mod_path=../apps/dsm/mods/lib/ |
|
33 |
+ etc/sbc_dsm/test_sbc.dsm |
|
34 |
+ import(mod_sbc); |
|
35 |
+ initial state START; |
|
36 |
+ transition "init event" START - start / { |
|
37 |
+ log(3, "initializing"); |
|
38 |
+ logAll(3); |
|
39 |
+ sbc.profileSet(RURI, sip:set_from_DSM@192.168.5.110:5088); |
|
40 |
+ ... |
|
41 |
+ |
|
2 | 42 |
|
3 | 43 |
Variables |
4 | 44 |
--------- |
sbc.relayReliableEvent(paramlist, processed_paramlist, unprocessed_paramlist) - relay reliable Event
if processed (#processed=true in other leg), event is sent back with processed_paramlist parameters,
if unprocessed, event is sent back with unprocessed_paramlist parameters
Example:
set($fwd_param1="this parameter goes fwd");
set($fwd_param2="this parameter goes fwd, too");
set($bck_param1="this parameter goes back if processed");
set($bck_param2="this parameter goes back if processed, too");
set($bck_unp_param1="this parameter goes back if not processed");
set($bck_unp_param2="this parameter goes back if not processed, too");
sbc.relayReliableEvent(fwd_param1;fwd_param2, bck_param1;bck_param2, bck_unp_param1;bck_unp_param2);
...
transition "B2B event" RUN - B2Bevent / {
logParams(3);
set(#processed="true");
} -> RUN;
... | ... |
@@ -127,3 +127,22 @@ sbc.putOnHold - put this call leg on hold |
127 | 127 |
sbc.resumeHeld(bool send_reinvite) - resume from hold |
128 | 128 |
|
129 | 129 |
sbc.getSBCCallStatus(varname) - get sbc call status into $varname |
130 |
+ |
|
131 |
+sbc.relayReliableEvent(paramlist, processed_paramlist, unprocessed_paramlist) - relay reliable Event |
|
132 |
+ if processed (#processed=true in other leg), event is sent back with processed_paramlist parameters, |
|
133 |
+ if unprocessed, event is sent back with unprocessed_paramlist parameters |
|
134 |
+ Example: |
|
135 |
+ set($fwd_param1="this parameter goes fwd"); |
|
136 |
+ set($fwd_param2="this parameter goes fwd, too"); |
|
137 |
+ set($bck_param1="this parameter goes back if processed"); |
|
138 |
+ set($bck_param2="this parameter goes back if processed, too"); |
|
139 |
+ set($bck_unp_param1="this parameter goes back if not processed"); |
|
140 |
+ set($bck_unp_param2="this parameter goes back if not processed, too"); |
|
141 |
+ sbc.relayReliableEvent(fwd_param1;fwd_param2, bck_param1;bck_param2, bck_unp_param1;bck_unp_param2); |
|
142 |
+ |
|
143 |
+ ... |
|
144 |
+ |
|
145 |
+ transition "B2B event" RUN - B2Bevent / { |
|
146 |
+ logParams(3); |
|
147 |
+ set(#processed="true"); |
|
148 |
+ } -> RUN; |
... | ... |
@@ -34,6 +34,8 @@ sipReply - in dialog reply |
34 | 34 |
Reply parameters (#sip_reason, #sip_code, ...) |
35 | 35 |
|
36 | 36 |
LegStateChange |
37 |
+ #SBCCallStatus - sbc call status (Disconnected, NoReply, Ringing, Connected, Disconnecting, Unknown) |
|
38 |
+ |
|
37 | 39 |
#reason == "SipRequest" |
38 | 40 |
+ Request parameters (#method, #r_uri, ...) |
39 | 41 |
#reason == "SipReply" |
... | ... |
@@ -116,14 +118,12 @@ sbc.profileSet(profile_variable, value) - set SBC profile options |
116 | 118 |
rtprelay_transparent_seqno = "yes" | "no, rtprelay_transparent_ssrc = "yes" | "no, |
117 | 119 |
rtprelay_interface, aleg_rtprelay_interface, |
118 | 120 |
|
119 |
-sbc.stopCall(string cause) |
|
120 |
- stop both call legs |
|
121 |
+sbc.stopCall(string cause) - stop both call legs |
|
122 |
+ |
|
123 |
+sbc.disconnect(bool hold_remote) - disconnect this call leg |
|
121 | 124 |
|
122 |
-sbc.disconnect(bool hold_remote) |
|
123 |
- disconnect this call leg |
|
125 |
+sbc.putOnHold - put this call leg on hold |
|
124 | 126 |
|
125 |
-sbc.putOnHold |
|
126 |
- put this call leg on hold |
|
127 |
+sbc.resumeHeld(bool send_reinvite) - resume from hold |
|
127 | 128 |
|
128 |
-sbc.resumeHeld(bool send_reinvite) |
|
129 |
- resume from hold |
|
129 |
+sbc.getSBCCallStatus(varname) - get sbc call status into $varname |
allows the SBC to be controlled by DSM scripts
using the extended call control API.
1 | 1 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,129 @@ |
1 |
+ |
|
2 |
+ |
|
3 |
+Variables |
|
4 |
+--------- |
|
5 |
+ $config.* config set variables |
|
6 |
+ |
|
7 |
+Parameters |
|
8 |
+---------- |
|
9 |
+ #StopProcessing = "true" -> stop call processing |
|
10 |
+ in events: invite, |
|
11 |
+ |
|
12 |
+Events (Conditions) |
|
13 |
+------------------- |
|
14 |
+ |
|
15 |
+general: |
|
16 |
+ Request parameters: #method, #r_uri, #from, #to and #hdrs |
|
17 |
+ Reply parameters: #sip_reason, #sip_code, #from, #to and #hdrs |
|
18 |
+ |
|
19 |
+start - on startup of call control DSM |
|
20 |
+ |
|
21 |
+invite - initial invite (onInitialInvite) |
|
22 |
+ #remote_party |
|
23 |
+ #remote_uri |
|
24 |
+ #from |
|
25 |
+ |
|
26 |
+ avars |
|
27 |
+ DSM_AVAR_REQUEST - original invite |
|
28 |
+ DSM_SBC_AVAR_MODIFIED_INVITE - modified invite (outgoing) |
|
29 |
+ |
|
30 |
+sipRequest - in dialog request |
|
31 |
+ Request parameters (#method, #r_uri, ...) |
|
32 |
+ |
|
33 |
+sipReply - in dialog reply |
|
34 |
+ Reply parameters (#sip_reason, #sip_code, ...) |
|
35 |
+ |
|
36 |
+LegStateChange |
|
37 |
+ #reason == "SipRequest" |
|
38 |
+ + Request parameters (#method, #r_uri, ...) |
|
39 |
+ #reason == "SipReply" |
|
40 |
+ + Reply parameters (#sip_reason, #sip_code, ...) |
|
41 |
+ |
|
42 |
+ #reason == "other" |
|
43 |
+ #desc - description |
|
44 |
+ #reason == "Canceled" |
|
45 |
+ #reason == "NoAck" |
|
46 |
+ #reason == "NoPrack" |
|
47 |
+ #reason == "RtpTimeout" |
|
48 |
+ #reason == "SessionTimeout" |
|
49 |
+ #reason == "InternalError" |
|
50 |
+ |
|
51 |
+BLegRefused |
|
52 |
+ Reply parameters (#sip_reason, #sip_code, ...) |
|
53 |
+ |
|
54 |
+-- ----- hold related -------- |
|
55 |
+PutOnHold |
|
56 |
+ |
|
57 |
+ResumeHeld |
|
58 |
+ #send_reinvite ("true" or "false") |
|
59 |
+ |
|
60 |
+CreateHoldRequest, |
|
61 |
+ |
|
62 |
+HandleHoldReply, |
|
63 |
+ #succeeded ("true" or "false") |
|
64 |
+ |
|
65 |
+ |
|
66 |
+-- ----- simple relay related - non-INVITE messages -------- |
|
67 |
+ avars |
|
68 |
+ DSM_SBC_AVAR_PROFILE - call profile |
|
69 |
+ |
|
70 |
+RelayInit |
|
71 |
+ #relay_event == "init" |
|
72 |
+ |
|
73 |
+RelayInitUAC |
|
74 |
+ #relay_event == "initUAC" |
|
75 |
+ |
|
76 |
+RelayInitUAS, |
|
77 |
+ #relay_event == "initUAS" |
|
78 |
+ |
|
79 |
+RelayFinalize, |
|
80 |
+ #relay_event == "finalize" |
|
81 |
+ |
|
82 |
+RelayOnSipRequest, |
|
83 |
+ #relay_event == "onSipRequest" |
|
84 |
+ |
|
85 |
+RelayOnSipReply, |
|
86 |
+ #relay_event == "onSipReply" |
|
87 |
+ |
|
88 |
+RelayOnB2BRequest, |
|
89 |
+ #relay_event == "onB2BRequest" |
|
90 |
+ |
|
91 |
+RelayOnB2BReply |
|
92 |
+ #relay_event == "onB2BReply" |
|
93 |
+ |
|
94 |
+ |
|
95 |
+Conditions |
|
96 |
+---------- |
|
97 |
+call leg events (don't work in non-call SBC DSMs) |
|
98 |
+ |
|
99 |
+sbc.isALeg |
|
100 |
+ |
|
101 |
+sbc.isOnHold |
|
102 |
+ |
|
103 |
+Actions |
|
104 |
+------- |
|
105 |
+sbc.profileSet(profile_variable, value) - set SBC profile options |
|
106 |
+ *** only meaningful in 'start' event (later, most profile options are not used any more) *** |
|
107 |
+ profile_variables: To, RURI, FROM, Call-ID, next_hop, RURI_host, refuse_with, |
|
108 |
+ outbound_proxy, force_outbound_proxy = "yes" | "no, |
|
109 |
+ aleg_outbound_proxy, aleg_force_outbound_proxy = "yes" | "no, |
|
110 |
+ next_hop_1st_req = "yes" | "no, patch_ruri_next_hop = "yes" | "no, |
|
111 |
+ aleg_next_hop, |
|
112 |
+ append_headers, append_headers_req, |
|
113 |
+ rtprelay_enabled = "yes" | "no, |
|
114 |
+ force_symmetric_rtp = "yes" | "no, aleg_force_symmetric_rtp = "yes" | "no, |
|
115 |
+ msgflags_symmetric_rtp = "yes" | "no, |
|
116 |
+ rtprelay_transparent_seqno = "yes" | "no, rtprelay_transparent_ssrc = "yes" | "no, |
|
117 |
+ rtprelay_interface, aleg_rtprelay_interface, |
|
118 |
+ |
|
119 |
+sbc.stopCall(string cause) |
|
120 |
+ stop both call legs |
|
121 |
+ |
|
122 |
+sbc.disconnect(bool hold_remote) |
|
123 |
+ disconnect this call leg |
|
124 |
+ |
|
125 |
+sbc.putOnHold |
|
126 |
+ put this call leg on hold |
|
127 |
+ |
|
128 |
+sbc.resumeHeld(bool send_reinvite) |
|
129 |
+ resume from hold |