[asterisk-commits] file: branch 1.8 r374456 - /branches/1.8/channels/chan_sip.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu Oct 4 12:39:25 CDT 2012
Author: file
Date: Thu Oct 4 12:39:18 2012
New Revision: 374456
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=374456
Log:
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/
Modified:
branches/1.8/channels/chan_sip.c
Modified: branches/1.8/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/channels/chan_sip.c?view=diff&rev=374456&r1=374455&r2=374456
==============================================================================
--- branches/1.8/channels/chan_sip.c (original)
+++ branches/1.8/channels/chan_sip.c Thu Oct 4 12:39:18 2012
@@ -29370,22 +29370,22 @@
return AST_RTP_GLUE_RESULT_FORBID;
}
- if (!(opp_chan = ast_bridged_channel(chan))) {
+ 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;
- } else if (((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;
}
@@ -29395,7 +29395,7 @@
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)) {
@@ -29404,7 +29404,9 @@
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;
@@ -29426,22 +29428,22 @@
return AST_RTP_GLUE_RESULT_FORBID;
}
- if (!(opp_chan = ast_bridged_channel(chan))) {
+ 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;
- } else if (((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;
}
@@ -29451,12 +29453,14 @@
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;
@@ -29473,22 +29477,22 @@
return AST_RTP_GLUE_RESULT_FORBID;
}
- if (!(opp_chan = ast_bridged_channel(chan))) {
+ 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;
- } else if (((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;
}
@@ -29498,12 +29502,14 @@
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;
More information about the asterisk-commits
mailing list