[Freeswitch-svn] [commit] r5519 - in freeswitch/branches/greenlizard: libs/win32/etpan libs/win32/sofia libs/xmlrpc-c/lib/abyss/src scripts/contrib/trixter scripts/contrib/trixter/xml-cdr scripts/contrib/trixter/xml-curl scripts/contrib/trixter/xml-curl/modules scripts/contrib/trixter/xml-curl/templates/switch1 scripts/contrib/trixter/xml-curl/templates/switch1/configuration scripts/contrib/trixter/xml-curl/templates/switch1/dialplan src src/include src/mod/applications/mod_commands src/mod/codecs/mod_l16 src/mod/endpoints/mod_iax src/mod/endpoints/mod_portaudio src/mod/endpoints/mod_sofia src/mod/languages/mod_spidermonkey

Freeswitch SVN greenlizard at freeswitch.org
Sun Jul 8 22:28:40 EDT 2007


Author: greenlizard
Date: Sun Jul  8 22:28:40 2007
New Revision: 5519

Added:
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/modules/
      - copied from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/modules/
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/modules/configuration.php
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/modules/configuration.php
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/modules/dialplan.php
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/modules/dialplan.php
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/
      - copied from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/conference.conf.tpl
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/conference.conf.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/dialplan_directory.conf.tpl
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/dialplan_directory.conf.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/dingaling.conf.tpl
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/dingaling.conf.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/enum.conf.tpl
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/enum.conf.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/event_multicast.conf.tpl
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/event_multicast.conf.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/event_socket.conf.tpl
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/event_socket.conf.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/iax.conf.tpl
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/iax.conf.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/ivr.conf.tpl
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/ivr.conf.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/portaudio.conf.tpl
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/portaudio.conf.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/post_load_modules.conf.tpl
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/post_load_modules.conf.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/rss.conf.tpl
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/rss.conf.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/sofia.conf.tpl
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/sofia.conf.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/spidermonkey.conf.tpl
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/spidermonkey.conf.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/wanpipe.conf.tpl
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/wanpipe.conf.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/woomera.conf.tpl
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/woomera.conf.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/xml_rpc.conf.tpl
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/xml_rpc.conf.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/xmpp_event.conf.tpl
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/xmpp_event.conf.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/zeroconf.conf.tpl
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/configuration/zeroconf.conf.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/dialplan/
      - copied from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/dialplan/
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/dialplan/fail.tpl
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/dialplan/fail.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/dialplan/frompstn.tpl
      - copied unchanged from r5513, /freeswitch/trunk/scripts/contrib/trixter/xml-curl/templates/switch1/dialplan/frompstn.tpl
Removed:
   freeswitch/branches/greenlizard/scripts/contrib/trixter/Parse_XML_CDR.php
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/conference.conf.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/fail.tpl
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/templates/switch1/frompstn.tpl
Modified:
   freeswitch/branches/greenlizard/libs/win32/etpan/libetpan.vcproj
   freeswitch/branches/greenlizard/libs/win32/sofia/libsofia_sip_ua_static.vcproj
   freeswitch/branches/greenlizard/libs/xmlrpc-c/lib/abyss/src/conn.c
   freeswitch/branches/greenlizard/scripts/contrib/trixter/faxlib.jm
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-cdr/Parse_XML_CDR.php
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-cdr/README
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/README
   freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/curlrouting.php
   freeswitch/branches/greenlizard/src/include/switch_loadable_module.h
   freeswitch/branches/greenlizard/src/include/switch_module_interfaces.h
   freeswitch/branches/greenlizard/src/include/switch_types.h
   freeswitch/branches/greenlizard/src/mod/applications/mod_commands/mod_commands.c
   freeswitch/branches/greenlizard/src/mod/codecs/mod_l16/mod_l16.c
   freeswitch/branches/greenlizard/src/mod/endpoints/mod_iax/mod_iax.c
   freeswitch/branches/greenlizard/src/mod/endpoints/mod_portaudio/mod_portaudio.c
   freeswitch/branches/greenlizard/src/mod/endpoints/mod_sofia/sofia_glue.c
   freeswitch/branches/greenlizard/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c
   freeswitch/branches/greenlizard/src/switch_channel.c
   freeswitch/branches/greenlizard/src/switch_core.c
   freeswitch/branches/greenlizard/src/switch_core_file.c
   freeswitch/branches/greenlizard/src/switch_core_io.c
   freeswitch/branches/greenlizard/src/switch_core_session.c
   freeswitch/branches/greenlizard/src/switch_core_state_machine.c
   freeswitch/branches/greenlizard/src/switch_ivr_bridge.c
   freeswitch/branches/greenlizard/src/switch_ivr_play_say.c
   freeswitch/branches/greenlizard/src/switch_rtp.c

Log:
merge trunk version 5489 to 5513

Modified: freeswitch/branches/greenlizard/libs/win32/etpan/libetpan.vcproj
==============================================================================
--- freeswitch/branches/greenlizard/libs/win32/etpan/libetpan.vcproj	(original)
+++ freeswitch/branches/greenlizard/libs/win32/etpan/libetpan.vcproj	Sun Jul  8 22:28:40 2007
@@ -50,7 +50,7 @@
 				UsePrecompiledHeader="0"
 				WarningLevel="0"
 				Detect64BitPortabilityProblems="false"
-				DebugInformationFormat="4"
+				DebugInformationFormat="3"
 				CompileAs="1"
 				ForcedIncludeFiles="$(ProjectDir)../../libetpan/build-windows/StdAfx.h"
 			/>
@@ -68,7 +68,7 @@
 				AdditionalOptions="/DLL"
 				AdditionalDependencies="oldnames.lib Ws2_32.lib mswsock.lib"
 				OutputFile="$(SolutionDir)$(IntDir)/libetpan.dll"
-				LinkIncremental="2"
+				LinkIncremental="1"
 				SuppressStartupBanner="true"
 				IgnoreDefaultLibraryNames="C"
 				ModuleDefinitionFile=""
@@ -1081,6 +1081,7 @@
 						>
 						<Tool
 							Name="VCCLCompilerTool"
+							MinimalRebuild="false"
 							CompileAs="2"
 						/>
 					</FileConfiguration>

Modified: freeswitch/branches/greenlizard/libs/win32/sofia/libsofia_sip_ua_static.vcproj
==============================================================================
--- freeswitch/branches/greenlizard/libs/win32/sofia/libsofia_sip_ua_static.vcproj	(original)
+++ freeswitch/branches/greenlizard/libs/win32/sofia/libsofia_sip_ua_static.vcproj	Sun Jul  8 22:28:40 2007
@@ -26,7 +26,7 @@
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
-				CommandLine="if not exist &quot;$(ProjectDir)..\..\sofia-sip\win32\gawk.exe&quot; cscript /nologo &quot;$(ProjectDir)..\util.vbs&quot; Get http://svn.freeswitch.org/downloads/win32/gawk.exe &quot;$(ProjectDir)..\..\sofia-sip\win32\&quot;&#x0D;&#x0A;cd /D &quot;$(ProjectDir)..\..\sofia-sip\win32\&quot;&#x0D;&#x0A;&quot;autogen.cmd&quot;&#x0D;&#x0A;"
+				CommandLine="if not exist &quot;$(ProjectDir)..\..\sofia-sip\win32\gawk.exe&quot; cscript /nologo &quot;$(ProjectDir)..\util.vbs&quot; Get http://svn.freeswitch.org/downloads/win32/gawk.exe &quot;$(ProjectDir)..\..\sofia-sip\win32\&quot;&#x0D;&#x0A;cd /D &quot;$(ProjectDir)..\..\sofia-sip\win32\&quot;&#x0D;&#x0A;set AWK=&quot;$(ProjectDir)..\..\sofia-sip\win32\gawk.exe&quot;&#x0D;&#x0A;&quot;autogen.cmd&quot;&#x0D;&#x0A;"
 			/>
 			<Tool
 				Name="VCCustomBuildTool"
@@ -105,7 +105,7 @@
 			>
 			<Tool
 				Name="VCPreBuildEventTool"
-				CommandLine="if not exist &quot;$(ProjectDir)..\..\sofia-sip\win32\gawk.exe&quot; cscript /nologo &quot;$(ProjectDir)..\util.vbs&quot; Get http://svn.freeswitch.org/downloads/win32/gawk.exe &quot;$(ProjectDir)..\..\sofia-sip\win32\&quot;&#x0D;&#x0A;cd /D &quot;$(ProjectDir)..\..\sofia-sip\win32\&quot;&#x0D;&#x0A;&quot;autogen.cmd&quot;&#x0D;&#x0A;"
+				CommandLine="if not exist &quot;$(ProjectDir)..\..\sofia-sip\win32\gawk.exe&quot; cscript /nologo &quot;$(ProjectDir)..\util.vbs&quot; Get http://svn.freeswitch.org/downloads/win32/gawk.exe &quot;$(ProjectDir)..\..\sofia-sip\win32\&quot;&#x0D;&#x0A;cd /D &quot;$(ProjectDir)..\..\sofia-sip\win32\&quot;&#x0D;&#x0A;set AWK=&quot;$(ProjectDir)..\..\sofia-sip\win32\gawk.exe&quot;&#x0D;&#x0A;&quot;autogen.cmd&quot;&#x0D;&#x0A;"
 			/>
 			<Tool
 				Name="VCCustomBuildTool"

Modified: freeswitch/branches/greenlizard/libs/xmlrpc-c/lib/abyss/src/conn.c
==============================================================================
--- freeswitch/branches/greenlizard/libs/xmlrpc-c/lib/abyss/src/conn.c	(original)
+++ freeswitch/branches/greenlizard/libs/xmlrpc-c/lib/abyss/src/conn.c	Sun Jul  8 22:28:40 2007
@@ -277,7 +277,7 @@
 {
     char *p,*t;
     abyss_bool first=TRUE;
-    uint32_t to,start;
+    clock_t to,start;
 
     p=*z=c->buffer+c->bufferpos;
     start=clock();

Modified: freeswitch/branches/greenlizard/scripts/contrib/trixter/faxlib.jm
==============================================================================
--- freeswitch/branches/greenlizard/scripts/contrib/trixter/faxlib.jm	(original)
+++ freeswitch/branches/greenlizard/scripts/contrib/trixter/faxlib.jm	Sun Jul  8 22:28:40 2007
@@ -1,5 +1,13 @@
 //  -*- mode:c; tab-width:4; c-basic-offset:4; c-indent-level:4; indent-tabs-mode:nil;  -*-
 /*
+ *
+ * THIS IS DEPRECATED NOW - THERE IS A FUNCTION IN DPTOOLS THAT LETS YOU DO MOST
+ * OF THIS WITHOUT USING THIS SCRIPT.  DIRECT TRANSFER ON FAX CNG DETECT
+ * THIS IS HERE FOR REFERENCE AND HOW YOU MIGHT EMAIL A PDF OF A FAX
+ *
+ */
+
+/*
  * Version: MPL 1.1
  *
  * The contents of this file are subject to the Mozilla Public License Version

Modified: freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-cdr/Parse_XML_CDR.php
==============================================================================
--- freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-cdr/Parse_XML_CDR.php	(original)
+++ freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-cdr/Parse_XML_CDR.php	Sun Jul  8 22:28:40 2007
@@ -9,6 +9,7 @@
     var $_level = 0;
     
     function Parse_CDR_XML(&$data,$showattribs = false) {
+        $data = preg_replace("/<(.*?)><(.*?)><\/(.*?)>/","<\\1>\\2</\\3>",$data);
         $this->_showAttribs = $showattribs;
         $this->_parser = xml_parser_create();
         
@@ -74,6 +75,8 @@
             if (!isset($start[$name])) $start[$name] = '';
             $add = '';
         }
+
+
         $update = &$start[$name];
 
         if ($isattribs && !$this->_showAttribs) return;

Modified: freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-cdr/README
==============================================================================
--- freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-cdr/README	(original)
+++ freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-cdr/README	Sun Jul  8 22:28:40 2007
@@ -1,11 +1,23 @@
 To use this you need to have the mod_xml_cdr loaded and configured.
 
+If you use either errLogDir or logDir then make sure that the directories
+exist.  In the case of logDir the original code appended "/xml_cdr" onto
+the value, so I do that as well.  If logDir is set but empty (value="")
+it will use the FreeSWITCH default log dir and appent "/xml_cdr" onto
+that.
+
 <configuration name="xml_cdr.conf" description="XML CDR CURL logger">
 <settings>
+    <!-- the credentials we may optionally use when POSTing ->
     <param name="cred" value="user:pass"/>
+    <!-- url to log to -->
     <param name="url" value="http://myhost/cdr.php"/>
+    <!-- how many times we retry not counting the inital try -->
     <param name="retries" value="2"/>
+    <!-- how many seconds before we try again -->
     <param name="delay" value="120"/>
+    <!-- this is where we log failed POSTs to the webserver -->
+    <param name="errLogDir" value="/usr/local/freeswitch/log/xml_cdr_errors"/>
 
 <!-- optional: if not present we do not log every record to disk -->
 <!-- per original code base /xml_cdr is appended to the directory name -->

Modified: freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/README
==============================================================================
--- freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/README	(original)
+++ freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/README	Sun Jul  8 22:28:40 2007
@@ -1 +1,57 @@
+This is an example that will respond to mod_xml_curl requests for information.
+It uses modules, which are contained in the modules subdirectory.  If a module
+(any file ending in .php) is in the dir it will be loaded.  If it registers
+to handle a specific type of xml_curl request, that will be passed to the function named.
+If you dont have a module for a specific type of data, for example directory, then
+a 404 will be returned to FreeSWITCH.  
+
+The module nature allows you to more easily turn on/off different components.  
+
+Its a template based system, which relies on someone authenticating, such as with
+.htaccess.  Their username is used in this default example for their configuration
+files.  This allows for multiple switches to identify themselves uniquely, as well
+as giving you the ability to have different templates for different switches.
+
+
+
+
+
+If you do configuration via mod_xml_curl you only need to load and configure 
+mod_xml_curl from freeswitch.xml, all other modules and their configs do not 
+need to be present.  I do suggest that you load loggers before xml_curl though.
+
+If you load modules *before* loading xml_curl they will be loaded from the static
+xml file, only *after* loading xml_curl will stuff start to be pulled from the 
+webserver.  Seems logical but some people dont think about it and wonder why
+it doesnt work.
+
+
+
+
+
+
+The default examples require a .htaccess user to be authed with.  If you dont 
+want to do this (I recommend that you do password protect it) you can optionally
+just add the following somewhere near the top of curlrouting.php
+
+$_SERVER['REMOTE_USER']='switch1';
+
+which will set the username to 'switch1' which is the default user in this example
+
+
+
+
+PREREQUISITES
 You will need to get smarty from http://smarty.php.net to make this work
+
+If you install it globally, edit your php.ini to make the Smarty/libs dir as part
+of the search path, otherwise add the following to curlrouting.php near the other 
+ini_set line.  Adjust it to suit your particular setup.
+
+ini_set("include_path",".:/usr/local/lib/php:/usr/share/php:./Smarty-2.6.18/libs");
+
+
+
+You also must create a directory named templates_c where you install this, its a smarty
+requirement for caching templates.  This directory *must* be writable by the webserver
+or Smarty will not properly operate.

Modified: freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/curlrouting.php
==============================================================================
--- freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/curlrouting.php	(original)
+++ freeswitch/branches/greenlizard/scripts/contrib/trixter/xml-curl/curlrouting.php	Sun Jul  8 22:28:40 2007
@@ -1,65 +1,28 @@
 <?php  //  -*- mode:c; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil;  -*-
 Header("Content-type: text/plain");
 
-ini_set("include_path",".:/usr/local/lib/php:/usr/share/php:./Smarty-2.6.18/libs");
+$callBacks = Array();
+ini_set("magic_quotes_gpc","Off");
 include_once('Smarty.class.php');
 
-
-if (isset($_POST['section']) && $_POST['section']=="dialplan") {
-	// create a new smarty object
-	$smarty = new Smarty();
-	$template = 'fail.tpl';
-
-
-	// see if they authenticated via .htaccess
-	if(isset($_SERVER['REMOTE_USER']) && $_SERVER['REMOTE_USER']!="") {
-        // we might check a database for  the route, but in this example we hardcode it
-        $template = 'frompstn.tpl'; // one can exist for each profile or channel type or ...
-
-        $ACTION['javascript']="somethingcool.js";
-        $ACTION['bridge']="sofia/external/".$_POST['destination_number']."@myprovider.tld";
-        $smarty->assign('ACTION',$ACTION);
-
-    } // end - they were logged in
-	$smarty->display($_SERVER['DOCUMENT_ROOT']."/templates/".$_SERVER['REMOTE_USER']."/".$template);
-} else if (isset($_POST['section']) && $_POST['section']=="configuration") {
-		$smarty = new Smarty();
-		$template = $_POST['key_value'].".tpl";
-		switch($_POST['key_value']) {
-        case "conference.conf":
-            // simulate data from a database, perhaps a table with 3 columns did,value,args
-            $digits['pin'] = '1234';
-            $digits['anounce-count'] = '2';
-            $digits['max-mmebers'] = '15';
-            $digits['energy-level'] = '300';
-            $params['0'] = 'event';
-            $params['1'] = 'event';
-            $params['2'] = 'event';
-            $params['3'] = 'event';
-            $params['4'] = 'event';
-            $params['5'] = 'event';
-            $params['6'] = 'event';
-            $params['7'] = 'event';
-            $params['8'] = 'event';
-            $params['9'] = 'event';
-            $params['#'] = 'event';
-            $params['*'] = 'event';
+// load the modules
+$dh = @opendir("./modules") or die("Unable to open modules dir");
+while ($file = readdir($dh)) {
+    if(preg_match("/.*\.php$/i",$file)) {
+        include_once("modules/$file");
+    }
+}
 
 
-            $smarty->assign('CONFNAME',$_POST['conf_name']);
-            $smarty->assign('digits',$digits);
-            $smarty->assign('params',$params);
-		}
-		if($smarty->template_exists($_SERVER['DOCUMENT_ROOT']."/templates/".$_SERVER['REMOTE_USER']."/".$template)) {
-			$smarty->display($_SERVER['DOCUMENT_ROOT']."/templates/".$_SERVER['REMOTE_USER']."/".$template);
-		} else {
-            //			//logCallData();
-			error_log("Unable to locate template $template");
-			$smarty->assign('CONFNAME',$_POST['key_value']);
-			$smarty->display($_SERVER['DOCUMENT_ROOT']."/templates/".$_SERVER['REMOTE_USER']."/default.conf.tpl");
-		}
-} else if (isset($_POST['section']) && $_POST['section']=="directory") {
-    // we dont do anything but you get the idea
+if(isset($_POST['section'])) {
+    if(isset($callBacks[$_POST['section']])) {
+        if(call_user_func($callBacks[$_POST['section']])==TRUE) {
+            exit;
+        }
+    }
 }
+Header("HTTP/1.0 404 Not Found");
+echo "Not Found";
+exit;
 
 ?>

Modified: freeswitch/branches/greenlizard/src/include/switch_loadable_module.h
==============================================================================
--- freeswitch/branches/greenlizard/src/include/switch_loadable_module.h	(original)
+++ freeswitch/branches/greenlizard/src/include/switch_loadable_module.h	Sun Jul  8 22:28:40 2007
@@ -256,7 +256,7 @@
   \param filename the path to the module's dll or so file
   \return SWITCH_STATUS_SUCCESS on a successful load
 */
-SWITCH_MOD_DECLARE(switch_status_t) switch_module_load(const switch_loadable_module_interface_t **module_interface, char *filename);
+SWITCH_MOD_DECLARE(switch_status_t) switch_module_load( switch_loadable_module_interface_t **module_interface, char *filename);
 SWITCH_MOD_DECLARE(switch_status_t) switch_module_runtime(void);
 
 /*!

Modified: freeswitch/branches/greenlizard/src/include/switch_module_interfaces.h
==============================================================================
--- freeswitch/branches/greenlizard/src/include/switch_module_interfaces.h	(original)
+++ freeswitch/branches/greenlizard/src/include/switch_module_interfaces.h	Sun Jul  8 22:28:40 2007
@@ -53,7 +53,8 @@
 	SWITCH_SHN_ON_LOOPBACK,
 	SWITCH_SHN_ON_TRANSMIT,
 	SWITCH_SHN_ON_HOLD,
-	SWITCH_SHN_ON_HIBERNATE
+	SWITCH_SHN_ON_HIBERNATE,
+	SWITCH_SHN_ON_RESET,
 } switch_state_handler_name_t;
 
 struct switch_state_handler_table {
@@ -73,6 +74,8 @@
 	switch_state_handler_t on_hold;
 	/*! executed when the state changes to hibernate */
 	switch_state_handler_t on_hibernate;
+	/*! executed when the state changes to reset */
+	switch_state_handler_t on_reset;
 	void *padding[10];
 };
 
@@ -281,6 +284,9 @@
 	switch_buffer_t *audio_buffer;
 	uint32_t thresh;
 	uint32_t silence_hits;
+	uint32_t offset_pos;
+	uint32_t last_pos;
+	int32_t vol;
 };
 
 /*! \brief Abstract interface to an asr module */

Modified: freeswitch/branches/greenlizard/src/include/switch_types.h
==============================================================================
--- freeswitch/branches/greenlizard/src/include/switch_types.h	(original)
+++ freeswitch/branches/greenlizard/src/include/switch_types.h	Sun Jul  8 22:28:40 2007
@@ -527,6 +527,7 @@
 CS_LOOPBACK  - Channel is in loopback
 CS_HOLD		 - Channel is on hold
 CS_HIBERNATE - Channel is in a sleep state
+CS_RESET 	 - Channel is in a reset state
 CS_HANGUP    - Channel is flagged for hangup and ready to end
 CS_DONE      - Channel is ready to be destroyed and out of the state machine
 </pre>
@@ -540,6 +541,7 @@
 	CS_LOOPBACK,
 	CS_HOLD,
 	CS_HIBERNATE,
+	CS_RESET,
 	CS_HANGUP,
 	CS_DONE
 } switch_channel_state_t;

Modified: freeswitch/branches/greenlizard/src/mod/applications/mod_commands/mod_commands.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/applications/mod_commands/mod_commands.c	(original)
+++ freeswitch/branches/greenlizard/src/mod/applications/mod_commands/mod_commands.c	Sun Jul  8 22:28:40 2007
@@ -311,6 +311,19 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
+
+SWITCH_STANDARD_API(uuid_function)
+{
+	switch_uuid_t uuid;
+	char uuid_str[SWITCH_UUID_FORMATTED_LENGTH + 1];
+
+	switch_uuid_get(&uuid);
+    switch_uuid_format(uuid_str, &uuid);
+	stream->write_function(stream, "%s", uuid_str);
+	return SWITCH_STATUS_SUCCESS;
+}
+
+
 #define SCHED_TRANSFER_SYNTAX "[+]<time> <uuid> <extension> [<dialplan>] [<context>]"
 SWITCH_STANDARD_API(sched_transfer_function)
 {
@@ -1282,7 +1295,7 @@
 	SWITCH_ADD_API(commands_api_interface, "break", "Break", break_function, BREAK_SYNTAX);
 	SWITCH_ADD_API(commands_api_interface, "show", "Show", show_function, SHOW_SYNTAX);
 	SWITCH_ADD_API(commands_api_interface, "status", "status", status_function, "");
-	SWITCH_ADD_API(commands_api_interface, "uuid_bridge", "uuid_bridge", uuid_bridge_function, UUID_SYNTAX);
+	SWITCH_ADD_API(commands_api_interface, "uuid_bridge", "uuid_bridge", uuid_bridge_function, "");
 	SWITCH_ADD_API(commands_api_interface, "session_displace", "session displace", session_displace_function, "<uuid> [start|stop] <path> [<limit>] [mux]");
 	SWITCH_ADD_API(commands_api_interface, "session_record", "session record", session_record_function, SESS_REC_SYNTAX);
 	SWITCH_ADD_API(commands_api_interface, "broadcast", "broadcast", uuid_broadcast_function, BROADCAST_SYNTAX);
@@ -1294,6 +1307,7 @@
 	SWITCH_ADD_API(commands_api_interface, "sched_hangup", "Schedule a running call to hangup", sched_hangup_function, SCHED_HANGUP_SYNTAX);
 	SWITCH_ADD_API(commands_api_interface, "sched_broadcast", "Schedule a broadcast event to a running call", sched_broadcast_function, SCHED_BROADCAST_SYNTAX);
 	SWITCH_ADD_API(commands_api_interface, "sched_transfer", "Schedule a broadcast event to a running call", sched_transfer_function, SCHED_TRANSFER_SYNTAX);
+	SWITCH_ADD_API(commands_api_interface, "create_uuid", "Create a uuid", uuid_function, UUID_SYNTAX);
 	SWITCH_ADD_API(commands_api_interface, "sched_api", "Schedule an api command", sched_api_function, "[+]<time> <group_name> <command_string>");
 	SWITCH_ADD_API(commands_api_interface, "sched_del", "Delete a Scheduled task", sched_del_function, "<task_id>|<group_id>");
 	SWITCH_ADD_API(commands_api_interface, "xml_wrap", "Wrap another api command in xml", xml_wrap_api_function, "<command> <args>");

Modified: freeswitch/branches/greenlizard/src/mod/codecs/mod_l16/mod_l16.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/codecs/mod_l16/mod_l16.c	(original)
+++ freeswitch/branches/greenlizard/src/mod/codecs/mod_l16/mod_l16.c	Sun Jul  8 22:28:40 2007
@@ -55,7 +55,7 @@
 										 uint32_t decoded_rate, void *encoded_data, uint32_t * encoded_data_len, uint32_t * encoded_rate,
 										 unsigned int *flag)
 {
-	printf("WTF %d %d\n", codec->implementation->samples_per_second , other_codec->implementation->samples_per_second );
+
 	/* NOOP indicates that the audio in is already the same as the audio out, so no conversion was necessary. */
 	if (codec && other_codec && codec->implementation && other_codec->implementation && codec->implementation->samples_per_second != other_codec->implementation->samples_per_second) {
 		memcpy(encoded_data, decoded_data, decoded_data_len);

Modified: freeswitch/branches/greenlizard/src/mod/endpoints/mod_iax/mod_iax.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/endpoints/mod_iax/mod_iax.c	(original)
+++ freeswitch/branches/greenlizard/src/mod/endpoints/mod_iax/mod_iax.c	Sun Jul  8 22:28:40 2007
@@ -345,7 +345,6 @@
 		unsigned short samples = iax_build_codec_rates();
 		unsigned short mixed = ((tech_pvt->samprate ? tech_pvt->samprate : *samprate) & samples);
 
-		//printf("\n\n******WTF %u %u %u\n******\n", *samprate, samples, mixed);
 		srate = 8000;
 
 		if (mixed & IAX_RATE_16KHZ) {

Modified: freeswitch/branches/greenlizard/src/mod/endpoints/mod_portaudio/mod_portaudio.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/endpoints/mod_portaudio/mod_portaudio.c	(original)
+++ freeswitch/branches/greenlizard/src/mod/endpoints/mod_portaudio/mod_portaudio.c	Sun Jul  8 22:28:40 2007
@@ -242,6 +242,8 @@
 		switch_channel_mark_ring_ready(channel);
 
 		while (switch_channel_get_state(channel) == CS_INIT && !switch_test_flag(tech_pvt, TFLAG_ANSWER)) {
+			switch_size_t olen = globals.timer.samples;
+				
 			if (switch_time_now() - last >= waitsec) {
 				char buf[512];
 				switch_event_t *event;
@@ -254,25 +256,22 @@
 					switch_channel_event_set_data(channel, event);
 					switch_event_fire(&event);
 				}
-
 				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s\n", buf);
 				last = switch_time_now();
-				if (ring_file) {
+			}
+			
+			if (ring_file) {
+				if (switch_core_timer_next(&globals.timer) != SWITCH_STATUS_SUCCESS) {
+					switch_core_file_close(&fh);
+					break;
+				}
+				switch_core_file_read(&fh, abuf, &olen);
+				if (olen == 0) {
 					unsigned int pos = 0;
 					switch_core_file_seek(&fh, &pos, 0, SEEK_SET);
-					for (;;) {
-						switch_size_t olen = 1024;
-						switch_core_file_read(&fh, abuf, &olen);
-						if (olen == 0) {
-							break;
-						}
-						WriteAudioStream(globals.ring_stream, abuf, (long) olen, &globals.timer);
-					}
 				}
+				WriteAudioStream(globals.ring_stream, abuf, (long) olen, &globals.timer);
 			}
-
-			switch_yield(globals.read_codec.implementation->microseconds_per_frame);
-
 		}
 		switch_clear_flag_locked((&globals), GFLAG_RING);
 	}
@@ -619,7 +618,7 @@
 	if ((samples = ReadAudioStream(globals.audio_stream, globals.read_frame.data, 
 								   globals.read_codec.implementation->samples_per_frame, 
 								   &globals.timer)) == 0) {
-
+		switch_mutex_unlock(globals.device_lock);
 		goto cng;
 	} else {
 		globals.read_frame.datalen = samples * 2;

Modified: freeswitch/branches/greenlizard/src/mod/endpoints/mod_sofia/sofia_glue.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/endpoints/mod_sofia/sofia_glue.c	(original)
+++ freeswitch/branches/greenlizard/src/mod/endpoints/mod_sofia/sofia_glue.c	Sun Jul  8 22:28:40 2007
@@ -865,7 +865,7 @@
 	}
 
 	if (!((tech_pvt->profile->pflags & PFLAG_REWRITE_TIMESTAMPS) || 
-		  ((val = switch_channel_get_variable(tech_pvt->channel, "rtp_rewrite_timestamps")) && switch_true(val)))) {
+		  ((val = switch_channel_get_variable(tech_pvt->channel, "rtp_rewrite_timestamps")) && !switch_true(val)))) {
 		flags |= SWITCH_RTP_FLAG_RAW_WRITE;
 	}
 

Modified: freeswitch/branches/greenlizard/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c
==============================================================================
--- freeswitch/branches/greenlizard/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c	(original)
+++ freeswitch/branches/greenlizard/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c	Sun Jul  8 22:28:40 2007
@@ -930,6 +930,29 @@
 			}
 
 			return SWITCH_STATUS_FALSE;
+		} else if (!strncasecmp(ret, "volume", 6)) {
+			char *p;
+
+			if ((p = strchr(ret, ':'))) {
+				p++;
+				if (*p == '+' || *p == '-') {
+					int step;
+					if (!(step = atoi(p))) {
+						step = 1;
+					}
+					fh->vol += step;
+				} else {
+					int vol = atoi(p);
+					fh->vol = vol;
+				}
+				return SWITCH_STATUS_SUCCESS;
+			}
+
+			if (fh->vol) {
+				switch_normalize_volume(fh->vol);
+			}
+
+			return SWITCH_STATUS_FALSE;
 		} else if (!strcasecmp(ret, "pause")) {
 			if (switch_test_flag(fh, SWITCH_FILE_PAUSE)) {
 				switch_clear_flag(fh, SWITCH_FILE_PAUSE);
@@ -1361,8 +1384,8 @@
 	switch_file_handle_t fh = { 0 };
 	JSFunction *function;
 	switch_input_args_t args = { 0 };
-	char *prebuf;
-
+	char *prebuf, posbuf[35] = "";
+	
 	METHOD_SANITY_CHECK();
 
 	channel = switch_core_session_get_channel(jss->session);
@@ -1420,6 +1443,9 @@
 	JS_ResumeRequest(cx, cb_state.saveDepth);
 	*rval = cb_state.ret;
 
+	snprintf(posbuf, sizeof(posbuf), "%u", fh.offset_pos);
+	switch_channel_set_variable(channel, "last_file_position", posbuf);
+
 	return JS_TRUE;
 }
 
@@ -1768,15 +1794,19 @@
 	CHANNEL_SANITY_CHECK();
 
 
-	if (argc > 1) {
+	if (argc > 0) {
 		const switch_application_interface_t *application_interface;
 		char *app_name = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
-		char *app_arg = JS_GetStringBytes(JS_ValueToString(cx, argv[1]));
+		char *app_arg = NULL;
 		struct js_session *jss = JS_GetPrivate(cx, obj);
 		jsrefcount saveDepth;
 
 		METHOD_SANITY_CHECK();
 
+		if (argc > 1) {
+			app_arg = JS_GetStringBytes(JS_ValueToString(cx, argv[1]));
+		}
+
 		if ((application_interface = switch_loadable_module_get_application_interface(app_name))) {
 			if (application_interface->application_function) {
 				saveDepth = JS_SuspendRequest(cx);

Modified: freeswitch/branches/greenlizard/src/switch_channel.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_channel.c	(original)
+++ freeswitch/branches/greenlizard/src/switch_channel.c	Sun Jul  8 22:28:40 2007
@@ -139,9 +139,13 @@
 	uint8_t x;
 	switch_call_cause_t cause = SWITCH_CAUSE_UNALLOCATED;
 
-	for (x = 0; CAUSE_CHART[x].name; x++) {
-		if (!strcasecmp(CAUSE_CHART[x].name, str)) {
-			cause = CAUSE_CHART[x].cause;
+	if (*str > 47 && *str < 58) {
+		cause = atoi(str);
+	} else {
+		for (x = 0; CAUSE_CHART[x].name; x++) {
+			if (!strcasecmp(CAUSE_CHART[x].name, str)) {
+				cause = CAUSE_CHART[x].cause;
+			}
 		}
 	}
 	return cause;
@@ -509,7 +513,8 @@
 
 	assert(channel != NULL);
 	
-	if (!channel->hangup_cause && channel->state > CS_RING && channel->state < CS_HANGUP && !switch_test_flag(channel, CF_TRANSFER)) {
+	if (!channel->hangup_cause && channel->state > CS_RING && channel->state < CS_HANGUP && channel->state != CS_RESET && 
+		!switch_test_flag(channel, CF_TRANSFER)) {
 		ret++;
 	}
 
@@ -525,6 +530,7 @@
 	"CS_LOOPBACK",
 	"CS_HOLD",
 	"CS_HIBERNATE",
+	"CS_RESET",
 	"CS_HANGUP",
 	"CS_DONE",
 	NULL
@@ -589,6 +595,7 @@
 
 	switch (last_state) {
 	case CS_NEW:
+	case CS_RESET:
 		switch (state) {
 		default:
 			ok++;
@@ -604,6 +611,7 @@
 		case CS_EXECUTE:
 		case CS_HOLD:
 		case CS_HIBERNATE:
+		case CS_RESET:
 			ok++;
 		default:
 			break;
@@ -617,6 +625,7 @@
 		case CS_EXECUTE:
 		case CS_HOLD:
 		case CS_HIBERNATE:
+		case CS_RESET:
 			ok++;
 		default:
 			break;
@@ -630,6 +639,7 @@
 		case CS_EXECUTE:
 		case CS_HOLD:
 		case CS_HIBERNATE:
+		case CS_RESET:
 			ok++;
 		default:
 			break;
@@ -643,6 +653,7 @@
 		case CS_EXECUTE:
 		case CS_TRANSMIT:
 		case CS_HIBERNATE:
+		case CS_RESET:
 			ok++;
 		default:
 			break;
@@ -655,6 +666,7 @@
 		case CS_EXECUTE:
 		case CS_TRANSMIT:
 		case CS_HOLD:
+		case CS_RESET:
 			ok++;
 		default:
 			break;
@@ -669,6 +681,7 @@
 		case CS_TRANSMIT:
 		case CS_HOLD:
 		case CS_HIBERNATE:
+		case CS_RESET:
 			ok++;
 		default:
 			break;
@@ -682,6 +695,7 @@
 		case CS_RING:
 		case CS_HOLD:
 		case CS_HIBERNATE:
+		case CS_RESET:
 			ok++;
 		default:
 			break;
@@ -752,6 +766,7 @@
 	if (channel->state_flags) {
 		channel->flags |= channel->state_flags;
 		channel->state_flags = 0;
+
 	}
 
 	switch_mutex_unlock(channel->flag_mutex);

Modified: freeswitch/branches/greenlizard/src/switch_core.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_core.c	(original)
+++ freeswitch/branches/greenlizard/src/switch_core.c	Sun Jul  8 22:28:40 2007
@@ -398,6 +398,8 @@
 	switch_uuid_t uuid;
 	memset(&runtime, 0, sizeof(runtime));
 
+	runtime.no_new_sessions = 1;
+
 	/* INIT APR and Create the pool context */
 	if (apr_initialize() != SWITCH_STATUS_SUCCESS) {
 		*err = "FATAL ERROR! Could not initilize APR\n";
@@ -577,6 +579,9 @@
 					  "\nFreeSWITCH Version %s Started.\nCrash Protection [%s]\nMax Sessions[%u]\n\n", SWITCH_VERSION_FULL, 
 					  runtime.crash_prot ? "Enabled" : "Disabled",
 					  switch_core_session_limit(0));
+
+	runtime.no_new_sessions = 0;
+
 	return SWITCH_STATUS_SUCCESS;
 
 }

Modified: freeswitch/branches/greenlizard/src/switch_core_file.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_core_file.c	(original)
+++ freeswitch/branches/greenlizard/src/switch_core_file.c	Sun Jul  8 22:28:40 2007
@@ -110,11 +110,17 @@
 
 SWITCH_DECLARE(switch_status_t) switch_core_file_seek(switch_file_handle_t *fh, unsigned int *cur_pos, int64_t samples, int whence)
 {
+	switch_status_t status;
+
 	assert(fh != NULL);
 	assert(fh->file_interface != NULL);
 
 	switch_set_flag(fh, SWITCH_FILE_SEEK);
-	return fh->file_interface->file_seek(fh, cur_pos, samples, whence);
+	status = fh->file_interface->file_seek(fh, cur_pos, samples, whence);
+	if (samples) {
+		fh->offset_pos = *cur_pos;
+	}
+	return status;
 }
 
 SWITCH_DECLARE(switch_status_t) switch_core_file_set_string(switch_file_handle_t *fh, switch_audio_col_t col, const char *string)

Modified: freeswitch/branches/greenlizard/src/switch_core_io.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_core_io.c	(original)
+++ freeswitch/branches/greenlizard/src/switch_core_io.c	Sun Jul  8 22:28:40 2007
@@ -659,8 +659,6 @@
 								rate = session->write_codec->implementation->samples_per_second;
 							} 
 
-							printf("WTF %d %d %d\n", rate, enc_frame->datalen, session->enc_write_frame.datalen);
-							
 							status = switch_core_codec_encode(session->write_codec,
 															  frame->codec,
 															  enc_frame->data,

Modified: freeswitch/branches/greenlizard/src/switch_core_session.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_core_session.c	(original)
+++ freeswitch/branches/greenlizard/src/switch_core_session.c	Sun Jul  8 22:28:40 2007
@@ -767,7 +767,10 @@
 	switch_uuid_t uuid;
 	uint32_t count = 0;
 
-	assert(endpoint_interface != NULL);
+	if (!switch_core_ready() || endpoint_interface == NULL) {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "The system cannot create any sessions at this time.\n");
+		return NULL;
+	}
 
 	switch_mutex_lock(session_manager.session_table_mutex);
 	count = session_manager.session_count;
@@ -778,11 +781,6 @@
 		return NULL;
 	}
 
-	if (!switch_core_ready()) {
-		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Read my lips: no new sessions!\n");
-		return NULL;
-	}
-
 	if (pool && *pool) {
 		usepool = *pool;
 		*pool = NULL;

Modified: freeswitch/branches/greenlizard/src/switch_core_state_machine.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_core_state_machine.c	(original)
+++ freeswitch/branches/greenlizard/src/switch_core_state_machine.c	Sun Jul  8 22:28:40 2007
@@ -47,6 +47,14 @@
 
 }
 
+static void switch_core_standard_on_reset(switch_core_session_t *session)
+{
+
+	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Standard RESET %s\n",
+					  switch_channel_get_name(session->channel));
+	
+}
+
 static void switch_core_standard_on_ring(switch_core_session_t *session)
 {
 	switch_dialplan_interface_t *dialplan_interface = NULL;
@@ -433,6 +441,41 @@
 					}
 				}
 				break;
+			case CS_RESET:		/* Look for a dialplan and find something to do */
+				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "(%s) State RESET\n", switch_channel_get_name(session->channel));
+				if (!driver_state_handler->on_reset
+					|| (driver_state_handler->on_reset && driver_state_handler->on_reset(session) == SWITCH_STATUS_SUCCESS
+						&& midstate == switch_channel_get_state(session->channel))) {
+					while ((application_state_handler = switch_channel_get_state_handler(session->channel, index++)) != 0) {
+						if (!application_state_handler || !application_state_handler->on_reset
+							|| (application_state_handler->on_reset
+								&& application_state_handler->on_reset(session) == SWITCH_STATUS_SUCCESS
+								&& midstate == switch_channel_get_state(session->channel))) {
+							proceed++;
+							continue;
+						} else {
+							proceed = 0;
+							break;
+						}
+					}
+					index = 0;
+					while (proceed && (application_state_handler = switch_core_get_state_handler(index++)) != 0) {
+						if (!application_state_handler || !application_state_handler->on_reset ||
+							(application_state_handler->on_reset &&
+							 application_state_handler->on_reset(session) == SWITCH_STATUS_SUCCESS
+							 && midstate == switch_channel_get_state(session->channel))) {
+							proceed++;
+							continue;
+						} else {
+							proceed = 0;
+							break;
+						}
+					}
+					if (proceed) {
+						switch_core_standard_on_reset(session);
+					}
+				}
+				break;
 			case CS_EXECUTE:	/* Execute an Operation */
 				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "(%s) State EXECUTE\n", switch_channel_get_name(session->channel));
 				if (!driver_state_handler->on_execute

Modified: freeswitch/branches/greenlizard/src/switch_ivr_bridge.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_ivr_bridge.c	(original)
+++ freeswitch/branches/greenlizard/src/switch_ivr_bridge.c	Sun Jul  8 22:28:40 2007
@@ -262,11 +262,27 @@
 };
 
 
+static switch_status_t uuid_bridge_on_reset(switch_core_session_t *session)
+{
+	switch_channel_t *channel = NULL;
+
+	channel = switch_core_session_get_channel(session);
+    assert(channel != NULL);
+
+	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CUSTOM RESET\n");
+
+	if (switch_channel_test_flag(channel, CF_ORIGINATOR)) {
+		switch_channel_set_state(channel, CS_TRANSMIT);
+	}
+
+	return SWITCH_STATUS_SUCCESS;
+}
 
 static switch_status_t uuid_bridge_on_transmit(switch_core_session_t *session)
 {
 	switch_channel_t *channel = NULL;
 	switch_core_session_t *other_session;
+	char *other_uuid = NULL;
 
 	channel = switch_core_session_get_channel(session);
 	assert(channel != NULL);
@@ -274,13 +290,13 @@
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CUSTOM TRANSMIT\n");
 	switch_channel_clear_state_handler(channel, NULL);
 
-	switch_channel_set_flag(channel, CF_BREAK);
-
 	if (!switch_channel_test_flag(channel, CF_ORIGINATOR)) {
+		switch_channel_set_flag(channel, CF_TAGGED);
 		return SWITCH_STATUS_FALSE;
 	}
-
-	if ((other_session = switch_channel_get_private(channel, SWITCH_UUID_BRIDGE))) {
+	
+	if ((other_uuid = switch_channel_get_variable(channel, SWITCH_UUID_BRIDGE)) && 
+		(other_session = switch_core_session_locate(other_uuid))) {
 		switch_channel_t *other_channel = switch_core_session_get_channel(other_session);
 		switch_channel_state_t state = switch_channel_get_state(other_channel);
 		switch_channel_state_t mystate = switch_channel_get_state(channel);
@@ -288,20 +304,19 @@
 		uint8_t ready_a, ready_b;
 		switch_caller_profile_t *profile, *new_profile;
 
-
-		switch_channel_clear_flag(channel, CF_TRANSFER);
-		switch_channel_set_private(channel, SWITCH_UUID_BRIDGE, NULL);
-
-		while (mystate <= CS_HANGUP && state <= CS_HANGUP && !switch_channel_test_flag(other_channel, CF_TAGGED)) {
+		switch_channel_set_variable(channel, SWITCH_UUID_BRIDGE, NULL);
+		switch_channel_set_state(other_channel, CS_TRANSMIT);
+		for(;;) {
+			if (mystate >= CS_HANGUP || state >= CS_HANGUP || switch_channel_test_flag(other_channel, CF_TAGGED)) {
+				break;
+			}
 			switch_yield(1000);
 			state = switch_channel_get_state(other_channel);
 			mystate = switch_channel_get_state(channel);
 		}
-
+		switch_channel_clear_flag(channel, CF_TRANSFER);
 		switch_channel_clear_flag(other_channel, CF_TRANSFER);
 		switch_channel_clear_flag(other_channel, CF_TAGGED);
-
-
 		switch_core_session_reset(session);
 		switch_core_session_reset(other_session);
 
@@ -316,6 +331,7 @@
 			if (!ready_b) {
 				switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
 			}
+			switch_core_session_rwunlock(other_session);
 			return SWITCH_STATUS_FALSE;
 		}
 
@@ -348,6 +364,7 @@
 		}
 
 		switch_ivr_multi_threaded_bridge(session, other_session, NULL, NULL, NULL);
+		switch_core_session_rwunlock(other_session);
 	} else {
 		switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
 	}
@@ -364,7 +381,9 @@
 	/*.on_hangup */ NULL,
 	/*.on_loopback */ NULL,
 	/*.on_transmit */ uuid_bridge_on_transmit,
-	/*.on_hold */ NULL
+	/*.on_hold */ NULL,
+	/*.on_hibernate*/ NULL,
+	/*.on_reset*/ uuid_bridge_on_reset
 };
 
 static switch_status_t signal_bridge_on_hibernate(switch_core_session_t *session)
@@ -654,29 +673,21 @@
 			switch_channel_set_flag(originator_channel, CF_ORIGINATOR);
 			switch_channel_add_state_handler(originator_channel, &uuid_bridge_state_handlers);
 			switch_channel_add_state_handler(originatee_channel, &uuid_bridge_state_handlers);
-			switch_channel_set_flag(originatee_channel, CF_TAGGED);
-			switch_channel_set_private(originator_channel, SWITCH_UUID_BRIDGE, originatee_session);
-
+			switch_channel_set_variable(originator_channel, SWITCH_UUID_BRIDGE, switch_core_session_get_uuid(originatee_session));
+			
 			switch_channel_set_flag(originator_channel, CF_BREAK);
 			switch_channel_set_flag(originatee_channel, CF_BREAK);
 			
-			/* switch_channel_set_state_flag sets flags you want to be set when the next state change happens */
-			switch_channel_set_state_flag(originator_channel, CF_TRANSFER);
-			switch_channel_set_state_flag(originatee_channel, CF_TRANSFER);
-
 			/* change the states and let the chips fall where they may */
-			switch_channel_set_state(originator_channel, CS_TRANSMIT);
-			switch_channel_set_state(originatee_channel, CS_TRANSMIT);
+			switch_channel_set_state(originator_channel, CS_RESET);
+			switch_channel_set_state(originatee_channel, CS_RESET);
+
+			status = SWITCH_STATUS_SUCCESS;
 
 			/* release the read locks we have on the channels */
 			switch_core_session_rwunlock(originator_session);
 			switch_core_session_rwunlock(originatee_session);
 
-			status = SWITCH_STATUS_SUCCESS;
-
-			while (switch_channel_get_state(originatee_channel) < CS_HANGUP && switch_channel_test_flag(originatee_channel, CF_TAGGED)) {
-				switch_yield(20000);
-			}
 		} else {
 			switch_core_session_rwunlock(originator_session);
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "no channel for originatee uuid %s\n", originatee_uuid);

Modified: freeswitch/branches/greenlizard/src/switch_ivr_play_say.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_ivr_play_say.c	(original)
+++ freeswitch/branches/greenlizard/src/switch_ivr_play_say.c	Sun Jul  8 22:28:40 2007
@@ -394,7 +394,7 @@
 
 	for(;;) {
 		switch_size_t len;
-
+		
 		if (!switch_channel_ready(channel)) {
 			status = SWITCH_STATUS_FALSE;
 			break;
@@ -547,7 +547,7 @@
 
 	for(;;) {
 		switch_status_t status = switch_core_session_read_frame(session, &read_frame, 1000, 0);
-		
+
 		if (!switch_channel_ready(channel)) {
             status = SWITCH_STATUS_FALSE;
             break;
@@ -556,6 +556,7 @@
 
 		if (switch_channel_test_flag(channel, CF_BREAK)) {
 			switch_channel_clear_flag(channel, CF_BREAK);
+			status = SWITCH_STATUS_BREAK;
 			break;
 		}
 
@@ -691,6 +692,7 @@
 
 	if (sample_start > 0) {
 		uint32_t pos = 0;
+		switch_core_file_seek(fh, &pos, 0, SEEK_SET);
 		switch_core_file_seek(fh, &pos, sample_start, SEEK_CUR);
 	}
 
@@ -799,13 +801,19 @@
 
 	ilen = samples;
 
-	while (switch_channel_ready(channel)) {
+	for(;;) {
 		int done = 0;
 		int do_speed = 1;
 		int last_speed = -1;
 
+		if (!switch_channel_ready(channel)) {
+            status = SWITCH_STATUS_FALSE;
+            break;
+        }
+
 		if (switch_channel_test_flag(channel, CF_BREAK)) {
 			switch_channel_clear_flag(channel, CF_BREAK);
+			status = SWITCH_STATUS_BREAK;
 			break;
 		}
 
@@ -872,6 +880,7 @@
 		if (done || olen <= 0) {
 			break;
 		}
+		
 
 		if (!asis) {
 			if (fh->speed > 2) {
@@ -933,8 +942,15 @@
 			olen = llen;
 		}
 
-		write_frame.datalen = (uint32_t) (olen * (asis ? 1 : 2));
-		write_frame.samples = (uint32_t) olen;
+		write_frame.samples = olen;
+
+		if (asis) {
+			write_frame.datalen = olen;
+		} else {
+			write_frame.datalen = write_frame.samples * 2;
+		}
+
+
 
 		llen = olen;
 
@@ -950,8 +966,13 @@
 #endif
 		stream_id = 0;
 
-		status = switch_core_session_write_frame(session, &write_frame, -1, stream_id);
+		if (fh->vol) {
+			switch_change_sln_volume(write_frame.data, write_frame.datalen / 2, fh->vol);
+		}
 
+		fh->offset_pos += write_frame.samples / 2;
+		status = switch_core_session_write_frame(session, &write_frame, -1, stream_id);
+		
 		if (status == SWITCH_STATUS_MORE_DATA) {
 			status = SWITCH_STATUS_SUCCESS;
 			continue;
@@ -984,6 +1005,8 @@
 	}
 
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "done playing file\n");
+	switch_core_file_seek(fh, &fh->last_pos, 0, SEEK_CUR);
+	
 	switch_core_file_close(fh);
 	switch_buffer_destroy(&fh->audio_buffer);
 	if (!asis) {
@@ -1176,11 +1199,17 @@
 	}
 
 	ilen = len;
-	while (switch_channel_ready(channel)) {
+	for(;;) {
 		switch_event_t *event;
 
+		if (!switch_channel_ready(channel)) {
+            status = SWITCH_STATUS_FALSE;
+            break;
+        }
+
 		if (switch_channel_test_flag(channel, CF_BREAK)) {
 			switch_channel_clear_flag(channel, CF_BREAK);
+			status = SWITCH_STATUS_BREAK;
 			break;
 		}
 

Modified: freeswitch/branches/greenlizard/src/switch_rtp.c
==============================================================================
--- freeswitch/branches/greenlizard/src/switch_rtp.c	(original)
+++ freeswitch/branches/greenlizard/src/switch_rtp.c	Sun Jul  8 22:28:40 2007
@@ -110,7 +110,6 @@
 	unsigned int out_digit_sofar;
 	unsigned int out_digit_dur;
 	uint16_t in_digit_seq;
-	uint16_t out_digit_seq;
 	uint32_t out_digit_ssrc;
 	int32_t timestamp_dtmf;
 	char last_digit;
@@ -135,6 +134,7 @@
 
 	uint16_t seq;
 	uint16_t rseq;
+	uint8_t sending_dtmf;
 	switch_payload_t payload;
 	switch_payload_t rpayload;
 	switch_rtp_invalid_handler_t invalid_handler;
@@ -431,7 +431,7 @@
 	}
 
 
-
+	rtp_session->dtmf_data.out_digit_ssrc = ssrc;
 	rtp_session->pool = pool;
 	rtp_session->te = 101;
 
@@ -758,27 +758,26 @@
 
 		
 		for (x = 0; x < loops; x++) {
-			rtp_session->dtmf_data.out_digit_seq++;
+			rtp_session->seq++;
 
 			switch_rtp_write_manual(rtp_session,
 									rtp_session->dtmf_data.out_digit_packet,
 									4,
 									0,
 									rtp_session->te,
-									rtp_session->dtmf_data.timestamp_dtmf, rtp_session->dtmf_data.out_digit_seq, rtp_session->dtmf_data.out_digit_ssrc,
+									rtp_session->dtmf_data.timestamp_dtmf, rtp_session->seq, rtp_session->dtmf_data.out_digit_ssrc,
 									&flags);
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Send %s packet for [%c] ts=%d sofar=%u dur=%d seq=%d\n",
 							  loops == 1 ? "middle" : "end", rtp_session->dtmf_data.out_digit, rtp_session->dtmf_data.timestamp_dtmf,
-							  rtp_session->dtmf_data.out_digit_sofar, duration, rtp_session->dtmf_data.out_digit_seq);
+							  rtp_session->dtmf_data.out_digit_sofar, duration, rtp_session->seq);
 
 			
 		}
 
-		if (loops == 1) {
-			rtp_session->last_write_seq = 0;
-		} else {
-			rtp_session->dtmf_data.out_digit_seq = 0;
+		if (loops != 1) {
+			rtp_session->sending_dtmf = 0;
 		}
+
 	}
 
 	if (!rtp_session->dtmf_data.out_digit_dur && rtp_session->dtmf_data.dtmf_queue && switch_queue_size(rtp_session->dtmf_data.dtmf_queue)) {
@@ -800,25 +799,24 @@
 			} else {
 				rtp_session->dtmf_data.timestamp_dtmf = rtp_session->last_write_ts;
 			}
-
-			rtp_session->dtmf_data.out_digit_seq = rtp_session->last_write_seq;
-			rtp_session->dtmf_data.out_digit_ssrc = rtp_session->last_write_ssrc;
-
+			
+			rtp_session->sending_dtmf = 1;
 
 			for (x = 0; x < 3; x++) {
-				rtp_session->dtmf_data.out_digit_seq++;
+				rtp_session->seq++;
 				switch_rtp_write_manual(rtp_session,
 										rtp_session->dtmf_data.out_digit_packet,
 										4,
 										switch_test_flag(rtp_session, SWITCH_RTP_FLAG_BUGGY_2833) ? 0 : 1,
 										rtp_session->te,
 										rtp_session->dtmf_data.timestamp_dtmf,
-										rtp_session->dtmf_data.out_digit_seq, rtp_session->dtmf_data.out_digit_ssrc, &flags);
+										rtp_session->seq, 
+										rtp_session->dtmf_data.out_digit_ssrc, &flags);
 				switch_log_printf(SWITCH_CHANNEL_LOG,
 								  SWITCH_LOG_DEBUG,
 								  "Send start packet for [%c] ts=%d sofar=%u dur=%d seq=%d\n",
 								  rtp_session->dtmf_data.out_digit,
-								  rtp_session->dtmf_data.timestamp_dtmf, rtp_session->dtmf_data.out_digit_sofar, 0, rtp_session->dtmf_data.out_digit_seq);
+								  rtp_session->dtmf_data.timestamp_dtmf, rtp_session->dtmf_data.out_digit_sofar, 0, rtp_session->seq);
 			}
 			rtp_session->dtmf_data.timestamp_dtmf += samples;
 			free(rdigit);
@@ -1027,6 +1025,7 @@
 			if ((time(NULL) - rtp_session->dtmf_data.last_digit_time) > 2) {
 				rtp_session->dtmf_data.last_digit = 0;
 				rtp_session->dtmf_data.dc = 0;
+				rtp_session->dtmf_data.in_digit_seq = 0;
 			}
 			if (in_digit_seq > rtp_session->dtmf_data.in_digit_seq) {
 				rtp_session->dtmf_data.in_digit_seq = in_digit_seq;
@@ -1295,7 +1294,7 @@
 			rtp_session->cn = 0;
 			m++;
 		}
-
+		
 		send_msg = &rtp_session->send_msg;
 		send_msg->header.pt = payload;
 		send_msg->header.m = m ? 1 : 0;
@@ -1424,8 +1423,7 @@
 		}
 	}
 
-
-	if (rtp_session->last_write_seq > 0 && rtp_session->last_write_seq <= rtp_session->dtmf_data.out_digit_seq) {
+	if (rtp_session->sending_dtmf) {
 		send = 0;
 	}
 



More information about the Freeswitch-svn mailing list