[sr-dev] git:master: core: send_flags support in the onsend_route

Andrei Pelinescu-Onciul andrei at iptel.org
Fri Sep 18 21:06:34 CEST 2009


Module: sip-router
Branch: master
Commit: 8ed9165103cfe93172ee18904a2f210674edfdce
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=8ed9165103cfe93172ee18904a2f210674edfdce

Author: Andrei Pelinescu-Onciul <andrei at iptel.org>
Committer: Andrei Pelinescu-Onciul <andrei at iptel.org>
Date:   Fri Sep 18 20:58:20 2009 +0200

core: send_flags support in the onsend_route

send_flags can now be set also in the onsend_route
(via set_forward_no_connect() or set_forward_close()).

E.g.:
onsend_route{
	if (dsp_ip!=10.0.0.0/8)
		set_forward_no_connect(); # don't open new connection,
		                          # only reuse
}

---

 cfg.y    |    4 ++++
 onsend.h |   12 ++++++++++++
 2 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/cfg.y b/cfg.y
index af5335c..528a70a 100644
--- a/cfg.y
+++ b/cfg.y
@@ -2053,6 +2053,10 @@ fcmd:
 				case ISFLAGSET_T:
 				case IF_T:
 				case MODULE_T:
+				case SET_FWD_NO_CONNECT_T:
+				case SET_RPL_NO_CONNECT_T:
+				case SET_FWD_CLOSE_T:
+				case SET_RPL_CLOSE_T:
 					$$=$1;
 					break;
 				default:
diff --git a/onsend.h b/onsend.h
index 433100d..deec874 100644
--- a/onsend.h
+++ b/onsend.h
@@ -55,6 +55,7 @@ extern struct onsend_info* p_onsend;
 
 /*
  * returns: 0 drop the message, >= ok, <0 error (but forward the message)
+ * it also migh change dst->send_flags!
  * WARNING: buf must be 0 terminated (to allow regex matches on it) */
 static inline int run_onsend(struct sip_msg* orig_msg, struct dest_info* dst,
 								char* buf, int len)
@@ -63,6 +64,8 @@ static inline int run_onsend(struct sip_msg* orig_msg, struct dest_info* dst,
 	int ret;
 	struct run_act_ctx ra_ctx;
 	int backup_route_type;
+	snd_flags_t fwd_snd_flags_bak;
+	snd_flags_t rpl_snd_flags_bak;
 	
 	ret=1;
 	if (onsend_rt.rlist[DEFAULT_RT]){
@@ -74,8 +77,17 @@ static inline int run_onsend(struct sip_msg* orig_msg, struct dest_info* dst,
 		backup_route_type=get_route_type();
 		set_route_type(ONSEND_ROUTE);
 		if (exec_pre_script_cb(orig_msg, ONSEND_CB_TYPE)>0) {
+			/* backup orig_msg send flags */
+			fwd_snd_flags_bak=orig_msg->fwd_send_flags;
+			rpl_snd_flags_bak=orig_msg->rpl_send_flags;
+			orig_msg->fwd_send_flags=dst->send_flags; /* intial value */
 			init_run_actions_ctx(&ra_ctx);
 			ret=run_actions(&ra_ctx, onsend_rt.rlist[DEFAULT_RT], orig_msg);
+			/* update dst send_flags */
+			dst->send_flags=orig_msg->fwd_send_flags;
+			/* restore orig_msg flags */
+			orig_msg->fwd_send_flags=fwd_snd_flags_bak;
+			orig_msg->rpl_send_flags=rpl_snd_flags_bak;
 			exec_post_script_cb(orig_msg, ONSEND_CB_TYPE);
 		} else {
 			ret=0; /* drop the message */




More information about the sr-dev mailing list