Module: sems
Branch: 1.4
Commit: 4e023507b6207ff84dcf30ed1c4d5c4a3f3825b1
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=4e023507b6207ff84dcf30ed1c4d5c4a3f3825b1

Author: Stefan Sayer <[email protected]>
Committer: Stefan Sayer <[email protected]>
Date:   Wed Dec  7 18:20:10 2011 +0100

add Retry-After: 0 to NOTIFY 500 response on low CSeq

this may prevent some peers to drop the subscription dialog usage
when receiving a 500 reply to NOTIFY

for more details see 
https://lists.cs.columbia.edu/pipermail/sip-implementors/2011-November/027955.html

---

 core/AmSipDialog.cpp |   11 +++++++++--
 core/AmSipHeaders.h  |    1 +
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/core/AmSipDialog.cpp b/core/AmSipDialog.cpp
index 935a1f5..896868b 100644
--- a/core/AmSipDialog.cpp
+++ b/core/AmSipDialog.cpp
@@ -112,7 +112,14 @@ void AmSipDialog::updateStatus(const AmSipRequest& req)
   if (r_cseq_i && req.cseq <= r_cseq){
     INFO("remote cseq lower than previous ones - refusing request\n");
     // see 12.2.2
-    reply_error(req, 500, SIP_REPLY_SERVER_INTERNAL_ERROR, "",
+    string hdrs;
+    if (req.method == "NOTIFY") {
+      // clever trick to not break subscription dialog usage
+      // for implementations which follow 3265 instead of 5057
+      hdrs = SIP_HDR_COLSP(SIP_HDR_RETRY_AFTER)  "0"  CRLF;
+    }
+
+    reply_error(req, 500, SIP_REPLY_SERVER_INTERNAL_ERROR, hdrs,
                next_hop_for_replies ? next_hop_ip : "",
                next_hop_for_replies ? next_hop_port : 0);
     return;
@@ -121,7 +128,7 @@ void AmSipDialog::updateStatus(const AmSipRequest& req)
   if (req.method == "INVITE") {
     if (pending_invites) {
       reply_error(req,500, SIP_REPLY_SERVER_INTERNAL_ERROR,
-                 "Retry-After: " + int2str(get_random() % 10) + CRLF,
+                 SIP_HDR_COLSP(SIP_HDR_RETRY_AFTER) + int2str(get_random() % 
10) + CRLF,
                  next_hop_for_replies ? next_hop_ip : "",
                  next_hop_for_replies ? next_hop_port : 0);
       return;
diff --git a/core/AmSipHeaders.h b/core/AmSipHeaders.h
index 00b1470..39e5974 100644
--- a/core/AmSipHeaders.h
+++ b/core/AmSipHeaders.h
@@ -34,6 +34,7 @@
 #define SIP_HDR_PROXY_AUTHENTICATE "Proxy-Authenticate"
 #define SIP_HDR_WWW_AUTHENTICATE "WWW-Authenticate"
 #define SIP_HDR_ALLOW            "Allow"
+#define SIP_HDR_RETRY_AFTER      "Retry-After"
 
 #define SIP_HDR_COL(_hdr)       _hdr ":"
 #define SIP_HDR_COLSP(_hdr)     SIP_HDR_COL(_hdr) " "

_______________________________________________
Semsdev mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/semsdev

Reply via email to