Browse Source

dispatcher: new param ds_attrs_none

- if set to 1, "none=yes" is set in the attrs for those records that
have no attrs value, to ensure that corresponding avps for records don't
get mixed up
Daniel-Constantin Mierla 7 years ago
parent
commit
d1cb264467
2 changed files with 20 additions and 9 deletions
  1. 18 9
      src/modules/dispatcher/dispatch.c
  2. 2 0
      src/modules/dispatcher/dispatcher.c

+ 18 - 9
src/modules/dispatcher/dispatch.c

@@ -89,6 +89,7 @@ extern int ds_force_dst;
 extern str ds_event_callback;
 extern int ds_ping_latency_stats;
 extern float ds_latency_estimator_alpha;
+extern int ds_attrs_none;
 
 static db_func_t ds_dbf;
 static db1_con_t *ds_db_handle = NULL;
@@ -241,27 +242,35 @@ int init_data(void)
 /**
  *
  */
-int ds_set_attrs(ds_dest_t *dest, str *attrs)
+int ds_set_attrs(ds_dest_t *dest, str *vattrs)
 {
 	param_t *params_list = NULL;
 	param_hooks_t phooks;
 	param_t *pit = NULL;
 	str param;
 	int tmp_rweight = 0;
+	str sattrs;
 
-	if(attrs == NULL || attrs->len <= 0)
-		return 0;
-	if(attrs->s[attrs->len - 1] == ';')
-		attrs->len--;
+	if(vattrs == NULL || vattrs->len <= 0) {
+		if(ds_attrs_none==0) {
+			return 0;
+		}
+		sattrs.s = "none=yes";
+		sattrs.len = 8;
+	} else {
+		sattrs = *vattrs;
+	}
+	if(sattrs.s[sattrs.len - 1] == ';')
+		sattrs.len--;
 	/* clone in shm */
-	dest->attrs.body.s = (char *)shm_malloc(attrs->len + 1);
+	dest->attrs.body.s = (char *)shm_malloc(sattrs.len + 1);
 	if(dest->attrs.body.s == NULL) {
 		LM_ERR("no more shm\n");
 		return -1;
 	}
-	memcpy(dest->attrs.body.s, attrs->s, attrs->len);
-	dest->attrs.body.s[attrs->len] = '\0';
-	dest->attrs.body.len = attrs->len;
+	memcpy(dest->attrs.body.s, sattrs.s, sattrs.len);
+	dest->attrs.body.s[sattrs.len] = '\0';
+	dest->attrs.body.len = sattrs.len;
 
 	param = dest->attrs.body;
 	if(parse_params(&param, CLASS_ANY, &phooks, &params_list) < 0)

+ 2 - 0
src/modules/dispatcher/dispatcher.c

@@ -120,6 +120,7 @@ int ds_hash_expire = 7200;
 int ds_hash_initexpire = 7200;
 int ds_hash_check_interval = 30;
 int ds_timer_mode = 0;
+int ds_attrs_none = 0;
 
 str ds_outbound_proxy = STR_NULL;
 
@@ -259,6 +260,7 @@ static param_export_t params[]={
 	{"ds_default_socket",  PARAM_STR, &ds_default_socket},
 	{"ds_timer_mode",      PARAM_INT, &ds_timer_mode},
 	{"event_callback",     PARAM_STR, &ds_event_callback},
+	{"ds_attrs_none",      PARAM_INT, &ds_attrs_none},
 	{0,0,0}
 };