[svn-commits] may: branch 1.8 r291005 - in /branches/1.8/addons: ./ ooh323c/src/

SVN commits to the Digium repositories svn-commits at lists.digium.com
Sat Oct 9 09:02:30 CDT 2010


Author: may
Date: Sat Oct  9 09:02:26 2010
New Revision: 291005

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=291005
Log:
Added fast start and h.245 tunneling options per user and peer.

Added options for faststart/h.245 tunneling per user/peer, properly
handle these and global options, correction of handling fs/tunneling
fields in signalling responses

(issue #17972)
Reported by: salecha
Patches:
      fs-tunnel-per-point-3.patch uploaded by may213 (license 454)
Tested by: may213, salecha


Modified:
    branches/1.8/addons/chan_ooh323.c
    branches/1.8/addons/ooh323c/src/ooh245.c
    branches/1.8/addons/ooh323c/src/ooh323.c

Modified: branches/1.8/addons/chan_ooh323.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/addons/chan_ooh323.c?view=diff&rev=291005&r1=291004&r2=291005
==============================================================================
--- branches/1.8/addons/chan_ooh323.c (original)
+++ branches/1.8/addons/chan_ooh323.c Sat Oct  9 09:02:26 2010
@@ -188,6 +188,7 @@
 	struct OOH323Regex *rtpmask;	/* rtp ip regexp */
 	char rtpmaskstr[120];
 	int rtdrcount, rtdrinterval;	/* roundtripdelayreq */
+	int faststart, h245tunneling;	/* faststart & h245 tunneling */
 	struct ooh323_pvt *next;	/* Next entity */
 } *iflist = NULL;
 
@@ -214,6 +215,7 @@
 	struct OOH323Regex	    *rtpmask;
 	char	    rtpmaskstr[120];
 	int	    rtdrcount, rtdrinterval;
+	int	    faststart, h245tunneling;
 	struct ooh323_user *next;
 };
 
@@ -241,6 +243,7 @@
 	struct OOH323Regex	    *rtpmask;
 	char	    rtpmaskstr[120];
 	int	    rtdrcount,rtdrinterval;
+	int	    faststart, h245tunneling;
 	struct ooh323_peer *next;
 };
 
@@ -636,6 +639,8 @@
 		p->dtmfcodec  = peer->dtmfcodec;
 		p->t38support = peer->t38support;
 		p->rtptimeout = peer->rtptimeout;
+		p->faststart = peer->faststart;
+		p->h245tunneling = peer->h245tunneling;
 		if (peer->rtpmask && peer->rtpmaskstr[0]) {
 			p->rtpmask = peer->rtpmask;
 			ast_copy_string(p->rtpmaskstr, peer->rtpmaskstr, sizeof(p->rtpmaskstr));
@@ -665,6 +670,8 @@
 		p->capability = gCapability;
 		p->rtdrinterval = gRTDRInterval;
 		p->rtdrcount = gRTDRCount;
+		p->faststart = gFastStart;
+		p->h245tunneling = gTunneling;
 
 		memcpy(&p->prefs, &gPrefs, sizeof(struct ast_codec_pref));
 		p->username = strdup(dest);
@@ -914,10 +921,9 @@
 		ast_verbose("---   ooh323_call- %s\n", dest);
 
 
-   if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) 
-   {
+   	if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) {
 		ast_log(LOG_WARNING, "ooh323_call called on %s, neither down nor "
-									"reserved\n", ast->name);
+								"reserved\n", ast->name);
 		return -1;
 	}
 	ast_mutex_lock(&p->lock);
@@ -972,6 +978,8 @@
 	destination[sizeof(destination)-1]='\0';
 
 	opts.transfercap = ast->transfercapability;
+	opts.fastStart = p->faststart;
+	opts.tunneling = p->h245tunneling;
 
 	for (i=0;i<480 && !isRunning(p->callToken);i++) usleep(12000);
 
@@ -1758,6 +1766,18 @@
 		p->dtmfcodec = user->dtmfcodec;
 		p->t38support = user->t38support;
 		p->rtptimeout = user->rtptimeout;
+		p->h245tunneling = user->h245tunneling;
+		p->faststart = user->faststart;
+
+		if (p->faststart)
+         		OO_SETFLAG(call->flags, OO_M_FASTSTART);
+		else
+			OO_CLRFLAG(call->flags, OO_M_FASTSTART);
+		if (p->h245tunneling)
+			OO_SETFLAG(call->flags, OO_M_TUNNELING);
+		else
+			OO_CLRFLAG(call->flags, OO_M_TUNNELING);
+
 		if (user->rtpmask && user->rtpmaskstr[0]) {
 			p->rtpmask = user->rtpmask;
 			ast_copy_string(p->rtpmaskstr, user->rtpmaskstr, 
@@ -2165,6 +2185,8 @@
 		user->dtmfmode = gDTMFMode;
 		user->dtmfcodec = gDTMFCodec;
 		user->t38support = gT38Support;
+		user->faststart = gFastStart;
+		user->h245tunneling = gTunneling;
 		/* set default context */
 		ast_copy_string(user->context, gContext, sizeof(user->context));
 		ast_copy_string(user->accountcode, gAccountcode, sizeof(user->accountcode));
@@ -2182,6 +2204,10 @@
 						sizeof(user->accountcode)-1);
 			} else if (!strcasecmp(v->name, "roundtrip")) {
 				sscanf(v->value, "%d,%d", &user->rtdrcount, &user->rtdrinterval);
+			} else if (!strcasecmp(v->name, "faststart")) {
+				user->faststart = ast_true(v->value);
+			} else if (!strcasecmp(v->name, "h245tunneling")) {
+				user->h245tunneling = ast_true(v->value);
 			} else if (!strcasecmp(v->name, "rtptimeout")) {
 				user->rtptimeout = atoi(v->value);
 				if (user->rtptimeout < 0)
@@ -2270,6 +2296,8 @@
 		peer->dtmfmode = gDTMFMode;
 		peer->dtmfcodec = gDTMFCodec;
 		peer->t38support = gT38Support;
+		peer->faststart = gFastStart;
+		peer->h245tunneling = gTunneling;
       		peer->port = 1720;
 		if (0 == friend_type) {
 			peer->mFriend = 1;
@@ -2316,6 +2344,10 @@
 					peer->outgoinglimit = 0;
 			} else if (!strcasecmp(v->name, "accountcode")) {
 				ast_copy_string(peer->accountcode, v->value, sizeof(peer->accountcode));
+			} else if (!strcasecmp(v->name, "faststart")) {
+				peer->faststart = ast_true(v->value);
+			} else if (!strcasecmp(v->name, "h245tunneling")) {
+				peer->h245tunneling = ast_true(v->value);
 			} else if (!strcasecmp(v->name, "rtptimeout")) {
             			peer->rtptimeout = atoi(v->value);
             			if(peer->rtptimeout < 0)
@@ -2779,6 +2811,8 @@
 	if (peer) {
       sprintf(ip_port, "%s:%d", peer->ip, peer->port);
       ast_cli(a->fd, "%-15.15s%s\n", "Name: ", peer->name);
+      ast_cli(a->fd, "%s:%s,%s\n", "FastStart/H.245 Tunneling", peer->faststart?"yes":"no",
+					peer->h245tunneling?"yes":"no");
       ast_cli(a->fd, "%-15.15s%s", "Format Prefs: ", "(");
       print_codec_to_cli(a->fd, &peer->prefs);
       ast_cli(a->fd, ")\n");
@@ -2922,6 +2956,8 @@
 
 	if (user) {
       ast_cli(a->fd, "%-15.15s%s\n", "Name: ", user->name);
+      ast_cli(a->fd, "%s:%s,%s\n", "FastStart/H.245 Tunneling", user->faststart?"yes":"no",
+					user->h245tunneling?"yes":"no");
       ast_cli(a->fd, "%-15.15s%s", "Format Prefs: ", "(");
       print_codec_to_cli(a->fd, &user->prefs);
       ast_cli(a->fd, ")\n");

Modified: branches/1.8/addons/ooh323c/src/ooh245.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/addons/ooh323c/src/ooh245.c?view=diff&rev=291005&r1=291004&r2=291005
==============================================================================
--- branches/1.8/addons/ooh323c/src/ooh245.c (original)
+++ branches/1.8/addons/ooh323c/src/ooh245.c Sat Oct  9 09:02:26 2010
@@ -957,10 +957,8 @@
             /*Since Cap exchange and MasterSlave Procedures are done */
             if(gH323ep.h323Callbacks.openLogicalChannels)
                gH323ep.h323Callbacks.openLogicalChannels(call);
-            else{
-               if(!ooGetTransmitLogicalChannel(call))
-                  ooOpenLogicalChannels(call);
-            }
+            if(!ooGetTransmitLogicalChannel(call))
+               ooOpenLogicalChannels(call);
 #if 0
             if(!call->logicalChans){
                if(!gH323ep.h323Callbacks.openLogicalChannels)
@@ -2114,10 +2112,8 @@
    {
       if(gH323ep.h323Callbacks.openLogicalChannels)
          gH323ep.h323Callbacks.openLogicalChannels(call);
-      else{
-         if(!ooGetTransmitLogicalChannel(call))
-            ooOpenLogicalChannels(call);
-      }
+      if(!ooGetTransmitLogicalChannel(call))
+         ooOpenLogicalChannels(call);
 #if 0
       if(!call->logicalChans){
          if(!gH323ep.h323Callbacks.openLogicalChannels)
@@ -3141,10 +3137,8 @@
  
    if(gH323ep.h323Callbacks.openLogicalChannels)
       gH323ep.h323Callbacks.openLogicalChannels(call);
-   else{
-      if(!ooGetTransmitLogicalChannel(call))
-         ooOpenLogicalChannels(call);
-   }
+   if(!ooGetTransmitLogicalChannel(call))
+      ooOpenLogicalChannels(call);
 #if 0
    if(!call->logicalChans){
       if(!gH323ep.h323Callbacks.openLogicalChannels)

Modified: branches/1.8/addons/ooh323c/src/ooh323.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.8/addons/ooh323c/src/ooh323.c?view=diff&rev=291005&r1=291004&r2=291005
==============================================================================
--- branches/1.8/addons/ooh323c/src/ooh323.c (original)
+++ branches/1.8/addons/ooh323c/src/ooh323.c Sat Oct  9 09:02:26 2010
@@ -751,9 +751,18 @@
       
    }
 
-   /* Retrieve the H.245 control channel address from the connect msg */
+   /* Retrieve tunneling info/H.245 control channel address from the connect msg */
+   if(q931Msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent && 
+      !q931Msg->userInfo->h323_uu_pdu.h245Tunneling) {
+	if (OO_TESTFLAG (call->flags, OO_M_TUNNELING)) {
+		OO_CLRFLAG (call->flags, OO_M_TUNNELING);
+		OOTRACEINFO3("Tunneling is disabled for call due to remote reject tunneling"
+			      " (%s, %s)\n", call->callType, call->callToken);
+	}
+   }
    if(q931Msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent &&
       q931Msg->userInfo->h323_uu_pdu.h245Tunneling &&
+      OO_TESTFLAG (call->flags, OO_M_TUNNELING) &&
       callProceeding->m.h245AddressPresent) {
       OOTRACEINFO3("Tunneling and h245address provided."
                    "Using Tunneling for H.245 messages (%s, %s)\n", 
@@ -801,6 +810,7 @@
        }
       }
    }
+
    return OO_OK;
 }
 
@@ -970,16 +980,27 @@
 
    }
 
-   /* Retrieve the H.245 control channel address from the connect msg */
+   /* Retrieve tunneling info/H.245 control channel address from the connect msg */
+   if(q931Msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent && 
+      !q931Msg->userInfo->h323_uu_pdu.h245Tunneling) {
+	if (OO_TESTFLAG (call->flags, OO_M_TUNNELING)) {
+		OO_CLRFLAG (call->flags, OO_M_TUNNELING);
+		OOTRACEINFO3("Tunneling is disabled for call due to remote reject tunneling"
+			      " (%s, %s)\n", call->callType, call->callToken);
+	}
+   }
    if(q931Msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent &&
       q931Msg->userInfo->h323_uu_pdu.h245Tunneling &&
-      alerting->m.h245AddressPresent) {
-      OOTRACEINFO3("Tunneling and h245address provided."
-                   "Giving preference to Tunneling (%s, %s)\n", 
-                   call->callType, call->callToken);
-   }
-   else if(alerting->m.h245AddressPresent)
-   {
+	 OO_TESTFLAG (call->flags, OO_M_TUNNELING)) {
+      if (alerting->m.h245AddressPresent) 
+      	OOTRACEINFO3("Tunneling and h245address provided."
+                     "Giving preference to Tunneling (%s, %s)\n", 
+                   	call->callType, call->callToken);
+	ret =ooSendTCSandMSD(call);
+	if (ret != OO_OK)
+		return ret;
+
+   } else if(alerting->m.h245AddressPresent) {
       if (OO_TESTFLAG (call->flags, OO_M_TUNNELING))
       {
          OO_CLRFLAG (call->flags, OO_M_TUNNELING);
@@ -1019,12 +1040,11 @@
          return OO_FAILED;
        }
       }
-   } else if (OO_TESTFLAG (call->flags, OO_M_TUNNELING)) {
-	ret =ooSendTCSandMSD(call);
+   } else if (!call->pH245Channel && !call->h245listener) {
+	ret = ooSendStartH245Facility(call);
 	if (ret != OO_OK)
 		return ret;
    }
-
 
    return OO_OK;
 }
@@ -1195,15 +1215,26 @@
    }
 
    /* Retrieve the H.245 control channel address from the connect msg */
+   /* Retrieve tunneling info/H.245 control channel address from the connect msg */
+   if(q931Msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent && 
+      !q931Msg->userInfo->h323_uu_pdu.h245Tunneling) {
+	if (OO_TESTFLAG (call->flags, OO_M_TUNNELING)) {
+		OO_CLRFLAG (call->flags, OO_M_TUNNELING);
+		OOTRACEINFO3("Tunneling is disabled for call due to remote reject tunneling"
+			      " (%s, %s)\n", call->callType, call->callToken);
+	}
+   }
    if(q931Msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent &&
       q931Msg->userInfo->h323_uu_pdu.h245Tunneling &&
-      progress->m.h245AddressPresent) {
-      OOTRACEINFO3("Tunneling and h245address provided."
-                   "Giving preference to Tunneling (%s, %s)\n", 
-                   call->callType, call->callToken);
-   }
-   else if(progress->m.h245AddressPresent)
-   {
+      OO_TESTFLAG (call->flags, OO_M_TUNNELING)) {
+      if (progress->m.h245AddressPresent) 
+      	OOTRACEINFO3("Tunneling and h245address provided."
+                     "Giving preference to Tunneling (%s, %s)\n", 
+                     call->callType, call->callToken);
+	ret =ooSendTCSandMSD(call);
+	if (ret != OO_OK)
+		return ret;
+   } else if(progress->m.h245AddressPresent) {
       if (OO_TESTFLAG (call->flags, OO_M_TUNNELING))
       {
          OO_CLRFLAG (call->flags, OO_M_TUNNELING);
@@ -1243,8 +1274,8 @@
          return OO_FAILED;
        }
       }
-   } else if (OO_TESTFLAG (call->flags, OO_M_TUNNELING)) {
-	ret =ooSendTCSandMSD(call);
+   } else if (!call->pH245Channel && !call->h245listener) {
+	ret = ooSendStartH245Facility(call);
 	if (ret != OO_OK)
 		return ret;
    }
@@ -1444,9 +1475,18 @@
       OO_SETFLAG(call->flags, OO_M_FASTSTARTANSWERED);
    }
 
-   /* Retrieve the H.245 control channel address from the CONNECT msg */
+   /* Retrieve tunneling info/H.245 control channel address from the connect msg */
+   if(q931Msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent && 
+      !q931Msg->userInfo->h323_uu_pdu.h245Tunneling) {
+	if (OO_TESTFLAG (call->flags, OO_M_TUNNELING)) {
+		OO_CLRFLAG (call->flags, OO_M_TUNNELING);
+		OOTRACEINFO3("Tunneling is disabled for call due to remote reject tunneling"
+			      " (%s, %s)\n", call->callType, call->callToken);
+	}
+   }
    if(q931Msg->userInfo->h323_uu_pdu.m.h245TunnelingPresent &&
       q931Msg->userInfo->h323_uu_pdu.h245Tunneling &&
+      OO_TESTFLAG (call->flags, OO_M_TUNNELING) &&
       connect->m.h245AddressPresent) {
       OOTRACEINFO3("Tunneling and h245address provided."
                    "Giving preference to Tunneling (%s, %s)\n", 




More information about the svn-commits mailing list