Browse Source

dispatcher: fix mi/rpc reload command

Ovidiu Sas 12 years ago
parent
commit
96e7601474
3 changed files with 26 additions and 5 deletions
  1. 23 3
      modules/dispatcher/dispatch.c
  2. 1 0
      modules/dispatcher/dispatch.h
  3. 2 2
      modules/dispatcher/dispatcher.c

+ 23 - 3
modules/dispatcher/dispatch.c

@@ -92,7 +92,7 @@ static ds_ht_t *_dsht_load = NULL;
 extern int ds_force_dst;
 
 static db_func_t ds_dbf;
-static db1_con_t* ds_db_handle=0;
+static db1_con_t* ds_db_handle=NULL;
 
 ds_set_t **ds_lists=NULL;
 
@@ -655,8 +655,8 @@ int init_ds_db(void)
 		return -1;
 	}
 
-	if(ds_connect_db()!=0){
-
+	if(ds_connect_db()!=0)
+	{
 		LM_ERR("unable to connect to the database\n");
 		return -1;
 	}
@@ -689,6 +689,26 @@ int init_ds_db(void)
 	return ret;
 }
 
+/*! \brief reload groups of destinations from DB*/
+int ds_reload_db(void)
+{
+	int ret;
+
+	if(ds_connect_db()!=0)
+	{
+		LM_ERR("unable to connect to the database\n");
+		return -1;
+	}
+	ret = ds_load_db();
+	if (ret == -2)
+	{
+		LM_WARN("failure while loading one or more dispatcher entries\n");
+	}
+	ds_disconnect_db();
+
+	return ret;
+}
+
 /*! \brief load groups of destinations from DB*/
 int ds_load_db(void)
 {

+ 1 - 0
modules/dispatcher/dispatch.h

@@ -105,6 +105,7 @@ int ds_load_list(char *lfile);
 int ds_connect_db(void);
 void ds_disconnect_db(void);
 int ds_load_db(void);
+int ds_reload_db(void);
 int ds_destroy_list(void);
 int ds_select_dst(struct sip_msg *msg, int set, int alg, int mode);
 int ds_next_dst(struct sip_msg *msg, int mode);

+ 2 - 2
modules/dispatcher/dispatcher.c

@@ -792,7 +792,7 @@ static struct mi_root* ds_mi_reload(struct mi_root* cmd_tree, void* param)
 		if (ds_load_list(dslistfile)!=0)
 			return init_mi_tree(500, MI_ERR_RELOAD, MI_ERR_RELOAD_LEN);
 	} else {
-		if(ds_load_db()<0)
+		if(ds_reload_db()<0)
 			return init_mi_tree(500, MI_ERR_RELOAD, MI_ERR_RELOAD_LEN);
 	}
 	return init_mi_tree(200, MI_OK_S, MI_OK_LEN);
@@ -956,7 +956,7 @@ static void dispatcher_rpc_reload(rpc_t* rpc, void* ctx)
 			return;
 		}
 	} else {
-		if(ds_load_db()<0) {
+		if(ds_reload_db()<0) {
 			rpc->fault(ctx, 500, "Reload Failed");
 			return;
 		}