Hello folks,
here I am again :)

  I have a setup where I use opensips as registration+proxy and
asterisk as media gateway.
When I place a call I can correctly hear the call audio (so RTP flow
is ok), and the callee can hear my voice too, but after 20 seconds the
call hangs up.
In the asterisk logs I found the following lines:
[Oct  6 10:29:54] WARNING[25602]: chan_sip.c:3778 retrans_pkt: Maximum
retries exceeded on transmission
NjZjMmI2MWRlYmY0YWYwMGVhYTAyNmE0NzU4OWU5YTk. for seqno 2 (Critical
Response) -- See doc/sip-retransmit.txt.
[Oct  6 10:29:54] WARNING[25602]: chan_sip.c:3805 retrans_pkt: Hanging
up call NjZjMmI2MWRlYmY0YWYwMGVhYTAyNmE0NzU4OWU5YTk. - no reply to our
critical packet (see doc/sip-retransmit.txt).

it seems that the signalling that pass through opensips does not work
correctly...
this is a part of my asterisk configuration:

rtpstart=10001
rtpend=15000

externip = 77.238.xx.yy
localnet=192.168.6.131/255.255.255.255
localnet=192.168.6.132/255.255.255.255

[ser_phones]
type=friend
context=from_inbound_ser
host=192.168.6.130
insecure=very
disallow=all
allow=gsm


opensips.cfg (relevant parts, not modules config.)
route{

        if (!mf_process_maxfwd_header("10")) {
                sl_send_reply("483","Too Many Hops");
                exit;
        }

        if (has_totag()) {
                # sequential request withing a dialog should
                # take the path determined by record-routing
                if (loose_route()) {
                        if (is_method("BYE")) {
                                setflag(1); # do accounting ...
                                setflag(3); # ... even if the transaction fails
                        } else 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(1);
                } 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;
        }

        #initial requests

        # CANCEL processing
        if (is_method("CANCEL"))
        {
                if (t_check_trans())
                        t_relay();
                exit;
        }

        t_check_trans();

        # authenticate if from local subscriber
        if (!(method=="REGISTER") && is_from_local())  /*multidomain version*/
        {
                if (!proxy_authorize("", "subscriber")) {
                        proxy_challenge("", "0");
                        exit;
                }
                if (!db_check_from()) {
                        sl_send_reply("403","Forbidden auth ID");
                        exit;
                }
        
                consume_credentials();
                # caller authenticated
                xlog("[AUTH] PROXY for $fu ($si:$sp) OK");
        }

        # preloaded route checking
        if (loose_route()) {
                xlog("L_ERR",
                "Attempt to route with preloaded Route's [$fu/$tu/$ru/$ci]");
                if (!is_method("ACK"))
                        sl_send_reply("403","Preload Route denied");
                exit;
        }

        # record routing
        if (!is_method("REGISTER|MESSAGE"))
                record_route();

        # account only INVITEs
        if (is_method("INVITE")) {
                setflag(1); # do accounting
                setflag(2); # for success or missed call
                xlog("[SIP_INVITE] sip_from=$fu sip_to=$ru c_from=$fU c_to=$rU
client=$si:$sp call_id=$ci c_seq=$cs");
        }
        
        if (!is_uri_host_local())
        {
                append_hf("P-hint: outbound\r\n");
                xlog("[OUTBOUND_NL] Routing message from $si");
                route(1);
        }

        # requests for my domain


        if (is_method("REGISTER"))
        {
                xlog("Enter REGISTER from $si:$sp");
                # authenticate the REGISTER requests (uncomment to enable auth)
                $var(auth_code) = www_authorize("", "subscriber");
                if ( $var(auth_code) == -1 || $var(auth_code) == -2) {
                        xlog("[AUTH] ERROR for $...@$fd from $si cause 
$var(auth_code)");
                }
                else
                {
                        xlog("[AUTH] OK for $...@$fd from $si port $sp 
auth_code=$var(auth_code)");
                }
                if ( $var(auth_code) < 0 )
                {
                        www_challenge("", "0");
                        exit;
                }
                
                if (!db_check_to())
                {
                        sl_send_reply("403","Forbidden auth ID");
                        exit;
                }

                if (!save("location"))
                        sl_reply_error();

                exit;
        }

        if ($rU==NULL) {
                # request with no Username in RURI
                sl_send_reply("484","Address Incomplete");
                exit;
        }
        
        xlog("Checking for ASTERISK HOOKS, rU=$rU");
        ### ASTERISK HOOK for demo 101 (echo test)
        if ($rU=~"^101$") {
                xlog("Entered Asterisk HOOK for 101");
                
                if (!is_from_local()) {
                        send_reply("403", "Forbidden access to media service");
                        exit;
                }
                
                #rewritehostport("192.168.6.131:5060");
                if (!load_balance("1", "vc")) {
                        xlog("LOAD_BALANCE Service is FULL");
                        sl_send_reply("500", "Service FULL");
                        exit;
                }
                else {
                        xlog("LOAD_BALANCE Sending CALL to $du\n");
                }
                t_relay();
                exit;
        
        }
        
        ### ASTERISK HOOK for external calling
        if ($rU=~"^0[0-9]+") {
                xlog("Entered Asterisk HOOK for 0*");
                
                if (!is_from_local()) {
                        send_reply("403", "Forbidden access to media service");
                        exit;
                }
                
                #rewritehostport("192.168.6.131:5060");
                if (!load_balance("1", "vc")) {
                        xlog("LOAD_BALANCE Service is FULL");
                        sl_send_reply("500", "Service FULL");
                        exit;
                }
                else {
                        xlog("LOAD_BALANCE Sending CALL to $du\n");
                }

                t_relay();
                exit;
        
        }
        
        
        ### ASTERISK HOOK end
        
        
        # do lookup with method filtering
        if (!lookup("location","m")) {
                switch ($retcode) {
                        case -1:
                        case -3:
                                t_newtran();
                                t_reply("404", "Not Found");
                                exit;
                        case -2:
                                sl_send_reply("405", "Method Not Allowed");
                                exit;
                }
        }

        # when routing via usrloc, log the missed calls also
        setflag(2);

        route(1);
}


route[1] {
        if (!t_relay()) {
                sl_reply_error();
        };
        exit;
}





the network configuration is the following (yes, there is a lot of nat
here, but I don't have other chances...)
opensips ip: 192.168.6.130
asterisk ip (2 boxes): 192.168.6.131, 192.168.6.132
77.238.xx.yy port 5060 DNAT to 192.168.6.130 port 5060
77.238.xx.yy port 10000-15000 DNAT to 192.168.6.131 port 10000-15000
77.238.xx.yy port 15001-20000 DNAT to 192.168.6.132 port 15001-20000


where am I wrong? :(
sorry for stupid questions, but it's the first time I have to create a
multi-box scenario...

could I resolve inserting in asterisk config.
externip = 77.238.xx.yy:5071
and having DNAT 77.238.xx.yy:5071 to 192.168.6.131:5060?
(different ports for box #1 and #2, obviously :) )

thanks!

PS sorry for my english

-- 
Stefano Sasso
http://stefano.dscnet.org/

_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to