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

Author: Daniel-Constantin Mierla <mico...@gmail.com>
Committer: Daniel-Constantin Mierla <mico...@gmail.com>
Date:   Thu Feb 21 11:25:39 2013 +0100

tm: add Max-Forwards header to local requests if not given as parameter

- add the header to local generated CANCEL and ACK
- based on a patch by Morten Tryfoss

---

 modules/tm/t_msgbuilder.c |    8 +++++++-
 modules/tm/t_msgbuilder.h |    3 +++
 2 files changed, 10 insertions(+), 1 deletions(-)

diff --git a/modules/tm/t_msgbuilder.c b/modules/tm/t_msgbuilder.c
index 340f99a..ffdcb7b 100644
--- a/modules/tm/t_msgbuilder.c
+++ b/modules/tm/t_msgbuilder.c
@@ -152,7 +152,7 @@ char *build_local(struct cell *Trans,unsigned int branch,
        *len+= via_len;
        /*headers*/
        *len+=Trans->from.len+Trans->callid.len+to->len+
-               +Trans->cseq_n.len+1+method_len+CRLF_LEN; 
+               +Trans->cseq_n.len+1+method_len+CRLF_LEN+MAXFWD_HEADER_LEN; 
 
 
        /* copy'n'paste Route headers */
@@ -226,6 +226,7 @@ char *build_local(struct cell *Trans,unsigned int branch,
        append_str( p, Trans->cseq_n.s, Trans->cseq_n.len );
        append_str( p, " ", 1 );
        append_str( p, method, method_len );
+       append_str( p, MAXFWD_HEADER, MAXFWD_HEADER_LEN );
        append_str( p, CRLF, CRLF_LEN );
 
        if (!is_local(Trans))  {
@@ -1516,6 +1517,7 @@ char* build_uac_req(str* method, str* headers, str* body, 
dlg_t* dialog, int bra
        *len += CALLID_LEN + dialog->id.call_id.len + CRLF_LEN;                 
                     /* Call-ID */
        *len += CSEQ_LEN + cseq.len + 1 + method->len + CRLF_LEN;               
                     /* CSeq */
        *len += calculate_routeset_length(dialog);                              
                     /* Route set */
+       *len += MAXFWD_HEADER_LEN;                                              
                     /* Max-forwards */ 
        *len += CONTENT_LENGTH_LEN + content_length.len + CRLF_LEN; /* Content-
                                                                                
                                                         Length */
        *len += (server_signature ? (user_agent_hdr.len + CRLF_LEN) : 0);       
                         /* Signature */
@@ -1539,6 +1541,10 @@ char* build_uac_req(str* method, str* headers, str* 
body, dlg_t* dialog, int bra
        w = print_callid(w, dialog, t);                       /* Call-ID */
        w = print_routeset(w, dialog);                        /* Route set */
 
+       if(headers==NULL || headers->len<15
+                       || strnstr(headers->s, "Max-Forwards:", 
headers->len)==NULL)
+               memapp(w, MAXFWD_HEADER, MAXFWD_HEADER_LEN);      /* 
Max-forwards */
+
      /* Content-Length */
        memapp(w, CONTENT_LENGTH, CONTENT_LENGTH_LEN);
        memapp(w, content_length.s, content_length.len);
diff --git a/modules/tm/t_msgbuilder.h b/modules/tm/t_msgbuilder.h
index f090528..7694fda 100644
--- a/modules/tm/t_msgbuilder.h
+++ b/modules/tm/t_msgbuilder.h
@@ -52,6 +52,9 @@
 #define FROMTAG_LEN (sizeof(FROMTAG)-1)
 #define TOTAG ";tag="
 #define TOTAG_LEN (sizeof(TOTAG)-1)
+#define MAXFWD_VALUE "70"
+#define MAXFWD_HEADER "Max-Forwards: " MAXFWD_VALUE CRLF
+#define MAXFWD_HEADER_LEN (sizeof(MAXFWD_HEADER) - 1)
 
 
 char *build_local(struct cell *Trans, unsigned int branch,


_______________________________________________
sr-dev mailing list
sr-dev@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to