From: Kevin P. Fleming Date: Thu, 4 Jan 2007 18:32:23 +0000 (+0000) Subject: Merged revisions 49465 via svnmerge from X-Git-Tag: 1.6.0-beta1~3^2~3563 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d6d713c84fd662c23fc1990261bf3e5079797abe;p=thirdparty%2Fasterisk.git Merged revisions 49465 via svnmerge from 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 --- diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index b315724cb4..aa55ead009 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -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; diff --git a/channels/iax2-parser.c b/channels/iax2-parser.c index 14cac4836b..eb3db17b0a 100644 --- a/channels/iax2-parser.c +++ b/channels/iax2-parser.c @@ -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; } diff --git a/channels/iax2-parser.h b/channels/iax2-parser.h index 2970c9f614..1b95d099fe 100644 --- a/channels/iax2-parser.h +++ b/channels/iax2-parser.h @@ -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