Hi,

 

At work are planning to use SER to route traffic between a pstn gateway, Asterisk, and direct lookups.  We would like to set up the routing to try a second gateway if it cannot contact the primary gateway.  Below is the config file and attached is the output from a sample session.

 

Ideally, we would like to see

 

If( ! forward to GW2)

            Forward(GW1);

}

 

From what I’ve read in the archives, forward() cannot be used (yes, I tried it anywayJ ).  The config below does get to the failure_route but at that point two errors appear:

 

1(21749) ERROR: t_forward_nonack: no branched for fwding

1(21749) ERROR: failure_route: t_relay_to failed

 

Any tips/pointers?

 

David

 

# ----------- global configuration parameters ------------------------

 

listen=XXX.XXX.XXX.XXX

alias=XXX.com

alias=XXX.XXX.com

 

#debug=3         # debug level (cmd line: -dddddddddd)

#fork=yes

#log_stderror=no            # (cmd line: -E)

 

/* Uncomment these lines to enter debugging mode  */

debug=7

fork=no

log_stderror=yes

 

check_via=no    # (cmd. line: -v)

dns=no           # (cmd. line: -r)

rev_dns=no      # (cmd. line: -R)

#port=5060

#children=4

fifo="/tmp/ser_fifo"

 

# ------------------ module loading ----------------------------------

 

# Uncomment this if you want to use SQL database

loadmodule "/usr/local/lib/ser/modules/mysql.so"

 

loadmodule "/usr/local/lib/ser/modules/sl.so"

loadmodule "/usr/local/lib/ser/modules/tm.so"

loadmodule "/usr/local/lib/ser/modules/rr.so"

loadmodule "/usr/local/lib/ser/modules/maxfwd.so"

loadmodule "/usr/local/lib/ser/modules/usrloc.so"

loadmodule "/usr/local/lib/ser/modules/registrar.so"

 

# Uncomment this if you want digest authentication

# mysql.so must be loaded !

loadmodule "/usr/local/lib/ser/modules/auth.so"

loadmodule "/usr/local/lib/ser/modules/auth_db.so"

 

# ----------------- setting module-specific parameters ---------------

 

# -- usrloc params --

 

#modparam("usrloc", "db_mode",   0)

 

# Uncomment this if you want to use SQL database

# for persistent storage and comment the previous line

modparam("usrloc", "db_mode", 2)

 

# -- auth params --

# Uncomment if you are using auth module

#

modparam("auth_db", "calculate_ha1", yes)

#

# If you set "calculate_ha1" parameter to yes (which true in this config),

# uncomment also the following parameter)

#

modparam("auth_db", "password_column", "password")

 

# -- rr params --

# add value to ;lr param to make some broken UAs happy

modparam("rr", "enable_full_lr", 1)

 

 

# -- tm params --

#modparam("tm", "fr_timer", 10)

modparam("tm", "fr_inv_timer", 15)

 

# -------------------------  request routing logic -------------------

 

# main routing logic

 

route{

 

            # initial sanity checks -- messages with

            # max_forwards==0, or excessively long requests

            if (!mf_process_maxfwd_header("10")) {

                        sl_send_reply("483","Too Many Hops");

                        break;

            };

            if ( msg:len > max_len ) {

                        sl_send_reply("513", "Message too big");

                        break;

            };

 

            # we record-route all messages -- to make sure that

            # subsequent messages will go through our proxy; that's

            # particularly good if upstream and downstream entities

            # use different transport protocol

            record_route();

            # loose-route processing

            if (loose_route()) {

                        t_relay();

                        break;

            };

 

            # if the request is for other domain use UsrLoc

            # (in case, it does not work, use the following command

            # with proper names and addresses in it)

            if (uri==myself) {

 

                        if (method=="REGISTER") {

 

# Uncomment this if you want to use digest authentication

#                                  if (!www_authorize("iptel.org", "subscriber")) {

#                                              www_challenge("iptel.org", "0");

#                                              break;

#                                  };

 

                                    save("location");

                                    break;

                        };

 

                        if (method=="INVITE") {

 

                                    # local user ids

                                    if (uri=~"^sip:1[0-9][0-9][0-9][0-9][0-9][0-9]@") {

                                                forward("sip.dotality.com");

                                                break;

                                    };

 

                                    # Phone #s

                                    if (uri=~"^sip:[2-9][0-9][0-9][0-9][0-9][0-9][0-9]@") {

 

                                                log("---> TRYING GW2 <---\n");

                                                t_on_failure("1");

                                                t_relay_to_udp("gw2","5060");

                                                break;

                                    };

 

                                    # native SIP destinations are handled using our USRLOC DB

                                    if (!lookup("location")) {

                                                sl_send_reply("404", "Not Found");

                                                break;

                                    };

 

                                    # forward to current uri now; use stateful forwarding; that

                                    # works reliably even if we forward from TCP to UDP

                                    if (!t_relay()) {

                                                sl_reply_error();

                                    };

                        };

            };

}

 

# Fallback route for pstn gateways.

failure_route[1] {

            log("---> TRYING GW1 <---\n");

            t_relay_to_udp("GW1","5060");

            break;

}