From 7e46c7062215564149613e84cc1fd2f7a9dbda78 Mon Sep 17 00:00:00 2001 From: oej Date: Sat, 25 Nov 2006 09:45:57 +0000 Subject: - Adding comment on suspicious memory allocation. Seems like it's never freed, but I don't have a clear understanding of the frame allocation/deallocation, so I just mark this for investigation. (Reported by Ed Guy). We're trying to see if a free() hurts... - Doxygen comments on p2p rtp bridge stuff. I am a bit worried about shortcutting rtcp this way, but will need feedback from rtcp gurus. This should work for video calls too, and possibly UDPTL. git-svn-id: http://svn.digium.com/svn/asterisk/trunk@48003 f38db490-d61c-443f-a65b-d21fe96a405b --- main/rtp.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'main/rtp.c') diff --git a/main/rtp.c b/main/rtp.c index 5b63c005c..4cf59780a 100644 --- a/main/rtp.c +++ b/main/rtp.c @@ -2474,6 +2474,7 @@ int ast_rtp_sendcng(struct ast_rtp *rtp, int level) return 0; } +/*! \brief Write RTP packet with audio or video media frames into UDP packet */ static int ast_rtp_raw_write(struct ast_rtp *rtp, struct ast_frame *f, int codec) { unsigned char *rtpheader; @@ -2659,11 +2660,10 @@ int ast_rtp_write(struct ast_rtp *rtp, struct ast_frame *_f) ast_rtp_raw_write(rtp, f, codec); } else { /* Don't buffer outgoing frames; send them one-per-packet: */ - if (_f->offset < hdrlen) { - f = ast_frdup(_f); - } else { + if (_f->offset < hdrlen) + f = ast_frdup(_f); /*! \bug XXX this might never be free'd. Why do we do this? */ + else f = _f; - } ast_rtp_raw_write(rtp, f, codec); } @@ -2850,7 +2850,7 @@ static enum ast_bridge_result bridge_native_loop(struct ast_channel *c0, struct return AST_BRIDGE_FAILED; } -/*! \brief P2P RTP/RTCP Callback */ +/*! \brief peer 2 peer RTP mode RTP/RTCP Callback */ static int p2p_rtp_callback(int *id, int fd, short events, void *cbdata) { int res = 0, hdrlen = 12; @@ -2951,7 +2951,12 @@ static int p2p_callback_disable(struct ast_channel *chan, struct ast_rtp *rtp, i return 0; } -/*! \brief Bridge loop for partial native bridge (packet2packet) */ +/*! \brief Bridge loop for partial native bridge (packet2packet) + + In p2p mode, Asterisk is a very basic RTP proxy, just forwarding whatever + rtp/rtcp we get in to the channel. + \note this currently only works for Audio +*/ static enum ast_bridge_result bridge_p2p_loop(struct ast_channel *c0, struct ast_channel *c1, struct ast_rtp *p0, struct ast_rtp *p1, int timeoutms, int flags, struct ast_frame **fo, struct ast_channel **rc, void *pvt0, void *pvt1) { struct ast_frame *fr = NULL; -- cgit v1.2.3