Merged revisions 49465 via svnmerge from
authorKevin P. Fleming <kpfleming@digium.com>
Thu, 4 Jan 2007 18:32:23 +0000 (18:32 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Thu, 4 Jan 2007 18:32:23 +0000 (18:32 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r49465 | kpfleming | 2007-01-04 12:31:55 -0600 (Thu, 04 Jan 2007) | 2 lines

only do IAX2 frame caching for voice and video frames

........

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@49466 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_iax2.c
channels/iax2-parser.c
channels/iax2-parser.h

index b315724..aa55ead 100644 (file)
@@ -1137,7 +1137,7 @@ static struct chan_iax2_pvt *new_iax(struct sockaddr_in *sin, int lockpeer, cons
 
 static struct iax_frame *iaxfrdup2(struct iax_frame *fr)
 {
-       struct iax_frame *new = iax_frame_new(DIRECTION_INGRESS, fr->af.datalen);
+       struct iax_frame *new = iax_frame_new(DIRECTION_INGRESS, fr->af.datalen, fr->cacheable);
        if (new) {
                size_t mallocd_datalen = new->mallocd_datalen;
                memcpy(new, fr, sizeof(*new));
@@ -3930,7 +3930,7 @@ static int iax2_send(struct chan_iax2_pvt *pvt, struct ast_frame *f, unsigned in
        if (now) {
                fr = &frb.fr2;
        } else
-               fr = iax_frame_new(DIRECTION_OUTGRESS, ast_test_flag(pvt, IAX_ENCRYPTED) ? f->datalen + 32 : f->datalen);
+               fr = iax_frame_new(DIRECTION_OUTGRESS, ast_test_flag(pvt, IAX_ENCRYPTED) ? f->datalen + 32 : f->datalen, (f->frametype == AST_FRAME_VOICE) || (f->frametype == AST_FRAME_VIDEO));
        if (!fr) {
                ast_log(LOG_WARNING, "Out of memory\n");
                return -1;
index 14cac48..eb3db17 100644 (file)
@@ -939,7 +939,7 @@ void iax_frame_wrap(struct iax_frame *fr, struct ast_frame *f)
        }
 }
 
-struct iax_frame *iax_frame_new(int direction, int datalen)
+struct iax_frame *iax_frame_new(int direction, int datalen, unsigned int cacheable)
 {
        struct iax_frame *fr = NULL;
 
@@ -969,6 +969,7 @@ struct iax_frame *iax_frame_new(int direction, int datalen)
 
        fr->direction = direction;
        fr->retrans = -1;
+       fr->cacheable = cacheable;
        
        if (fr->direction == DIRECTION_INGRESS)
                ast_atomic_fetchadd_int(&iframes, 1);
@@ -996,7 +997,7 @@ void iax_frame_free(struct iax_frame *fr)
        ast_atomic_fetchadd_int(&frames, -1);
 
 #if !defined(LOW_MEMORY)
-       if (!(iax_frames = ast_threadstorage_get(&frame_cache, sizeof(*iax_frames)))) {
+       if (!fr->cacheable || !(iax_frames = ast_threadstorage_get(&frame_cache, sizeof(*iax_frames)))) {
                free(fr);
                return;
        }
index 2970c9f..1b95d09 100644 (file)
@@ -101,19 +101,21 @@ struct iax_frame {
        /* How long to wait before retrying */
        int retrytime;
        /* Are we received out of order?  */
-       int outoforder;
+       unsigned int outoforder:1;
        /* Have we been sent at all yet? */
-       int sentyet;
+       unsigned int sentyet:1;
+       /* Non-zero if should be sent to transfer peer */
+       unsigned int transfer:1;
+       /* Non-zero if this is the final message */
+       unsigned int final:1;
+       /* Ingress or outgres */
+       unsigned int direction:2;
+       /* Can this frame be cached? */
+       unsigned int cacheable:1;
        /* Outgoing Packet sequence number */
        int oseqno;
        /* Next expected incoming packet sequence number */
        int iseqno;
-       /* Non-zero if should be sent to transfer peer */
-       int transfer;
-       /* Non-zero if this is the final message */
-       int final;
-       /* Ingress or outgres */
-       int direction;
        /* Retransmission ID */
        int retrans;
        /* Easy linking */
@@ -153,6 +155,6 @@ int iax_get_iframes(void);
 int iax_get_oframes(void);
 
 void iax_frame_wrap(struct iax_frame *fr, struct ast_frame *f);
-struct iax_frame *iax_frame_new(int direction, int datalen);
+struct iax_frame *iax_frame_new(int direction, int datalen, unsigned int cacheable);
 void iax_frame_free(struct iax_frame *fr);
 #endif