Hi all,

the patch allows to set outbound proxy for each gateway in probing mode (SIP ping). It can be useful in multiple gateways/SBC scenarios.

Example:
attrs: outbound=sip_url

any comments/wishes are welcome

Regards,
Alexandr Dubovikov
diff -udprP dispatcher.orig/dispatch.c dispatcher/dispatch.c
--- dispatcher.orig/dispatch.c	2014-09-18 16:09:15.000000000 +0200
+++ dispatcher/dispatch.c	2014-11-06 10:39:26.863828054 +0100
@@ -149,12 +149,13 @@ int ds_print_sets(void)
 	{
 		for(i=0; i<si->nr; i++)
 		{
-			LM_DBG("dst>> %d %.*s %d %d (%.*s,%d,%d)\n", si->id,
-					si->dlist[i].uri.len, si->dlist[i].uri.s,
-					si->dlist[i].flags, si->dlist[i].priority,
-					si->dlist[i].attrs.duid.len, si->dlist[i].attrs.duid.s,
-					si->dlist[i].attrs.maxload,
-					si->dlist[i].attrs.weight);
+			LM_DBG("dst>> %d %.*s %d %d (%.*s,%.*s,%d,%d)\n", si->id,
+                                        si->dlist[i].uri.len, si->dlist[i].uri.s,
+                                        si->dlist[i].flags, si->dlist[i].priority,
+                                        si->dlist[i].attrs.duid.len, si->dlist[i].attrs.duid.s,
+                                        si->dlist[i].attrs.outbound.len, si->dlist[i].attrs.outbound.s,
+                                        si->dlist[i].attrs.maxload,
+                                        si->dlist[i].attrs.weight);
 		}
 		si = si->next;
 	}
@@ -229,6 +230,10 @@ int ds_set_attrs(ds_dest_t *dest, str *a
 		} else if(pit->name.len==6
 				&& strncasecmp(pit->name.s, "weight", 4)==0) {
 			str2sint(&pit->body, &dest->attrs.weight);
+		}
+		else if(pit->name.len==8
+                		&& strncasecmp(pit->name.s, "outbound", 8)==0) {
+			dest->attrs.outbound = pit->body;
 		} else if(pit->name.len==7
 				&& strncasecmp(pit->name.s, "maxload", 7)==0) {
 			str2sint(&pit->body, &dest->attrs.maxload);
@@ -2452,8 +2457,10 @@ void ds_check_timer(unsigned int ticks,
 			if (ds_probing_mode==DS_PROBE_ALL ||
 					(list->dlist[j].flags&DS_PROBING_DST) != 0)
 			{
-				LM_DBG("probing set #%d, URI %.*s\n", list->id,
-						list->dlist[j].uri.len, list->dlist[j].uri.s);
+				LM_DBG("probing set #%d, URI %.*s (%.*s)\n", list->id,
+						list->dlist[j].uri.len, list->dlist[j].uri.s,
+						list->dlist[j].attrs.outbound.len, list->dlist[j].attrs.outbound.s
+						);
 
 				/* Send ping using TM-Module.
 				 * int request(str* m, str* ruri, str* to, str* from, str* h,
@@ -2466,7 +2473,7 @@ void ds_check_timer(unsigned int ticks,
 							&list->dlist[j].uri,
 							&list->dlist[j].uri,
 							&ds_ping_from,
-							&ds_outbound_proxy) < 0) {
+							list->dlist[j].attrs.outbound.len > 0 ?  &list->dlist[j].attrs.outbound:  &ds_outbound_proxy) < 0) {
 					LM_ERR("unable to ping [%.*s]\n",
 							list->dlist[j].uri.len, list->dlist[j].uri.s);
 				}
diff -udprP dispatcher.orig/dispatch.h dispatcher/dispatch.h
--- dispatcher.orig/dispatch.h	2014-09-18 16:09:15.000000000 +0200
+++ dispatcher/dispatch.h	2014-11-06 10:39:00.495827150 +0100
@@ -143,6 +143,7 @@ typedef struct _ds_attrs
 {
 	str body;
 	str duid;
+	str outbound;	        
 	int maxload;
 	int weight;
 } ds_attrs_t;
_______________________________________________
sr-dev mailing list
sr-dev@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to