From: <bc...@us...> - 2007-07-30 18:56:43
|
Revision: 1077 http://iaxclient.svn.sourceforge.net/iaxclient/?rev=1077&view=rev Author: bcholew Date: 2007-07-30 11:56:46 -0700 (Mon, 30 Jul 2007) Log Message: ----------- Send only one VNAK for any given sequence number - to help prevent VNAK storms. Modified Paths: -------------- trunk/lib/libiax2/src/iax.c Modified: trunk/lib/libiax2/src/iax.c =================================================================== --- trunk/lib/libiax2/src/iax.c 2007-07-25 14:39:25 UTC (rev 1076) +++ trunk/lib/libiax2/src/iax.c 2007-07-30 18:56:46 UTC (rev 1077) @@ -192,6 +192,8 @@ unsigned char iseqno; /* Last acknowledged sequence number */ unsigned char aseqno; + /* Last sequence number we VNAKd */ + unsigned char lastvnak; /* Time value that we base our transmission on */ struct timeval offset; /* Time value we base our delivery on */ @@ -473,6 +475,7 @@ if (callnums > 32767) callnums = 1; s->peercallno = 0; + s->lastvnak = -1; s->transferpeer = 0; /* for attended transfer */ s->next = sessions; s->sendto = iax_sendto; @@ -1617,6 +1620,13 @@ static int iax2_vnak(struct iax_session *session) { + /* send vnak just once for a given sequence number */ + if (session->lastvnak == session->iseqno) + { + return 0; + } + + session->lastvnak = session->iseqno; return send_command_immediate(session, AST_FRAME_IAX, IAX_COMMAND_VNAK, 0, NULL, 0, session->iseqno); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |