[sr-dev] git:master:d8cc8626: dispatcher: add method to reinit state for all destinations in group

Timmo Verlaan tverlaan at gmail.com
Mon Jan 15 08:52:15 CET 2018


Module: kamailio
Branch: master
Commit: d8cc86263b85be448e1f5c1fe1372fd08d26434a
URL: https://github.com/kamailio/kamailio/commit/d8cc86263b85be448e1f5c1fe1372fd08d26434a

Author: Timmo Verlaan <tverlaan at gmail.com>
Committer: Timmo Verlaan <tverlaan at gmail.com>
Date: 2018-01-14T16:37:00+01:00

dispatcher: add method to reinit state for all destinations in group

---

Modified: src/modules/dispatcher/dispatch.c
Modified: src/modules/dispatcher/dispatch.h

---

Diff:  https://github.com/kamailio/kamailio/commit/d8cc86263b85be448e1f5c1fe1372fd08d26434a.diff
Patch: https://github.com/kamailio/kamailio/commit/d8cc86263b85be448e1f5c1fe1372fd08d26434a.patch

---

diff --git a/src/modules/dispatcher/dispatch.c b/src/modules/dispatcher/dispatch.c
index d2d9d1c806..28b305352c 100644
--- a/src/modules/dispatcher/dispatch.c
+++ b/src/modules/dispatcher/dispatch.c
@@ -2605,6 +2605,39 @@ int ds_reinit_state(int group, str *address, int state)
 	return -1;
 }
 
+/**
+ *
+ */
+int ds_reinit_state_all(int group, int state)
+{
+	int i = 0;
+	ds_set_t *idx = NULL;
+
+	if(_ds_list == NULL || _ds_list_nr <= 0) {
+		LM_ERR("the list is null\n");
+		return -1;
+	}
+
+	/* get the index of the set */
+	if(ds_get_index(group, *crt_idx, &idx) != 0) {
+		LM_ERR("destination set [%d] not found\n", group);
+		return -1;
+	}
+
+	for(i = 0; i < idx->nr; i++) {
+		int old_state = idx->dlist[i].flags;
+		/* reset the bits used for states */
+		idx->dlist[i].flags &= ~(DS_STATES_ALL);
+		/* set the new states */
+		idx->dlist[i].flags |= state;
+		if(idx->dlist[i].attrs.rweight > 0) {
+			ds_reinit_rweight_on_state_change(
+					old_state, idx->dlist[i].flags, idx);
+		}
+	}
+	return 0;
+}
+
 /**
  *
  */
diff --git a/src/modules/dispatcher/dispatch.h b/src/modules/dispatcher/dispatch.h
index 419e7dcc5d..2ebaa4b3d5 100644
--- a/src/modules/dispatcher/dispatch.h
+++ b/src/modules/dispatcher/dispatch.h
@@ -115,6 +115,7 @@ int ds_select_dst(struct sip_msg *msg, int set, int alg, int mode);
 int ds_next_dst(struct sip_msg *msg, int mode);
 int ds_update_state(sip_msg_t *msg, int group, str *address, int state);
 int ds_reinit_state(int group, str *address, int state);
+int ds_reinit_state_all(int group, int state);
 int ds_mark_dst(struct sip_msg *msg, int mode);
 int ds_print_list(FILE *fout);
 int ds_log_sets(void);




More information about the sr-dev mailing list