[asterisk-bugs] [JIRA] (ASTERISK-21976) Set more than one codec in dialplan execution using SIP_CODEC (adapted chan_sip:try_suggested_codec)
Dennis Guse (JIRA)
noreply at issues.asterisk.org
Fri Jun 28 08:05:06 CDT 2013
Dennis Guse created ASTERISK-21976:
--------------------------------------
Summary: Set more than one codec in dialplan execution using SIP_CODEC (adapted chan_sip:try_suggested_codec)
Key: ASTERISK-21976
URL: https://issues.asterisk.org/jira/browse/ASTERISK-21976
Project: Asterisk
Issue Type: Improvement
Security Level: None
Components: Channels/chan_sip/CodecHandling
Affects Versions: 11.4.0
Environment: FreeBSD (AMD64) 9.1 using Asterisk provided via ports (at the moment 11.4)
Reporter: Dennis Guse
Severity: Minor
For video calls, we would like to set the codecs in the dialplan using SIP_CODEC. However, if SIP_CODEC is set, all codecs except the ONE set are disallowed and thus either audio or video is available.
Attached is a patch for 11.4 that allows SIP_CODEC to contain a list of codecs , e.g. "gsm,h264".
Here is the code (chan_sip.c):
static void try_suggested_sip_codec(struct sip_pvt *p)
{
struct ast_format fmt;
const char *codecList;
char *codecListCopy;
struct ast_format_cap *jointcapsCopy;
char *codec;
int firstCodec = 1;
char *strtok_ptr;
ast_format_clear(&fmt);
if (p->outgoing_call) {
codecList = pbx_builtin_getvar_helper(p->owner, "SIP_CODEC_OUTBOUND");
} else if (!(codecList = pbx_builtin_getvar_helper(p->owner, "SIP_CODEC_INBOUND"))) {
codecList = pbx_builtin_getvar_helper(p->owner, "SIP_CODEC");
}
if (!codecList)
return;
codecListCopy = ast_strdupa(codecList);
jointcapsCopy = ast_format_cap_dup(p->jointcaps);
for (codec = strtok_r(codecListCopy, ",", &strtok_ptr); codec; codec = strtok_r(NULL, ",", &strtok_ptr)) {
ast_getformatbyname(ast_strip(codec), &fmt);
if (fmt.id) {
if (ast_format_cap_iscompatible(jointcapsCopy, &fmt)) {
if (firstCodec) {
ast_log(LOG_NOTICE, "Set codec to '%s' for this call because of ${SIP_CODEC} variable\n", codec);
ast_format_cap_set(p->jointcaps, &fmt);
ast_format_cap_set(p->caps, &fmt);
firstCodec = 0;
} else {
ast_log(LOG_NOTICE, "Add codec to '%s' for this call because of ${SIP_CODEC} variable\n", codec);
ast_format_cap_add(p->jointcaps, &fmt);
ast_format_cap_add(p->caps, &fmt);
}
} else
ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because it is not shared by both ends: %s\n", codec);
} else
ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because of unrecognized/not configured codec (check allow/disallow in sip.conf): %s\n", codec);
}
ast_format_cap_destroy(jointcapsCopy);
return;
}
Do you have any feedback?
Authors: Dennis Guse (dennis.guse at qu.tu-berlin.de) und Frank Haase (fra.haase at googlemail.com).
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.asterisk.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the asterisk-bugs
mailing list