[Serusers] Nathelper & rtpproxy

Andres andres at telesip.net
Wed Oct 29 20:43:53 CET 2003


On Wednesday 29 October 2003 12:44, Glenn Dalgliesh wrote:
> I am seeing 2 problems with nathelper and rtpproxy. One I have seen
> mentioned on the list but no solution or explainations that I can find.
>
> 1. I am seeing the following in my messages file
> Oct 29 11:01:34 serv1 ser[9229]: ERROR: extract_mediaip: no `c=' in SDP
> Oct 29 11:01:35 serv1 ser[9229]: ERROR: extract_mediaip: no `c=' in SDP
> Oct 29 11:01:36 serv1 ser[9227]: ERROR: extract_mediaip: no `c=' in SDP
We also see those messages every time a call is made.  However it does not 
interfere with the actual call though.  The problem is that the nathelper 
modules looks at all SIP Messages and tries to parse the SDP in them.  There 
are some SIP messages that don't have an SDP at all so it does not find the 
"c=". I would guess these could be SIP "100 Trying" or "180 Ringing" messages 
but can't tell for sure.  We have not tried to fiddle with the default config 
since it works perfectly for us (with the exception of tons and tons of the 
above message and some others too like: {
Oct 29 13:04:10 wailea /usr/local/sbin/ser[24801]: ERROR: on_reply processing 
failed 
Oct 29 13:04:12 wailea /usr/local/sbin/ser[24802]: WARNING: get_body_len: 
Content-TYPE header absent!let's assume the content is text/plain ;-) 
}

If anybody else knows how to fine tune the default config to correct the above 
issue then let us know please.

and by the way, the 2 key parts of our config are:

     if (method=="INVITE") {
                if (isflagset(1)) { # ATA ?
                         force_rtp_proxy();
                };
         #       /* set up reply processing */
                t_on_reply("1");
        };
.
.
.
onreply_route[1] {
        if ((status=~"[12][0-9][0-9]"))
                fix_nated_contact();
                force_rtp_proxy();
}

Thanks.
Andres
http://www.telesip.net  

>
> 2. In some situations the BYE messages don't hangup the call
>
>
> I am using yesterday unstable CVS tree. Client I am using in the test lab
> are Budgetone and x-lite softphones
>
> and hear is my ser.cfg
>
> Thanks
>
> #
> # $Id: ser.cfg,v 1.21 2003/06/04 13:47:36 jiri Exp $
> #
> # simple quick-start config script
> #
>
> # ----------- global configuration parameters ------------------------
>
> /* Uncomment these lines to enter debugging mode
> debug=3         # debug level (cmd line: -dddddddddd)
> fork=yes
> log_stderror=no # (cmd line: -E)
> */
>
> # /* Uncomment these lines to enter debugging mode
> debug=10
> fork=yes
> log_stderror=no
> # */
>
> 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"
>
> alias=mydomain.dyndns.org
>
> # ------------------ 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/nathelper.so"
> loadmodule "/usr/local/lib/ser/modules/textops.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)
>
> # -------------------------  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") {
>                         force_rport();
>                         fix_nated_contact();
>                         save("location");
> # Uncomment this if you want to use digest authentication
> #                       if (!www_authorize("iptel.org", "subscriber")) {
> #                               www_challenge("iptel.org", "0");
> #                               break;
> #                       };
>
>                         save("location");
>                         break;
>                 };
>
>                 # native SIP destinations are handled using our USRLOC DB
>                 if (!lookup("location")) {
>                         sl_send_reply("404", "Not Found");
>                         break;
>                 };
>         };
>
> #inserted by klaus
>        if (method=="INVITE") {
>                 record_route();
>                 force_rtp_proxy();
>                 /* set up reply processing */
>                 t_on_reply("1");
>         };
>
>
>         # 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();
>         };
>
> }
>
> #inserted by klaus
> # all incoming replies for t_onrepli-ed transactions enter here
> onreply_route[1] {
>         if (status=~"2[0-9][0-9]")
>                 force_rtp_proxy();
> }




More information about the sr-users mailing list