mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-09 11:28:25 +00:00
Add an API call that initializes an RTP structure. We need this because chan_sip is cheeky and uses a temporary RTP structure for codec purposes, and the API calls that are used rely on the lock. (Pointed out on asterisk-dev by Andy Wang)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@48964 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -4696,10 +4696,12 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req)
|
||||
/* Initialize the temporary RTP structures we use to evaluate the offer from the peer */
|
||||
newaudiortp = alloca(ast_rtp_alloc_size());
|
||||
memset(newaudiortp, 0, ast_rtp_alloc_size());
|
||||
ast_rtp_new_init(newaudiortp);
|
||||
ast_rtp_pt_clear(newaudiortp);
|
||||
|
||||
newvideortp = alloca(ast_rtp_alloc_size());
|
||||
memset(newvideortp, 0, ast_rtp_alloc_size());
|
||||
ast_rtp_new_init(newvideortp);
|
||||
ast_rtp_pt_clear(newvideortp);
|
||||
|
||||
/* Update our last rtprx when we receive an SDP, too */
|
||||
|
||||
@@ -209,6 +209,8 @@ char *ast_rtp_get_quality(struct ast_rtp *rtp);
|
||||
/*! \brief Send an H.261 fast update request. Some devices need this rather than the XML message in SIP */
|
||||
int ast_rtcp_send_h261fur(void *data);
|
||||
|
||||
void ast_rtp_new_init(struct ast_rtp *rtp);
|
||||
|
||||
void ast_rtp_init(void);
|
||||
|
||||
int ast_rtp_reload(void);
|
||||
|
||||
24
main/rtp.c
24
main/rtp.c
@@ -1798,6 +1798,23 @@ static struct ast_rtcp *ast_rtcp_new(void)
|
||||
return rtcp;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Initialize a new RTP structure.
|
||||
*
|
||||
*/
|
||||
void ast_rtp_new_init(struct ast_rtp *rtp)
|
||||
{
|
||||
ast_mutex_init(&rtp->bridge_lock);
|
||||
|
||||
rtp->them.sin_family = AF_INET;
|
||||
rtp->us.sin_family = AF_INET;
|
||||
rtp->ssrc = ast_random();
|
||||
rtp->seqno = ast_random() & 0xffff;
|
||||
ast_set_flag(rtp, FLAG_HAS_DTMF);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
struct ast_rtp *ast_rtp_new_with_bindaddr(struct sched_context *sched, struct io_context *io, int rtcpenable, int callbackmode, struct in_addr addr)
|
||||
{
|
||||
struct ast_rtp *rtp;
|
||||
@@ -1808,14 +1825,9 @@ struct ast_rtp *ast_rtp_new_with_bindaddr(struct sched_context *sched, struct io
|
||||
if (!(rtp = ast_calloc(1, sizeof(*rtp))))
|
||||
return NULL;
|
||||
|
||||
ast_mutex_init(&rtp->bridge_lock);
|
||||
ast_rtp_new_init(rtp);
|
||||
|
||||
rtp->them.sin_family = AF_INET;
|
||||
rtp->us.sin_family = AF_INET;
|
||||
rtp->s = rtp_socket();
|
||||
rtp->ssrc = ast_random();
|
||||
rtp->seqno = ast_random() & 0xffff;
|
||||
ast_set_flag(rtp, FLAG_HAS_DTMF);
|
||||
if (rtp->s < 0) {
|
||||
free(rtp);
|
||||
ast_log(LOG_ERROR, "Unable to allocate socket: %s\n", strerror(errno));
|
||||
|
||||
Reference in New Issue
Block a user