mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-01 11:32:25 +00:00
Merged revisions 336307 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/10 ................ r336307 | jrose | 2011-09-16 16:09:20 -0500 (Fri, 16 Sep 2011) | 20 lines Merged revisions 336294 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r336294 | jrose | 2011-09-16 14:53:40 -0500 (Fri, 16 Sep 2011) | 13 lines 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) Reported by: Thomas Arimont (Closes issue ASTERISK-17725) Reported by: kwk Tested by: twilson, jrose ........ ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@336311 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -20141,7 +20141,7 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest
|
||||
"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
|
||||
@@ -23024,6 +23024,7 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int
|
||||
} 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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29286,7 +29287,7 @@ static int sip_set_rtp_peer(struct ast_channel *chan, struct ast_rtp_instance *i
|
||||
memset(&p->tredirip, 0, sizeof(p->tredirip));
|
||||
changed = 1;
|
||||
}
|
||||
if (cap && !(ast_format_cap_is_empty(cap) && !(ast_format_cap_identical(p->redircaps, cap)))) {
|
||||
if (cap && !ast_format_cap_is_empty(cap) && !ast_format_cap_identical(p->redircaps, cap)) {
|
||||
ast_format_cap_copy(p->redircaps, cap);
|
||||
changed = 1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user