- Adding comment on suspicious memory allocation. Seems like it's never freed, but...
authorOlle Johansson <oej@edvina.net>
Sat, 25 Nov 2006 09:45:57 +0000 (09:45 +0000)
committerOlle Johansson <oej@edvina.net>
Sat, 25 Nov 2006 09:45:57 +0000 (09:45 +0000)
  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: https://origsvn.digium.com/svn/asterisk/trunk@48003 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/rtp.c

index 5b63c00..4cf5978 100644 (file)
@@ -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;