Hi Razvan,

I added some INFO traces in the select_rtpp_node function in order to get some clues about what happens (see enclosed file).
Here is what is displayed in my /var/log/messages when an INVITE is received :

Nov  7 15:21:38 WWW_64Bits ./opensips[19884]: INFO :: (INVITE) rtpproxy set 1
Nov  7 15:21:38 WWW_64Bits ./opensips[19884]: INFO:rtpproxy:select_rtpp_node: entering select_rtpp_node
Nov  7 15:21:38 WWW_64Bits ./opensips[19884]: INFO:rtpproxy:select_rtpp_node: rtpproxy node count = 1
Nov  7 15:21:38 WWW_64Bits ./opensips[19884]: INFO:rtpproxy:select_rtpp_node: result rtpp_test = 0
Nov  7 15:21:38 WWW_64Bits ./opensips[19884]: INFO:rtpproxy:select_rtpp_node: entering select_rtpp_node
Nov  7 15:21:38 WWW_64Bits ./opensips[19884]: INFO:rtpproxy:select_rtpp_node: rtpproxy node count = 1
Nov  7 15:21:38 WWW_64Bits ./opensips[19884]: INFO:rtpproxy:select_rtpp_node: result rtpp_test = 1
Nov  7 15:21:38 WWW_64Bits ./opensips[19884]: ERROR:rtpproxy:force_rtp_proxy_body: no available proxies

This is really weird, if rtpp_test returns 1, it should mean that the rtpproxy socket was found right ? Then why do we have an error message saying that there are no available proxies ? I'm confused...

Best regards,

Sebastien

Le 04/11/2011 15:23, Razvan Crainea a écrit :
Hi Sebastien,

I will try to replicate this scenario and see if I am getting the same behaviour. I will get back to you later.

Regards,
--
Răzvan Crainea
OpenSIPS Developer

On 11/04/2011 04:20 PM, Sebastien CRUAUX wrote:
I also tried to enter the rtpproxy_sock parameters and the set IDs in the nh_sockets table and to load the rtpproxy sets from the database but it did not work either :(

Sebastien

Le 04/11/2011 11:52, Sebastien CRUAUX a écrit :
Hi Razvan,

Yes I think I declared the rtpproxy sets correctly, unless there is some new parameter in the new rtpproxy module that I forgot :

# ----- rtpproxy params -----
modparam("rtpproxy", "rtpproxy_sock", "1 == udp:localhost:12221")
modparam("rtpproxy", "rtpproxy_sock", "2 == udp:localhost:12222")

Regards,

Sebastien

Le 04/11/2011 11:44, Razvan Crainea a écrit :
Hi Sebastien,

Are you sure that when you declare the RTPProxy sets you allocate them the set identifiers (1 and 2)? Can you send us the rtpproxy_sock parameters declaration?

Regards,
--
Răzvan Crainea
OpenSIPS Developer

On 11/04/2011 12:27 PM, Sebastien CRUAUX wrote:
Hi,

I am currently migrating my old Opensips 1.6.2 to the new Opensips 1.7.0 but I am facing some issues with the configuration of rtpproxy.
The version of rtpproxy I am using is the commit 6b82ff914543d21ff9ddbb797b40a77516348308.

When I start Opensips, the two sets of rtpproxies I configured are detected :

INFO:rtpproxy:rtpp_test: rtp proxy <udp:localhost:12221> found, support for it enabled
INFO:rtpproxy:rtpp_test: rtp proxy <udp:localhost:12222> found, support for it enabled


However, when an INVITE is received by Opensips it seems rtpproxy is not found, consequently the SDP body is not rewritten :

INFO :: (INVITE) rtpproxy set 1
ERROR:rtpproxy:force_rtp_proxy_body:






                  no available proxies

More information about my configuration :
- my Opensips/rtpproxy server has 2 IP addresses, one opened on the internet, one internal used to communicate with my VoIP/PSTN gateway
- I have 2 sets of rtpproxies : the 1st one is in bridge mode for VoIP to PSTN or PSTN to VoIP calls, the 2nd one only listens on the external IP and is used for SIP to SIP calls

    ./rtpproxy -u seb -l 172.17.1.126 172.17.1.131 -s udp:localhost 12221 -m 18000 -M 18020
    ./rtpproxy -u seb -l 172.17.1.131 -s udp:localhost 12222 -m 18021 -M 18030


- below is the part of my opensips.cfg file which handles the INVITE requests (I just replaced my public IP address with xx.xx.xx.xx) :

        if (is_method("INVITE")) {
                if (registered("location","$fu") && registered("location")) {      # if From and To are SIP registered : we use rtpproxy 2 (external IP)
                        setflag(22);
                        xlog("INFO :: (INVITE) rtpproxy set 2");
                }
                else {                                                             # otherwise, SIP to ISUP or ISUP to SIP call : we use rtpproxy 1 (bridge mode)
                        xlog("INFO :: (INVITE) rtpproxy set 1");
                }
                if (has_body("application/sdp")) {
                        if (isflagset(22)) {
                                set_rtp_proxy_set("2");
                                if (rtpproxy_offer("","xx.xx.xx.xx")) {
                                        t_on_reply("1");
                                }
                        }
                        else {
                                set_rtp_proxy_set("1");
                                if (dst_ip == 172.17.1.131) {                      # my IP address opened to the internet (external IP)
                                        if (rtpproxy_offer("ei","xx.xx.xx.xx")) {
                                                t_on_reply("1");
                                        }
                                }
                                if (dst_ip == 172.17.1.126) {                      # my internal IP address
                                        if (rtpproxy_offer("ie","xx.xx.xx.xx")) {
                                                t_on_reply("1");
                                        }
                                }
                        }

                }
                else {
                        t_on_reply("2");
                }
        }



Any idea ? I have been stuck on this issue for a few days, this configuration worked fine with my previous versions of Opensips and rtpproxy.

Best Regards,

Sebastien

_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users


_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users


_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users


_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users


_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users
/*
 * Main balancing routine. This does not try to keep the same proxy for
 * the call if some proxies were disabled or enabled; proxy death considered
 * too rare. Otherwise we should implement "mature" HA clustering, which is
 * too expensive here.
 */
struct rtpp_node *
select_rtpp_node(str callid, int do_test)
{
        unsigned sum, weight_sum;
        struct rtpp_node* node;
        int was_forced, sumcut, found, constant_weight_sum;

        LM_INFO("entering select_rtpp_node\n");

        /* check last list version */
        if (my_version != *list_version && update_rtpp_proxies() < 0) {
                LM_ERR("cannot update rtpp proxies list\n");
                return 0;
        }
        
        if(!selected_rtpp_set){
                LM_ERR("script error -no valid set selected\n");
                return NULL;
        }
        /* Most popular case: 1 proxy, nothing to calculate */
        if (selected_rtpp_set->rtpp_node_count == 1) {
                LM_INFO("rtpproxy node count = 1\n");
                node = selected_rtpp_set->rn_first;
                if (node->rn_disabled && node->rn_recheck_ticks <= get_ticks())
                        node->rn_disabled = rtpp_test(node, 1, 0);
                LM_INFO("result rtpp_test = %d\n", node->rn_disabled);
                return node->rn_disabled ? NULL : node;
        }

        /* XXX Use quick-and-dirty hashing algo */
        for(sum = 0; callid.len > 0; callid.len--)
                sum += callid.s[callid.len - 1];
        sum &= 0xff;

        was_forced = 0;
retry:
        LM_INFO("retrying to find rtpproxy\n");
        weight_sum = 0;
        constant_weight_sum = 0;
        found = 0;
        for (node=selected_rtpp_set->rn_first; node!=NULL; node=node->rn_next) {

                if (node->rn_disabled && node->rn_recheck_ticks <= get_ticks()){
                        /* Try to enable if it's time to try. */
                        node->rn_disabled = rtpp_test(node, 1, 0);
                }
                constant_weight_sum += node->rn_weight;
                if (!node->rn_disabled) {
                        weight_sum += node->rn_weight;
                        found = 1;
                }
        }
        if (found == 0) {
                /* No proxies? Force all to be redetected, if not yet */
                if (was_forced)
                        return NULL;
                was_forced = 1;
                for(node=selected_rtpp_set->rn_first; node!=NULL; 
node=node->rn_next) {
                        node->rn_disabled = rtpp_test(node, 1, 1);
                }
                goto retry;
        }
        sumcut = weight_sum ? sum % constant_weight_sum : -1;
        /*
         * sumcut here lays from 0 to constant_weight_sum-1.
         * Scan proxy list and decrease until appropriate proxy is found.
         */
        was_forced = 0;
        for (node=selected_rtpp_set->rn_first; node!=NULL;) {
                if (sumcut < (int)node->rn_weight) {
                        if (node->rn_disabled) {
                                if (was_forced == 0) {
                                        /* appropriate proxy is disabled : 
redistribute on enabled ones */
                                        sumcut = weight_sum ? sum %  weight_sum 
: -1;
                                        node = selected_rtpp_set->rn_first;
                                        was_forced = 1;
                                }
                                continue;
                        } else {
                                goto found;
                        }
                }
                sumcut -= node->rn_weight;
                node = node->rn_next;
        }
        /* No node list */
        return NULL;
found:
        LM_INFO("rtpproxy found\n");
        if (do_test) {
                LM_INFO("do_test enabled\n");
                node->rn_disabled = rtpp_test(node, node->rn_disabled, 0);
                if (node->rn_disabled)
                        LM_INFO("going to retry\n");
                        goto retry;
        }
        return node;
}
_______________________________________________
Users mailing list
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to