chan_sip: Session Timers required but refused wrongly.
authorAlexander Traud <pabstraud@compuserve.com>
Mon, 3 Apr 2017 07:30:43 +0000 (09:30 +0200)
committerAlexander Traud <pabstraud@compuserve.com>
Mon, 3 Apr 2017 07:30:43 +0000 (09:30 +0200)
SIP user-agents indicate which protocol extensions are allowed in headers
like Supported and Required. Such protocol extensions are Session Timers
(RFC 4028) for example. Session Timers are supported since Mantis-10665.
Since ASTERISK-21721, not only the first but multiple Supported/Required
headers in a message are parsed. In that change, an existing variable was
re-used within a newly added do-loop. Currently, at the end of that loop,
that variable is an empty string always. Previously, that variable was used
within log output. However, the log output was not changed.

ASTERISK-26915 #close

Change-Id: I09315f31b4d78fb214bb2a9fb6c0f5e143eae990

channels/chan_sip.c

index f659a44..5419a1d 100644 (file)
@@ -25818,8 +25818,7 @@ static int handle_request_update(struct sip_pvt *p, struct sip_request *req)
  * \retval 0 ok
  * \retval -1 failure
  */
-static int handle_request_invite_st(struct sip_pvt *p, struct sip_request *req,
-               const char *required, int reinvite)
+static int handle_request_invite_st(struct sip_pvt *p, struct sip_request *req, int reinvite)
 {
        const char *p_uac_se_hdr;       /* UAC's Session-Expires header string                      */
        const char *p_uac_min_se;       /* UAC's requested Min-SE interval (char string)            */
@@ -25899,8 +25898,8 @@ static int handle_request_invite_st(struct sip_pvt *p, struct sip_request *req,
 
                case SESSION_TIMER_MODE_REFUSE:
                        if (p->reqsipoptions & SIP_OPT_TIMER) {
-                               transmit_response_with_unsupported(p, "420 Option Disabled", req, required);
-                               ast_log(LOG_WARNING, "Received SIP INVITE with supported but disabled option: %s\n", required);
+                               transmit_response_with_unsupported(p, "420 Option Disabled", req, "timer");
+                               ast_log(LOG_WARNING, "Received SIP INVITE with supported but disabled option: timer\n");
                                return -1;
                        }
                        break;
@@ -26006,7 +26005,7 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, str
         * then send a 420 with only those unsupported options listed */
        if (!ast_strlen_zero(unsupported)) {
                transmit_response_with_unsupported(p, "420 Bad extension (unsupported)", req, unsupported);
-               ast_log(LOG_WARNING, "Received SIP INVITE with unsupported required extension: required:%s unsupported:%s\n", required, unsupported);
+               ast_log(LOG_WARNING, "Received SIP INVITE with unsupported required extension: %s\n", unsupported);
                p->invitestate = INV_COMPLETED;
                if (!p->lastinvite) {
                        sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT);
@@ -26444,7 +26443,7 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, str
 
                        make_our_tag(p);
 
-                       if (handle_request_invite_st(p, req, required, reinvite)) {
+                       if (handle_request_invite_st(p, req, reinvite)) {
                                p->invitestate = INV_COMPLETED;
                                sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT);
                                res = INV_REQ_ERROR;
@@ -26486,7 +26485,7 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, str
                if (!req->ignore)
                        reinvite = 1;
 
-               if (handle_request_invite_st(p, req, required, reinvite)) {
+               if (handle_request_invite_st(p, req, reinvite)) {
                        p->invitestate = INV_COMPLETED;
                        if (!p->lastinvite) {
                                sip_scheddestroy(p, DEFAULT_TRANS_TIMEOUT);