[Asterisk-cvs] asterisk rtp.c,1.92,1.93
markster at lists.digium.com
markster at lists.digium.com
Tue Oct 19 17:02:49 CDT 2004
Update of /usr/cvsroot/asterisk
In directory mongoose.digium.com:/tmp/cvs-serv8059
Modified Files:
rtp.c
Log Message:
Send empty frames when missing frames arrive (hope this doesn't break anything)
Index: rtp.c
===================================================================
RCS file: /usr/cvsroot/asterisk/rtp.c,v
retrieving revision 1.92
retrieving revision 1.93
diff -u -d -r1.92 -r1.93
--- rtp.c 18 Sep 2004 13:56:28 -0000 1.92
+++ rtp.c 19 Oct 2004 21:07:10 -0000 1.93
@@ -91,6 +91,7 @@
struct ast_smoother *smoother;
int *ioid;
unsigned short seqno;
+ unsigned short rxseqno;
struct sched_context *sched;
struct io_context *io;
void *data;
@@ -361,6 +362,7 @@
if ((rtp->rtcp->them.sin_addr.s_addr != sin.sin_addr.s_addr) ||
(rtp->rtcp->them.sin_port != sin.sin_port)) {
memcpy(&rtp->them, &sin, sizeof(rtp->them));
+ rtp->rxseqno = 0;
ast_log(LOG_DEBUG, "RTP NAT: Using address %s:%d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), rtp->rtcp->them.sin_addr), ntohs(rtp->rtcp->them.sin_port));
}
}
@@ -401,6 +403,7 @@
int hdrlen = 12;
int mark;
int ext;
+ int x;
char iabuf[INET_ADDRSTRLEN];
unsigned int timestamp;
unsigned int *rtpheader;
@@ -439,6 +442,7 @@
if ((rtp->them.sin_addr.s_addr != sin.sin_addr.s_addr) ||
(rtp->them.sin_port != sin.sin_port)) {
memcpy(&rtp->them, &sin, sizeof(rtp->them));
+ rtp->rxseqno = 0;
ast_log(LOG_DEBUG, "RTP NAT: Using address %s:%d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), rtp->them.sin_addr), ntohs(rtp->them.sin_port));
}
}
@@ -500,6 +504,19 @@
if (!rtp->lastrxts)
rtp->lastrxts = timestamp;
+ if (rtp->rxseqno) {
+ for (x=rtp->rxseqno + 1; x < seqno; x++) {
+ /* Queue empty frames */
+ rtp->f.mallocd = 0;
+ rtp->f.datalen = 0;
+ rtp->f.data = NULL;
+ rtp->f.offset = 0;
+ rtp->f.samples = 0;
+ rtp->f.src = "RTPMissedFrame";
+ }
+ }
+ rtp->rxseqno = seqno;
+
if (rtp->dtmfcount) {
#if 0
printf("dtmfcount was %d\n", rtp->dtmfcount);
@@ -908,6 +925,7 @@
rtp->rtcp->them.sin_port = htons(ntohs(them->sin_port) + 1);
rtp->rtcp->them.sin_addr = them->sin_addr;
}
+ rtp->rxseqno = 0;
}
void ast_rtp_get_peer(struct ast_rtp *rtp, struct sockaddr_in *them)
More information about the svn-commits
mailing list