瀏覽代碼

rtimer: save the route name in the internal structure

Daniel-Constantin Mierla 7 年之前
父節點
當前提交
8a0de1b9f2
共有 1 個文件被更改,包括 15 次插入2 次删除
  1. 15 2
      src/modules/rtimer/rtimer_mod.c

+ 15 - 2
src/modules/rtimer/rtimer_mod.c

@@ -44,9 +44,13 @@
 
 MODULE_VERSION
 
+#define RTIMER_ROUTE_NAME_SIZE  64
+
 typedef struct _stm_route {
 	str timer;
 	unsigned int route;
+	char route_name_buf[RTIMER_ROUTE_NAME_SIZE];
+	str route_name;
 	struct _stm_route *next;
 } stm_route_t;
 
@@ -336,12 +340,20 @@ int stm_e_param(modparam_t type, void *val)
 	}
 	c = s.s[s.len];
 	s.s[s.len] = '\0';
+	if(s.len>=RTIMER_ROUTE_NAME_SIZE-1) {
+		LM_ERR("route block name is too long [%.*s] (%d)\n", s.len, s.s, s.len);
+		free_params(params_list);
+		return -1;
+	}
 	tmp.route = route_get(&main_rt, s.s);
+	memcpy(tmp.route_name_buf, s.s, s.len);
+	tmp.route_name_buf[s.len] = '\0';
+	tmp.route_name.s = tmp.route_name_buf;
+	tmp.route_name.len = s.len;
 	s.s[s.len] = c;
 	if(tmp.route == -1)
 	{
-		LM_ERR("invalid route: %.*s\n",
-				s.len, s.s);
+		LM_ERR("invalid route: %.*s\n", s.len, s.s);
 		free_params(params_list);
 		return -1;
 	}
@@ -354,6 +366,7 @@ int stm_e_param(modparam_t type, void *val)
 		return -1;
 	}
 	memcpy(rt, &tmp, sizeof(stm_route_t));
+	rt->route_name.s = rt->route_name_buf;
 	rt->next = nt->rt;
 	nt->rt = rt;
 	free_params(params_list);