[asterisk-commits] oej: branch oej/02-labarea r56617 - in /team/oej/02-labarea: ./ apps/ build_t...

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Sat Feb 24 10:08:22 MST 2007


Author: oej
Date: Sat Feb 24 11:08:19 2007
New Revision: 56617

URL: http://svn.digium.com/view/asterisk?view=rev&rev=56617
Log:
Reset automerge, resolve conflicts

Added:
    team/oej/02-labarea/build_tools/make_linker_eo_script
      - copied unchanged from r56594, trunk/build_tools/make_linker_eo_script
    team/oej/02-labarea/doc/queue.txt
      - copied unchanged from r56594, trunk/doc/queue.txt
    team/oej/02-labarea/doc/sla.txt
      - copied unchanged from r56594, trunk/doc/sla.txt
    team/oej/02-labarea/funcs/func_devstate.c
      - copied unchanged from r56594, trunk/funcs/func_devstate.c
Modified:
    team/oej/02-labarea/   (props changed)
    team/oej/02-labarea/.cleancount
    team/oej/02-labarea/CHANGES
    team/oej/02-labarea/CREDITS
    team/oej/02-labarea/Makefile
    team/oej/02-labarea/Makefile.moddir_rules
    team/oej/02-labarea/Makefile.rules
    team/oej/02-labarea/UPGRADE.txt
    team/oej/02-labarea/apps/   (props changed)
    team/oej/02-labarea/apps/app_adsiprog.c
    team/oej/02-labarea/apps/app_chanspy.c
    team/oej/02-labarea/apps/app_dial.c
    team/oej/02-labarea/apps/app_dumpchan.c
    team/oej/02-labarea/apps/app_echo.c
    team/oej/02-labarea/apps/app_exec.c
    team/oej/02-labarea/apps/app_flash.c
    team/oej/02-labarea/apps/app_image.c
    team/oej/02-labarea/apps/app_macro.c
    team/oej/02-labarea/apps/app_meetme.c
    team/oej/02-labarea/apps/app_milliwatt.c
    team/oej/02-labarea/apps/app_page.c
    team/oej/02-labarea/apps/app_playback.c
    team/oej/02-labarea/apps/app_queue.c
    team/oej/02-labarea/apps/app_record.c
    team/oej/02-labarea/apps/app_setcallerid.c
    team/oej/02-labarea/apps/app_speech_utils.c
    team/oej/02-labarea/apps/app_userevent.c
    team/oej/02-labarea/apps/app_voicemail.c
    team/oej/02-labarea/build_tools/get_makeopts
    team/oej/02-labarea/build_tools/get_moduleinfo
    team/oej/02-labarea/build_tools/make_version
    team/oej/02-labarea/build_tools/make_version_h
    team/oej/02-labarea/cdr/   (props changed)
    team/oej/02-labarea/channels/   (props changed)
    team/oej/02-labarea/channels/chan_agent.c
    team/oej/02-labarea/channels/chan_gtalk.c
    team/oej/02-labarea/channels/chan_h323.c
    team/oej/02-labarea/channels/chan_iax2.c
    team/oej/02-labarea/channels/chan_jingle.c
    team/oej/02-labarea/channels/chan_mgcp.c
    team/oej/02-labarea/channels/chan_misdn.c
    team/oej/02-labarea/channels/chan_oss.c
    team/oej/02-labarea/channels/chan_sip.c
    team/oej/02-labarea/channels/chan_skinny.c
    team/oej/02-labarea/channels/chan_zap.c
    team/oej/02-labarea/channels/h323/ast_h323.cxx
    team/oej/02-labarea/channels/misdn/isdn_lib.c
    team/oej/02-labarea/channels/misdn/isdn_msg_parser.c
    team/oej/02-labarea/codecs/   (props changed)
    team/oej/02-labarea/codecs/codec_g722.c
    team/oej/02-labarea/codecs/codec_gsm.c
    team/oej/02-labarea/codecs/gsm/Makefile
    team/oej/02-labarea/codecs/gsm/inc/proto.h
    team/oej/02-labarea/configs/extconfig.conf.sample
    team/oej/02-labarea/configs/features.conf.sample
    team/oej/02-labarea/configs/meetme.conf.sample
    team/oej/02-labarea/configs/sip.conf.sample
    team/oej/02-labarea/configs/skinny.conf.sample
    team/oej/02-labarea/configs/sla.conf.sample
    team/oej/02-labarea/configs/users.conf.sample
    team/oej/02-labarea/configs/voicemail.conf.sample
    team/oej/02-labarea/configure
    team/oej/02-labarea/configure.ac
    team/oej/02-labarea/contrib/init.d/rc.suse.asterisk
    team/oej/02-labarea/doc/cdrdriver.txt
    team/oej/02-labarea/doc/imapstorage.txt
    team/oej/02-labarea/doc/osp.txt
    team/oej/02-labarea/doc/realtime.txt
    team/oej/02-labarea/formats/   (props changed)
    team/oej/02-labarea/funcs/   (props changed)
    team/oej/02-labarea/funcs/func_callerid.c
    team/oej/02-labarea/funcs/func_odbc.c
    team/oej/02-labarea/funcs/func_realtime.c
    team/oej/02-labarea/funcs/func_strings.c
    team/oej/02-labarea/include/asterisk/app.h
    team/oej/02-labarea/include/asterisk/autoconfig.h.in
    team/oej/02-labarea/include/asterisk/cdr.h
    team/oej/02-labarea/include/asterisk/channel.h
    team/oej/02-labarea/include/asterisk/cli.h
    team/oej/02-labarea/include/asterisk/config.h
    team/oej/02-labarea/include/asterisk/devicestate.h
    team/oej/02-labarea/include/asterisk/dial.h
    team/oej/02-labarea/include/asterisk/frame.h
    team/oej/02-labarea/include/asterisk/manager.h
    team/oej/02-labarea/include/asterisk/module.h
    team/oej/02-labarea/include/asterisk/rtp.h
    team/oej/02-labarea/include/asterisk/utils.h
    team/oej/02-labarea/main/Makefile
    team/oej/02-labarea/main/acl.c
    team/oej/02-labarea/main/ast_expr2.c
    team/oej/02-labarea/main/asterisk.c
    team/oej/02-labarea/main/cdr.c
    team/oej/02-labarea/main/channel.c
    team/oej/02-labarea/main/cli.c
    team/oej/02-labarea/main/config.c
    team/oej/02-labarea/main/db1-ast/Makefile
    team/oej/02-labarea/main/db1-ast/hash/hash.c
    team/oej/02-labarea/main/devicestate.c
    team/oej/02-labarea/main/dial.c
    team/oej/02-labarea/main/dns.c
    team/oej/02-labarea/main/editline/refresh.c
    team/oej/02-labarea/main/enum.c
    team/oej/02-labarea/main/http.c
    team/oej/02-labarea/main/io.c
    team/oej/02-labarea/main/loader.c
    team/oej/02-labarea/main/logger.c
    team/oej/02-labarea/main/manager.c
    team/oej/02-labarea/main/pbx.c
    team/oej/02-labarea/main/rtp.c
    team/oej/02-labarea/main/sched.c
    team/oej/02-labarea/main/srv.c
    team/oej/02-labarea/pbx/   (props changed)
    team/oej/02-labarea/pbx/ael/ael.tab.c
    team/oej/02-labarea/pbx/pbx_config.c
    team/oej/02-labarea/pbx/pbx_dundi.c
    team/oej/02-labarea/pbx/pbx_spool.c
    team/oej/02-labarea/res/   (props changed)
    team/oej/02-labarea/res/res_adsi.c
    team/oej/02-labarea/res/res_agi.c
    team/oej/02-labarea/res/res_config_odbc.c
    team/oej/02-labarea/res/res_features.c
    team/oej/02-labarea/res/res_jabber.c
    team/oej/02-labarea/res/res_musiconhold.c
    team/oej/02-labarea/sounds/Makefile

Propchange: team/oej/02-labarea/
------------------------------------------------------------------------------
    automerge = http://edvina.net/training/

Propchange: team/oej/02-labarea/
------------------------------------------------------------------------------
Binary property 'branch-1.4-blocked' - no diff available.

Propchange: team/oej/02-labarea/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Propchange: team/oej/02-labarea/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Sat Feb 24 11:08:19 2007
@@ -1,1 +1,1 @@
-/trunk:1-52991
+/trunk:1-56614

Modified: team/oej/02-labarea/.cleancount
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/.cleancount?view=diff&rev=56617&r1=56616&r2=56617
==============================================================================
--- team/oej/02-labarea/.cleancount (original)
+++ team/oej/02-labarea/.cleancount Sat Feb 24 11:08:19 2007
@@ -1,1 +1,1 @@
-28
+30

Modified: team/oej/02-labarea/CHANGES
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/CHANGES?view=diff&rev=56617&r1=56616&r2=56617
==============================================================================
--- team/oej/02-labarea/CHANGES (original)
+++ team/oej/02-labarea/CHANGES Sat Feb 24 11:08:19 2007
@@ -1,13 +1,16 @@
-Changes since Asterisk 1.4-beta was branched:
+-------------------------------------------------------------------------------
+--- Functionality changes since Asterisk 1.4-beta was branched ----------------
+-------------------------------------------------------------------------------
+
+Miscellaneous 
+-------------
+
   * Added the bindaddr option to gtalk.conf.
   * Added the ability to specify arguments to the Dial application when using
     the DUNDi switch in the dialplan.
   * Added the ability to customize which sound files are used for some of the
     prompts within the Voicemail application by changing them in voicemail.conf
-  * enable https support for builtin web server.
-     See configs/http.conf.sample for details.
   * Argument support for Gosub application
-  * MailboxExists converted to dialplan function
   * Ability to set process limits without restarting Asterisk
   * SS7 support in chan_zap (via libss7 library)
   * Proper codec support in chan_skinny.
@@ -27,8 +30,6 @@
      statistics during a reload.
   * Added rotatetimestamp option to logger.conf which will use
      the time to name the logger files instead of sequence number.
-  * The output of CallerID in Manager events is now more consistent.
-     CallerIDNum is used for number and CallerIDName for name.
   * setinterfacevar option in queues.conf also now sets a variable
      called MEMBERNAME which contains the member's name.
   * Added Masquerade manager event for when a masquerade happens between
@@ -43,9 +44,6 @@
      Read() - timeout now can be floating pt.
      WaitForRing() now takes floating pt timeout arg.
      SpeechBackground() -- clarified in the docstrings that the timeout is an integer seconds.
-  * Extend CALLERID() function with "pres" and "ton" parameters to
-     fetch string representation of calling number presentation indicator
-     and numeric representation of type of calling number value.
   * Added 'C' option to Meetme which causes a caller to continue in the dialplan
      when kicked out.
   * Added option to run macro when a queue member is connected to a caller, 
@@ -59,7 +57,6 @@
   * Added maxfiles option to options section of asterisk.conf which allows you to specify
      what Asterisk should set as the maximum number of open files when it loads.
   * Added the jittertargetextra configuration option.
-  * Added the URI redirect option for the built-in HTTP server
   * Added the trunkmaxsize configuration option to chan_iax2.
   * Added G729 passthrough support to chan_phone for Sigma Designs boards.
   * Added the parkedcalltransfers option to features.conf
@@ -67,6 +64,35 @@
   * Added the srvlookup option to iax.conf
   * Added 'E' and 'V' commands to ExternalIVR.
   * Added 'DBDel' and 'DBDelTree' manager commands.
+  * Added 'o' and 'X' options to Chanspy.
+  * Added the parkedcallreparking option to features.conf
+  * SMDI is now enabled in voicemail using the smdienable option.
+
+AMI - The manager (TCP/TLS/HTTP)
+--------------------------------
+  * Added the URI redirect option for the built-in HTTP server
+  * The output of CallerID in Manager events is now more consistent.
+     CallerIDNum is used for number and CallerIDName for name.
+  * enable https support for builtin web server.
+     See configs/http.conf.sample for details.
+  * Added a new action, GetConfigJSON, which can return the contents of an
+    Asterisk configuration file in JSON format.  This is intended to help
+    improve the performance of AJAX applications using the manager interface
+    over HTTP.
+
+Dialplan functions
+------------------
+  * Added the DEVSTATE() dialplan function which allows retrieving any device
+    state in the dialplan, as well as creating custom device states that are
+	controllable from the dialplan.
+  * Extend CALLERID() function with "pres" and "ton" parameters to
+     fetch string representation of calling number presentation indicator
+     and numeric representation of type of calling number value.
+  * MailboxExists converted to dialplan function
+
+CLI Changes
+-----------
+  * New CLI command "core show settings"
   * Added 'core show channels count' CLI command.
 
 SIP changes
@@ -80,3 +106,11 @@
     since they where replaced by "mohsuggest" and "mohinterpret" in version 1.4
   * The "localmask" setting was removed in version 1.2 and the reminder about it
     being removed is now also removed.
+  * A new option "busy-level" for setting a level of calls where asterisk reports
+    a device as busy, to separate it from call-limit
+  * A new realtime family called "sipregs" is now supported to store SIP registration
+    data. If this family is defined, "sippeers" will be used for configuration and
+    "sipregs" for registrations. If it's not defined, "sippeers" will be used for
+    registration data, as before.
+  * The SIPPEER function have new options for port address, call and pickup groups
+  * Added support for T.140 realtime text in SIP/RTP

Modified: team/oej/02-labarea/CREDITS
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/CREDITS?view=diff&rev=56617&r1=56616&r2=56617
==============================================================================
--- team/oej/02-labarea/CREDITS (original)
+++ team/oej/02-labarea/CREDITS Sat Feb 24 11:08:19 2007
@@ -137,6 +137,7 @@
 	INRIA, http://www.inria.fr/
 
 John Martin, Aupix - Improved video support in the SIP channel
+	T.140 text support in RTP/SIP
 
 Steve Underwood - Provided T.38 pass through support.
 

Modified: team/oej/02-labarea/Makefile
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/Makefile?view=diff&rev=56617&r1=56616&r2=56617
==============================================================================
--- team/oej/02-labarea/Makefile (original)
+++ team/oej/02-labarea/Makefile Sat Feb 24 11:08:19 2007
@@ -189,7 +189,7 @@
 ASTCFLAGS+=-include $(ASTTOPDIR)/include/asterisk/autoconfig.h
 
 ifeq ($(AST_DEVMODE),yes)
-  ASTCFLAGS+=-Werror -Wunused
+  ASTCFLAGS+=-Werror -Wunused -Wundef
 endif
 
 ifneq ($(findstring BSD,$(OSARCH)),)
@@ -540,6 +540,7 @@
 		echo "" ; \
 		echo ";[options]" ; \
 		echo ";internal_timing = yes" ; \
+		echo ";systemname = my_system_name ; prefix uniqueid with a system name for global uniqueness issues" ; \
 		echo "; Changing the following lines may compromise your security." ; \
 		echo ";[files]" ; \
 		echo ";astctlpermissions = 0660" ; \

Modified: team/oej/02-labarea/Makefile.moddir_rules
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/Makefile.moddir_rules?view=diff&rev=56617&r1=56616&r2=56617
==============================================================================
--- team/oej/02-labarea/Makefile.moddir_rules (original)
+++ team/oej/02-labarea/Makefile.moddir_rules Sat Feb 24 11:08:19 2007
@@ -34,11 +34,13 @@
 $(LOADABLE_MODS:%=%.so): LIBS+=$(foreach dep,$(MENUSELECT_DEPENDS_$*),$(value $(dep)_LIB))
 $(LOADABLE_MODS:%=%.so): ASTLDFLAGS+=$(foreach dep,$(MENUSELECT_DEPENDS_$*),$(value $(dep)_LDFLAGS))
 
+$(EMBEDDED_MODS:%=%.o): ASTCFLAGS+=-DEMBEDDED_MODULE=$*
+
 $(addsuffix .so,$(filter $(LOADABLE_MODS),$(C_MODS))): %.so: %.o
 $(addsuffix .so,$(filter $(LOADABLE_MODS),$(CC_MODS))): %.so: %.oo
 
-modules.link: $(addsuffix .o,$(filter $(EMBEDDED_MODS),$(C_MODS)))
-modules.link: $(addsuffix .oo,$(filter $(EMBEDDED_MODS),$(CC_MODS)))
+modules.link: $(addsuffix .eo,$(filter $(EMBEDDED_MODS),$(C_MODS)))
+modules.link: $(addsuffix .eoo,$(filter $(EMBEDDED_MODS),$(CC_MODS)))
 
 .PHONY: clean uninstall _all
 
@@ -64,11 +66,11 @@
 
 modules.link:
 	@rm -f $@
-	@for file in $(patsubst %,$(SUBDIR)/%,$(filter %.o,$^)); do echo "INPUT (../$${file})" >> $@; done
-	@for file in $(patsubst %,$(SUBDIR)/%,$(filter-out %.o,$^)); do echo "INPUT (../$${file})" >> $@; done
+	@for file in $(patsubst %,$(SUBDIR)/%,$(filter %.eo %.eoo,$^)); do echo "INPUT (../$${file})" >> $@; done
+	@for file in $(patsubst %,$(SUBDIR)/%,$(filter-out %.eo %.eoo,$^)); do echo "INPUT (../$${file})" >> $@; done
 
 clean::
-	rm -f *.so *.o *.oo
+	rm -f *.so *.o *.oo *.eo *.eoo
 	rm -f .*.o.d .*.oo.d
 	rm -f modules.link
 

Modified: team/oej/02-labarea/Makefile.rules
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/Makefile.rules?view=diff&rev=56617&r1=56616&r2=56617
==============================================================================
--- team/oej/02-labarea/Makefile.rules (original)
+++ team/oej/02-labarea/Makefile.rules Sat Feb 24 11:08:19 2007
@@ -44,6 +44,22 @@
 	$(CMD_PREFIX) $(CC) -o $@ -c $< $(PTHREAD_CFLAGS) $(ASTCFLAGS)
 endif
 
+%.o: %.i
+	$(ECHO_PREFIX) echo "   [CC] $< -> $@"
+ifeq ($(AST_DEVMODE),yes)
+	$(CMD_PREFIX) $(CC) -o $@ -c $< $(PTHREAD_CFLAGS) $(ASTCFLAGS) -MMD -MT $@ -MF .$(subst /,_,$@).d -MP
+else
+	$(CMD_PREFIX) $(CC) -o $@ -c $< $(PTHREAD_CFLAGS) $(ASTCFLAGS)
+endif
+
+%.i: %.c
+	$(ECHO_PREFIX) echo "   [CC] $< -> $@"
+ifeq ($(AST_DEVMODE),yes)
+	$(CMD_PREFIX) $(CC) -o $@ -E $< $(PTHREAD_CFLAGS) $(ASTCFLAGS) -MMD -MT $@ -MF .$(subst /,_,$@).d -MP
+else
+	$(CMD_PREFIX) $(CC) -o $@ -E $< $(PTHREAD_CFLAGS) $(ASTCFLAGS)
+endif
+
 %.o: %.s
 	$(ECHO_PREFIX) echo "   [AS] $< -> $@"
 ifeq ($(AST_DEVMODE),yes)
@@ -76,6 +92,18 @@
 	$(ECHO_PREFIX) echo "   [LDXX] $^ -> $@"
 	$(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(PTHREAD_CFLAGS) $(ASTLDFLAGS) $(SOLINK) $^ $(PTHREAD_LIBS) $(LIBS)
 
+%.eo: %.o
+	$(ECHO_PREFIX) echo "   [EMBED] $< -> $@"
+	$(CMD_PREFIX) $(ASTTOPDIR)/build_tools/make_linker_eo_script $* > .$@.ld
+	$(CMD_PREFIX) $(LD) -r -T .$@.ld -o $@ $<
+	$(CMD_PREFIX) rm -f .$@.ld
+
+%.eoo: %.o
+	$(ECHO_PREFIX) echo "   [EMBED] $< -> $@"
+	$(CMD_PREFIX) $(ASTTOPDIR)/build_tools/make_linker_eo_script $* > .$@.ld
+	$(CMD_PREFIX) $(LD) -r -T .$@.ld -o $@ $<
+	$(CMD_PREFIX) rm -f .$@.ld
+
 %: %.o
 	$(ECHO_PREFIX) echo "   [LD] $^ -> $@"
 	$(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(PTHREAD_CFLAGS) $(ASTLDFLAGS) $^ $(PTHREAD_LIBS) $(LIBS)

Modified: team/oej/02-labarea/UPGRADE.txt
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/UPGRADE.txt?view=diff&rev=56617&r1=56616&r2=56617
==============================================================================
--- team/oej/02-labarea/UPGRADE.txt (original)
+++ team/oej/02-labarea/UPGRADE.txt Sat Feb 24 11:08:19 2007
@@ -34,3 +34,5 @@
 * ChanIsAvail() now has a 't' option, which allows the specified device
   to be queried for state without consulting the channel drivers. This
   performs mostly a 'ChanExists' sort of function.
+* SetCallerPres() has been replaced with the CALLERPRES() dialplan function
+  and is now deprecated.

Propchange: team/oej/02-labarea/apps/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Sat Feb 24 11:08:19 2007
@@ -2,3 +2,5 @@
 *.a
 *.so
 modules.link
+*.eo
+*.eoo

Modified: team/oej/02-labarea/apps/app_adsiprog.c
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/apps/app_adsiprog.c?view=diff&rev=56617&r1=56616&r2=56617
==============================================================================
--- team/oej/02-labarea/apps/app_adsiprog.c (original)
+++ team/oej/02-labarea/apps/app_adsiprog.c Sat Feb 24 11:08:19 2007
@@ -24,6 +24,10 @@
  * 
  * \ingroup applications
  */
+
+/*** MODULEINFO
+	<depend>res_adsi</depend>
+ ***/
 
 #include "asterisk.h"
 

Modified: team/oej/02-labarea/apps/app_chanspy.c
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/apps/app_chanspy.c?view=diff&rev=56617&r1=56616&r2=56617
==============================================================================
--- team/oej/02-labarea/apps/app_chanspy.c (original)
+++ team/oej/02-labarea/apps/app_chanspy.c Sat Feb 24 11:08:19 2007
@@ -67,6 +67,10 @@
 "      to 'chanprefix'. For example, executing ChanSpy(Agent) and then dialing\n"
 "      the digits '1234#' while spying will begin spying on the channel\n"
 "      'Agent/1234'.\n"
+"  Note: The X option supersedes the three features above in that if a valid\n"
+"        single digit extension exists in the correct context ChanSpy will\n"
+"        exit to it. This also disables choosing a channel based on 'chanprefix'\n"
+"        and a digit sequence.\n"
 "  Options:\n"
 "    b             - Only spy on channels involved in a bridged call.\n"
 "    g(grp)        - Match only channels where their ${SPYGROUP} variable is set to\n"
@@ -83,6 +87,12 @@
 "    W             - Enable 'private whisper' mode, so the spying channel can\n"
 "                    talk to the spied-on channel but cannot listen to that\n"
 "                    channel.\n"
+"    o             - Only listen to audio coming from this channel.\n"
+"    X             - Allow the user to exit ChanSpy to a valid single digit\n"
+"                    numeric extension in the current context or the context\n"
+"                    specified by the SPY_EXIT_CONTEXT channel variable. The\n"
+"                    name of the last channel that was spied on will be stored\n"
+"                    in the SPY_CHANNEL variable.\n"
 ;
 
 static const char *app_ext = "ExtenSpy";
@@ -95,6 +105,9 @@
 "  While spying, the following actions may be performed:\n"
 "    - Dialing # cycles the volume level.\n"
 "    - Dialing * will stop spying and look for another channel to spy on.\n"
+"  Note: The X option superseeds the two features above in that if a valid\n"
+"        single digit extension exists in the correct context it ChanSpy will\n"
+"        exit to it.\n"
 "  Options:\n"
 "    b             - Only spy on channels involved in a bridged call.\n"
 "    g(grp)        - Match only channels where their ${SPYGROUP} variable is set to\n"
@@ -111,6 +124,12 @@
 "    W             - Enable 'private whisper' mode, so the spying channel can\n"
 "                    talk to the spied-on channel but cannot listen to that\n"
 "                    channel.\n"
+"    o             - Only listen to audio coming from this channel.\n"
+"    X             - Allow the user to exit ChanSpy to a valid single digit\n"
+"                    numeric extension in the current context or the context\n"
+"                    specified by the SPY_EXIT_CONTEXT channel variable. The\n"
+"                    name of the last channel that was spied on will be stored\n"
+"                    in the SPY_CHANNEL variable.\n"
 ;
 
 enum {
@@ -121,6 +140,8 @@
 	OPTION_RECORD    = (1 << 4),
 	OPTION_WHISPER	 = (1 << 5),
 	OPTION_PRIVATE   = (1 << 6),	/* Private Whisper mode */
+	OPTION_READONLY  = (1 << 7),	/* Don't mix the two channels */
+	OPTION_EXIT      = (1 << 8),	/* Exit to a valid single digit extension */
 } chanspy_opt_flags;
 
 enum {
@@ -138,6 +159,8 @@
 	AST_APP_OPTION_ARG('v', OPTION_VOLUME, OPT_ARG_VOLUME),
 	AST_APP_OPTION_ARG('g', OPTION_GROUP, OPT_ARG_GROUP),
 	AST_APP_OPTION_ARG('r', OPTION_RECORD, OPT_ARG_RECORD),
+	AST_APP_OPTION('o', OPTION_READONLY),
+	AST_APP_OPTION('X', OPTION_EXIT),
 });
 
 
@@ -241,7 +264,7 @@
 }
 
 static int channel_spy(struct ast_channel *chan, struct ast_channel *spyee, int *volfactor, int fd,
-		       const struct ast_flags *flags) 
+		       const struct ast_flags *flags, char *exitcontext) 
 {
 	struct chanspy_translation_helper csth;
 	int running = 0, res, x = 0;
@@ -260,7 +283,8 @@
 	memset(&csth, 0, sizeof(csth));
 	ast_set_flag(&csth.spy, CHANSPY_FORMAT_AUDIO);
 	ast_set_flag(&csth.spy, CHANSPY_TRIGGER_NONE);
-	ast_set_flag(&csth.spy, CHANSPY_MIXAUDIO);
+	if (!ast_test_flag(flags, OPTION_READONLY))
+		ast_set_flag(&csth.spy, CHANSPY_MIXAUDIO);
 	csth.spy.type = "ChanSpy";
 	csth.spy.status = CHANSPY_RUNNING;
 	csth.spy.read_queue.format = AST_FORMAT_SLINEAR;
@@ -347,6 +371,22 @@
 		if (res < 0) {
 			running = -1;
 			break;
+		}
+		
+		if (ast_test_flag(flags, OPTION_EXIT)) {
+			char tmp[2];
+			tmp[0] = res;
+			tmp[1] = '\0';
+			if (!ast_goto_if_exists(chan, exitcontext, tmp, 1)) {
+				ast_log(LOG_DEBUG, "Got DTMF %c, goto context %s\n", tmp[0], exitcontext);
+				pbx_builtin_setvar_helper(chan, "SPY_CHANNEL", name);
+				running = -2;
+				break;
+			} else if (option_debug > 1) {
+				ast_log(LOG_DEBUG, "Exit by single digit did not work in chanspy. Extension %s does not exist in context %s\n", tmp, exitcontext);
+			}
+		} else if (res >= '0' && res <= '9') {
+			inp[x++] = res;
 		}
 
 		if (res == '*') {
@@ -374,8 +414,6 @@
 				ast_clear_flag(&csth.spy, CHANSPY_READ_VOLADJUST);
 				ast_clear_flag(&csth.spy, CHANSPY_WRITE_VOLADJUST);
 			}
-		} else if (res >= '0' && res <= '9') {
-			inp[x++] = res;
 		}
 	}
 
@@ -431,11 +469,22 @@
 	struct ast_channel *peer, *prev, *next;
 	char nameprefix[AST_NAME_STRLEN];
 	char peer_name[AST_NAME_STRLEN + 5];
+	char exitcontext[AST_MAX_CONTEXT] = "";
 	signed char zero_volume = 0;
 	int waitms;
 	int res;
 	char *ptr;
 	int num;
+
+	if (ast_test_flag(flags, OPTION_EXIT)) {
+		const char *c;
+		if ((c = pbx_builtin_getvar_helper(chan, "SPY_EXIT_CONTEXT"))) 
+			ast_copy_string(exitcontext, c, sizeof(exitcontext));
+		else if (!ast_strlen_zero(chan->macrocontext)) 
+			ast_copy_string(exitcontext, chan->macrocontext, sizeof(exitcontext));
+		else
+			ast_copy_string(exitcontext, chan->context, sizeof(exitcontext));
+	}
 
 	if (chan->_state != AST_STATE_UP)
 		ast_answer(chan);
@@ -453,12 +502,30 @@
 				ast_clear_flag(chan, AST_FLAG_SPYING);
 				break;
 			}
+			if (!ast_strlen_zero(exitcontext)) {
+				char tmp[2];
+				tmp[0] = res;
+				tmp[1] = '\0';
+				if (!ast_goto_if_exists(chan, exitcontext, tmp, 1))
+					goto exit;
+				else if (option_debug > 1)
+					ast_log(LOG_DEBUG, "Exit by single digit did not work in chanspy. Extension %s does not exist in context %s\n", tmp, exitcontext);
+			}
 		}
 
 		res = ast_waitfordigit(chan, waitms);
 		if (res < 0) {
 			ast_clear_flag(chan, AST_FLAG_SPYING);
 			break;
+		}
+		if (!ast_strlen_zero(exitcontext)) {
+			char tmp[2];
+			tmp[0] = res;
+			tmp[1] = '\0';
+			if (!ast_goto_if_exists(chan, exitcontext, tmp, 1))
+				goto exit;
+			else if (option_debug > 1)
+				ast_log(LOG_DEBUG, "Exit by single digit did not work in chanspy. Extension %s does not exist in context %s\n", tmp, exitcontext);
 		}
 				
 		/* reset for the next loop around, unless overridden later */
@@ -528,10 +595,13 @@
 			}
 			
 			waitms = 5000;
-			res = channel_spy(chan, peer, &volfactor, fd, flags);
+			res = channel_spy(chan, peer, &volfactor, fd, flags, exitcontext);
 			
 			if (res == -1) {
-				break;
+				goto exit;
+			} else if (res == -2) {
+				res = 0;
+				goto exit;
 			} else if (res > 1 && spec) {
 				snprintf(nameprefix, AST_NAME_STRLEN, "%s/%d", spec, res);
 				if ((next = ast_get_channel_by_name_prefix_locked(nameprefix, strlen(nameprefix)))) {
@@ -543,10 +613,9 @@
 				peer = NULL;
 			}
 		}
-		if (res == -1)
-			break;
-	}
-	
+	}
+exit:
+
 	ast_clear_flag(chan, AST_FLAG_SPYING);
 
 	ast_channel_setoption(chan, AST_OPTION_TXGAIN, &zero_volume, sizeof(zero_volume), 0);

Modified: team/oej/02-labarea/apps/app_dial.c
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/apps/app_dial.c?view=diff&rev=56617&r1=56616&r2=56617
==============================================================================
--- team/oej/02-labarea/apps/app_dial.c (original)
+++ team/oej/02-labarea/apps/app_dial.c Sat Feb 24 11:08:19 2007
@@ -82,7 +82,7 @@
 "    ANSWEREDTIME - This is the amount of time for actual call.\n"
 "    DIALSTATUS   - This is the status of the call:\n"
 "                   CHANUNAVAIL | CONGESTION | NOANSWER | BUSY | ANSWER | CANCEL\n" 
-"                   DONTCALL | TORTURE\n"
+"                   DONTCALL | TORTURE | INVALIDARGS\n"
 "  For the Privacy and Screening Modes, the DIALSTATUS variable will be set to\n"
 "DONTCALL if the called party chooses to send the calling party to the 'Go Away'\n"
 "script. The DIALSTATUS variable will be set to TORTURE if the called party\n"
@@ -782,9 +782,9 @@
 					ast_log(LOG_WARNING, "Unable to send URL\n");
 			
 
-			if (single && ((f->frametype == AST_FRAME_VOICE) || (f->frametype == AST_FRAME_DTMF)))  {
+			if (single && ((f->frametype == AST_FRAME_VOICE) || (f->frametype == AST_FRAME_DTMF_BEGIN) || (f->frametype == AST_FRAME_DTMF_END)))  {
 				if (ast_write(outgoing->chan, f))
-					ast_log(LOG_WARNING, "Unable to forward voice\n");
+					ast_log(LOG_WARNING, "Unable to forward voice or dtmf\n");
 			}
 			if (single && (f->frametype == AST_FRAME_CONTROL) && 
 				((f->subclass == AST_CONTROL_HOLD) || 
@@ -937,8 +937,11 @@
 	   time and make the caller believe the peer hasn't picked up yet */
 
 	if (ast_test_flag(opts, OPT_MUSICBACK) && !ast_strlen_zero(opt_args[OPT_ARG_MUSICBACK])) {
+		char *original_moh = ast_strdupa(chan->musicclass);
 		ast_indicate(chan, -1);
+		ast_string_field_set(chan, musicclass, opt_args[OPT_ARG_MUSICBACK]);
 		ast_moh_start(chan, opt_args[OPT_ARG_MUSICBACK], NULL);
+		ast_string_field_set(chan, musicclass, original_moh);
 	} else if (ast_test_flag(opts, OPT_RINGBACK)) {
 		ast_indicate(chan, AST_CONTROL_RINGING);
 		pa->sentringing++;
@@ -1145,6 +1148,7 @@
 			   "At the tone, please say your name:"
 
 			*/
+			ast_answer(chan);
 			res = ast_play_and_record(chan, "priv-recordintro", pa->privintro, 4, "gsm", &duration, 128, 2000, 0);  /* NOTE: I've reduced the total time to 4 sec */
 									/* don't think we'll need a lock removed, we took care of
 									   conflicts by naming the pa.privintro file */
@@ -1164,7 +1168,7 @@
 	return 1;	/* success */
 }
 
-static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags *peerflags)
+static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags *peerflags, int *continue_exec)
 {
 	int res = -1;	/* default: error */
 	struct ast_module_user *u;
@@ -1183,6 +1187,7 @@
 	struct privacy_args pa = {
 		.sentringing = 0,
 		.privdb_val = 0,
+		.status = "INVALIDARGS",
 	};
 	int sentringing = 0, moh = 0;
 	const char *outbound_group = NULL;
@@ -1201,23 +1206,27 @@
 
 	if (ast_strlen_zero(data)) {
 		ast_log(LOG_WARNING, "Dial requires an argument (technology/number)\n");
+		pbx_builtin_setvar_helper(chan, "DIALSTATUS", pa.status);
 		return -1;
 	}
 
 	u = ast_module_user_add(chan);	/* XXX is this the right place ? */
 
 	parse = ast_strdupa(data);
-
+	
 	AST_STANDARD_APP_ARGS(args, parse);
 
 	memset(&config,0,sizeof(struct ast_bridge_config));
 
 	if (!ast_strlen_zero(args.options) &&
-			ast_app_parse_options(dial_exec_options, &opts, opt_args, args.options))
+			ast_app_parse_options(dial_exec_options, &opts, opt_args, args.options)) {
+		pbx_builtin_setvar_helper(chan, "DIALSTATUS", pa.status);
 		goto done;
+	}
 
 	if (ast_strlen_zero(args.peers)) {
 		ast_log(LOG_WARNING, "Dial requires an argument (technology/number)\n");
+		pbx_builtin_setvar_helper(chan, "DIALSTATUS", pa.status);
 		goto done;
 	}
 
@@ -1231,6 +1240,7 @@
 		calldurationlimit = atoi(opt_args[OPT_ARG_DURATION_STOP]);
 		if (!calldurationlimit) {
 			ast_log(LOG_WARNING, "Dial does not accept S(%s), hanging up.\n", opt_args[OPT_ARG_DURATION_STOP]);
+			pbx_builtin_setvar_helper(chan, "DIALSTATUS", pa.status);
 			goto done;
 		}
 		if (option_verbose > 2)
@@ -1258,6 +1268,9 @@
 			goto out;
 		res = -1;	/* reset default */
 	}
+
+	if (continue_exec)
+		*continue_exec = 0;
 
 	/* If a channel group has been specified, get it for use when we create peer channels */
 	outbound_group = pbx_builtin_getvar_helper(chan, "OUTBOUND_GROUP");
@@ -1381,8 +1394,14 @@
 			ast_app_group_set_channel(tc, outbound_group);
 
 		/* Inherit context and extension */
-		ast_copy_string(tc->dialcontext, chan->context, sizeof(tc->dialcontext));
-		ast_copy_string(tc->exten, chan->exten, sizeof(tc->exten));
+		if (!ast_strlen_zero(chan->macrocontext))
+			ast_copy_string(tc->dialcontext, chan->macrocontext, sizeof(tc->dialcontext));
+		else
+			ast_copy_string(tc->dialcontext, chan->context, sizeof(tc->dialcontext));
+		if (!ast_strlen_zero(chan->macroexten))
+			ast_copy_string(tc->exten, chan->macroexten, sizeof(tc->exten));
+		else
+			ast_copy_string(tc->exten, chan->exten, sizeof(tc->exten));
 
 		res = ast_call(tc, numsubst, 0);	/* Place the call, but don't wait on the answer */
 
@@ -1437,7 +1456,14 @@
 		strcpy(pa.status, "NOANSWER");
 		if (ast_test_flag(outgoing, OPT_MUSICBACK)) {
 			moh = 1;
-			ast_moh_start(chan, opt_args[OPT_ARG_MUSICBACK], NULL);
+			if (!ast_strlen_zero(opt_args[OPT_ARG_MUSICBACK])) {
+				char *original_moh = ast_strdupa(chan->musicclass);
+				ast_string_field_set(chan, musicclass, opt_args[OPT_ARG_MUSICBACK]);
+				ast_moh_start(chan, opt_args[OPT_ARG_MUSICBACK], NULL);
+				ast_string_field_set(chan, musicclass, original_moh);
+			} else {
+				ast_moh_start(chan, NULL, NULL);
+			}
 			ast_indicate(chan, AST_CONTROL_PROGRESS);
 		} else if (ast_test_flag(outgoing, OPT_RINGBACK)) {
 			ast_indicate(chan, AST_CONTROL_RINGING);
@@ -1517,7 +1543,9 @@
 			peer->priority++;
 			ast_pbx_start(peer);
 			hanguptree(outgoing, NULL);
-			res = 1;
+			if (continue_exec)
+				*continue_exec = 1;
+			res = 0;
 			goto done;
 		}
 
@@ -1692,12 +1720,10 @@
 static int dial_exec(struct ast_channel *chan, void *data)
 {
 	struct ast_flags peerflags;
-	int res = 0;
 
 	memset(&peerflags, 0, sizeof(peerflags));
-	res = dial_exec_full(chan, data, &peerflags);
-
-	return (res >= 0 ? 0 : -1);
+
+	return dial_exec_full(chan, data, &peerflags, NULL);
 }
 
 static int retrydial_exec(struct ast_channel *chan, void *data)
@@ -1753,14 +1779,16 @@
 
 	res = 0;
 	while (loops) {
+		int continue_exec;
+
 		chan->data = "Retrying";
 		if (ast_test_flag(chan, AST_FLAG_MOH))
 			ast_moh_stop(chan);
 
-		res = dial_exec_full(chan, dialdata, &peerflags);
-		if (res == 1) {
+		res = dial_exec_full(chan, dialdata, &peerflags, &continue_exec);
+		if (continue_exec)
 			break;
-		} else if (res == 0) {
+		if (res == 0) {
 			if (ast_test_flag(&peerflags, OPT_DTMF_EXIT)) {
 				if (!(res = ast_streamfile(chan, announce, chan->language)))
 					res = ast_waitstream(chan, AST_DIGIT_ANY);
@@ -1798,7 +1826,6 @@
 
 	if (ast_test_flag(chan, AST_FLAG_MOH))
 		ast_moh_stop(chan);
-
  done:
 	ast_module_user_remove(u);
 	return res;

Modified: team/oej/02-labarea/apps/app_dumpchan.c
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/apps/app_dumpchan.c?view=diff&rev=56617&r1=56616&r2=56617
==============================================================================
--- team/oej/02-labarea/apps/app_dumpchan.c (original)
+++ team/oej/02-labarea/apps/app_dumpchan.c Sat Feb 24 11:08:19 2007
@@ -91,6 +91,8 @@
 			 "NativeFormat=       %s\n"
 			 "WriteFormat=        %s\n"
 			 "ReadFormat=         %s\n"
+			 "RawWriteFormat=     %s\n"
+			 "RawReadFormat=      %s\n"
 			 "1stFileDescriptor=  %d\n"
 			 "Framesin=           %d %s\n"
 			 "Framesout=          %d %s\n"
@@ -117,6 +119,8 @@
 			 ast_getformatname_multiple(formatbuf, sizeof(formatbuf), c->nativeformats),
 			 ast_getformatname_multiple(formatbuf, sizeof(formatbuf), c->writeformat),
 			 ast_getformatname_multiple(formatbuf, sizeof(formatbuf), c->readformat),
+			 ast_getformatname_multiple(formatbuf, sizeof(formatbuf), c->rawwriteformat),
+			 ast_getformatname_multiple(formatbuf, sizeof(formatbuf), c->rawreadformat),
 			 c->fds[0], c->fin & ~DEBUGCHAN_FLAG, (c->fin & DEBUGCHAN_FLAG) ? " (DEBUGGED)" : "",
 			 c->fout & ~DEBUGCHAN_FLAG, (c->fout & DEBUGCHAN_FLAG) ? " (DEBUGGED)" : "", (long)c->whentohangup,
 			 hour,

Modified: team/oej/02-labarea/apps/app_echo.c
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/apps/app_echo.c?view=diff&rev=56617&r1=56616&r2=56617
==============================================================================
--- team/oej/02-labarea/apps/app_echo.c (original)
+++ team/oej/02-labarea/apps/app_echo.c Sat Feb 24 11:08:19 2007
@@ -69,19 +69,14 @@
 			break;
 		f->delivery.tv_sec = 0;
 		f->delivery.tv_usec = 0;
-		switch (f->frametype) {
-		case AST_FRAME_DTMF:
-			if (f->subclass == '#') {
-				res = 0;
-				ast_frfree(f);
-				goto end;
-			}
-			/* fall through */
-		default:
-			if (ast_write(chan, f)) {
-				ast_frfree(f);
-				goto end;
-			}
+		if (ast_write(chan, f)) {
+			ast_frfree(f);
+			goto end;
+		}
+		if ((f->frametype == AST_FRAME_DTMF) && (f->subclass == '#')) {
+			res = 0;
+			ast_frfree(f);
+			goto end;
 		}
 		ast_frfree(f);
 	}

Modified: team/oej/02-labarea/apps/app_exec.c
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/apps/app_exec.c?view=diff&rev=56617&r1=56616&r2=56617
==============================================================================
--- team/oej/02-labarea/apps/app_exec.c (original)
+++ team/oej/02-labarea/apps/app_exec.c Sat Feb 24 11:08:19 2007
@@ -95,30 +95,31 @@
 	char *s, *appname, *endargs, args[MAXRESULT] = "";
 	struct ast_app *app;
 
+	if (ast_strlen_zero(data))
+		return 0;
+
 	u = ast_module_user_add(chan);
-
-	/* Check and parse arguments */
-	if (data) {
-		s = ast_strdupa(data);
-		appname = strsep(&s, "(");
-		if (s) {
-			endargs = strrchr(s, ')');
-			if (endargs)
-				*endargs = '\0';
-			pbx_substitute_variables_helper(chan, s, args, MAXRESULT - 1);
+	
+	s = ast_strdupa(data);
+	appname = strsep(&s, "(");
+	if (s) {
+		endargs = strrchr(s, ')');
+		if (endargs)
+			*endargs = '\0';
+		pbx_substitute_variables_helper(chan, s, args, MAXRESULT - 1);
+	}
+	if (appname) {
+		app = pbx_findapp(appname);
+		if (app) {
+			res = pbx_exec(chan, app, args);
+		} else {
+			ast_log(LOG_WARNING, "Could not find application (%s)\n", appname);
+			res = -1;
 		}
-		if (appname) {
-			app = pbx_findapp(appname);
-			if (app) {
-				res = pbx_exec(chan, app, args);
-			} else {
-				ast_log(LOG_WARNING, "Could not find application (%s)\n", appname);
-				res = -1;
-			}
-		}
 	}
 
 	ast_module_user_remove(u);
+
 	return res;
 }
 
@@ -129,31 +130,32 @@
 	char *s, *appname, *endargs, args[MAXRESULT] = "";
 	struct ast_app *app;
 
+	if (ast_strlen_zero(data))
+		return 0;
+
 	u = ast_module_user_add(chan);
 
-	/* Check and parse arguments */
-	if (data) {
-		s = ast_strdupa(data);
-		appname = strsep(&s, "(");
-		if (s) {
-			endargs = strrchr(s, ')');
-			if (endargs)
-				*endargs = '\0';
-			pbx_substitute_variables_helper(chan, s, args, MAXRESULT - 1);
+	s = ast_strdupa(data);
+	appname = strsep(&s, "(");
+	if (s) {
+		endargs = strrchr(s, ')');
+		if (endargs)
+			*endargs = '\0';
+		pbx_substitute_variables_helper(chan, s, args, MAXRESULT - 1);
+	}
+	if (appname) {
+		app = pbx_findapp(appname);
+		if (app) {
+			res = pbx_exec(chan, app, args);
+			pbx_builtin_setvar_helper(chan, "TRYSTATUS", res ? "FAILED" : "SUCCESS");
+		} else {
+			ast_log(LOG_WARNING, "Could not find application (%s)\n", appname);
+			pbx_builtin_setvar_helper(chan, "TRYSTATUS", "NOAPP");
 		}
-		if (appname) {
-			app = pbx_findapp(appname);
-			if (app) {
-				res = pbx_exec(chan, app, args);
-				pbx_builtin_setvar_helper(chan, "TRYSTATUS", res ? "FAILED" : "SUCCESS");
-			} else {
-				ast_log(LOG_WARNING, "Could not find application (%s)\n", appname);
-				pbx_builtin_setvar_helper(chan, "TRYSTATUS", "NOAPP");
-			}
-		}
 	}
 
 	ast_module_user_remove(u);
+
 	return 0;
 }
 

Modified: team/oej/02-labarea/apps/app_flash.c
URL: http://svn.digium.com/view/asterisk/team/oej/02-labarea/apps/app_flash.c?view=diff&rev=56617&r1=56616&r2=56617
==============================================================================
--- team/oej/02-labarea/apps/app_flash.c (original)
+++ team/oej/02-labarea/apps/app_flash.c Sat Feb 24 11:08:19 2007
@@ -75,31 +75,37 @@
 	int x;
 	struct ast_module_user *u;
 	struct zt_params ztp;
+
+	if (strcasecmp(chan->tech->type, "Zap")) {
+		ast_log(LOG_WARNING, "%s is not a Zap channel\n", chan->name);
+		return -1;
+	}
+
 	u = ast_module_user_add(chan);
-	if (!strcasecmp(chan->tech->type, "Zap")) {
-		memset(&ztp, 0, sizeof(ztp));
-		res = ioctl(chan->fds[0], ZT_GET_PARAMS, &ztp);
-		if (!res) {
-			if (ztp.sigtype & __ZT_SIG_FXS) {
-				x = ZT_FLASH;
-				res = ioctl(chan->fds[0], ZT_HOOK, &x);
-				if (!res || (errno == EINPROGRESS)) {
-					if (res) {
-						/* Wait for the event to finish */
-						zt_wait_event(chan->fds[0]);
-					}
-					res = ast_safe_sleep(chan, 1000);
-					if (option_verbose > 2)
-						ast_verbose(VERBOSE_PREFIX_3 "Flashed channel %s\n", chan->name);
-				} else
-					ast_log(LOG_WARNING, "Unable to flash channel %s: %s\n", chan->name, strerror(errno));
+	
+	memset(&ztp, 0, sizeof(ztp));
+	res = ioctl(chan->fds[0], ZT_GET_PARAMS, &ztp);
+	if (!res) {
+		if (ztp.sigtype & __ZT_SIG_FXS) {
+			x = ZT_FLASH;

[... 28059 lines stripped ...]


More information about the asterisk-commits mailing list