diff options
author | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-07-11 18:51:56 +0000 |
---|---|---|
committer | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-07-11 18:51:56 +0000 |
commit | 834409475ff484619842db5fe37e32e5248a85d5 (patch) | |
tree | fff4d7fd364f0da3e72ad767da9f06cf971bbd32 /channels | |
parent | 8a31baece15537dc1870a1a6d6409deda8ec863c (diff) |
Ensure that a destination callno of 0 will not match for frames that do not
start a dialog (new, lagrq, and ping).
(closes issue #12963)
Reported by: russellb
Patches:
chan_iax2_dup_new_fix4.patch uploaded by jpgrayson (license 492)
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@130169 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_iax2.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 8c2c6187e..a6f8e9824 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -7191,12 +7191,21 @@ static int socket_process(struct iax2_thread *thread) * Discussed in the following thread: * http://lists.digium.com/pipermail/asterisk-dev/2008-May/033217.html */ - if (f.frametype != AST_FRAME_IAX || - (f.subclass != IAX_COMMAND_NEW && - f.subclass != IAX_COMMAND_PING && - f.subclass != IAX_COMMAND_LAGRQ)) { - /* Get the destination call number */ - dcallno = ntohs(fh->dcallno) & ~IAX_FLAG_RETRANS; + + /* Get the destination call number */ + dcallno = ntohs(fh->dcallno) & ~IAX_FLAG_RETRANS; + + if (f.frametype == AST_FRAME_IAX && + (f.subclass == IAX_COMMAND_NEW || + f.subclass == IAX_COMMAND_PING || + f.subclass == IAX_COMMAND_LAGRQ)) { + dcallno = 0; + } else if (!dcallno) { + /* All other full-frames must have a non-zero dcallno, + * We silently drop this frame since it cannot be a + * valid match to an existing call session. + */ + return 1; } if ((f.frametype == AST_FRAME_IAX) && ((f.subclass == IAX_COMMAND_NEW) || (f.subclass == IAX_COMMAND_REGREQ) || (f.subclass == IAX_COMMAND_POKE) || (f.subclass == IAX_COMMAND_FWDOWNL) || |