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: http://svn.digium.com/svn/asterisk/trunk@49466 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
parent
b3ec320ba7
commit
7457dc351c
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Reference in New Issue