[asterisk-dev] [asterisk-commits] jrose: branch 1.8 r336294 - in /branches/1.8: channels/ include/asterisk/ main/
Stefan Schmidt
sst at sil.at
Thu Dec 22 02:56:43 CST 2011
Hello,
this introduce a regression to music on hold when a channel is put on hold.
see https://issues.asterisk.org/jira/browse/ASTERISK-19095 for it.
best regards
Stefan
Am 16.09.11 21:53, schrieb SVN commits to the Asterisk project:
> Author: jrose
> Date: Fri Sep 16 14:53:40 2011
> New Revision: 336294
>
> URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=336294
> Log:
> Fix bad RTP media bridges in directmedia calls on peers separated by multiple Asterisk nodes.
>
> In a situation involving devices on separate Asterisk trunks, the remote RTP bridge would
> break when starting a call with directmedia. This patch queues a new type of control frame
> so that our RTP bridge loop can properly detect when these situations occur and check to see
> if peers need to be updated in order to send their media to the proper location.
>
> (Closes issue ASTERISK-18340)
> (Closes issue ASTERISK-17725)
> Reported by: Thomas Arimont
> Tested by: twilson, jrose
>
> Modified:
> branches/1.8/channels/chan_sip.c
> branches/1.8/include/asterisk/frame.h
> branches/1.8/main/channel.c
> branches/1.8/main/rtp_engine.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=336294&r1=336293&r2=336294
> ==============================================================================
> --- branches/1.8/channels/chan_sip.c (original)
> +++ branches/1.8/channels/chan_sip.c Fri Sep 16 14:53:40 2011
> @@ -19608,7 +19608,7 @@
> "Channel: %s\r\nChanneltype: %s\r\nUniqueid: %s\r\nSIPcallid: %s\r\nSIPfullcontact: %s\r\nPeername: %s\r\n",
> p->owner->name, "SIP", p->owner->uniqueid, p->callid, p->fullcontact, p->peername);
> } else { /* RE-invite */
> - ast_queue_frame(p->owner, &ast_null_frame);
> + ast_queue_control(p->owner, AST_CONTROL_UPDATE_RTP_PEER);
> }
> } else {
> /* It's possible we're getting an 200 OK after we've tried to disconnect
> @@ -22437,6 +22437,7 @@
> } else {
> ast_set_flag(&p->flags[1], SIP_PAGE2_DIALOG_ESTABLISHED);
> transmit_response_with_sdp(p, "200 OK", req, (reinvite ? XMIT_RELIABLE : (req->ignore ? XMIT_UNRELIABLE : XMIT_CRITICAL)), p->session_modify == TRUE ? FALSE : TRUE, FALSE);
> + ast_queue_control(p->owner, AST_CONTROL_UPDATE_RTP_PEER);
> }
> }
>
>
> Modified: branches/1.8/include/asterisk/frame.h
> URL: http://svnview.digium.com/svn/asterisk/branches/1.8/include/asterisk/frame.h?view=diff&rev=336294&r1=336293&r2=336294
> ==============================================================================
> --- branches/1.8/include/asterisk/frame.h (original)
> +++ branches/1.8/include/asterisk/frame.h Fri Sep 16 14:53:40 2011
> @@ -335,6 +335,7 @@
> AST_CONTROL_AOC = 28, /*!< Advice of Charge with encoded generic AOC payload */
> AST_CONTROL_END_OF_Q = 29, /*!< Indicate that this position was the end of the channel queue for a softhangup. */
> AST_CONTROL_INCOMPLETE = 30, /*!< Indication that the extension dialed is incomplete */
> + AST_CONTROL_UPDATE_RTP_PEER = 31, /*!< Interrupt the bridge and have it update the peer */
> };
>
> enum ast_frame_read_action {
>
> Modified: branches/1.8/main/channel.c
> URL: http://svnview.digium.com/svn/asterisk/branches/1.8/main/channel.c?view=diff&rev=336294&r1=336293&r2=336294
> ==============================================================================
> --- branches/1.8/main/channel.c (original)
> +++ branches/1.8/main/channel.c Fri Sep 16 14:53:40 2011
> @@ -4291,6 +4291,7 @@
> case AST_CONTROL_READ_ACTION:
> case AST_CONTROL_AOC:
> case AST_CONTROL_END_OF_Q:
> + case AST_CONTROL_UPDATE_RTP_PEER:
> break;
>
> case AST_CONTROL_INCOMPLETE:
> @@ -4478,6 +4479,7 @@
> case AST_CONTROL_READ_ACTION:
> case AST_CONTROL_AOC:
> case AST_CONTROL_END_OF_Q:
> + case AST_CONTROL_UPDATE_RTP_PEER:
> /* Nothing left to do for these. */
> res = 0;
> break;
>
> Modified: branches/1.8/main/rtp_engine.c
> URL: http://svnview.digium.com/svn/asterisk/branches/1.8/main/rtp_engine.c?view=diff&rev=336294&r1=336293&r2=336294
> ==============================================================================
> --- branches/1.8/main/rtp_engine.c (original)
> +++ branches/1.8/main/rtp_engine.c Fri Sep 16 14:53:40 2011
> @@ -1134,7 +1134,8 @@
> (fr->subclass.integer == AST_CONTROL_UNHOLD) ||
> (fr->subclass.integer == AST_CONTROL_VIDUPDATE) ||
> (fr->subclass.integer == AST_CONTROL_SRCUPDATE) ||
> - (fr->subclass.integer == AST_CONTROL_T38_PARAMETERS)) {
> + (fr->subclass.integer == AST_CONTROL_T38_PARAMETERS) ||
> + (fr->subclass.integer == AST_CONTROL_UPDATE_RTP_PEER)) {
> if (fr->subclass.integer == AST_CONTROL_HOLD) {
> /* If we someone went on hold we want the other side to reinvite back to us */
> if (who == c0) {
> @@ -1142,8 +1143,10 @@
> } else {
> glue0->update_peer(c0, NULL, NULL, NULL, 0, 0);
> }
> - } else if (fr->subclass.integer == AST_CONTROL_UNHOLD) {
> - /* If they went off hold they should go back to being direct */
> + } else if (fr->subclass.integer == AST_CONTROL_UNHOLD ||
> + fr->subclass.integer == AST_CONTROL_UPDATE_RTP_PEER) {
> + /* If they went off hold they should go back to being direct, or if we have
> + * been told to force a peer update, go ahead and do it. */
> if (who == c0) {
> glue1->update_peer(c1, instance0, vinstance0, tinstance0, codec0, 0);
> } else {
> @@ -1162,7 +1165,10 @@
> if (glue1->get_codec && c1->tech_pvt) {
> oldcodec1 = codec1 = glue1->get_codec(c1);
> }
> - ast_indicate_data(other, fr->subclass.integer, fr->data.ptr, fr->datalen);
> + /* Since UPDATE_BRIDGE_PEER is only used by the bridging code, don't forward it */
> + if (fr->subclass.integer != AST_CONTROL_UPDATE_RTP_PEER) {
> + ast_indicate_data(other, fr->subclass.integer, fr->data.ptr, fr->datalen);
> + }
> ast_frfree(fr);
> } else if (fr->subclass.integer == AST_CONTROL_CONNECTED_LINE) {
> if (ast_channel_connected_line_macro(who, other, fr, other == c0, 1)) {
>
>
> --
> _____________________________________________________________________
> -- Bandwidth and Colocation Provided by http://www.api-digital.com --
>
> asterisk-commits mailing list
> To UNSUBSCRIBE or update options visit:
> http://lists.digium.com/mailman/listinfo/asterisk-commits
--
Für weitere Fragen stehen wir gerne unter voip at sil.at oder
059944 - 2440 zur Verfügung.
Mit freundlichen Grüssen
--
Stefan Schmidt
Teamleiter VOIP // voip at sil.at // Tel 059944-2440//
-------------------------------------------------
SILVER SERVER GmbH // Lorenz-Mandl-Gasse 33/1 //
A-1160 Wien // Fax 059944-9000 // www.sil.at //
-------------------------------------------------
More information about the asterisk-dev
mailing list