[asterisk-bugs] [JIRA] (ASTERISK-27151) chan_sip.c/add_sdp() systematically adding m=video line

Asterisk Team (JIRA) noreply at issues.asterisk.org
Mon Jul 24 02:28:57 CDT 2017


    [ https://issues.asterisk.org/jira/browse/ASTERISK-27151?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=237785#comment-237785 ] 

Asterisk Team commented on ASTERISK-27151:
------------------------------------------

Thanks for creating a report! The issue has entered the triage process. That means the issue will wait in this status until a Bug Marshal has an opportunity to review the issue. Once the issue has been reviewed you will receive comments regarding the next steps towards resolution.

A good first step is for you to review the [Asterisk Issue Guidelines|https://wiki.asterisk.org/wiki/display/AST/Asterisk+Issue+Guidelines] if you haven't already. The guidelines detail what is expected from an Asterisk issue report.

Then, if you are submitting a patch, please review the [Patch Contribution Process|https://wiki.asterisk.org/wiki/display/AST/Patch+Contribution+Process].

> chan_sip.c/add_sdp() systematically adding m=video line
> -------------------------------------------------------
>
>                 Key: ASTERISK-27151
>                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-27151
>             Project: Asterisk
>          Issue Type: Bug
>      Security Level: None
>            Reporter: TLP Research
>
> The following code in function add_sdp() in chan_sip.c is buggy:
> /* Check if we need video in this call */
> if ((ast_format_cap_has_type(tmpcap, AST_MEDIA_TYPE_VIDEO)) && !p->novideo) {
> 	if (doing_directmedia && !ast_format_cap_has_type(tmpcap, AST_MEDIA_TYPE_VIDEO)) {
> 		ast_debug(2, "This call needs video offers, but caller probably did not offer it!\n");
> 	} else if (p->vrtp) {
> 		needvideo = TRUE;
> 		ast_debug(2, "This call needs video offers!\n");
> 	} else {
> 		ast_debug(2, "This call needs video offers, but there's no video support enabled!\n");
> 	}
> }
> The reason is that when the following condition is evaluated:
> if (doing_directmedia && !ast_format_cap_has_type(tmpcap, AST_MEDIA_TYPE_VIDEO))
> the value returned by:
> ast_format_cap_has_type(tmpcap, AST_MEDIA_TYPE_VIDEO)
> must necessarily be true (other we would have skipped the block) causing the condition to be always false.
> This has the effect of falling through the "else if" block systematically and setting needvideo to true.
> This means that even when no video is offered by the caller (i.e. no "m=video" in the SDP of the INVITE message sent from caller to Asterisk), the needvideo will still be set to true. One side effect of this bug is causing the "m=video" line to be appended later on in the code of the add_sdp() function, even when no such line is needed.
> Since add_sdp() is called from many functions, specifically transmit_invite() and transmit_reinvite_with_sdp(), one higher-level effect of this bug is causing the callee to enable video even when the caller requested only audio, making it impossible to issue an audio-only call if videosupport is set to yes in sip.conf and the callee supports video. 
> Our suggested fix (which we didn't test yet) is to replace:
> if (doing_directmedia && !ast_format_cap_has_type(tmpcap, AST_MEDIA_TYPE_VIDEO))
> with:
> if (doing_directmedia && !ast_format_cap_has_type(p->caps, AST_MEDIA_TYPE_VIDEO))
> Thank you



--
This message was sent by Atlassian JIRA
(v6.2#6252)



More information about the asterisk-bugs mailing list