[sr-dev] git:master:4b2d6dd7: tm: enable drop in onsend_route for tm replies

Daniel-Constantin Mierla miconda at gmail.com
Mon Sep 7 16:36:24 CEST 2015


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

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date: 2015-09-07T16:35:10+02:00

tm: enable drop in onsend_route for tm replies

- skip sending out the reply by resetting the send_socket

---

Modified: modules/tm/t_reply.c

---

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

---

diff --git a/modules/tm/t_reply.c b/modules/tm/t_reply.c
index 213e8a6..8240ced 100644
--- a/modules/tm/t_reply.c
+++ b/modules/tm/t_reply.c
@@ -1922,16 +1922,19 @@ enum rps relay_reply( struct cell *t, struct sip_msg *p_msg, int branch,
 			start_final_repl_retr(t);
 		}
 		if (likely(uas_rb->dst.send_sock)) {
-
 			if (onsend_route_enabled(SIP_REPLY) && p_msg && (p_msg != FAKED_REPLY)) {
 				if (run_onsend(p_msg, &uas_rb->dst, buf, res_len)==0){
 					su2ip_addr(&ip, &(uas_rb->dst.to));
 					LOG(L_ERR, "forward_reply: reply to %s:%d(%d) dropped"
 							" (onsend_route)\n", ip_addr2a(&ip),
 								su_getport(&(uas_rb->dst.to)), uas_rb->dst.proto);
+					/* workaround for drop - reset send_sock to skip sending out */
+					uas_rb->dst.send_sock = 0;
 				}
 			}
+		}
 
+		if (likely(uas_rb->dst.send_sock)) {
 			if (SEND_PR_BUFFER( uas_rb, buf, res_len ) >= 0){
 				if (unlikely(!totag_retr && has_tran_tmcbs(t, TMCB_RESPONSE_OUT))){
 					LOCK_REPLIES( t );
@@ -1950,8 +1953,9 @@ enum rps relay_reply( struct cell *t, struct sip_msg *p_msg, int branch,
 					UNLOCK_REPLIES( t );
 				}
 			}
-		} else if (unlikely(uas_rb->dst.send_sock == 0))
-			ERR("no resolved dst to send reply to\n");
+		} else {
+			LM_NOTICE("dst no longer set - skiped sending the reply out\n");
+		}
 		/* Call put_on_wait() only if we really send out
 		* the reply. It can happen that the reply has been already sent from
 		* failure_route  or from a callback and the timer has been already




More information about the sr-dev mailing list