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
> <bog...@opensips.org <mailto:bog...@opensips.org>> 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
>>     de...@lists.opensips.org <mailto:de...@lists.opensips.org>
>>     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
Users@lists.opensips.org
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to