[asterisk-commits] russell: trunk r119010 - in /trunk: ./ channels/chan_iax2.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Thu May 29 13:54:12 CDT 2008
Author: russell
Date: Thu May 29 13:54:11 2008
New Revision: 119010
URL: http://svn.digium.com/view/asterisk?view=rev&rev=119010
Log:
Merged revisions 119009 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
................
r119009 | russell | 2008-05-29 13:49:12 -0500 (Thu, 29 May 2008) | 16 lines
Merged revisions 119008 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.2
........
r119008 | russell | 2008-05-29 13:45:21 -0500 (Thu, 29 May 2008) | 7 lines
Merge changes from team/russell/iax2-another-fix-to-the-fix
As described in the following post to the asterisk-dev mailing list, only
enforce destination call numbers when processing an ACK.
http://lists.digium.com/pipermail/asterisk-dev/2008-May/033217.html
(closes issue #12631)
........
................
Modified:
trunk/ (props changed)
trunk/channels/chan_iax2.c
Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.
Modified: trunk/channels/chan_iax2.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_iax2.c?view=diff&rev=119010&r1=119009&r2=119010
==============================================================================
--- trunk/channels/chan_iax2.c (original)
+++ trunk/channels/chan_iax2.c Thu May 29 13:54:11 2008
@@ -1474,13 +1474,13 @@
#define NEW_ALLOW 1
#define NEW_FORCE 2
-static int match(struct sockaddr_in *sin, unsigned short callno, unsigned short dcallno, const struct chan_iax2_pvt *cur, int full_frame)
+static int match(struct sockaddr_in *sin, unsigned short callno, unsigned short dcallno, const struct chan_iax2_pvt *cur, int check_dcallno)
{
if ((cur->addr.sin_addr.s_addr == sin->sin_addr.s_addr) &&
(cur->addr.sin_port == sin->sin_port)) {
/* This is the main host */
if ( (cur->peercallno == 0 || cur->peercallno == callno) &&
- (full_frame ? dcallno == cur->callno : 1) ) {
+ (check_dcallno ? dcallno == cur->callno : 1) ) {
/* That's us. Be sure we keep track of the peer call number */
return 1;
}
@@ -1592,7 +1592,7 @@
/*
* \note Calling this function while holding another pvt lock can cause a deadlock.
*/
-static int __find_callno(unsigned short callno, unsigned short dcallno, struct sockaddr_in *sin, int new, int sockfd, int return_locked, int full_frame)
+static int __find_callno(unsigned short callno, unsigned short dcallno, struct sockaddr_in *sin, int new, int sockfd, int return_locked, int check_dcallno)
{
int res = 0;
int x;
@@ -1606,7 +1606,7 @@
.callno = dcallno,
.peercallno = callno,
/* hack!! */
- .frames_received = full_frame,
+ .frames_received = check_dcallno,
};
memcpy(&tmp_pvt.addr, sin, sizeof(tmp_pvt.addr));
@@ -1626,7 +1626,7 @@
ast_mutex_lock(&iaxsl[x]);
if (iaxs[x]) {
/* Look for an exact match */
- if (match(sin, callno, dcallno, iaxs[x], full_frame)) {
+ if (match(sin, callno, dcallno, iaxs[x], check_dcallno)) {
res = x;
}
}
@@ -1637,7 +1637,7 @@
ast_mutex_lock(&iaxsl[x]);
if (iaxs[x]) {
/* Look for an exact match */
- if (match(sin, callno, dcallno, iaxs[x], full_frame)) {
+ if (match(sin, callno, dcallno, iaxs[x], check_dcallno)) {
res = x;
}
}
@@ -7998,8 +7998,10 @@
f.subclass = 0;
}
- if (!fr->callno)
- fr->callno = find_callno(ntohs(mh->callno) & ~IAX_FLAG_FULL, dcallno, &sin, new, fd, ntohs(mh->callno) & IAX_FLAG_FULL);
+ if (!fr->callno) {
+ fr->callno = find_callno(ntohs(mh->callno) & ~IAX_FLAG_FULL, dcallno, &sin, new, fd,
+ (ntohs(mh->callno) & IAX_FLAG_FULL) && f.frametype == AST_FRAME_IAX && f.subclass == IAX_COMMAND_ACK);
+ }
if (fr->callno > 0)
ast_mutex_lock(&iaxsl[fr->callno]);
More information about the asterisk-commits
mailing list