Thanks for your clarification.  I do see where you are coming from.

Here is my config with some better comments. I have also attached the
file in case the email client mangles the formatting.

thanks,
Geoff

#
# OpenSIPS configuration
#     by Geoff Mina
#
# Please refer to reference http://www.opensips.org/dokuwiki/doku.php
# for a full description of all modules and functions
#
#


###### Global Parameters #####
debug=1
log_stderror=no
log_facility=LOG_LOCAL0
fork=yes
children=16
disable_tcp=yes
listen=eth0:5060
listen=eth1:5060
port=5060
server_header="Server: G-Tel SIP Gateway"

#fork=no
#log_stderror=yes

##### Module Loading and Param Setting #####
mpath="/usr/local/lib64/opensips/modules/"
loadmodule "sl.so"
loadmodule "db_mysql.so"
loadmodule "maxfwd.so"
loadmodule "uri.so"
loadmodule "textops.so"

## Enable FIFO ##
loadmodule "mi_fifo.so"
modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")

## Enable TM ##
loadmodule "tm.so"
modparam("tm","fr_timer",10)
modparam("tm","fr_inv_timer",30)

## Enable RR ##
loadmodule "rr.so"
modparam("rr", "enable_full_lr",0)
modparam("rr", "append_fromtag",1)
modparam("rr", "enable_double_rr",1)
modparam("rr", "add_username",0)

## Enable Logging ##
loadmodule "xlog.so"
modparam("xlog", "buf_size",4096)
modparam("xlog", "force_color",0)

## Enable SipTrace module for debugging SIP transactions ##
loadmodule "siptrace.so"
modparam("siptrace","db_url","mysql://[removed]:[remov...@localhost/opensips")
modparam("siptrace","table","sip_trace")
modparam("siptrace","trace_on",0)
modparam("siptrace","trace_flag",13)

## Enable Dispatcher module ##
loadmodule "dispatcher.so"
modparam("dispatcher","flags",2)
modparam("dispatcher","dst_avp","$avp(i:271)")
modparam("dispatcher","grp_avp","$avp(i:272)")
modparam("dispatcher","cnt_avp","$avp(i:273)")
modparam("dispatcher","ds_ping_method","OPTIONS")
modparam("dispatcher","ds_ping_from","sip:monitor...@[removed].com")
modparam("dispatcher","ds_ping_interval",30)
modparam("dispatcher","ds_probing_mode",1)
modparam("dispatcher", "ds_probing_threshhold", 2)

###########################################################################
## Request route 'main'
###########################################################################
route{
        
        ##
        ## Start with some simple logging and sip tracing
        ## For the time being we are going to sip trace everything
        ## just to make sure all packets are flowing properly
        ##
        xlog("L_INFO", "New request - M=$rm RURI=$ru F=$fu T=$tu IP=$si 
ID=$ci\n");
        setflag(13);
        sip_trace();
        
        
        ##
        ## Initial sanity check to ensure the message isn't too big
        ##
        if(msg:len > max_len){
                xlog("L_INFO", "Message too big\n");
                t_reply("513", "Message Too Big");
                exit;
        }

        ##
        ## Ensure we aren't in a tight loop for some reason
        ## this number could probably be lower.
        ##
        if (!mf_process_maxfwd_header("70")){
                xlog("L_INFO", "Too many hops\n");
                t_reply("483", "Too Many Hops");
                exit;
        }

        ##
        ## If this is anything other than a REGISTER method
        ## we want to insert the Record-Route header so the
        ## return path flows back through the gateway system
        ##
        if(!is_method("REGISTER")){
                xlog("L_INFO", "Recording Route info\n");
                record_route();
        }

        
        if(is_method("INVITE")){
                ##
                ## If the method is an INVITE we are going to enter the
                ## route[1] method which is responsible for invoking the
                ## dispatcher and relaying the request to the end point
                ##
                xlog("L_INFO", "Method is an INVITE, fetching next from 
dispatcher\n");
                route(1);
        }else if(is_method("OPTIONS")){
                ##
                ## If the method is an OPTIONS we are simply going to respond
                ## with a 200 OK.  The internal monitoring platform (nagios) 
will be
                ## monitoring the health of the gateway via the check_sip plugin
                ##
                xlog("L_INFO", "Method is an OPTIONS, probably just 
monitoring\n");
                sl_send_reply("200","OK");
        }else if(loose_route()){
                ##
                ## If we are in-dialog loose_route() should return true and we 
should
                ## end up here.  I am not sure the subsequent check of 
has_totag() is
                ## necessary, but I could be wrong.
                ##      
                xlog("L_INFO", "Loose route has returned true, attempting 
routing.\n");
                
                if(!has_totag()){
                        xlog("L_INFO", "Initial loose-route rejected\n");
                        t_reply("403","Initial Loose-Routing Rejected.");
                        exit;
                }

                route(2);       
        }else{
                ##
                ## In theory we shouldn't get here as anything that isn't an 
INVITE
                ## or an OPTIONS should be routed via the loose_route condition.
                ## I suppose there may be a timing issue where we need to 
account for a
                ## CANCEL request and forward it along.
                ##
                if(is_method("CANCEL") || is_method("ACK")){
                        xlog("L_INFO", "We have an ACK or CANCEL");
                        route(3);
                }
        }
}



########################################################################
## Handles relay of INVITE messages
## with round-robin load balancing
##
## We select the next from the dispatcher
## using simple round-robin algorithm.
########################################################################
route[1]{
        ds_select_domain("1","4");
        t_on_reply("1");
        t_on_failure("1");
        t_relay();
}



########################################################################
## Handles relay of all non INVITE messages
##
## All messages which were routed via the loose_route
## condition will end up here.  If there is a message that fails
## to t_rely there probably isn't much we can do other than
## return an error.
########################################################################
route[2]{
        xlog("L_INFO", "Setting up reply handler and relaying request\n");
        t_on_reply("1");
        if(!t_relay()){
                sl_reply_error();
        }
}


########################################################################
## Handles relay of CANCEL or ACK messages
########################################################################
route[3]{
        t_on_reply("1");
        if(t_check_trans()){
                if(!t_relay()){
                        xlog("L_INFO","Error relaying message route[3]\n");
                        sl_reply_error();
                }
        }else{
                xlog("L_INFO","Dropping mis-routed request from route[3]\n");
                
        }       
        exit;
}



#######################################################################
## Simply logs responses
#######################################################################
onreply_route[1]{
        xlog("L_INFO", "Reply - S=$rs D=$rr F=$fu T=$tu IP=$si ID=$ci\n");
        exit;
}



#######################################################################
## Handles failure of INVITE forwarding
#######################################################################
failure_route[1]{
        xlog("L_INFO","Failure route, trying again\n");

        if(t_check_status("408")){
                xlog("L_INFO","Got a 408 Timeout, flagging dest as invalid\n");
                ds_mark_dst();
                route(1);
        }else{
                if(t_was_cancelled()){
                        xlog("L_INFO","Recieved a 4XX error for a cancelled 
transaction");
                        exit;
                }else if(!t_relay()){
                        xlog("L_INFO","Error relaying error message");
                        exit;
                }
        }
}


On Wed, Feb 11, 2009 at 4:43 PM, Iñaki Baz Castillo <[email protected]> wrote:
> El Miércoles, 11 de Febrero de 2009, Geoffrey Mina escribió:
>> It's nice to see there are actually some folks out there who can
>> (almost) see where I am coming from.  The general response of the
>> community is quite surprising.  I was expecting much different
>> responses based on the level of support specific questions receive
>> when submitted.
>>
>> My system is working 100% error free in the 'lab' environment, so
>> hopefully you are correct in your assumption that I have achieved
>> success.
>>
>> I have heard everyone LOUD and CLEAR.  Unless it's broken or not
>> working as expected... don't come here looking for advice and
>> mentoring!
>
> Please paste your configuration (better if you attach it as text file) and
> make a description of what it's supposed to do. Detail also in which points
> you could have some doubt.
>
> You didn't understand us (better if I speak just about me). I'm ready to help
> if I read a good and detailed description. What I don't like is the way you
> initiated your request, very honest, but unfeasible in fact (IMHO).
>
> So please, let's help you in a more feasible way :)
>
>
>
> --
> Iñaki Baz Castillo
>
> _______________________________________________
> Users mailing list
> [email protected]
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>
#
# OpenSIPS configuration
#     by Geoff Mina
#
# Please refer to reference http://www.opensips.org/dokuwiki/doku.php
# for a full description of all modules and functions
#
#


###### Global Parameters #####
debug=1
log_stderror=no
log_facility=LOG_LOCAL0
fork=yes
children=16
disable_tcp=yes
listen=eth0:5060
listen=eth1:5060
port=5060
server_header="Server: G-Tel SIP Gateway"

#fork=no
#log_stderror=yes

##### Module Loading and Param Setting #####
mpath="/usr/local/lib64/opensips/modules/"
loadmodule "sl.so"
loadmodule "db_mysql.so"
loadmodule "maxfwd.so"
loadmodule "uri.so"
loadmodule "textops.so"

## Enable FIFO ##
loadmodule "mi_fifo.so"
modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")

## Enable TM ##
loadmodule "tm.so"
modparam("tm","fr_timer",10)
modparam("tm","fr_inv_timer",30)

## Enable RR ##
loadmodule "rr.so"
modparam("rr", "enable_full_lr",0)
modparam("rr", "append_fromtag",1)
modparam("rr", "enable_double_rr",1)
modparam("rr", "add_username",0)

## Enable Logging ##
loadmodule "xlog.so"
modparam("xlog", "buf_size",4096)
modparam("xlog", "force_color",0)

## Enable SipTrace module for debugging SIP transactions ##
loadmodule "siptrace.so"
modparam("siptrace","db_url","mysql://[removed]:[remov...@localhost/opensips")
modparam("siptrace","table","sip_trace")
modparam("siptrace","trace_on",0)
modparam("siptrace","trace_flag",13)

## Enable Dispatcher module ##
loadmodule "dispatcher.so"
modparam("dispatcher","flags",2)
modparam("dispatcher","dst_avp","$avp(i:271)")
modparam("dispatcher","grp_avp","$avp(i:272)")
modparam("dispatcher","cnt_avp","$avp(i:273)")
modparam("dispatcher","ds_ping_method","OPTIONS")
modparam("dispatcher","ds_ping_from","sip:monitor...@[removed].com")
modparam("dispatcher","ds_ping_interval",30)
modparam("dispatcher","ds_probing_mode",1)
modparam("dispatcher", "ds_probing_threshhold", 2)

###########################################################################
## Request route 'main'
###########################################################################
route{
        
        ## 
        ## Start with some simple logging and sip tracing
        ## For the time being we are going to sip trace everything
        ## just to make sure all packets are flowing properly
        ##
        xlog("L_INFO", "New request - M=$rm RURI=$ru F=$fu T=$tu IP=$si 
ID=$ci\n");
        setflag(13);
        sip_trace();
        
        
        ##
        ## Initial sanity check to ensure the message isn't too big
        ##
        if(msg:len > max_len){
                xlog("L_INFO", "Message too big\n");
                t_reply("513", "Message Too Big");
                exit;
        }

        ##
        ## Ensure we aren't in a tight loop for some reason
        ## this number could probably be lower.
        ##
        if (!mf_process_maxfwd_header("70")){
                xlog("L_INFO", "Too many hops\n");
                t_reply("483", "Too Many Hops");
                exit;
        }

        ##
        ## If this is anything other than a REGISTER method
        ## we want to insert the Record-Route header so the
        ## return path flows back through the gateway system
        ##
        if(!is_method("REGISTER")){
                xlog("L_INFO", "Recording Route info\n");
                record_route();
        }

        
        if(is_method("INVITE")){
                ##
                ## If the method is an INVITE we are going to enter the
                ## route[1] method which is responsible for invoking the 
                ## dispatcher and relaying the request to the end point
                ##
                xlog("L_INFO", "Method is an INVITE, fetching next from 
dispatcher\n");
                route(1);
        }else if(is_method("OPTIONS")){
                ##
                ## If the method is an OPTIONS we are simply going to respond
                ## with a 200 OK.  The internal monitoring platform (nagios) 
will be
                ## monitoring the health of the gateway via the check_sip plugin
                ##
                xlog("L_INFO", "Method is an OPTIONS, probably just 
monitoring\n");
                sl_send_reply("200","OK");
        }else if(loose_route()){
                ##
                ## If we are in-dialog loose_route() should return true and we 
should
                ## end up here.  I am not sure the subsequent check of 
has_totag() is
                ## necessary, but I could be wrong.
                ##      
                xlog("L_INFO", "Loose route has returned true, attempting 
routing.\n");
                
                if(!has_totag()){
                        xlog("L_INFO", "Initial loose-route rejected\n");
                        t_reply("403","Initial Loose-Routing Rejected.");
                        exit;
                }

                route(2);       
        }else{
                ##
                ## In theory we shouldn't get here as anything that isn't an 
INVITE
                ## or an OPTIONS should be routed via the loose_route 
condition.  
                ## I suppose there may be a timing issue where we need to 
account for a 
                ## CANCEL request and forward it along.
                ##
                if(is_method("CANCEL") || is_method("ACK")){
                        xlog("L_INFO", "We have an ACK or CANCEL");
                        route(3);
                }
        }
}



########################################################################
## Handles relay of INVITE messages
## with round-robin load balancing
##
## We select the next from the dispatcher
## using simple round-robin algorithm.
########################################################################
route[1]{
        ds_select_domain("1","4");
        t_on_reply("1");
        t_on_failure("1");
        t_relay();
}



########################################################################
## Handles relay of all non INVITE messages 
## 
## All messages which were routed via the loose_route
## condition will end up here.  If there is a message that fails
## to t_rely there probably isn't much we can do other than
## return an error.
########################################################################
route[2]{
        xlog("L_INFO", "Setting up reply handler and relaying request\n");
        t_on_reply("1");
        if(!t_relay()){
                sl_reply_error();
        }
}


########################################################################
## Handles relay of CANCEL or ACK messages
########################################################################
route[3]{
        t_on_reply("1");
        if(t_check_trans()){
                if(!t_relay()){
                        xlog("L_INFO","Error relaying message route[3]\n");
                        sl_reply_error();
                }
        }else{
                xlog("L_INFO","Dropping mis-routed request from route[3]\n");
                
        }       
        exit;
}



#######################################################################
## Simply logs responses
#######################################################################
onreply_route[1]{
        xlog("L_INFO", "Reply - S=$rs D=$rr F=$fu T=$tu IP=$si ID=$ci\n");
        exit;
}



#######################################################################
## Handles failure of INVITE forwarding
#######################################################################
failure_route[1]{
        xlog("L_INFO","Failure route, trying again\n");

        if(t_check_status("408")){
                xlog("L_INFO","Got a 408 Timeout, flagging dest as invalid\n");
                ds_mark_dst();
                route(1);
        }else{
                if(t_was_cancelled()){
                        xlog("L_INFO","Recieved a 4XX error for a cancelled 
transaction");
                        exit;
                }else if(!t_relay()){
                        xlog("L_INFO","Error relaying error message");
                        exit;
                }
        }
}
_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to