Ups, sorry...here is the proper patch.
Regards,
Bogdan-Andrei Iancu
OpenSIPS Founder and Developer
http://www.opensips-solutions.com
On 05/20/2013 07:40 PM, Ronald Cepres wrote:
> Hi Bogdan,
>
> Thanks for the reply. However, the patch that is attached is empty (0
> bytes and doesn't contain anything).
>
> Regards,
>
>
> On Tue, May 21, 2013 at 12:36 AM, Bogdan-Andrei Iancu
> <[email protected] <mailto:[email protected]>> wrote:
>
> Hello,
>
> Thanks to the help in debugging this, the bug was found and a
> patch is available for testing (see attached). Please have it
> tested and let me know if it fixes the problem.
>
> Regards,
>
> Bogdan-Andrei Iancu
> OpenSIPS Founder and Developer
> http://www.opensips-solutions.com
>
>
> On 05/16/2013 07:28 PM, Ronald Cepres wrote:
>>
>> Drouting crashes when selecting next gateway. Did a little
>> investigation, and FWIW the next gateway's carrier status is
>> disabled but the carrier's only gateway is enabled. Looked at the
>> backtrace of the core dump, and found that it crashed while
>> comparing two strings on get_gw_by_id called by use_next_gw. The
>> strings compared were apparently GW ID strings.
>>
>> I attached the GDB btfull logs (replaced some sensitive info with
>> dummy text) for reference. Take note that 'dont optimize' flag
>> was not set so some of the values were optimized and the crash
>> happened randomly so I can't actually reproduce the crash.
>>
>> I'm using Opensips 1.9 using this source
>> tarball:
>> http://opensips.org/pub/opensips/latest/src/opensips-1.9.0_src.tar.gz
>>
>>
>> --
>>
>> Regards,
>>
>> Ronald Cepres
>>
>>
>> _______________________________________________
>> Devel mailing list
>> [email protected] <mailto:[email protected]>
>> http://lists.opensips.org/cgi-bin/mailman/listinfo/devel
>
>
>
>
> --
>
> Ronald Cepres
> Network Operations Center
> Net Voip Communications, Inc.
>
>
> This message contains confidential information and is intended only
> for the individual named. If you are not the named addressee you
> should not disseminate, distribute or copy this e-mail. Please notify
> the sender immediately by e-mail if you have received this e-mail by
> mistake and delete this e-mail from your system. E-mail transmission
> cannot be guaranteed to be secure or error-free as information could
> be intercepted, corrupted, lost, destroyed, arrive late or incomplete,
> or contain viruses. The sender therefore does not accept liability for
> any errors or omissions in the contents of this message, which arise
> as a result of e-mail transmission. If verification is required please
> request a hard-copy version. Net Voip Communications, Inc., 2721
> Forsyth Rd #256, Winter park, FL 32792. www.netvoipcommunications.com
> <http://www.netvoipcommunications.com/>
>
Index: modules/drouting/drouting.c
===================================================================
--- modules/drouting/drouting.c (revision 10023)
+++ modules/drouting/drouting.c (working copy)
@@ -1044,13 +1044,23 @@
if (avp) destroy_avp(avp);
}
- /* remove old gw ID */
+ /* remove old gw ID and search next one */
avp = NULL;
do {
if (avp) destroy_avp(avp);
avp = search_first_avp(gw_id_avp.type, gw_id_avp.name, NULL, 0);
}while (avp && (avp->flags&AVP_VAL_STR)==0 );
- if (avp) destroy_avp(avp);
+ if (!avp) {
+ LM_WARN("no GWs found at all -> have you done do_routing in script ?? \n");
+ return -1;
+ }
+ do {
+ if (avp) destroy_avp(avp);
+ avp = search_first_avp(gw_id_avp.type, gw_id_avp.name, NULL, 0);
+ }while (avp && (avp->flags&AVP_VAL_STR)==0 );
+ /* any GW found ? */
+ if (!avp)
+ goto rule_fallback;
/* search for the first RURI AVP containing a string */
avp_ru = NULL;
@@ -1066,12 +1076,7 @@
LM_DBG("new RURI set to <%.*s>\n", val.s.len,val.s.s);
/* get value for next gw ID from avp */
- if (avp) {
- get_avp_val(avp, &val);
- } else {
- /* if no other ID found, simply use the GW as good */
- break;
- }
+ get_avp_val(avp, &val);
/* we have an ID, so we can check the GW state */
lock_start_read( ref_lock );
@@ -2013,7 +2018,7 @@
{
unsigned short j;
for ( j=0 ; j<pgwa->ips_no ; j++)
- if ( (pgwa->ports[j]==0 || pgwa->ports[j]==port) &&
+ if ( (pgwa->ports[j]==0 || port==0 || pgwa->ports[j]==port) &&
ip_addr_cmp( &pgwa->ips[j], ip) ) return 1;
return 0;
}
_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users