[asterisk-commits] may: branch may/chan_ooh323_rework r205531 - in /team/may/chan_ooh323_rework/...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Wed Jul 8 19:59:57 CDT 2009


Author: may
Date: Wed Jul  8 19:59:53 2009
New Revision: 205531

URL: http://svn.asterisk.org/svn-view/asterisk?view=rev&rev=205531
Log:
inband dtmf support (relaxdtmf is optional), dtmfmode for peer/user is
or'ed with dtmfmode of endpoint)
added g726aal2 and Cisco G726r32 support


Modified:
    team/may/chan_ooh323_rework/addons/chan_ooh323.c
    team/may/chan_ooh323_rework/addons/ooh323c/src/ooCapability.c
    team/may/chan_ooh323_rework/addons/ooh323c/src/ooCapability.h
    team/may/chan_ooh323_rework/addons/ooh323c/src/ooh245.c
    team/may/chan_ooh323_rework/addons/ooh323cDriver.c
    team/may/chan_ooh323_rework/addons/ooh323cDriver.h

Modified: team/may/chan_ooh323_rework/addons/chan_ooh323.c
URL: http://svn.asterisk.org/svn-view/asterisk/team/may/chan_ooh323_rework/addons/chan_ooh323.c?view=diff&rev=205531&r1=205530&r2=205531
==============================================================================
--- team/may/chan_ooh323_rework/addons/chan_ooh323.c (original)
+++ team/may/chan_ooh323_rework/addons/chan_ooh323.c Wed Jul  8 19:59:53 2009
@@ -96,10 +96,10 @@
 	struct ast_rtp_instance *rtp;
 	struct ast_rtp_instance *vrtp; /* Placeholder for now */
 	struct ast_channel *owner;	/* Master Channel */
-   union {
-    	char  *user;	/* cooperating user/peer */
-    	char  *peer;
-   } neighbor;
+   	union {
+    		char  *user;	/* cooperating user/peer */
+    		char  *peer;
+   	} neighbor;
 	time_t lastrtptx;
 	time_t lastrtprx;
 	unsigned int flags;
@@ -129,7 +129,7 @@
 	char accountcode[256];	/* Account code */
 	int nat;
 	int amaflags;
-   int progsent;			/* progress is sent */
+	int progsent;			/* progress is sent */
 	struct ast_dsp *vad;
 	struct ooh323_pvt *next;	/* Next entity */
 } *iflist = NULL;
@@ -310,6 +310,8 @@
 		if (i->dtmfmode & H323_DTMF_INBAND) {
 			i->vad = ast_dsp_new();
 			ast_dsp_set_features(i->vad, DSP_FEATURE_DIGIT_DETECT);
+			if (i->dtmfmode & H323_DTMF_INBANDRELAX)
+				ast_dsp_set_digitmode(i->vad, DSP_DIGITMODE_DTMF | DSP_DIGITMODE_RELAXDTMF);
 		}
 
 		ast_mutex_lock(&usecnt_lock);
@@ -358,6 +360,9 @@
 				ch = NULL;
 			} 
 	 	}
+
+		manager_event(EVENT_FLAG_SYSTEM, "ChannelUpdate", "Channel: %s\r\nChanneltype: %s\r\n"
+				"CallRef: %d\r\n", ch->name, "OOH323", i->call_reference);
 	} else
 		ast_log(LOG_WARNING, "Unable to allocate channel structure\n");
 
@@ -529,7 +534,7 @@
 		  p->capability = peer->capability;
 		/* } */
 		memcpy(&p->prefs, &peer->prefs, sizeof(struct ast_codec_pref));
-		p->dtmfmode = peer->dtmfmode;
+		p->dtmfmode |= peer->dtmfmode;
 		ast_copy_string(p->accountcode, peer->accountcode, sizeof(p->accountcode));
 		p->amaflags = peer->amaflags;
 	} else {
@@ -1474,7 +1479,7 @@
 			p->amaflags = user->amaflags;
 			p->capability = user->capability;
 			memcpy(&p->prefs, &user->prefs, sizeof(struct ast_codec_pref));
-			p->dtmfmode = user->dtmfmode;
+			p->dtmfmode |= user->dtmfmode;
 			/* Since, call is coming from a pbx user, no need to use gk */
 			/* OO_SETFLAG(p->flags, H323_DISABLEGK);
 			OO_SETFLAG(call->flags, OO_M_DISABLEGK); */
@@ -1701,6 +1706,8 @@
 			struct ast_channel* c = p->owner;
 			ast_queue_control(c, AST_CONTROL_ANSWER);
    			ast_channel_unlock(p->owner);
+			manager_event(EVENT_FLAG_SYSTEM,"ChannelUpdate","Channel: %s\r\nChanneltype: %s\r\n"
+				"CallRef: %d\r\n", c->name, "OOH323", p->call_reference);
 		}
 		ast_mutex_unlock(&p->lock);
 
@@ -1902,6 +1909,10 @@
 					user->dtmfmode = H323_DTMF_H245ALPHANUMERIC;
 				else if (!strcasecmp(v->value, "h245signal"))
 					user->dtmfmode = H323_DTMF_H245SIGNAL;
+				else if (!strcasecmp(v->value, "inband"))
+					user->dtmfmode = H323_DTMF_INBAND;
+			} else if (!strcasecmp(v->name, "relaxdtmf")) {
+				user->dtmfmode |= ast_true(v->value) ? H323_DTMF_INBANDRELAX : 0;
 			}
 			v = v->next;
 		}
@@ -2002,6 +2013,10 @@
 					peer->dtmfmode = H323_DTMF_H245ALPHANUMERIC;
 				else if (!strcasecmp(v->value, "h245signal"))
 					peer->dtmfmode = H323_DTMF_H245SIGNAL;
+				else if (!strcasecmp(v->value, "inband"))
+					peer->dtmfmode = H323_DTMF_INBAND;
+			} else if (!strcasecmp(v->name, "relaxdtmf")) {
+				peer->dtmfmode |= ast_true(v->value) ? H323_DTMF_INBANDRELAX : 0;
 			}
 			v = v->next;
 		}
@@ -2294,7 +2309,9 @@
                                                                     v->value);
 				gDTMFMode = H323_DTMF_RFC2833;
 			}
-		}  
+		} else if (!strcasecmp(v->name, "relaxdtmf")) {
+			gDTMFMode |= ast_true(v->value) ? H323_DTMF_INBANDRELAX : 0;
+		}
 		v = v->next;
 	}
 	
@@ -2398,6 +2415,10 @@
          ast_cli(a->fd, "%s\n", "h245alphanumeric");
 		else if (peer->dtmfmode & H323_DTMF_H245SIGNAL)
          ast_cli(a->fd, "%s\n", "h245signal");
+		else if (peer->dtmfmode & H323_DTMF_INBAND && peer->dtmfmode & H323_DTMF_INBANDRELAX)
+         ast_cli(a->fd, "%s\n", "inband-relaxed");
+		else if (peer->dtmfmode & H323_DTMF_INBAND)
+         ast_cli(a->fd, "%s\n", "inband");
 		else
          ast_cli(a->fd, "%s\n", "unknown");
       ast_cli(a->fd, "%-15.15s%s\n", "AccountCode: ", peer->accountcode);
@@ -2522,6 +2543,10 @@
          ast_cli(a->fd, "%s\n", "h245alphanumeric");
 		else if (user->dtmfmode & H323_DTMF_H245SIGNAL)
          ast_cli(a->fd, "%s\n", "h245signal");
+		else if (user->dtmfmode & H323_DTMF_INBAND && user->dtmfmode & H323_DTMF_INBANDRELAX)
+         ast_cli(a->fd, "%s\n", "inband-relaxed");
+		else if (user->dtmfmode & H323_DTMF_INBAND)
+         ast_cli(a->fd, "%s\n", "inband");
 		else
          ast_cli(a->fd, "%s\n", "unknown");
       ast_cli(a->fd, "%-15.15s%s\n", "AccountCode: ", user->accountcode);
@@ -2681,6 +2706,10 @@
       ast_cli(a->fd, "%s\n", "h245alphanumeric");
 	else if (gDTMFMode & H323_DTMF_H245SIGNAL)
       ast_cli(a->fd, "%s\n", "h245signal");
+		else if (gDTMFMode & H323_DTMF_INBAND && gDTMFMode & H323_DTMF_INBANDRELAX)
+         ast_cli(a->fd, "%s\n", "inband-relaxed");
+		else if (gDTMFMode & H323_DTMF_INBAND)
+         ast_cli(a->fd, "%s\n", "inband");
 	else
       ast_cli(a->fd, "%s\n", "unknown");
 
@@ -3325,6 +3354,8 @@
 		return OO_G729A;
 	case AST_FORMAT_G726:
 		return OO_G726;
+	case AST_FORMAT_G726_AAL2:
+		return OO_G726AAL2;
 	case AST_FORMAT_G723_1:
 		return OO_G7231;
 	case AST_FORMAT_H263:
@@ -3434,6 +3465,10 @@
 	them.sin_addr.s_addr = inet_addr(remoteIp); /* only works for IPv4 */
 	them.sin_port = htons(remotePort);
 	ast_rtp_instance_set_remote_address(p->rtp, &them);
+
+	if (p->writeformat & AST_FORMAT_G726_AAL2) 
+                ast_rtp_codecs_payloads_set_rtpmap_type(ast_rtp_instance_get_codecs(p->rtp), p->rtp, 2,
+							"audio", "G726-32", AST_RTP_OPT_G726_NONSTANDARD);
 
 	if(gH323Debug)
 		ast_verbose("+++   setup_rtp_connection\n");
@@ -3534,10 +3569,12 @@
 			/* if (!p->owner->readformat)
 				p->owner->readformat = p->owner->nativeformats; */
 
-			if ((p->dtmfmode & H323_DTMF_INBAND) && p->vad) {
+			if ((p->dtmfmode & H323_DTMF_INBAND) && p->vad &&
+				(f->subclass == AST_FORMAT_SLINEAR || f->subclass == AST_FORMAT_ALAW ||
+					f->subclass == AST_FORMAT_ULAW)) {
 				f = ast_dsp_process(p->owner, p->vad, f);
-            		if (f && (f->frametype == AST_FRAME_DTMF)) 
-               			ast_log(LOG_DEBUG, "* Detected inband DTMF '%c'\n",f->subclass);
+            			if (f && (f->frametype == AST_FRAME_DTMF)) 
+               				ast_debug(1, "* Detected inband DTMF '%c'\n",f->subclass);
 			}
 		}
 	}

Modified: team/may/chan_ooh323_rework/addons/ooh323c/src/ooCapability.c
URL: http://svn.asterisk.org/svn-view/asterisk/team/may/chan_ooh323_rework/addons/ooh323c/src/ooCapability.c?view=diff&rev=205531&r1=205530&r2=205531
==============================================================================
--- team/may/chan_ooh323_rework/addons/ooh323c/src/ooCapability.c (original)
+++ team/may/chan_ooh323_rework/addons/ooh323c/src/ooCapability.c Wed Jul  8 19:59:53 2009
@@ -619,6 +619,7 @@
    case OO_G7231:
      return ooCapabilityCreateSimpleCapability(epCap, pctxt, dir);
    case OO_G726:
+   case OO_G726AAL2:
    case OO_AMRNB:
      return ooCapabilityCreateNonStandardCapability(epCap, pctxt, dir);
    case OO_GSMHALFRATE:
@@ -934,6 +935,7 @@
    {
    case OO_AMRNB:
    case OO_G726:
+   case OO_G726AAL2:
       pAudio->t = T_H245AudioCapability_nonStandard;
       pAudio->u.nonStandard = (H245NonStandardParameter*)memAlloc(pctxt, 
                                            sizeof(H245NonStandardParameter));
@@ -965,6 +967,15 @@
       case OO_G726:
        pAudio->u.nonStandard->data.data = "G.726-32k";
        pAudio->u.nonStandard->data.numocts = sizeof("G.726-32k")-1;
+       break;
+      case OO_G726AAL2:
+       pAudio->u.nonStandard->data.data = "G726r32";
+       pAudio->u.nonStandard->data.numocts = sizeof("G726r32")-1;
+       /* Cisco G726 */
+       pAudio->u.nonStandard->nonStandardIdentifier.u.h221NonStandard->t35CountryCode = 181;
+       pAudio->u.nonStandard->nonStandardIdentifier.u.h221NonStandard->t35Extension = 0;
+       pAudio->u.nonStandard->nonStandardIdentifier.u.h221NonStandard->manufacturerCode = 18;
+
        break;
       case OO_AMRNB:
        pAudio->u.nonStandard->data.data = "AMRNB";
@@ -1091,6 +1102,13 @@
 	 else
 	  return FALSE;
 	 break;
+        case sizeof("G726r32")-1:
+	 if (!strncmp(audioCap->u.nonStandard->data.data, "G726r32",
+		audioCap->u.nonStandard->data.numocts))
+	  cap = OO_G726AAL2;
+	 else
+	  return FALSE;
+	 break;
 	case sizeof("AMRNB")-1:
 	 if (!strncmp(audioCap->u.nonStandard->data.data, "AMRNB", 
 		audioCap->u.nonStandard->data.numocts))
@@ -1766,6 +1784,13 @@
 	 else
 	  return NULL;
 	 break;
+        case sizeof("G726r32")-1:
+	 if (!strncmp(audioCap->u.nonStandard->data.data, "G726r32",
+		audioCap->u.nonStandard->data.numocts))
+	  cap = OO_G726AAL2;
+	 else
+	  return NULL;
+	 break;
 	case sizeof("AMRNB")-1:
 	 if (!strncmp(audioCap->u.nonStandard->data.data, "AMRNB",
 		audioCap->u.nonStandard->data.numocts))
@@ -2324,6 +2349,15 @@
       if (audioCap->u.nonStandard && 
           audioCap->u.nonStandard->nonStandardIdentifier.t == 
            T_H245NonStandardIdentifier_h221NonStandard &&
+          audioCap->u.nonStandard->data.numocts == sizeof("G726r32")-1 &&
+          !strncmp(audioCap->u.nonStandard->data.data, "G726r32", 
+                   audioCap->u.nonStandard->data.numocts))
+      return ooCapabilityAddSimpleCapability(call, OO_G726AAL2, 20, 
+                           240, FALSE, dir, NULL, NULL, NULL, NULL, TRUE);
+
+      if (audioCap->u.nonStandard && 
+          audioCap->u.nonStandard->nonStandardIdentifier.t == 
+           T_H245NonStandardIdentifier_h221NonStandard &&
           audioCap->u.nonStandard->data.numocts == sizeof("AMRNB")-1 &&
           !strncmp(audioCap->u.nonStandard->data.data, "AMRNB", 
                    audioCap->u.nonStandard->data.numocts))
@@ -2632,7 +2666,7 @@
       "OO_G729",
       "OO_G729ANNEXA",
       "OO_AMRNB",
-      "OO_UNUSED",
+      "OO_G726AAL2",
       "OO_G729WANNEXB",
       "OO_G729ANNEXAWANNEXB",
       "OO_G7231ANNEXC",

Modified: team/may/chan_ooh323_rework/addons/ooh323c/src/ooCapability.h
URL: http://svn.asterisk.org/svn-view/asterisk/team/may/chan_ooh323_rework/addons/ooh323c/src/ooCapability.h?view=diff&rev=205531&r1=205530&r2=205531
==============================================================================
--- team/may/chan_ooh323_rework/addons/ooh323c/src/ooCapability.h (original)
+++ team/may/chan_ooh323_rework/addons/ooh323c/src/ooCapability.h Wed Jul  8 19:59:53 2009
@@ -50,6 +50,7 @@
    OO_IS13818_AUDIO       = 14,
 #else
    OO_AMRNB		  = 13,
+   OO_G726AAL2		  = 14,
 #endif
    OO_G729B               = 15,
    OO_G729AB              = 16,

Modified: team/may/chan_ooh323_rework/addons/ooh323c/src/ooh245.c
URL: http://svn.asterisk.org/svn-view/asterisk/team/may/chan_ooh323_rework/addons/ooh323c/src/ooh245.c?view=diff&rev=205531&r1=205530&r2=205531
==============================================================================
--- team/may/chan_ooh323_rework/addons/ooh323c/src/ooh245.c (original)
+++ team/may/chan_ooh323_rework/addons/ooh323c/src/ooh245.c Wed Jul  8 19:59:53 2009
@@ -3004,6 +3004,7 @@
    case OO_G711ULAW64K:
    case OO_G711ULAW56K:
    case OO_G726:
+   case OO_G726AAL2:
    case OO_AMRNB:
    case OO_G728:
    case OO_G729:

Modified: team/may/chan_ooh323_rework/addons/ooh323cDriver.c
URL: http://svn.asterisk.org/svn-view/asterisk/team/may/chan_ooh323_rework/addons/ooh323cDriver.c?view=diff&rev=205531&r1=205530&r2=205531
==============================================================================
--- team/may/chan_ooh323_rework/addons/ooh323cDriver.c (original)
+++ team/may/chan_ooh323_rework/addons/ooh323cDriver.c Wed Jul  8 19:59:53 2009
@@ -203,6 +203,18 @@
 
       }
 
+      if(format & AST_FORMAT_G726_AAL2)
+      {
+         if(gH323Debug)
+            ast_verbose("\tAdding g726aal2 capability to H323 endpoint\n");
+         ret = ooH323EpAddG726Capability(OO_G726AAL2, gtxframes, grxframes, FALSE, 
+                                     OORXANDTX, &ooh323c_start_receive_channel,
+                                     &ooh323c_start_transmit_channel,
+                                     &ooh323c_stop_receive_channel, 
+                                     &ooh323c_stop_transmit_channel);
+
+      }
+
       if(format & AST_FORMAT_H263)
       {
          if(gH323Debug)
@@ -305,6 +317,20 @@
                                            call->callType, call->callToken);
 	 txframes = prefs->framing[x];
          ret = ooCallAddG726Capability(call, OO_G726, txframes, grxframes, FALSE,
+                                     OORXANDTX, &ooh323c_start_receive_channel,
+                                     &ooh323c_start_transmit_channel,
+                                     &ooh323c_stop_receive_channel, 
+                                     &ooh323c_stop_transmit_channel);
+
+      }
+
+      if(format & AST_FORMAT_G726_AAL2)
+      {
+         if(gH323Debug)
+            ast_verbose("\tAdding g726aal2 capability to call (%s, %s)\n",
+                                           call->callType, call->callToken);
+	 txframes = prefs->framing[x];
+         ret = ooCallAddG726Capability(call, OO_G726AAL2, txframes, grxframes, FALSE,
                                      OORXANDTX, &ooh323c_start_receive_channel,
                                      &ooh323c_start_transmit_channel,
                                      &ooh323c_stop_receive_channel, 
@@ -491,6 +517,8 @@
          return AST_FORMAT_G723_1;
       case OO_G726:
          return AST_FORMAT_G726;
+      case OO_G726AAL2:
+         return AST_FORMAT_G726_AAL2;
       case OO_H263VIDEO:
          return AST_FORMAT_H263;
       default:

Modified: team/may/chan_ooh323_rework/addons/ooh323cDriver.h
URL: http://svn.asterisk.org/svn-view/asterisk/team/may/chan_ooh323_rework/addons/ooh323cDriver.h?view=diff&rev=205531&r1=205530&r2=205531
==============================================================================
--- team/may/chan_ooh323_rework/addons/ooh323cDriver.h (original)
+++ team/may/chan_ooh323_rework/addons/ooh323cDriver.h Wed Jul  8 19:59:53 2009
@@ -27,6 +27,7 @@
 #define H323_DTMF_H245ALPHANUMERIC (1 << 2)
 #define H323_DTMF_H245SIGNAL       (1 << 3)
 #define H323_DTMF_INBAND           (1 << 4)
+#define H323_DTMF_INBANDRELAX	   (1 << 8)
 
 struct h323_pvt;
 int ooh323c_start_stack_thread(void);




More information about the asterisk-commits mailing list