|
@@ -1717,15 +1717,20 @@ int ds_select_dst(struct sip_msg *msg, int set, int alg, int mode)
|
|
|
while ((idx->dlist[i].flags & DS_INACTIVE_DST)
|
|
|
|| (idx->dlist[i].flags & DS_PROBING_DST))
|
|
|
{
|
|
|
- if(ds_use_default!=0)
|
|
|
+ if(ds_use_default!=0 && idx->nr!=1)
|
|
|
i = (i+1)%(idx->nr-1);
|
|
|
else
|
|
|
i = (i+1)%idx->nr;
|
|
|
if(i==hash)
|
|
|
{
|
|
|
+ /* back to start -- looks like no active dst */
|
|
|
if(ds_use_default!=0)
|
|
|
{
|
|
|
i = idx->nr-1;
|
|
|
+ if((idx->dlist[i].flags & DS_INACTIVE_DST)
|
|
|
+ || (idx->dlist[i].flags & DS_PROBING_DST))
|
|
|
+ return -1;
|
|
|
+ break;
|
|
|
} else {
|
|
|
return -1;
|
|
|
}
|
|
@@ -1751,6 +1756,7 @@ int ds_select_dst(struct sip_msg *msg, int set, int alg, int mode)
|
|
|
|
|
|
if(dst_avp_name.n!=0)
|
|
|
{
|
|
|
+ /* add default dst to last position in AVP list */
|
|
|
if(ds_use_default!=0 && hash!=idx->nr-1)
|
|
|
{
|
|
|
avp_val.s = idx->dlist[idx->nr-1].uri;
|