int capability; /* Special capability (codec) */
int novideo; /* Didn't get video in invite, don't offer */
int jointcapability; /* Supported capability at both ends (codecs ) */
+ int peercapability; /* Supported peer capability */
int prefcodec; /* Preferred codec (outbound only) */
int noncodeccapability;
int outgoing; /* Outgoing or incoming call? */
ast_rtp_get_current_formats(p->vrtp,
&vpeercapability, &vpeernoncodeccapability);
p->jointcapability = p->capability & (peercapability | vpeercapability);
- p->noncodeccapability = noncodeccapability & (peernoncodeccapability | vpeernoncodeccapability);
+ p->peercapability = (peercapability | vpeercapability);
+ p->noncodeccapability = noncodeccapability & p->peercapability;
if (debug) {
const unsigned slen=80;
ast_log(LOG_WARNING, "No way to add SDP without an RTP structure\n");
return -1;
}
- capability = p->jointcapability;
+ capability = p->capability;
if (!p->sessionid) {
p->sessionid = getpid();
p->restrictcid = user->restrictcid;
p->capability = user->capability;
p->jointcapability = user->capability;
+ if (p->peercapability)
+ p->jointcapability &= p->peercapability;
p->promiscredir = user->promiscredir;
if (user->dtmfmode) {
p->dtmfmode = user->dtmfmode;
p->pickupgroup = peer->pickupgroup;
p->capability = peer->capability;
p->jointcapability = peer->capability;
+ if (p->peercapability)
+ p->jointcapability &= p->peercapability;
p->promiscredir = peer->promiscredir;
if (peer->dtmfmode) {
p->dtmfmode = peer->dtmfmode;
ast_cli(fd, " Call-ID: %s\n", cur->callid);
ast_cli(fd, " Our Codec Capability: %d\n", cur->capability);
ast_cli(fd, " Non-Codec Capability: %d\n", cur->noncodeccapability);
+ ast_cli(fd, " Their Codec Capability: %d\n", cur->peercapability);
ast_cli(fd, " Joint Codec Capability: %d\n", cur->jointcapability);
ast_cli(fd, " Format %s\n", ast_getformatname(cur->owner ? cur->owner->nativeformats : 0) );
ast_cli(fd, " Theoretical Address: %s:%d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), cur->sa.sin_addr), ntohs(cur->sa.sin_port));
static int sip_get_codec(struct ast_channel *chan)
{
struct sip_pvt *p = chan->pvt->pvt;
- return p->capability;
+ return p->peercapability;
}
static struct ast_rtp_protocol sip_rtp = {