o Juha Heinanen on 10/01/2013 02:23 PM:
> when doing more testing, i noticed that when sems sbc is sending session
> timer update request, it does not include refresher in Session-Expires
the reasoning behind this is that end-to-end refreshes (through the
SBC) are preferred over refreshes from within the middle, where e.g.
re-Invites from the other side could be blocked while the Invite
transaction is in progress, or a changed SDP may lead to another
re-invite on the other side.

> in this particular test, sems used refresher=uas in its 200 ok response
> to the initial invite, i.e., sems had decided to be the refresher.  so
it did this because the other side didn't put refresher at all

> when sems sends update, it is recommended that also there sems writes
> ;refresher=uas.
if you are the refresher, and you are doing the refresh (as uac) a you
can't require the other side to be the refresher (put refresher=uas),
therefore sems doesn't put refresher, and hopes the other side takes
over the refresher role.

> 
> any pointers on how to fix this?  i assume that somewhere sbc keeps
> track which role it has and it should be pretty easy to add the param
> based on than when it sends the update.
i just found a patch in that directory, which you could try, but I
won't include this in mainline because of the reasons stated above.

> this came up, because it looks like a commercial sip phone gets confused
> if refresher param is missing.
then the phone is broken.

Note that prior to e487aa7e5 there was a bug which resulted in sems
not understanding supported and therefore act incorrectly in some cases.

Stefan

diff --git a/core/plug-in/session_timer/SessionTimer.cpp b/core/plug-in/session_timer/SessionTimer.cpp
index 9869ebe..3563316 100644
--- a/core/plug-in/session_timer/SessionTimer.cpp
+++ b/core/plug-in/session_timer/SessionTimer.cpp
@@ -181,7 +181,8 @@ bool SessionTimer::onSendRequest(const string& method,
 
   removeHeader(hdrs, SIP_HDR_SESSION_EXPIRES);
   removeHeader(hdrs, SIP_HDR_MIN_SE);
-  hdrs += SIP_HDR_COLSP(SIP_HDR_SESSION_EXPIRES) + int2str(session_interval) + CRLF
+  hdrs += SIP_HDR_COLSP(SIP_HDR_SESSION_EXPIRES) + int2str(session_interval) +
+    ";refresher=uac" CRLF
     + SIP_HDR_COLSP(SIP_HDR_MIN_SE) + int2str(min_se) + CRLF;
 
   return false;
_______________________________________________
Semsdev mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/semsdev

Reply via email to