Index: channels/chan_iax2.c =================================================================== --- channels/chan_iax2.c (revision 126673) +++ channels/chan_iax2.c (working copy) @@ -1449,7 +1449,7 @@ (cur->addr.sin_port == sin->sin_port)) { /* This is the main host */ if ( (cur->peercallno == 0 || cur->peercallno == callno) && - (check_dcallno ? dcallno == cur->callno : 1) ) { + (!check_dcallno || dcallno == cur->callno) ) { /* That's us. Be sure we keep track of the peer call number */ return 1; } @@ -7170,7 +7170,11 @@ } if (!fr->callno) { - int check_dcallno = 0; + int check_dcallno = (ntohs(mh->callno) & IAX_FLAG_FULL) && + (f.frametype != AST_FRAME_IAX || + f.subclass == IAX_COMMAND_PING || + f.subclass == IAX_COMMAND_LAGRQ || + f.subclass == IAX_COMMAND_NEW); /* * We enforce accurate destination call numbers for all full frames except @@ -7184,10 +7188,6 @@ * http://lists.digium.com/pipermail/asterisk-dev/2008-May/033217.html */ - if (ntohs(mh->callno) & IAX_FLAG_FULL) { - check_dcallno = f.frametype == AST_FRAME_IAX ? (f.subclass != IAX_COMMAND_PING && f.subclass != IAX_COMMAND_LAGRQ) : 1; - } - fr->callno = find_callno(ntohs(mh->callno) & ~IAX_FLAG_FULL, dcallno, &sin, new, fd, check_dcallno); }