[asterisk-commits] may: trunk r333963 - in /trunk: ./ addons/ooh323c/src/
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue Aug 30 17:16:16 CDT 2011
Author: may
Date: Tue Aug 30 17:16:13 2011
New Revision: 333963
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=333963
Log:
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
................
Modified:
trunk/ (props changed)
trunk/addons/ooh323c/src/ooCalls.c
trunk/addons/ooh323c/src/ooCalls.h
trunk/addons/ooh323c/src/ooGkClient.c
trunk/addons/ooh323c/src/oochannels.c
trunk/addons/ooh323c/src/ooh323.c
trunk/addons/ooh323c/src/ooq931.c
Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-10-merged' - no diff available.
Modified: trunk/addons/ooh323c/src/ooCalls.c
URL: http://svnview.digium.com/svn/asterisk/trunk/addons/ooh323c/src/ooCalls.c?view=diff&rev=333963&r1=333962&r2=333963
==============================================================================
--- trunk/addons/ooh323c/src/ooCalls.c (original)
+++ trunk/addons/ooh323c/src/ooCalls.c Tue Aug 30 17:16:13 2011
@@ -63,6 +63,7 @@
}
memset(call, 0, sizeof(OOH323CallData));
ast_cond_init(&call->gkWait, NULL);
+ ast_mutex_init(&call->GkLock);
ast_mutex_init(&call->Lock);
call->pctxt = pctxt;
call->msgctxt = msgctxt;
Modified: trunk/addons/ooh323c/src/ooCalls.h
URL: http://svnview.digium.com/svn/asterisk/trunk/addons/ooh323c/src/ooCalls.h?view=diff&rev=333963&r1=333962&r2=333963
==============================================================================
--- trunk/addons/ooh323c/src/ooCalls.h (original)
+++ trunk/addons/ooh323c/src/ooCalls.h Tue Aug 30 17:16:13 2011
@@ -151,6 +151,7 @@
OOCTXT *msgctxt;
pthread_t callThread;
ast_cond_t gkWait;
+ ast_mutex_t GkLock;
ast_mutex_t Lock;
OOBOOL Monitor;
OOBOOL fsSent;
Modified: trunk/addons/ooh323c/src/ooGkClient.c
URL: http://svnview.digium.com/svn/asterisk/trunk/addons/ooh323c/src/ooGkClient.c?view=diff&rev=333963&r1=333962&r2=333963
==============================================================================
--- trunk/addons/ooh323c/src/ooGkClient.c (original)
+++ trunk/addons/ooh323c/src/ooGkClient.c Tue Aug 30 17:16:13 2011
@@ -431,7 +431,7 @@
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 @@
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 @@
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 @@
"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 @@
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 @@
}
OOTRACEERR1("Error: Failed to process ACF as there is no corresponding "
"pending call\n");
+ ast_mutex_unlock(&pGkClient->Lock);
return OO_OK;
}
@@ -2029,6 +2038,8 @@
DListNode *pNode=NULL, *pNode1=NULL;
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 @@
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 @@
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 @@
break;
}
+ ast_mutex_unlock(&pCallAdmInfo->call->GkLock);
+ ast_mutex_unlock(&pGkClient->Lock);
ast_cond_signal(&pCallAdmInfo->call->gkWait);
return OO_OK;
}
Modified: trunk/addons/ooh323c/src/oochannels.c
URL: http://svnview.digium.com/svn/asterisk/trunk/addons/ooh323c/src/oochannels.c?view=diff&rev=333963&r1=333962&r2=333963
==============================================================================
--- trunk/addons/ooh323c/src/oochannels.c (original)
+++ trunk/addons/ooh323c/src/oochannels.c Tue Aug 30 17:16:13 2011
@@ -960,6 +960,7 @@
ast_mutex_lock(&call->Lock);
ast_mutex_unlock(&call->Lock);
ast_mutex_destroy(&call->Lock);
+ ast_mutex_destroy(&call->GkLock);
ast_cond_destroy(&call->gkWait);
pctxt = call->pctxt;
freeContext(pctxt);
Modified: trunk/addons/ooh323c/src/ooh323.c
URL: http://svnview.digium.com/svn/asterisk/trunk/addons/ooh323c/src/ooh323.c?view=diff&rev=333963&r1=333962&r2=333963
==============================================================================
--- trunk/addons/ooh323c/src/ooh323.c (original)
+++ trunk/addons/ooh323c/src/ooh323.c Tue Aug 30 17:16:13 2011
@@ -371,7 +371,7 @@
H225TransportAddress_ip6Address_ip *ip6 = NULL;
Q931InformationElement* pDisplayIE=NULL;
OOAliases *pAlias=NULL;
- char remoteIP[2+8*4+7];
+ char remoteIP[2+8*4+7] = "";
call->callReference = q931Msg->callReference;
@@ -529,6 +529,7 @@
OOTRACEERR5("ERROR: Security denial remote sig IP isn't a socket ip, %s not %s "
"(%s, %s)\n", remoteIP, call->remoteIP, call->callType,
call->callToken);
+ return OO_FAILED;
}
/* check for fast start */
@@ -1638,12 +1639,15 @@
case Q931SetupMsg: /* SETUP message is received */
OOTRACEINFO3("Received SETUP message (%s, %s)\n", call->callType,
call->callToken);
- ooOnReceivedSetup(call, q931Msg);
-
+ ret = ooOnReceivedSetup(call, q931Msg);
+ if (ret != OO_OK) {
+ call->callState = OO_CALL_CLEAR;
+ } else {
+
/* H225 message callback */
- if(gH323ep.h225Callbacks.onReceivedSetup)
- ret = gH323ep.h225Callbacks.onReceivedSetup(call, q931Msg);
-
+ if(gH323ep.h225Callbacks.onReceivedSetup)
+ ret = gH323ep.h225Callbacks.onReceivedSetup(call, q931Msg);
+ }
/* Free up the mem used by the received message, as it's processing
is done.
*/
@@ -1661,23 +1665,24 @@
if(gH323ep.gkClient->state == GkClientRegistered)
{
call->callState = OO_CALL_WAITING_ADMISSION;
- ast_mutex_lock(&call->Lock);
ret = ooGkClientSendAdmissionRequest(gH323ep.gkClient, call,
FALSE);
- tv = ast_tvnow();
+ tv = ast_tvnow();
ts.tv_sec = tv.tv_sec + 24;
- ts.tv_nsec = tv.tv_usec * 1000;
- ast_cond_timedwait(&call->gkWait, &call->Lock, &ts);
+ ts.tv_nsec = tv.tv_usec * 1000;
+ ast_mutex_lock(&call->GkLock);
+ if (call->callState == OO_CALL_WAITING_ADMISSION)
+ ast_cond_timedwait(&call->gkWait, &call->GkLock, &ts);
if (call->callState == OO_CALL_WAITING_ADMISSION)
call->callState = OO_CALL_CLEAR;
- ast_mutex_unlock(&call->Lock);
+ ast_mutex_unlock(&call->GkLock);
}
else {
- /* TODO: Should send Release complete with reject reason */
OOTRACEERR1("Error:Ignoring incoming call as not yet"
"registered with Gk\n");
call->callState = OO_CALL_CLEAR;
+ call->callEndReason = OO_REASON_GK_UNREACHABLE;
}
}
if (call->callState < OO_CALL_CLEAR) {
Modified: trunk/addons/ooh323c/src/ooq931.c
URL: http://svnview.digium.com/svn/asterisk/trunk/addons/ooh323c/src/ooq931.c?view=diff&rev=333963&r1=333962&r2=333963
==============================================================================
--- trunk/addons/ooh323c/src/ooq931.c (original)
+++ trunk/addons/ooh323c/src/ooq931.c Tue Aug 30 17:16:13 2011
@@ -2266,19 +2266,24 @@
if(gH323ep.gkClient && !OO_TESTFLAG(call->flags, OO_M_DISABLEGK))
{
- /* No need to check registration status here as it is already checked for
- MakeCall command */
-
- call->callState = OO_CALL_WAITING_ADMISSION;
- ast_mutex_lock(&call->Lock);
- ret = ooGkClientSendAdmissionRequest(gH323ep.gkClient, call, FALSE);
- tv = ast_tvnow();
- ts.tv_sec = tv.tv_sec + 24;
- ts.tv_nsec = tv.tv_usec * 1000;
- ast_cond_timedwait(&call->gkWait, &call->Lock, &ts);
- if (call->callState == OO_CALL_WAITING_ADMISSION)
+ if(gH323ep.gkClient->state == GkClientRegistered) {
+ call->callState = OO_CALL_WAITING_ADMISSION;
+ ret = ooGkClientSendAdmissionRequest(gH323ep.gkClient, call, FALSE);
+ tv = ast_tvnow();
+ ts.tv_sec = tv.tv_sec + 24;
+ ts.tv_nsec = tv.tv_usec * 1000;
+ ast_mutex_lock(&call->GkLock);
+ if (call->callState == OO_CALL_WAITING_ADMISSION)
+ ast_cond_timedwait(&call->gkWait, &call->GkLock, &ts);
+ if (call->callState == OO_CALL_WAITING_ADMISSION)
call->callState = OO_CALL_CLEAR;
- ast_mutex_unlock(&call->Lock);
+ ast_mutex_unlock(&call->GkLock);
+ } else {
+ OOTRACEERR1("Error:Aborting outgoing call as not yet"
+ "registered with Gk\n");
+ call->callState = OO_CALL_CLEAR;
+ call->callEndReason = OO_REASON_GK_UNREACHABLE;
+ }
}
More information about the asterisk-commits
mailing list