Merged revisions 333961-333962 via svnmerge from

https://origsvn.digium.com/svn/asterisk/branches/10

................
  r333961 | may | 2011-08-31 01:21:53 +0400 (Wed, 31 Aug 2011) | 11 lines
  
  Merged revisions 333947 via svnmerge from 
  https://origsvn.digium.com/svn/asterisk/branches/1.8
  
  ........
    r333947 | may | 2011-08-31 01:16:30 +0400 (Wed, 31 Aug 2011) | 5 lines
    
    cleanups in ACF/ARJ GK replies processing
    fixed long (24 sec) pause if acf/arj proccessed
    before ast_cond_wait called to wait this
  ........
................
  r333962 | may | 2011-08-31 01:53:42 +0400 (Wed, 31 Aug 2011) | 3 lines
  
  security fix. really drop call if signalling addr is not same as socket
  addr
................


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@333963 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Alexandr Anikin
2011-08-30 22:16:13 +00:00
parent cae7253575
commit 7914527929
6 changed files with 55 additions and 27 deletions

View File

@@ -431,7 +431,7 @@ int ooGkClientReceive(ooGkClient *pGkClient)
if(iRet != OO_OK)
{
OOTRACEERR1("Error: Failed to handle received RAS message\n");
//pGkClient->state = GkClientFailed;
pGkClient->state = GkClientFailed;
}
memReset(pctxt);
}
@@ -1921,6 +1921,8 @@ int ooGkClientHandleAdmissionConfirm
OOTimer *pTimer = NULL;
char ip[20];
ast_mutex_lock(&pGkClient->Lock);
/* Search call in pending calls list */
for(x=0 ; x<pGkClient->callsPendingList.count; x++)
{
@@ -1931,6 +1933,9 @@ int ooGkClientHandleAdmissionConfirm
OOTRACEDBGC3("Found Pending call(%s, %s)\n",
pCallAdmInfo->call->callType,
pCallAdmInfo->call->callToken);
ast_mutex_lock(&pCallAdmInfo->call->GkLock);
/* Populate Remote IP */
if(pAdmissionConfirm->destCallSignalAddress.t !=
T_H225TransportAddress_ipAddress)
@@ -1939,6 +1944,9 @@ int ooGkClientHandleAdmissionConfirm
"Gatekeeper is not an IPv4 address\n");
OOTRACEINFO1("Ignoring ACF, will wait for timeout and retransmit "
"ARQ\n");
ast_mutex_unlock(&pCallAdmInfo->call->GkLock);
ast_mutex_unlock(&pGkClient->Lock);
ast_cond_signal(&pCallAdmInfo->call->gkWait);
return OO_FAILED;
}
ipAddress = pAdmissionConfirm->destCallSignalAddress.u.ipAddress;
@@ -2000,15 +2008,15 @@ int ooGkClientHandleAdmissionConfirm
pCallAdmInfo->call->callToken);
pCallAdmInfo->call->callState = OO_CALL_CONNECTING;
/* ooH323CallAdmitted( pCallAdmInfo->call); */
dListRemove(&pGkClient->callsPendingList, pNode);
dListAppend(&pGkClient->ctxt, &pGkClient->callsAdmittedList,
pNode->data);
memFreePtr(&pGkClient->ctxt, pNode);
ast_mutex_unlock(&pCallAdmInfo->call->GkLock);
ast_mutex_unlock(&pGkClient->Lock);
ast_cond_signal(&pCallAdmInfo->call->gkWait);
return OO_OK;
break;
}
else
{
@@ -2017,6 +2025,7 @@ int ooGkClientHandleAdmissionConfirm
}
OOTRACEERR1("Error: Failed to process ACF as there is no corresponding "
"pending call\n");
ast_mutex_unlock(&pGkClient->Lock);
return OO_OK;
}
@@ -2030,6 +2039,8 @@ int ooGkClientHandleAdmissionReject
OOH323CallData *call=NULL;
OOTimer *pTimer = NULL;
ast_mutex_lock(&pGkClient->Lock);
/* Search call in pending calls list */
for(x=0 ; x<pGkClient->callsPendingList.count; x++)
{
@@ -2046,6 +2057,7 @@ int ooGkClientHandleAdmissionReject
OOTRACEWARN2("Received admission reject with request number %d can not"
" be matched with any pending call.\n",
pAdmissionReject->requestSeqNum);
ast_mutex_unlock(&pGkClient->Lock);
return OO_OK;
}
else{
@@ -2054,6 +2066,7 @@ int ooGkClientHandleAdmissionReject
memFreePtr(&pGkClient->ctxt, pCallAdmInfo);
memFreePtr(&pGkClient->ctxt, pNode);
}
ast_mutex_lock(&pCallAdmInfo->call->GkLock);
/* Delete ARQ timer */
for(y=0; y<pGkClient->timerList.count; y++)
@@ -2118,6 +2131,8 @@ int ooGkClientHandleAdmissionReject
break;
}
ast_mutex_unlock(&pCallAdmInfo->call->GkLock);
ast_mutex_unlock(&pGkClient->Lock);
ast_cond_signal(&pCallAdmInfo->call->gkWait);
return OO_OK;
}