提交 ef3fde4d authored 作者: Anthony Minessale's avatar Anthony Minessale

more stuff

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@6908 d0543943-73ff-0310-b7d9-9358b9ac24b2
上级 427fbdb3
...@@ -114,10 +114,11 @@ ...@@ -114,10 +114,11 @@
<anti-action application="ring_ready"/> <anti-action application="ring_ready"/>
<anti-action application="set" data="call_timeout=130"/> <anti-action application="set" data="call_timeout=130"/>
<anti-action application="set" data="hangup_after_bridge=true"/> <anti-action application="set" data="hangup_after_bridge=true"/>
<anti-action application="set" data="left_hanging_extension=5900"/>
<anti-action application="set" data="continue_on_fail=true"/> <anti-action application="set" data="continue_on_fail=true"/>
<anti-action application="db" data="insert/call_return/${dialed_ext}/${caller_id_number}"/> <anti-action application="db" data="insert/call_return/${dialed_ext}/${caller_id_number}"/>
<anti-action application="db" data="insert/last_dial_ext/${dialed_ext}/${uuid}"/> <anti-action application="db" data="insert/last_dial_ext/${dialed_ext}/${uuid}"/>
<anti-action application="bridge" data="USER/${dialed_ext}@$${domain}"/> <anti-action application="bridge" data="{left_hanging_extension=5900,transfer_fallback_extension=${dialed_ext}}USER/${dialed_ext}@$${domain}"/>
<anti-action application="answer"/> <anti-action application="answer"/>
<anti-action application="sleep" data="1000"/> <anti-action application="sleep" data="1000"/>
<anti-action application="voicemail" data="default $${domain} ${dialed_ext}"/> <anti-action application="voicemail" data="default $${domain} ${dialed_ext}"/>
......
差异被折叠。
差异被折叠。
差异被折叠。
...@@ -201,7 +201,7 @@ ...@@ -201,7 +201,7 @@
/* If using the C implementation of alloca, define if you know the /* If using the C implementation of alloca, define if you know the
direction of stack growth for your system; otherwise it will be direction of stack growth for your system; otherwise it will be
automatically deduced at runtime. automatically deduced at run-time.
STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION > 0 => grows toward higher addresses
STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION < 0 => grows toward lower addresses
STACK_DIRECTION = 0 => direction of growth unknown */ STACK_DIRECTION = 0 => direction of growth unknown */
...@@ -222,7 +222,7 @@ ...@@ -222,7 +222,7 @@
/* Define to `int' if <sys/types.h> does not define. */ /* Define to `int' if <sys/types.h> does not define. */
#undef pid_t #undef pid_t
/* Define to `unsigned int' if <sys/types.h> does not define. */ /* Define to `unsigned' if <sys/types.h> does not define. */
#undef size_t #undef size_t
/* Define as `fork' if `vfork' does not work. */ /* Define as `fork' if `vfork' does not work. */
......
差异被折叠。
差异被折叠。
# Makefile.in generated by automake 1.10 from Makefile.am. # Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@ # @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation # This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it, # gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved. # with or without modifications, as long as this notice is preserved.
...@@ -13,11 +13,15 @@ ...@@ -13,11 +13,15 @@
# PARTICULAR PURPOSE. # PARTICULAR PURPOSE.
@SET_MAKE@ @SET_MAKE@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@ VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@ pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644 install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c
...@@ -50,6 +54,8 @@ MANS = $(man_MANS) ...@@ -50,6 +54,8 @@ MANS = $(man_MANS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@ ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@ ALLOCA = @ALLOCA@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@ AMTAR = @AMTAR@
AR = @AR@ AR = @AR@
AUTOCONF = @AUTOCONF@ AUTOCONF = @AUTOCONF@
...@@ -76,8 +82,6 @@ EGREP = @EGREP@ ...@@ -76,8 +82,6 @@ EGREP = @EGREP@
EXEEXT = @EXEEXT@ EXEEXT = @EXEEXT@
F77 = @F77@ F77 = @F77@
FFLAGS = @FFLAGS@ FFLAGS = @FFLAGS@
GREP = @GREP@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@ INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
...@@ -91,7 +95,6 @@ LTLIBOBJS = @LTLIBOBJS@ ...@@ -91,7 +95,6 @@ LTLIBOBJS = @LTLIBOBJS@
LT_VERSION = @LT_VERSION@ LT_VERSION = @LT_VERSION@
MAKEINFO = @MAKEINFO@ MAKEINFO = @MAKEINFO@
MANTYPE = @MANTYPE@ MANTYPE = @MANTYPE@
MKDIR_P = @MKDIR_P@
NROFF = @NROFF@ NROFF = @NROFF@
OBJEXT = @OBJEXT@ OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@ PACKAGE = @PACKAGE@
...@@ -102,17 +105,21 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ ...@@ -102,17 +105,21 @@ PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@ PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@ PATH_SEPARATOR = @PATH_SEPARATOR@
RANLIB = @RANLIB@ RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@ SET_MAKE = @SET_MAKE@
SHELL = @SHELL@ SHELL = @SHELL@
STRIP = @STRIP@ STRIP = @STRIP@
VERSION = @VERSION@ VERSION = @VERSION@
abs_builddir = @abs_builddir@ ac_ct_AR = @ac_ct_AR@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@ ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@ ac_ct_CXX = @ac_ct_CXX@
ac_ct_F77 = @ac_ct_F77@ ac_ct_F77 = @ac_ct_F77@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__include = @am__include@ am__include = @am__include@
am__leading_dot = @am__leading_dot@ am__leading_dot = @am__leading_dot@
am__quote = @am__quote@ am__quote = @am__quote@
...@@ -124,39 +131,28 @@ build_alias = @build_alias@ ...@@ -124,39 +131,28 @@ build_alias = @build_alias@
build_cpu = @build_cpu@ build_cpu = @build_cpu@
build_os = @build_os@ build_os = @build_os@
build_vendor = @build_vendor@ build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@ datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@ exec_prefix = @exec_prefix@
host = @host@ host = @host@
host_alias = @host_alias@ host_alias = @host_alias@
host_cpu = @host_cpu@ host_cpu = @host_cpu@
host_os = @host_os@ host_os = @host_os@
host_vendor = @host_vendor@ host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@ includedir = @includedir@
infodir = @infodir@ infodir = @infodir@
install_sh = @install_sh@ install_sh = @install_sh@
libdir = @libdir@ libdir = @libdir@
libexecdir = @libexecdir@ libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@ localstatedir = @localstatedir@
mandir = @mandir@ mandir = @mandir@
mkdir_p = @mkdir_p@ mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@ oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@ prefix = @prefix@
program_transform_name = @program_transform_name@ program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@ sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@ sysconfdir = @sysconfdir@
target_alias = @target_alias@ target_alias = @target_alias@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
EL_MANS = editline.3 editrc.5 EL_MANS = editline.3 editrc.5
man_MANS = $(EL_MANS) man_MANS = $(EL_MANS)
EL_MAN_LINKS = el_init.3 el_end.3 el_reset.3 el_gets.3 el_getc.3 \ EL_MAN_LINKS = el_init.3 el_end.3 el_reset.3 el_gets.3 el_getc.3 \
...@@ -205,9 +201,13 @@ mostlyclean-libtool: ...@@ -205,9 +201,13 @@ mostlyclean-libtool:
clean-libtool: clean-libtool:
-rm -rf .libs _libs -rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
uninstall-info-am:
install-man3: $(man3_MANS) $(man_MANS) install-man3: $(man3_MANS) $(man_MANS)
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
test -z "$(man3dir)" || $(MKDIR_P) "$(DESTDIR)$(man3dir)" test -z "$(man3dir)" || $(mkdir_p) "$(DESTDIR)$(man3dir)"
@list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \ @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \ for i in $$l2; do \
...@@ -252,7 +252,7 @@ uninstall-man3: ...@@ -252,7 +252,7 @@ uninstall-man3:
done done
install-man5: $(man5_MANS) $(man_MANS) install-man5: $(man5_MANS) $(man_MANS)
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)" test -z "$(man5dir)" || $(mkdir_p) "$(DESTDIR)$(man5dir)"
@list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \ @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \ for i in $$l2; do \
...@@ -303,21 +303,22 @@ CTAGS: ...@@ -303,21 +303,22 @@ CTAGS:
distdir: $(DISTFILES) distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; \ list='$(DISTFILES)'; for file in $$list; do \
dist_files=`for file in $$list; do echo $$file; done | \ case $$file in \
sed -e "s|^$$srcdirstrip/||;t" \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
case $$dist_files in \ esac; \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
dir="/$$dir"; \
$(mkdir_p) "$(distdir)$$dir"; \
else \
dir=''; \
fi; \
if test -d $$d/$$file; then \ if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
fi; \ fi; \
...@@ -333,7 +334,7 @@ check: check-am ...@@ -333,7 +334,7 @@ check: check-am
all-am: Makefile $(MANS) all-am: Makefile $(MANS)
installdirs: installdirs:
for dir in "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)"; do \ for dir in "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man5dir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \ test -z "$$dir" || $(mkdir_p) "$$dir"; \
done done
install: install-am install: install-am
install-exec: install-exec-am install-exec: install-exec-am
...@@ -366,7 +367,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am ...@@ -366,7 +367,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-am distclean: distclean-am
-rm -f Makefile -rm -f Makefile
distclean-am: clean-am distclean-generic distclean-am: clean-am distclean-generic distclean-libtool
dvi: dvi-am dvi: dvi-am
...@@ -382,20 +383,12 @@ install-data-am: install-man ...@@ -382,20 +383,12 @@ install-data-am: install-man
@$(NORMAL_INSTALL) @$(NORMAL_INSTALL)
$(MAKE) $(AM_MAKEFLAGS) install-data-hook $(MAKE) $(AM_MAKEFLAGS) install-data-hook
install-dvi: install-dvi-am
install-exec-am: install-exec-am:
install-html: install-html-am
install-info: install-info-am install-info: install-info-am
install-man: install-man3 install-man5 install-man: install-man3 install-man5
install-pdf: install-pdf-am
install-ps: install-ps-am
installcheck-am: installcheck-am:
maintainer-clean: maintainer-clean-am maintainer-clean: maintainer-clean-am
...@@ -414,24 +407,21 @@ ps: ps-am ...@@ -414,24 +407,21 @@ ps: ps-am
ps-am: ps-am:
uninstall-am: uninstall-local uninstall-man uninstall-am: uninstall-info-am uninstall-local uninstall-man
uninstall-man: uninstall-man3 uninstall-man5 uninstall-man: uninstall-man3 uninstall-man5
.MAKE: install-am install-data-am install-strip
.PHONY: all all-am check check-am clean clean-generic clean-libtool \ .PHONY: all all-am check check-am clean clean-generic clean-libtool \
distclean distclean-generic distclean-libtool distdir dvi \ distclean distclean-generic distclean-libtool distdir dvi \
dvi-am html html-am info info-am install install-am \ dvi-am html html-am info info-am install install-am \
install-data install-data-am install-data-hook install-dvi \ install-data install-data-am install-data-hook install-exec \
install-dvi-am install-exec install-exec-am install-html \ install-exec-am install-info install-info-am install-man \
install-html-am install-info install-info-am install-man \ install-man3 install-man5 install-strip installcheck \
install-man3 install-man5 install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \ installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \ maintainer-clean-generic mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
uninstall-local uninstall-man uninstall-man3 uninstall-man5 uninstall-info-am uninstall-local uninstall-man uninstall-man3 \
uninstall-man5
install-data-hook: $(EL_MAN_LINKS) install-data-hook: $(EL_MAN_LINKS)
......
差异被折叠。
...@@ -53,10 +53,10 @@ typedef enum { ...@@ -53,10 +53,10 @@ typedef enum {
SWITCH_SHN_ON_HANGUP, SWITCH_SHN_ON_HANGUP,
SWITCH_SHN_ON_LOOPBACK, SWITCH_SHN_ON_LOOPBACK,
SWITCH_SHN_ON_TRANSMIT, SWITCH_SHN_ON_TRANSMIT,
SWITCH_SHN_ON_PARK,
SWITCH_SHN_ON_HOLD, SWITCH_SHN_ON_HOLD,
SWITCH_SHN_ON_HIBERNATE, SWITCH_SHN_ON_HIBERNATE,
SWITCH_SHN_ON_RESET SWITCH_SHN_ON_RESET,
SWITCH_SHN_ON_PARK
} switch_state_handler_name_t; } switch_state_handler_name_t;
struct switch_state_handler_table { struct switch_state_handler_table {
...@@ -72,14 +72,14 @@ struct switch_state_handler_table { ...@@ -72,14 +72,14 @@ struct switch_state_handler_table {
switch_state_handler_t on_loopback; switch_state_handler_t on_loopback;
/*! executed when the state changes to transmit */ /*! executed when the state changes to transmit */
switch_state_handler_t on_transmit; switch_state_handler_t on_transmit;
/*! executed when the state changes to park */
switch_state_handler_t on_park;
/*! executed when the state changes to hold */ /*! executed when the state changes to hold */
switch_state_handler_t on_hold; switch_state_handler_t on_hold;
/*! executed when the state changes to hibernate */ /*! executed when the state changes to hibernate */
switch_state_handler_t on_hibernate; switch_state_handler_t on_hibernate;
/*! executed when the state changes to reset */ /*! executed when the state changes to reset */
switch_state_handler_t on_reset; switch_state_handler_t on_reset;
/*! executed when the state changes to park */
switch_state_handler_t on_park;
void *padding[10]; void *padding[10];
}; };
......
...@@ -202,6 +202,34 @@ switch_status_t sofia_on_hangup(switch_core_session_t *session) ...@@ -202,6 +202,34 @@ switch_status_t sofia_on_hangup(switch_core_session_t *session)
tech_pvt = (private_object_t *) switch_core_session_get_private(session); tech_pvt = (private_object_t *) switch_core_session_get_private(session);
switch_assert(tech_pvt != NULL); switch_assert(tech_pvt != NULL);
if (switch_test_flag(tech_pvt, TFLAG_SIP_HOLD)) {
const char *buuid;
switch_core_session_t *bsession;
switch_channel_t *bchannel;
const char *lost_ext;
if (tech_pvt->max_missed_packets) {
switch_rtp_set_max_missed_packets(tech_pvt->rtp_session, tech_pvt->max_missed_packets);
}
switch_channel_presence(tech_pvt->channel, "unknown", "unhold");
if ((buuid = switch_channel_get_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE))) {
if ((bsession = switch_core_session_locate(buuid))) {
bchannel = switch_core_session_get_channel(bsession);
if ((lost_ext = switch_channel_get_variable(bchannel, "left_hanging_extension"))) {
switch_ivr_session_transfer(bsession, lost_ext, NULL, NULL);
}
switch_channel_clear_flag(bchannel, CF_BROADCAST);
switch_channel_set_flag(bchannel, CF_BREAK);
switch_core_session_rwunlock(bsession);
}
}
switch_clear_flag_locked(tech_pvt, TFLAG_SIP_HOLD);
}
cause = switch_channel_get_cause(channel); cause = switch_channel_get_cause(channel);
sip_cause = hangup_cause_to_sip(cause); sip_cause = hangup_cause_to_sip(cause);
......
...@@ -1875,7 +1875,7 @@ void sofia_handle_sip_i_refer(nua_t *nua, sofia_profile_t *profile, nua_handle_t ...@@ -1875,7 +1875,7 @@ void sofia_handle_sip_i_refer(nua_t *nua, sofia_profile_t *profile, nua_handle_t
switch_core_session_t *b_session; switch_core_session_t *b_session;
if ((b_session = switch_core_session_locate(br))) { if ((b_session = switch_core_session_locate(br))) {
switch_channel_set_variable(channel, "TRANSFER_FALLBACK", from->a_user); switch_channel_set_variable(channel, "transfer_fallback_extension", from->a_user);
switch_ivr_session_transfer(b_session, exten, NULL, NULL); switch_ivr_session_transfer(b_session, exten, NULL, NULL);
switch_core_session_rwunlock(b_session); switch_core_session_rwunlock(b_session);
} }
......
...@@ -670,9 +670,11 @@ static int sofia_presence_sub_callback(void *pArg, int argc, char **argv, char * ...@@ -670,9 +670,11 @@ static int sofia_presence_sub_callback(void *pArg, int argc, char **argv, char *
dft_state = "confirmed"; dft_state = "confirmed";
} }
if (!strcasecmp(state, "cs_execute") && !strcasecmp(direction, "inbound") && !strcasecmp(event_status, "hold")) { if (!strcasecmp(state, "cs_execute") && !strstr(event_status, "hold")) {
goto end; goto end;
} else if (!strcasecmp(state, "cs_hangup")) { }
if (!strcasecmp(state, "cs_hangup")) {
astate = "terminated"; astate = "terminated";
} else if (switch_strlen_zero(astate)) { } else if (switch_strlen_zero(astate)) {
astate = switch_str_nil(switch_event_get_header(helper->event, "answer-state")); astate = switch_str_nil(switch_event_get_header(helper->event, "answer-state"));
......
...@@ -219,6 +219,8 @@ static void *audio_bridge_thread(switch_thread_t * thread, void *obj) ...@@ -219,6 +219,8 @@ static void *audio_bridge_thread(switch_thread_t * thread, void *obj)
end: end:
switch_core_session_kill_channel(session_b, SWITCH_SIG_BREAK); switch_core_session_kill_channel(session_b, SWITCH_SIG_BREAK);
//switch_channel_clear_flag(chan_b, CF_BROADCAST);
//switch_channel_set_flag(chan_b, CF_BREAK);
switch_core_session_reset(session_a); switch_core_session_reset(session_a);
switch_channel_set_variable(chan_a, SWITCH_BRIDGE_VARIABLE, NULL); switch_channel_set_variable(chan_a, SWITCH_BRIDGE_VARIABLE, NULL);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "BRIDGE THREAD DONE [%s]\n", switch_channel_get_name(chan_a)); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "BRIDGE THREAD DONE [%s]\n", switch_channel_get_name(chan_a));
...@@ -650,6 +652,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_multi_threaded_bridge(switch_core_ses ...@@ -650,6 +652,8 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_multi_threaded_bridge(switch_core_ses
} }
switch_channel_clear_flag(caller_channel, CF_ORIGINATOR); switch_channel_clear_flag(caller_channel, CF_ORIGINATOR);
//make sure this doesnt break anything
switch_channel_set_state(peer_channel, CS_RESET);
while (switch_channel_get_state(peer_channel) == CS_LOOPBACK) { while (switch_channel_get_state(peer_channel) == CS_LOOPBACK) {
switch_yield(1000); switch_yield(1000);
} }
...@@ -702,7 +706,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_uuid_bridge(const char *originator_uu ...@@ -702,7 +706,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_uuid_bridge(const char *originator_uu
* inturrupt anything they are already doing. * inturrupt anything they are already doing.
* originatee_session will fall asleep and originator_session will bridge to it * originatee_session will fall asleep and originator_session will bridge to it
*/ */
switch_channel_clear_state_handler(originator_channel, NULL); switch_channel_clear_state_handler(originator_channel, NULL);
switch_channel_clear_state_handler(originatee_channel, NULL); switch_channel_clear_state_handler(originatee_channel, NULL);
switch_channel_set_flag(originator_channel, CF_ORIGINATOR); switch_channel_set_flag(originator_channel, CF_ORIGINATOR);
...@@ -767,7 +771,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_uuid_bridge(const char *originator_uu ...@@ -767,7 +771,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_uuid_bridge(const char *originator_uu
SWITCH_DECLARE(void) switch_ivr_intercept_session(switch_core_session_t *session, const char *uuid) SWITCH_DECLARE(void) switch_ivr_intercept_session(switch_core_session_t *session, const char *uuid)
{ {
switch_core_session_t *rsession, *bsession; switch_core_session_t *rsession, *bsession = NULL;
switch_channel_t *channel, *rchannel, *bchannel; switch_channel_t *channel, *rchannel, *bchannel;
const char *buuid; const char *buuid;
...@@ -779,25 +783,28 @@ SWITCH_DECLARE(void) switch_ivr_intercept_session(switch_core_session_t *session ...@@ -779,25 +783,28 @@ SWITCH_DECLARE(void) switch_ivr_intercept_session(switch_core_session_t *session
channel = switch_core_session_get_channel(session); channel = switch_core_session_get_channel(session);
rchannel = switch_core_session_get_channel(rsession); rchannel = switch_core_session_get_channel(rsession);
switch_channel_answer(channel); switch_channel_pre_answer(channel);
buuid = switch_channel_get_variable(rchannel, SWITCH_SIGNAL_BOND_VARIABLE); if ((buuid = switch_channel_get_variable(rchannel, SWITCH_SIGNAL_BOND_VARIABLE))) {
bsession = switch_core_session_locate(buuid);
}
if (!switch_channel_test_flag(rchannel, CF_ANSWERED)) {
switch_channel_answer(rchannel);
}
//switch_ivr_park_session(rsession);
switch_channel_set_state_flag(rchannel, CF_TRANSFER); switch_channel_set_state_flag(rchannel, CF_TRANSFER);
switch_channel_set_state(rchannel, CS_RESET); switch_channel_set_state(rchannel, CS_RESET);
if (buuid) { if (bsession) {
if ((bsession = switch_core_session_locate(buuid))) { bchannel = switch_core_session_get_channel(bsession);
bchannel = switch_core_session_get_channel(bsession); switch_channel_hangup(bchannel, SWITCH_CAUSE_PICKED_OFF);
switch_channel_hangup(bchannel, SWITCH_CAUSE_PICKED_OFF); switch_core_session_rwunlock(bsession);
switch_core_session_rwunlock(bsession);
}
} }
if (!switch_channel_test_flag(rchannel, CF_ANSWERED)) {
switch_channel_answer(rchannel);
}
switch_core_session_rwunlock(rsession); switch_core_session_rwunlock(rsession);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论