Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #
- # OpenSIPS residential configuration script
- # by OpenSIPS Solutions <[email protected]>
- #
- # This script was generated via "make menuconfig", from
- # the "Residential" scenario.
- # You can enable / disable more features / functionalities by
- # re-generating the scenario with different options.#
- #
- # Please refer to the Core CookBook at:
- # http://www.opensips.org/Resources/DocsCookbooks
- # for a explanation of possible statements, functions and parameters.
- #
- ####### Global Parameters #########
- log_level=3
- log_stderror=no
- log_facility=LOG_LOCAL0
- udp_workers=4
- auto_aliases=no
- #socket=udp:enp0s8:5060
- socket=udp:ens18:5060
- ####### Modules Section ########
- #set module path
- mpath="/usr/lib/x86_64-linux-gnu/opensips/modules/"
- #### SIGNALING module
- loadmodule "signaling.so"
- #### StateLess module
- loadmodule "sl.so"
- #### Transaction Module
- loadmodule "tm.so"
- modparam("tm", "fr_timeout", 5)
- modparam("tm", "fr_inv_timeout", 30)
- modparam("tm", "restart_fr_on_each_reply", 0)
- modparam("tm", "onreply_avp_mode", 1)
- #### Record Route Module
- loadmodule "rr.so"
- /* do not append from tag to the RR (no need for this script) */
- modparam("rr", "append_fromtag", 0)
- #### MAX ForWarD module
- loadmodule "maxfwd.so"
- #### SIP MSG OPerationS module
- loadmodule "sipmsgops.so"
- #### FIFO Management Interface
- loadmodule "mi_fifo.so"
- modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
- modparam("mi_fifo", "fifo_mode", 0666)
- #### USeR LOCation module
- loadmodule "usrloc.so"
- modparam("usrloc", "nat_bflag", "NAT")
- modparam("usrloc", "db_mode", 0)
- #### REGISTRAR module
- loadmodule "registrar.so"
- modparam("registrar", "tcp_persistent_flag", "TCP_PERSISTENT")
- #### ACCounting module
- loadmodule "acc.so"
- modparam("acc", "early_media", 0)
- modparam("acc", "report_cancels", 0)
- modparam("acc", "detect_direction", 0)
- loadmodule "proto_udp.so"
- #### CGRateS module
- loadmodule "dialog.so"
- loadmodule "cgrates.so"
- modparam("cgrates", "cgrates_engine", "127.0.0.1:2014")
- #### MySQL module
- loadmodule "db_mysql.so"
- #### Drouting module
- loadmodule "drouting.so"
- modparam("drouting", "db_url",
- "mysql://opensips:opensipsrw@localhost/opensips")
- ####### Routing Logic ########
- # main request routing logic
- route{
- if (!mf_process_maxfwd_header(10)) {
- send_reply(483,"Too Many Hops");
- exit;
- }
- if (has_totag()) {
- # handle hop-by-hop ACK (no routing required)
- if ( is_method("ACK") && t_check_trans() ) {
- t_relay();
- exit;
- }
- # sequential request within a dialog should
- # take the path determined by record-routing
- if ( !loose_route() ) {
- # we do record-routing for all our traffic, so we should not
- # receive any sequential requests without Route hdr.
- send_reply(404, "Not here");
- exit;
- }
- if (is_method("BYE")) {
- # do accounting even if the transaction fails
- do_accounting("log","failed");
- }
- # route it out to whatever destination was set by loose_route()
- # in $du (destination URI).
- route(relay);
- exit;
- }
- # CANCEL processing
- if (is_method("CANCEL")) {
- if (t_check_trans())
- t_relay();
- exit;
- }
- # absorb retransmissions, but do not create transaction
- t_check_trans();
- if ( !(is_method("REGISTER") ) ) {
- if (is_myself("$fd")) {
- } else {
- # if caller is not local, then called number must be local
- if (!is_myself("$rd")) {
- send_reply(403,"Relay Forbidden");
- exit;
- }
- }
- }
- # preloaded route checking
- if (loose_route()) {
- xlog("L_ERR",
- "Attempt to route with preloaded Route's [$fu/$tu/$ru/$ci]");
- if (!is_method("ACK"))
- send_reply(403, "Preload Route denied");
- exit;
- }
- # record routing
- if (!is_method("REGISTER|MESSAGE"))
- record_route();
- if (!is_myself("$rd")) {
- append_hf("P-hint: outbound\r\n");
- route(relay);
- }
- # requests for my domain
- if (is_method("PUBLISH|SUBSCRIBE")) {
- 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
- send_reply(484,"Address Incomplete");
- exit;
- }
- # do lookup with method filtering
- if (!lookup("location","m")) {
- t_reply(404, "Not Found");
- exit;
- }
- # check auth with CGRateS
- $cgr_opt(GetMaxUsage) = 1; # also retrieve the max usage
- $cgr_opt(GetAttributes) = 1;
- $cgr_opt(GetRoutes) = 1;
- $cgr_opt(AuthorizeResources) = 1;
- $cgr_opt(AllocateResources) = 1;
- $cgr_opt(ReleaseResources) = 1;
- $cgr_opt(ProcessThresholds) = 1;
- $cgr_opt(ProcessStatQueues) = 1;
- $cgr(RequestType) = "*prepaid";
- $cgr(OriginHost) = "127.0.0.1";
- $cgr(Source) = "OpenSIPS";
- if (!async(cgrates_auth("$fU", "$rU"), resume_cgr_auth)) {
- sl_send_reply(503, "Service Unavailable");
- exit;
- }
- }
- route [resume_cgr_auth] {
- $var(rc) = $rc;
- # with GetMaxUsage == false, cgrates_auth() returns -2 on success
- if ($var(rc) < 0 && ($cgr_ret(MaxUsage) != 0 || $var(rc) != -2)) {
- xlog("L_NOTICE", "[$ci] CGRateS auth failed: rc=$var(rc), code=$cgr_ret\n");
- send_reply(403, "Forbidden");
- exit;
- }
- # Set the returned attributes from CGRateS as script pseudovariables
- $var(idx) = 0;
- while ($(cgr_ret(AttributesDigest){s.select,$var(idx),,}) != NULL) {
- $avp($(cgr_ret(AttributesDigest){s.select,$var(idx),,}{s.select,0,:}))
- = $(cgr_ret(AttributesDigest){s.select,$var(idx),,}{s.select,1,:});
- $var(idx) = $var(idx) + 1;
- }
- # Enable CDRs being sent to CGRateS
- cgrates_acc("cdr|missed", "$fU", "$rU");
- if ( $cgr_ret(RoutesDigest)==NULL ) { # no routing requested
- route(relay);
- }
- xlog("L_INFO", "[$ci] CGRateS auth OK, with routes: <$cgr_ret(RoutesDigest)>\n");
- $avp(carriers) := $cgr_ret(RoutesDigest);
- $avp(carriers_idx) := 0;
- route( to_carriers );
- }
- route[to_carriers] {
- xlog("L_INFO", "[$ci] routing to carrier IDX $avp(carriers_idx)\n");
- $var(carrier) = $(avp(carriers){s.select,$avp(carriers_idx),,});
- if ( $var(carrier) == NULL) {
- send_reply( 404 , "No route available to route");
- exit;
- }
- $cgr(RouteID) = $var(carrier);
- xlog("L_INFO", "[$ci] routing to carrier <$var(carrier)>\n");
- $avp(carriers_idx) := $avp(carriers_idx) + 1;
- if ( !route_to_carrier("$var(carrier)") ) {
- xlog("L_INFO", "[$ci] failed to route to carrier, skipping>\n");
- route( to_carriers );
- exit;
- }
- t_on_failure("gw_failure");
- t_relay();
- #end;
- }
- failure_route[gw_failure] {
- xlog("L_INFO", "[$ci] GW call failed to established with $T_reply_code code\n");
- if (t_was_cancelled()) {
- exit;
- }
- # failure indication about GWs?
- if ( t_check_status("(408)|([56][0-9][0-9])") ) {
- xlog("L_INFO", "[$ci] GW $rd failed with $T_reply_code -> retry\n");
- if ( use_next_gw() ) {
- xlog("L_INFO", "[$ci] using new GW <$rd>\n");
- t_on_failure("gw_failure");
- t_relay();
- #end
- }
- # no more GWs for the carrier, try the next carrier
- route( to_carriers );
- }
- }
- route[relay] {
- # for INVITEs enable some additional helper routes
- if (is_method("INVITE")) {
- t_on_branch("per_branch_ops");
- t_on_reply("handle_reply");
- t_on_failure("handle_failure");
- }
- if (!t_relay()) {
- send_reply(500,"Internal Error");
- }
- exit;
- }
- branch_route[per_branch_ops] {
- xlog("new branch at $ru\n");
- }
- onreply_route[handle_reply] {
- xlog("incoming reply\n");
- }
- failure_route[handle_failure] {
- if (t_was_cancelled()) {
- exit;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment