[asterisk-commits] oej: trunk r48003 - /trunk/main/rtp.c
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Sat Nov 25 02:45:58 MST 2006
Author: oej
Date: Sat Nov 25 03:45:57 2006
New Revision: 48003
URL: http://svn.digium.com/view/asterisk?view=rev&rev=48003
Log:
- 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.
Modified:
trunk/main/rtp.c
Modified: trunk/main/rtp.c
URL: http://svn.digium.com/view/asterisk/trunk/main/rtp.c?view=diff&rev=48003&r1=48002&r2=48003
==============================================================================
--- trunk/main/rtp.c (original)
+++ trunk/main/rtp.c Sat Nov 25 03:45:57 2006
@@ -2474,6 +2474,7 @@
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 @@
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 @@
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 @@
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;
More information about the asterisk-commits
mailing list