[svn-commits] may: branch may/chan_ooh323_evo r228765 - in /team/may/chan_ooh323_evo: ./ ad...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Fri Nov 6 19:37:22 CST 2009


Author: may
Date: Fri Nov  6 19:37:20 2009
New Revision: 228765

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=228765
Log:
changes.may, todo.may created,

chan_ooh323 debug message on hangup corection,
unsupported message removed


Added:
    team/may/chan_ooh323_evo/addons/app_fasdetect.c   (with props)
    team/may/chan_ooh323_evo/addons/todo.may   (with props)
    team/may/chan_ooh323_evo/changes.may   (with props)
Modified:
    team/may/chan_ooh323_evo/addons/chan_ooh323.c
    team/may/chan_ooh323_evo/include/asterisk/frame.h
    team/may/chan_ooh323_evo/main/channel.c
    team/may/chan_ooh323_evo/res/res_rtp_asterisk.c

Added: team/may/chan_ooh323_evo/addons/app_fasdetect.c
URL: http://svnview.digium.com/svn/asterisk/team/may/chan_ooh323_evo/addons/app_fasdetect.c?view=auto&rev=228765
==============================================================================
--- team/may/chan_ooh323_evo/addons/app_fasdetect.c (added)
+++ team/may/chan_ooh323_evo/addons/app_fasdetect.c Fri Nov  6 19:37:20 2009
@@ -1,0 +1,193 @@
+/*
+ * Asterisk -- An open source telephony toolkit.
+ *
+ * Copyright (C) 1999 - 2005, Digium, Inc.
+ *
+ * Mark Spencer <markster at digium.com>
+ *
+ * See http://www.asterisk.org for more information about
+ * the Asterisk project. Please do not directly contact
+ * any of the maintainers of this project for assistance;
+ * the project provides a web site, mailing lists and IRC
+ * channels for your use.
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License Version 2. See the LICENSE file
+ * at the top of the source tree.
+ */
+
+/*! \file
+ *
+ * \brief FasDetect application
+ *
+ * \author Alexandr Anikin <may at telecom-service.ru>
+ * 
+ * \ingroup applications
+ */
+
+#include "asterisk.h"
+
+#include "asterisk/file.h"
+#include "asterisk/channel.h"
+#include "asterisk/pbx.h"
+#include "asterisk/module.h"
+#include "asterisk/lock.h"
+#include "asterisk/app.h"
+#include "asterisk/dsp.h"
+#include "asterisk/causes.h"
+#include "../main/dsp.c"
+
+/*** DOCUMENTATION
+	<application name="FasDetect" language="en_US">
+		<synopsis>
+			Detect false answer on channel.
+		</synopsis>
+		<syntax>
+			<parameter name="Technology/Resource" required="true" />
+			<parameter name="options">
+				<optionlist>
+					<option name="s">
+						<para>Detect silence</para>
+					</option>
+					<option name="h">
+						<para>Hang up channel on fas detected</para>
+					</option>
+				</optionlist>
+			</parameter>
+		</syntax>	
+		<description>
+			<para>Detect false answer on channel</para>
+		</description>
+	</application>
+
+ ***/
+
+static char *app = "FasDetect";
+
+#define DETECTLIMIT 3000		/* limit detection up to 3 sec */
+#define FAS_SILENCE 2000		/* silence from 2 sec is fas */
+#define SILENCE_THRESHOLD 1024		/* silence level */
+
+enum {
+	OPTION_SILENCE = (1 << 0),
+};
+
+
+AST_APP_OPTIONS(app_opts,{
+	AST_APP_OPTION('s', OPTION_SILENCE),
+});
+
+static int fasdetect_exec(struct ast_channel *chan, const char *data)
+{
+	struct ast_flags flags;
+	char* opts[0], *parse;
+	int sthreshold = SILENCE_THRESHOLD;
+	tone_detect_state_t f400_tone_state;
+	AST_DECLARE_APP_ARGS(args,
+		AST_APP_ARG(channel);
+		AST_APP_ARG(options);
+	);
+	int original_read_fmt, original_write_fmt, original_peer_fmt;
+	int res, fasdetected, notsilence, csilence;
+	int count = 0, totalsilence = 0, lenmatch;
+	struct ast_dsp *dsp;
+	struct ast_channel *peer = NULL;
+	struct ast_channel_iterator *iter;
+	
+	parse = ast_strdupa(data);
+	AST_STANDARD_APP_ARGS(args, parse);
+
+	if (args.argc > 0)
+		ast_app_parse_options(app_opts, &flags, opts, args.options);
+
+	if (args.channel) {
+        	lenmatch = strlen(args.channel);
+
+        	if ((iter = ast_channel_iterator_by_name_new(args.channel, lenmatch))) {
+			peer = ast_channel_iterator_next(iter);
+        	}
+		ast_channel_iterator_destroy(iter);
+	}
+
+        original_read_fmt = chan->readformat;
+	if (original_read_fmt != AST_FORMAT_SLINEAR) {
+		if ((res = ast_set_read_format(chan, AST_FORMAT_SLINEAR)) < 0) {
+			ast_log(LOG_WARNING, "Unable to set to linear read mode, giving up\n");
+			return -1;
+		}
+	}
+	
+	if (peer) {
+	 /* ast_verbose("peer is %s\n", peer->name); */
+         original_peer_fmt = peer->writeformat;
+		if (original_peer_fmt != AST_FORMAT_SLINEAR) {
+			if ((res = ast_set_write_format(peer, AST_FORMAT_SLINEAR)) < 0) {
+				ast_log(LOG_WARNING, "Unable to set to linear read mode, giving up\n");
+				return -1;
+			}
+		}
+	}
+	
+
+	if (!(dsp = ast_dsp_new())) {
+		ast_log(LOG_ERROR, "Unable to allocate dsp structure\n");
+		return -1;
+	}
+	ast_dsp_set_threshold(dsp, sthreshold);
+	ast_tone_detect_init(&f400_tone_state, 400, 420, 16);
+
+	fasdetected = 0;
+	notsilence = 0;
+	while (ast_waitfor(chan, -1) > -1 && count < DETECTLIMIT*8) {
+		struct ast_frame *f = ast_read(chan);
+		if (!f) {
+			break;
+		}
+
+		count += f->datalen / 2;
+
+		if (tone_detect(dsp, &f400_tone_state, 
+				f->data.ptr, f->datalen / 2)) {
+			ast_debug(1,"fas tone detected on %s\n", chan->name);
+			fasdetected = 1;
+			break;
+		}
+
+		csilence = 0;
+		ast_dsp_silence(dsp, f, &csilence);
+		if (!notsilence && (csilence == count / 8)) {
+			totalsilence = csilence;
+			if (totalsilence >= FAS_SILENCE) {
+				fasdetected = 1;
+				break;
+			}
+		} else {
+			totalsilence = 0;
+			notsilence = 1;
+		}
+		if (peer) ast_write(peer, f);
+	}
+
+	if (fasdetected) {
+		ast_verbose("    -- %s fas detected, hanging up\n", chan->name);
+		ast_softhangup(chan, AST_CAUSE_NORMAL_UNSPECIFIED);
+		pbx_builtin_setvar_helper(chan, "MACRO_RESULT", "CONGESTION");
+	} else {
+		ast_set_read_format(chan, original_read_fmt);
+		if (peer)
+			ast_set_write_format(peer, original_peer_fmt);
+	}
+	return 0;
+}
+
+static int unload_module(void)
+{
+	return ast_unregister_application(app);
+}
+
+static int load_module(void)
+{
+	return ast_register_application_xml(app, fasdetect_exec);
+}
+
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Detect false answer on channel");

Propchange: team/may/chan_ooh323_evo/addons/app_fasdetect.c
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: team/may/chan_ooh323_evo/addons/app_fasdetect.c
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: team/may/chan_ooh323_evo/addons/app_fasdetect.c
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: team/may/chan_ooh323_evo/addons/chan_ooh323.c
URL: http://svnview.digium.com/svn/asterisk/team/may/chan_ooh323_evo/addons/chan_ooh323.c?view=diff&rev=228765&r1=228764&r2=228765
==============================================================================
--- team/may/chan_ooh323_evo/addons/chan_ooh323.c (original)
+++ team/may/chan_ooh323_evo/addons/chan_ooh323.c Fri Nov  6 19:37:20 2009
@@ -13,6 +13,8 @@
  * maintain this copyright notice.
  *
  *****************************************************************************/
+
+/* Reworked version I, Nov-2009, by Alexandr Anikin, may at telecom-service.ru */
 
 
 /*** MODULEINFO
@@ -1015,7 +1017,7 @@
 		ast_update_use_count();
 	  
 	} else {
-		ast_log(LOG_DEBUG, "No call to hangup\n" );
+		ast_debug(1, "No call to hangup\n" );
 	}
 	
 	if (gH323Debug)
@@ -3077,14 +3079,6 @@
 		.onModeChanged = onModeChanged
 	};
 
-	ast_log(LOG_NOTICE, 
-		"---------------------------------------------------------------------------------\n"
-		"---  ******* IMPORTANT NOTE ***********\n"
-		"---\n"
-		"---  This module is currently unsupported.  Use it at your own risk.\n"
-		"---\n"
-		"---------------------------------------------------------------------------------\n");
-
 	myself = ast_module_info->self;
 
 	h225Callbacks.onReceivedSetup = &ooh323_onReceivedSetup;

Added: team/may/chan_ooh323_evo/addons/todo.may
URL: http://svnview.digium.com/svn/asterisk/team/may/chan_ooh323_evo/addons/todo.may?view=auto&rev=228765
==============================================================================
--- team/may/chan_ooh323_evo/addons/todo.may (added)
+++ team/may/chan_ooh323_evo/addons/todo.may Fri Nov  6 19:37:20 2009
@@ -1,0 +1,10 @@
+chan_ooh323:
+
+	directmedia interface (rtp directly between peers)
+	myip options (multihomed and multipeering based on our ip)
+	gatekeeper interface enhancement (authentication as first)
+	documentation and program code readability and cleanup
+
+other:
+	app_t38gateway (t38 transparent between t38 and non-t38 channels, this 
+	work is partially done by others)

Propchange: team/may/chan_ooh323_evo/addons/todo.may
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: team/may/chan_ooh323_evo/addons/todo.may
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: team/may/chan_ooh323_evo/addons/todo.may
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: team/may/chan_ooh323_evo/changes.may
URL: http://svnview.digium.com/svn/asterisk/team/may/chan_ooh323_evo/changes.may?view=auto&rev=228765
==============================================================================
--- team/may/chan_ooh323_evo/changes.may (added)
+++ team/may/chan_ooh323_evo/changes.may Fri Nov  6 19:37:20 2009
@@ -1,0 +1,10 @@
+second stage of development chan_ooh323 and related.
+
+
+core show channels correction (issue #16161)
+
+integer instead of char framing in ast_codec_pref (framing was no more than 127 ms because signed char)
+
+g723 is smoother-aware codec (it's really ;))
+
+app_fasdetect in addons (helper application which try to detect false answer, for now it can detect 400, 444, 500 hz ringing tone and silence)

Propchange: team/may/chan_ooh323_evo/changes.may
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: team/may/chan_ooh323_evo/changes.may
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: team/may/chan_ooh323_evo/changes.may
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: team/may/chan_ooh323_evo/include/asterisk/frame.h
URL: http://svnview.digium.com/svn/asterisk/team/may/chan_ooh323_evo/include/asterisk/frame.h?view=diff&rev=228765&r1=228764&r2=228765
==============================================================================
--- team/may/chan_ooh323_evo/include/asterisk/frame.h (original)
+++ team/may/chan_ooh323_evo/include/asterisk/frame.h Fri Nov  6 19:37:20 2009
@@ -37,7 +37,7 @@
 
 struct ast_codec_pref {
 	char order[sizeof(format_t) * 8];
-	char framing[sizeof(format_t) * 8];
+	int framing[sizeof(format_t) * 8];
 };
 
 /*!

Modified: team/may/chan_ooh323_evo/main/channel.c
URL: http://svnview.digium.com/svn/asterisk/team/may/chan_ooh323_evo/main/channel.c?view=diff&rev=228765&r1=228764&r2=228765
==============================================================================
--- team/may/chan_ooh323_evo/main/channel.c (original)
+++ team/may/chan_ooh323_evo/main/channel.c Fri Nov  6 19:37:20 2009
@@ -1321,12 +1321,12 @@
 
 	ast_channel_lock(chan);
 
-	if (cmp_args->name) { /* match by name */
+	if (cmp_args->name && cmp_args->name[0]) { /* match by name */
 		if ((!name_len && strcasecmp(chan->name, cmp_args->name)) ||
 				(name_len && strncasecmp(chan->name, cmp_args->name, name_len))) {
 			ret = 0; /* name match failed */
 		}
-	} else if (cmp_args->exten) {
+	} else if (cmp_args->exten && cmp_args->exten[0]) {
 		if (cmp_args->context && strcasecmp(chan->context, cmp_args->context) &&
 				strcasecmp(chan->macrocontext, cmp_args->context)) {
 			ret = 0; /* context match failed */
@@ -1335,11 +1335,13 @@
 				strcasecmp(chan->macroexten, cmp_args->exten)) {
 			ret = 0; /* exten match failed */
 		}
-	} else if (cmp_args->uniqueid) {
+	} else if (cmp_args->uniqueid && cmp_args->uniqueid[0]) {
 		if ((!name_len && strcasecmp(chan->uniqueid, cmp_args->uniqueid)) ||
 				(name_len && strncasecmp(chan->uniqueid, cmp_args->uniqueid, name_len))) {
 			ret = 0; /* uniqueid match failed */
 		}
+	} else {
+		ret = 0;
 	}
 
 	ast_channel_unlock(chan);

Modified: team/may/chan_ooh323_evo/res/res_rtp_asterisk.c
URL: http://svnview.digium.com/svn/asterisk/team/may/chan_ooh323_evo/res/res_rtp_asterisk.c?view=diff&rev=228765&r1=228764&r2=228765
==============================================================================
--- team/may/chan_ooh323_evo/res/res_rtp_asterisk.c (original)
+++ team/may/chan_ooh323_evo/res/res_rtp_asterisk.c Fri Nov  6 19:37:20 2009
@@ -1160,7 +1160,6 @@
 
 		switch (subclass) {
 		case AST_FORMAT_SPEEX:
-		case AST_FORMAT_G723_1:
 		case AST_FORMAT_SIREN7:
 		case AST_FORMAT_SIREN14:
 			/* these are all frame-based codecs and cannot be safely run through




More information about the svn-commits mailing list