Merged revisions 374457 via svnmerge from

file:///srv/subversion/repos/asterisk/branches/10

................
  r374457 | file | 2012-10-04 12:44:38 -0500 (Thu, 04 Oct 2012) | 17 lines
  
  Fix a regression from direct media ACLs where the directrtpsetup option no longer works.
  
  A check was added for direct media ACLs that immediately forbid remote bridging if there
  was no bridged channel. This caused directrtpsetup to no longer function as it needs this
  information before bridging actually occurs.
  
  Logic has now been adjusted so if there is no bridged channel a remote bridge will still
  be attempted.
  
  (closes issue ASTERISK-20511)
  Reported by: kristoff
  
  Review: https://reviewboard.asterisk.org/r/2146/
  ........
  
  Merged revisions 374456 from http://svn.asterisk.org/svn/asterisk/branches/1.8
................


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10-digiumphones@374474 65c4cc65-6c06-0410-ace0-fbb531ad65f3
10-digiumphones
Automerge script 14 years ago
parent fa1312ae4c
commit afa876c303

@ -30489,22 +30489,22 @@ static enum ast_rtp_glue_result sip_get_rtp_peer(struct ast_channel *chan, struc
return AST_RTP_GLUE_RESULT_FORBID;
}
if (!(opp_chan = ast_bridged_channel(chan))) {
return AST_RTP_GLUE_RESULT_FORBID;
} else if (((opp_chan->tech != &sip_tech) && (opp_chan->tech != &sip_tech_info)) ||
(!(opp = opp_chan->tech_pvt))) {
if ((opp_chan = ast_bridged_channel(chan)) && (((opp_chan->tech != &sip_tech) && (opp_chan->tech != &sip_tech_info)) ||
(!(opp = opp_chan->tech_pvt)))) {
return AST_RTP_GLUE_RESULT_FORBID;
}
sip_pvt_lock(p);
while (sip_pvt_trylock(opp)) {
while (opp && sip_pvt_trylock(opp)) {
sip_pvt_unlock(p);
usleep(1);
sip_pvt_lock(p);
}
if (!(p->rtp)) {
sip_pvt_unlock(opp);
if (opp) {
sip_pvt_unlock(opp);
}
sip_pvt_unlock(p);
return AST_RTP_GLUE_RESULT_FORBID;
}
@ -30514,7 +30514,7 @@ static enum ast_rtp_glue_result sip_get_rtp_peer(struct ast_channel *chan, struc
if (ast_test_flag(&p->flags[0], SIP_DIRECT_MEDIA)) {
res = AST_RTP_GLUE_RESULT_REMOTE;
if (!apply_directmedia_ha(p, opp, "audio")) {
if (opp && !apply_directmedia_ha(p, opp, "audio")) {
res = AST_RTP_GLUE_RESULT_FORBID;
}
} else if (ast_test_flag(&p->flags[0], SIP_DIRECT_MEDIA_NAT)) {
@ -30523,7 +30523,9 @@ static enum ast_rtp_glue_result sip_get_rtp_peer(struct ast_channel *chan, struc
res = AST_RTP_GLUE_RESULT_FORBID;
}
sip_pvt_unlock(opp);
if (opp) {
sip_pvt_unlock(opp);
}
if (p->srtp) {
res = AST_RTP_GLUE_RESULT_FORBID;
@ -30545,22 +30547,22 @@ static enum ast_rtp_glue_result sip_get_vrtp_peer(struct ast_channel *chan, stru
return AST_RTP_GLUE_RESULT_FORBID;
}
if (!(opp_chan = ast_bridged_channel(chan))) {
return AST_RTP_GLUE_RESULT_FORBID;
} else if (((opp_chan->tech != &sip_tech) && (opp_chan->tech != &sip_tech_info)) ||
(!(opp = opp_chan->tech_pvt))) {
if ((opp_chan = ast_bridged_channel(chan)) && (((opp_chan->tech != &sip_tech) && (opp_chan->tech != &sip_tech_info)) ||
(!(opp = opp_chan->tech_pvt)))) {
return AST_RTP_GLUE_RESULT_FORBID;
}
sip_pvt_lock(p);
while (sip_pvt_trylock(opp)) {
while (opp && sip_pvt_trylock(opp)) {
sip_pvt_unlock(p);
usleep(1);
sip_pvt_lock(p);
}
if (!(p->vrtp)) {
sip_pvt_unlock(opp);
if (opp) {
sip_pvt_unlock(opp);
}
sip_pvt_unlock(p);
return AST_RTP_GLUE_RESULT_FORBID;
}
@ -30570,12 +30572,14 @@ static enum ast_rtp_glue_result sip_get_vrtp_peer(struct ast_channel *chan, stru
if (ast_test_flag(&p->flags[0], SIP_DIRECT_MEDIA)) {
res = AST_RTP_GLUE_RESULT_REMOTE;
if (!apply_directmedia_ha(p, opp, "video")) {
if (opp && !apply_directmedia_ha(p, opp, "video")) {
res = AST_RTP_GLUE_RESULT_FORBID;
}
}
sip_pvt_unlock(opp);
if (opp) {
sip_pvt_unlock(opp);
}
sip_pvt_unlock(p);
return res;
@ -30592,22 +30596,22 @@ static enum ast_rtp_glue_result sip_get_trtp_peer(struct ast_channel *chan, stru
return AST_RTP_GLUE_RESULT_FORBID;
}
if (!(opp_chan = ast_bridged_channel(chan))) {
return AST_RTP_GLUE_RESULT_FORBID;
} else if (((opp_chan->tech != &sip_tech) && (opp_chan->tech != &sip_tech_info)) ||
(!(opp = opp_chan->tech_pvt))) {
if ((opp_chan = ast_bridged_channel(chan)) && (((opp_chan->tech != &sip_tech) && (opp_chan->tech != &sip_tech_info)) ||
(!(opp = opp_chan->tech_pvt)))) {
return AST_RTP_GLUE_RESULT_FORBID;
}
sip_pvt_lock(p);
while (sip_pvt_trylock(opp)) {
while (opp && sip_pvt_trylock(opp)) {
sip_pvt_unlock(p);
usleep(1);
sip_pvt_lock(p);
}
if (!(p->trtp)) {
sip_pvt_unlock(opp);
if (opp) {
sip_pvt_unlock(opp);
}
sip_pvt_unlock(p);
return AST_RTP_GLUE_RESULT_FORBID;
}
@ -30617,12 +30621,14 @@ static enum ast_rtp_glue_result sip_get_trtp_peer(struct ast_channel *chan, stru
if (ast_test_flag(&p->flags[0], SIP_DIRECT_MEDIA)) {
res = AST_RTP_GLUE_RESULT_REMOTE;
if (!apply_directmedia_ha(p, opp, "text")) {
if (opp && !apply_directmedia_ha(p, opp, "text")) {
res = AST_RTP_GLUE_RESULT_FORBID;
}
}
sip_pvt_unlock(opp);
if (opp) {
sip_pvt_unlock(opp);
}
sip_pvt_unlock(p);
return res;

Loading…
Cancel
Save