chan_sip: Set up calls without audio (text+video), again.
The previous commit6d980de
fixed this issue in the core of Asterisk. With that, each channel technology can be used without audio theoretically. Practically, the channel-technology driver chan_sip turned out to have an invalid check preventing that. chan_sip tested whether there is at least one audio format. However, chan_sip has to test whether there is at least one format. More cannot be tested while requesting chan_sip because only the [general] capabilities but not the [peer] caps are known yet. And the [peer] caps might not be a subset or show any intersection with the [general] caps. This change here fixes this. The original commitf04d5fb
, thirteen years ago, contained a software bug as it passed ANY audio capability to the channel-technology driver. Instead, it should have passed NO audio format. Therefore, this addressed issue here was not noticed in Asterisk 1.6.x and Asterisk 1.8. Then, Asterisk 10 changed that from ANY to NO, but nobody reported since then. ASTERISK-29265 Change-Id: Ic16a3bf13cd1b5c4fc4041ed74961177d96b600f
This commit is contained in:
parent
55891227e8
commit
620d9f4782
|
@ -30796,7 +30796,6 @@ static struct ast_channel *sip_request_call(const char *type, struct ast_format_
|
||||||
char *ext = NULL, *host;
|
char *ext = NULL, *host;
|
||||||
char tmp[256];
|
char tmp[256];
|
||||||
struct ast_str *codec_buf = ast_str_alloca(AST_FORMAT_CAP_NAMES_LEN);
|
struct ast_str *codec_buf = ast_str_alloca(AST_FORMAT_CAP_NAMES_LEN);
|
||||||
struct ast_str *cap_buf = ast_str_alloca(AST_FORMAT_CAP_NAMES_LEN);
|
|
||||||
char *dnid;
|
char *dnid;
|
||||||
char *secret = NULL;
|
char *secret = NULL;
|
||||||
char *md5secret = NULL;
|
char *md5secret = NULL;
|
||||||
|
@ -30812,17 +30811,8 @@ static struct ast_channel *sip_request_call(const char *type, struct ast_format_
|
||||||
AST_APP_ARG(remote_address);
|
AST_APP_ARG(remote_address);
|
||||||
);
|
);
|
||||||
|
|
||||||
/* mask request with some set of allowed formats.
|
if (ast_format_cap_empty(cap)) {
|
||||||
* XXX this needs to be fixed.
|
ast_log(LOG_NOTICE, "Asked to get a channel without offering any format\n");
|
||||||
* The original code uses AST_FORMAT_AUDIO_MASK, but it is
|
|
||||||
* unclear what to use here. We have global_capabilities, which is
|
|
||||||
* configured from sip.conf, and sip_tech.capabilities, which is
|
|
||||||
* hardwired to all audio formats.
|
|
||||||
*/
|
|
||||||
if (!(ast_format_cap_has_type(cap, AST_MEDIA_TYPE_AUDIO))) {
|
|
||||||
ast_log(LOG_NOTICE, "Asked to get a channel of unsupported format %s while capability is %s\n",
|
|
||||||
ast_format_cap_get_names(cap, &codec_buf),
|
|
||||||
ast_format_cap_get_names(sip_cfg.caps, &cap_buf));
|
|
||||||
*cause = AST_CAUSE_BEARERCAPABILITY_NOTAVAIL; /* Can't find codec to connect to host */
|
*cause = AST_CAUSE_BEARERCAPABILITY_NOTAVAIL; /* Can't find codec to connect to host */
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue