[svn-commits] may: trunk r333963 - in /trunk: ./ addons/ooh323c/src/

SVN commits to the Digium repositories svn-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 svn-commits mailing list