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

Author: Daniel-Constantin Mierla <mico...@gmail.com>
Committer: Daniel-Constantin Mierla <mico...@gmail.com>
Date: 2024-01-22T14:02:47+01:00

sl: mark request with final reply flag

- send error function checks flag and returns if set to avoid sending
  more than one final reply in case of failures

---

Modified: src/modules/sl/sl.c
Modified: src/modules/sl/sl_funcs.c

---

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

---

diff --git a/src/modules/sl/sl.c b/src/modules/sl/sl.c
index 2a8f49fe78c..83eb8bac0d3 100644
--- a/src/modules/sl/sl.c
+++ b/src/modules/sl/sl.c
@@ -335,6 +335,12 @@ static int w_send_reply(struct sip_msg *msg, char *p1, 
char *p2)
 static int ki_send_reply_error(sip_msg_t *msg)
 {
        int ret;
+
+       if(msg->msg_flags & FL_FINAL_REPLY) {
+               LM_INFO("message marked with final-reply flag\n");
+               return -2;
+       }
+
        if(sl_bind_tm != 0 && tmb.t_reply_error != NULL) {
                ret = tmb.t_reply_error(msg);
                if(ret > 0) {
diff --git a/src/modules/sl/sl_funcs.c b/src/modules/sl/sl_funcs.c
index 253686a4a77..29ef6835e22 100644
--- a/src/modules/sl/sl_funcs.c
+++ b/src/modules/sl/sl_funcs.c
@@ -337,6 +337,10 @@ int sl_reply_helper(struct sip_msg *msg, int code, char 
*reason, str *tag)
                goto error;
        }
 
+       if(code >= 200) {
+               msg->msg_flags |= FL_FINAL_REPLY;
+       }
+
        update_sl_stats(code);
        return 1;
 
@@ -408,6 +412,11 @@ int sl_reply_error(struct sip_msg *msg)
                return -2;
        }
 
+       if(msg->msg_flags & FL_FINAL_REPLY) {
+               LM_INFO("message marked with final-reply flag\n");
+               return -2;
+       }
+
        ret = err2reason_phrase(
                        prev_ser_error, &sip_error, err_buf, sizeof(err_buf), 
"SL");
        if(ret > 0) {

_______________________________________________
Kamailio (SER) - Development Mailing List
To unsubscribe send an email to sr-dev-le...@lists.kamailio.org

Reply via email to