|
Documentation |
Documentation.Tutorials-ScriptHelper-1-11 HistoryShow minor edits - Show changes to markup April 07, 2014, at 12:00 PM
by -
Changed line 8 from:
The purpose of this new module is to help you start in an easy way with the OpenSIPS script. The learning curve gets milder as the beginners can start with a simplified format of the script - the idea is to shift the main focus on routing the SIP initial requests (which define the service logic), while transparently handle a lot of "standard" SIP scripting logic, in order to both save script coding time and mitigate potential SIP scripting errors. This tutorial offers both a brief overview on the features of the new module and an example script. to:
The purpose of this new module is to help you start in an easy way with the OpenSIPS script. The learning curve gets milder as the beginners can start with a simplified format of the script - the idea is to shift the main focus on routing the SIP initial requests (which define the service logic), while transparently handling a lot of "standard" SIP scripting logic, in order to both save script coding time and mitigate potential SIP scripting errors. This tutorial offers both a brief overview on the features of the new module and an example script. April 07, 2014, at 11:48 AM
by -
Changed lines 8-9 from:
The purpose of this new module is to transparently handle a lot of "standard" SIP scripting logic, in order to both save script coding time and mitigate potential SIP scripting errors. This tutorial offers both a brief overview on the features of the new module and an example script. to:
The purpose of this new module is to help you start in an easy way with the OpenSIPS script. The learning curve gets milder as the beginners can start with a simplified format of the script - the idea is to shift the main focus on routing the SIP initial requests (which define the service logic), while transparently handle a lot of "standard" SIP scripting logic, in order to both save script coding time and mitigate potential SIP scripting errors. This tutorial offers both a brief overview on the features of the new module and an example script. Changed lines 13-14 from:
to:
Changed lines 16-17 from:
to:
April 04, 2014, at 01:47 PM
by -
Changed line 16 from:
to:
April 03, 2014, at 08:26 PM
by -
Changed lines 12-15 from:
As stated in the documentation, the default features are:
to:
As stated in the documentation, the module currently features:
Deleted lines 21-26:
Optionally, through a series of module parameters, the script writer may include some additional logic:
Changed line 37 from:
to:
Changed line 102 from:
to:
@][@ Added lines 104-105:
Changed line 115 from:
to:
@][@ Added lines 326-327:
Changed line 339 from:
to:
@][@ Changed line 396 from:
to:
@][@ March 25, 2014, at 01:41 PM
by -
Changed line 223 from:
route(1); to:
route(relay); Changed line 245 from:
t_on_failure("1");
to:
t_on_failure("failed_call");
Changed line 433 from:
route(1); to:
route(relay); Changed line 455 from:
t_on_failure("1");
to:
t_on_failure("failed_call");
March 25, 2014, at 01:34 PM
by -
Changed lines 76-79 from:
modparam("tm", "restart_fr_on_each_reply", 0) modparam("tm", "disable_6xx_block", 1) modparam("tm", "onreply_avp_mode", 1) to:
Changed line 95 from:
modparam("dialog", "db_mode", 0) to:
modparam("dialog", "db_mode", 1) Deleted line 96:
modparam("dialog", "profiles_no_value", "inbound/s ; outbound/s ; shared/s") Deleted line 99:
modparam("usrloc", "nat_bflag", "NAT") Changed lines 104-105 from:
modparam("registrar", "tcp_persistent_flag", "TCP_PERSIST_FLAG") to:
Changed lines 286-289 from:
modparam("tm", "restart_fr_on_each_reply", 0) modparam("tm", "disable_6xx_block", 1) modparam("tm", "onreply_avp_mode", 1) to:
Changed line 305 from:
modparam("dialog", "db_mode", 0) to:
modparam("dialog", "db_mode", 1) Deleted line 306:
modparam("dialog", "profiles_no_value", "inbound/s ; outbound/s ; shared/s") Deleted line 309:
modparam("usrloc", "nat_bflag", "NAT") Deleted line 313:
modparam("registrar", "tcp_persistent_flag", "TCP_PERSIST_FLAG") March 25, 2014, at 01:29 PM
by -
Changed line 36 from:
Table: Scenario init node examples to:
Table: Scripting examples March 25, 2014, at 01:27 PM
by -
Changed lines 114-115 from:
modparam("script_helper", "create_dialog_flags", "Pp") to:
modparam("script_helper", "create_dialog_flags", "PpB") Added lines 134-190:
Added lines 197-199:
Changed lines 327-339 from:
route [my_seq_route] to:
route Deleted lines 340-346:
xlog("---- Sequential request handler ---- \n");
xlog("$rm | Call-ID: $ci | FT: $ft | TT: $tt\n");
}
route { Changed line 352 from:
if (loose_route()) to:
if (loose_route() || match_dialog()) Added lines 362-364:
xlog("---- Sequential request handler ---- \n");
xlog("$rm | Call-ID: $ci | FT: $ft | TT: $tt\n");
Changed line 371 from:
if ( is_method("ACK") )
to:
if (is_method("ACK"))
Changed line 373 from:
if ( t_check_trans() ) to:
if (t_check_trans()) Changed lines 414-416 from:
{
create_dialog("Pp");
}
to:
create_dialog("PpB");
March 25, 2014, at 01:11 PM
by -
Added lines 111-115:
loadmodule "script_helper.so" modparam("script_helper", "sequential_route", "my_seq_route") modparam("script_helper", "use_dialog", 1) modparam("script_helper", "create_dialog_flags", "Pp") Changed line 134 from:
if (has_totag()) to:
if (!uri == myself) Changed lines 136-170 from:
if (loose_route())
{
if (is_method("INVITE"))
{
# even if in most of the cases is useless, do RR for
# re-INVITEs alos, as some buggy clients do change route set
# during the dialog.
record_route();
}
# route it out to whatever destination was set by loose_route()
# in $du (destination URI).
route(relay);
}
else
{
if ( is_method("ACK") )
{
if ( t_check_trans() )
{
# non loose-route, but stateful ACK; must be an ACK after
# a 487 or e.g. 404 from upstream server
t_relay();
exit;
}
else
{
# ACK without matching transaction ->
# ignore and discard
exit;
}
}
sl_send_reply("404","Not here");
}
exit;
to:
append_hf("P-hint: outbound\r\n");
route(relay);
Changed lines 140-141 from:
# CANCEL processing
if (is_method("CANCEL"))
to:
if (is_method("PUBLISH|SUBSCRIBE"))
Changed lines 142-144 from:
if (t_check_trans())
t_relay();
to:
sl_send_reply("503", "Service Unavailable");
Changed lines 146-152 from:
t_check_trans();
# record routing
if (!is_method("REGISTER|MESSAGE"))
record_route();
if (!uri == myself)
to:
if (is_method("REGISTER"))
Changed lines 148-149 from:
append_hf("P-hint: outbound\r\n");
route(relay);
to:
if (!save("location"))
sl_reply_error();
exit;
Changed line 154 from:
if (is_method("INVITE") && !has_totag())
to:
if ($rU == NULL) Changed lines 156-158 from:
create_dialog("Pp");
to:
# request with no Username in RURI
sl_send_reply("484","Address Incomplete");
exit;
Changed lines 161-162 from:
if (is_method("PUBLISH|SUBSCRIBE"))
to:
# do lookup with method filtering
if (!lookup("location",""))
Changed lines 164-165 from:
sl_send_reply("503", "Service Unavailable");
to:
t_newtran();
t_reply("404", "Not Found");
Changed lines 169-189 from:
if (is_method("REGISTER"))
to:
route(1); } route [relay] { # for INVITEs enable some additional helper routes
if (is_method("INVITE"))
t_on_failure("failed_call");
if (!t_relay())
send_reply("500", "Internal Error");
exit;
} failure_route [failed_call] { if (t_was_cancelled())
exit;
if (next_branches())
Changed lines 191-194 from:
if (!save("location"))
sl_reply_error();
exit;
to:
t_on_failure("1");
t_relay();
Deleted lines 193-209:
if ($rU == NULL)
{
# request with no Username in RURI
sl_send_reply("484","Address Incomplete");
exit;
}
# do lookup with method filtering
if (!lookup("location",""))
{
t_newtran();
t_reply("404", "Not Found");
exit;
}
route(1);
Deleted lines 194-217:
route [relay] { # for INVITEs enable some additional helper routes
if (is_method("INVITE"))
t_on_failure("failed_call");
if (!t_relay())
send_reply("500", "Internal Error");
exit;
} failure_route [failed_call] { if (t_was_cancelled())
exit;
if (next_branches())
{
t_on_failure("1");
t_relay();
}
} Deleted lines 266-270:
loadmodule "script_helper.so" modparam("script_helper", "sequential_route", "my_seq_route") modparam("script_helper", "use_dialog", 1) modparam("script_helper", "create_dialog_flags", "Pp") Changed line 285 from:
if (!uri == myself) to:
if (has_totag()) Changed lines 287-288 from:
append_hf("P-hint: outbound\r\n");
route(relay);
to:
if (loose_route())
{
if (is_method("INVITE"))
{
# even if in most of the cases is useless, do RR for
# re-INVITEs alos, as some buggy clients do change route set
# during the dialog.
record_route();
}
# route it out to whatever destination was set by loose_route()
# in $du (destination URI).
route(relay);
}
else
{
if ( is_method("ACK") )
{
if ( t_check_trans() )
{
# non loose-route, but stateful ACK; must be an ACK after
# a 487 or e.g. 404 from upstream server
t_relay();
exit;
}
else
{
# ACK without matching transaction ->
# ignore and discard
exit;
}
}
sl_send_reply("404","Not here");
}
exit;
}
# CANCEL processing
if (is_method("CANCEL"))
{
if (t_check_trans())
t_relay();
exit;
}
t_check_trans();
# record routing
if (!is_method("REGISTER|MESSAGE"))
record_route();
if (!uri == myself)
{
append_hf("P-hint: outbound\r\n");
route(relay);
}
if (is_method("INVITE") && !has_totag())
{
create_dialog("Pp");
March 25, 2014, at 01:08 PM
by -
Deleted lines 110-114:
loadmodule "script_helper.so" modparam("script_helper", "sequential_route", "my_seq_route") modparam("script_helper", "use_dialog", 1) modparam("script_helper", "create_dialog_flags", "Pp") Changed line 129 from:
if (!uri == myself) to:
if (has_totag()) Changed lines 131-132 from:
append_hf("P-hint: outbound\r\n");
route(relay);
to:
if (loose_route())
{
if (is_method("INVITE"))
{
# even if in most of the cases is useless, do RR for
# re-INVITEs alos, as some buggy clients do change route set
# during the dialog.
record_route();
}
# route it out to whatever destination was set by loose_route()
# in $du (destination URI).
route(relay);
}
else
{
if ( is_method("ACK") )
{
if ( t_check_trans() )
{
# non loose-route, but stateful ACK; must be an ACK after
# a 487 or e.g. 404 from upstream server
t_relay();
exit;
}
else
{
# ACK without matching transaction ->
# ignore and discard
exit;
}
}
sl_send_reply("404","Not here");
}
exit;
}
# CANCEL processing
if (is_method("CANCEL"))
{
if (t_check_trans())
t_relay();
exit;
}
t_check_trans();
# record routing
if (!is_method("REGISTER|MESSAGE"))
record_route();
if (!uri == myself)
{
append_hf("P-hint: outbound\r\n");
route(relay);
}
if (is_method("INVITE") && !has_totag())
{
create_dialog("Pp");
March 25, 2014, at 01:02 PM
by -
Changed lines 35-36 from:
[@ to:
Changed lines 195-196 from:
@] to:
@]||
####### Global Parameters #########
debug = 3
# log to syslog by default
log_stderror = no
log_facility = LOG_LOCAL0
fork = yes
children = 5
tcp_children = 1
# comment the next line to enable the auto discovery of local aliases
# based on reverse DNS on IPs
auto_aliases = no
listen = udp:192.168.2.133:5060 use_children 8
disable_tcp = no
disable_tls = no
exec_msg_threshold = 200000
####### Modules Section ########
mpath = "/usr/local/lib/opensips/modules/"
loadmodule "signaling.so"
#### Stateless module
loadmodule "sl.so"
#### Transaction Module
loadmodule "tm.so"
modparam("tm", "fr_timeout", 10)
modparam("tm", "fr_inv_timeout", 40)
modparam("tm", "restart_fr_on_each_reply", 0)
modparam("tm", "disable_6xx_block", 1)
modparam("tm", "onreply_avp_mode", 1)
loadmodule "rr.so"
modparam("rr", "append_fromtag", 0)
loadmodule "maxfwd.so"
loadmodule "sipmsgops.so"
#### FIFO Management Interface
loadmodule "mi_fifo.so"
modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
loadmodule "db_mysql.so"
modparam("db_mysql", "exec_query_threshold", 200000)
loadmodule "uri.so"
modparam("uri", "use_uri_table", 0)
loadmodule "dialog.so"
modparam("dialog", "db_url", "mysql://opensips:XXXXXXXXX@192.168.2.133/opensips")
modparam("dialog", "db_mode", 0)
modparam("dialog", "default_timeout", 3600)
modparam("dialog", "profiles_no_value", "inbound/s ; outbound/s ; shared/s")
modparam("dialog", "ping_interval", 5)
loadmodule "usrloc.so"
modparam("usrloc", "nat_bflag", "NAT")
modparam("usrloc", "db_mode", 1)
modparam("usrloc", "db_url", "mysql://opensips:XXXXXXXXX@192.168.2.133/opensips")
loadmodule "registrar.so"
modparam("registrar", "tcp_persistent_flag", "TCP_PERSIST_FLAG")
loadmodule "script_helper.so"
modparam("script_helper", "sequential_route", "my_seq_route")
modparam("script_helper", "use_dialog", 1)
modparam("script_helper", "create_dialog_flags", "Pp")
route [my_seq_route]
{
xlog("---- Sequential request handler ---- \n");
xlog("$rm | Call-ID: $ci | FT: $ft | TT: $tt\n");
}
# main request routing logic
route
{
$T_fr_timeout = 8;
$T_fr_inv_timeout = 30;
if (!mf_process_maxfwd_header("10"))
{
sl_send_reply("483","Too Many Hops");
exit;
}
if (!uri == myself)
{
append_hf("P-hint: outbound\r\n");
route(relay);
}
if (is_method("PUBLISH|SUBSCRIBE"))
{
sl_send_reply("503", "Service Unavailable");
exit;
}
if (is_method("REGISTER"))
{
if (!save("location"))
sl_reply_error();
exit;
}
if ($rU == NULL)
{
# request with no Username in RURI
sl_send_reply("484","Address Incomplete");
exit;
}
# do lookup with method filtering
if (!lookup("location",""))
{
t_newtran();
t_reply("404", "Not Found");
exit;
}
route(1);
}
route [relay]
{
# for INVITEs enable some additional helper routes
if (is_method("INVITE"))
t_on_failure("failed_call");
if (!t_relay())
send_reply("500", "Internal Error");
exit;
}
failure_route [failed_call]
{
if (t_was_cancelled())
exit;
if (next_branches())
{
t_on_failure("1");
t_relay();
}
}
||
March 25, 2014, at 12:51 PM
by -
Changed line 19 from:
to:
March 25, 2014, at 12:48 PM
by -
Deleted line 12:
Added line 14:
March 25, 2014, at 09:04 AM
by -
Changed line 13 from:
to:
March 24, 2014, at 07:47 PM
by -
Changed line 8 from:
The purpose of this new module is to transparently handle a lot of "standard" SIP scripting logic, in order to both save script coding time and mitigate potential SIP scripting errors. This tutorial offers a brief overview on the features of the new module. to:
The purpose of this new module is to transparently handle a lot of "standard" SIP scripting logic, in order to both save script coding time and mitigate potential SIP scripting errors. This tutorial offers both a brief overview on the features of the new module and an example script. March 24, 2014, at 07:40 PM
by -
Changed line 94 from:
modparam("dialog", "db_url", "mysql://root:XXXXXXX@192.168.2.133/opensips") to:
modparam("dialog", "db_url", "mysql://opensips:XXXXXXXXX@192.168.2.133/opensips") Changed lines 103-104 from:
modparam("usrloc", "db_url", "mysql://root:XXXXXXX@192.168.2.133/opensips") to:
modparam("usrloc", "db_url", "mysql://opensips:XXXXXXXXX@192.168.2.133/opensips") Deleted line 106:
modparam("registrar", "attr_avp", "$avp(attr_avp)") March 24, 2014, at 07:38 PM
by -
Changed lines 29-30 from:
to:
March 24, 2014, at 07:38 PM
by -
Added lines 32-33:
\\ March 24, 2014, at 07:38 PM
by -
Added lines 27-31:
SIP logic provided:
March 24, 2014, at 07:25 PM
by -
Changed lines 42-43 from:
/* comment the next line to enable the auto discovery of local aliases based on revers DNS on IPs */ to:
March 24, 2014, at 07:24 PM
by -
Added lines 28-187:
####### Global Parameters #########
debug = 3
# log to syslog by default
log_stderror = no
log_facility = LOG_LOCAL0
fork = yes
children = 5
tcp_children = 1
/* comment the next line to enable the auto discovery of local aliases
based on revers DNS on IPs */
auto_aliases = no
listen = udp:192.168.2.133:5060 use_children 8
disable_tcp = no
disable_tls = no
exec_msg_threshold = 200000
####### Modules Section ########
mpath = "/usr/local/lib/opensips/modules/"
loadmodule "signaling.so"
#### Stateless module
loadmodule "sl.so"
#### Transaction Module
loadmodule "tm.so"
modparam("tm", "fr_timeout", 10)
modparam("tm", "fr_inv_timeout", 40)
modparam("tm", "restart_fr_on_each_reply", 0)
modparam("tm", "disable_6xx_block", 1)
modparam("tm", "onreply_avp_mode", 1)
loadmodule "rr.so"
modparam("rr", "append_fromtag", 0)
loadmodule "maxfwd.so"
loadmodule "sipmsgops.so"
#### FIFO Management Interface
loadmodule "mi_fifo.so"
modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
loadmodule "db_mysql.so"
modparam("db_mysql", "exec_query_threshold", 200000)
loadmodule "uri.so"
modparam("uri", "use_uri_table", 0)
loadmodule "dialog.so"
modparam("dialog", "db_url", "mysql://root:XXXXXXX@192.168.2.133/opensips")
modparam("dialog", "db_mode", 0)
modparam("dialog", "default_timeout", 3600)
modparam("dialog", "profiles_no_value", "inbound/s ; outbound/s ; shared/s")
modparam("dialog", "ping_interval", 5)
loadmodule "usrloc.so"
modparam("usrloc", "nat_bflag", "NAT")
modparam("usrloc", "db_mode", 1)
modparam("usrloc", "db_url", "mysql://root:XXXXXXX@192.168.2.133/opensips")
loadmodule "registrar.so"
modparam("registrar", "tcp_persistent_flag", "TCP_PERSIST_FLAG")
modparam("registrar", "attr_avp", "$avp(attr_avp)")
loadmodule "script_helper.so"
modparam("script_helper", "sequential_route", "my_seq_route")
modparam("script_helper", "use_dialog", 1)
modparam("script_helper", "create_dialog_flags", "Pp")
route [my_seq_route]
{
xlog("---- Sequential request handler ---- \n");
xlog("$rm | Call-ID: $ci | FT: $ft | TT: $tt\n");
}
# main request routing logic
route
{
$T_fr_timeout = 8;
$T_fr_inv_timeout = 30;
if (!mf_process_maxfwd_header("10"))
{
sl_send_reply("483","Too Many Hops");
exit;
}
if (!uri == myself)
{
append_hf("P-hint: outbound\r\n");
route(relay);
}
if (is_method("PUBLISH|SUBSCRIBE"))
{
sl_send_reply("503", "Service Unavailable");
exit;
}
if (is_method("REGISTER"))
{
if (!save("location"))
sl_reply_error();
exit;
}
if ($rU == NULL)
{
# request with no Username in RURI
sl_send_reply("484","Address Incomplete");
exit;
}
# do lookup with method filtering
if (!lookup("location",""))
{
t_newtran();
t_reply("404", "Not Found");
exit;
}
route(1);
}
route [relay]
{
# for INVITEs enable some additional helper routes
if (is_method("INVITE"))
t_on_failure("failed_call");
if (!t_relay())
send_reply("500", "Internal Error");
exit;
}
failure_route [failed_call]
{
if (t_was_cancelled())
exit;
if (next_branches())
{
t_on_failure("1");
t_relay();
}
}
March 24, 2014, at 06:31 PM
by -
Added lines 1-27:
Documentation -> Tutorials -> Using the Script Helper moduleThis page has been visited 7555 times. (:toc-float Table of Content:) Tutorial OverviewThe purpose of this new module is to transparently handle a lot of "standard" SIP scripting logic, in order to both save script coding time and mitigate potential SIP scripting errors. This tutorial offers a brief overview on the features of the new module. Current featuresAs stated in the documentation, the default features are:
Example script |
