[Freeswitch-branches] [commit] r8531 - in freeswitch/branches/lukedashjr/syslibs: freeswitch freeswitch/conf/autoload_configs freeswitch/conf/jingle_profiles freeswitch/conf/lang/en/vm freeswitch/conf/sip_profiles freeswitch/debian freeswitch/docs freeswitch/src freeswitch/src/include freeswitch/src/include/private freeswitch/src/mod/applications/mod_commands freeswitch/src/mod/applications/mod_conference freeswitch/src/mod/applications/mod_dptools freeswitch/src/mod/applications/mod_esf freeswitch/src/mod/applications/mod_fifo freeswitch/src/mod/applications/mod_soundtouch freeswitch/src/mod/applications/mod_voicemail freeswitch/src/mod/codecs/mod_ilbc freeswitch/src/mod/dialplans/mod_dialplan_asterisk freeswitch/src/mod/endpoints/mod_alsa freeswitch/src/mod/endpoints/mod_dingaling freeswitch/src/mod/endpoints/mod_iax freeswitch/src/mod/endpoints/mod_portaudio freeswitch/src/mod/endpoints/mod_reference freeswitch/src/mod/endpoints/mod_sofia freeswitch/src/mod/endpoints/mod_wanpipe freeswitch/src/mod/endpoints/mod_woomera freeswitch/src/mod/formats/mod_local_stream freeswitch/src/mod/formats/mod_sndfile freeswitch/src/mod/languages/mod_java freeswitch/src/mod/languages/mod_java/src/org/freeswitch/swig freeswitch/src/mod/languages/mod_lua freeswitch/src/mod/languages/mod_perl freeswitch/src/mod/languages/mod_python freeswitch/src/mod/xml_int/mod_xml_curl freeswitch/w32/Library libs/libedit/src libs/sofia-sip libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip libs/sofia-sip/libsofia-sip-ua/nta libs/sofia-sip/libsofia-sip-ua/nua libs/sofia-sip/libsofia-sip-ua/sresolv libs/sofia-sip/tests
Freeswitch SVN
lukedashjr at freeswitch.org
Thu May 22 15:05:29 EDT 2008
Author: lukedashjr
Date: Thu May 22 15:05:28 2008
New Revision: 8531
Added:
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/check_nua.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/libsofia-sip-ua/nua/check_nua.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/check_nua.h
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/libsofia-sip-ua/nua/check_nua.h
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/check_register.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/libsofia-sip-ua/nua/check_register.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/check_session.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/libsofia-sip-ua/nua/check_session.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_types.h
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/libsofia-sip-ua/nua/nua_types.h
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_s2.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/libsofia-sip-ua/nua/test_s2.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_s2.h
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/libsofia-sip-ua/nua/test_s2.h
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_100rel.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_100rel.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_basic_call.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_basic_call.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_call_hold.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_call_hold.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_call_reject.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_call_reject.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_cancel_bye.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_cancel_bye.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_extension.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_extension.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_init.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_init.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_nat.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_nat.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_nat.h
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_nat.h
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_nat_tags.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_nat_tags.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_nua.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_nua.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_nua.h
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_nua.h
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_nua_api.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_nua_api.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_nua_params.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_nua_params.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_offer_answer.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_offer_answer.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_ops.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_ops.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_proxy.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_proxy.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_proxy.h
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_proxy.h
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_refer.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_refer.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_register.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_register.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_session_timer.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_session_timer.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_simple.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_simple.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_sip_events.c
- copied unchanged from r8528, /freeswitch/tags/1.0.rc6/libs/sofia-sip/tests/test_sip_events.c
Removed:
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_100rel.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_basic_call.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_call_hold.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_call_reject.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_cancel_bye.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_extension.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_init.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_nat.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_nat.h
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_nat_tags.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_nua.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_nua.h
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_nua_api.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_nua_params.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_offer_answer.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_ops.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_proxy.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_proxy.h
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_refer.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_register.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_session_timer.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_simple.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_sip_events.c
Modified:
freeswitch/branches/lukedashjr/syslibs/freeswitch/Makefile.am
freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/conference.conf.xml
freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/modules.conf.xml
freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/switch.conf.xml
freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/voicemail.conf.xml
freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/xml_curl.conf.xml
freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/jingle_profiles/client.xml
freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/jingle_profiles/server.xml
freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/en/vm/sounds.xml
freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/en/vm/tts.xml
freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/internal.xml
freeswitch/branches/lukedashjr/syslibs/freeswitch/configure.in
freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/changelog
freeswitch/branches/lukedashjr/syslibs/freeswitch/docs/ChangeLog
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/private/switch_core_pvt.h
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_channel.h
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_config.h
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_core.h
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_core_event_hook.h
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_cpp.h
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_event.h
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_ivr.h
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_module_interfaces.h
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_rtp.h
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_types.h
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_utils.h
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_commands/mod_commands.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_conference/mod_conference.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_dptools/mod_dptools.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_esf/mod_esf.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_fifo/mod_fifo.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_soundtouch/mod_soundtouch.cpp
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_voicemail/mod_voicemail.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_ilbc/mod_ilbc.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/dialplans/mod_dialplan_asterisk/mod_dialplan_asterisk.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_alsa/mod_alsa.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_dingaling/mod_dingaling.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/iax.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/mod_iax.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_portaudio/mod_portaudio.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_reference/mod_reference.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/mod_sofia.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/mod_sofia.h
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/sofia.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/sofia_glue.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/sofia_presence.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/sofia_reg.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_woomera/mod_woomera.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_local_stream/mod_local_stream.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_sndfile/mod_sndfile.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/src/org/freeswitch/swig/CoreSession.java
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/src/org/freeswitch/swig/freeswitchJNI.java
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/switch_swig_wrap.cpp
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/Makefile
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/mod_lua_wrap.cpp
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/freeswitch.pm
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/mod_perl_wrap.cpp
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/Makefile.in
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/freeswitch.py
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/mod_python_wrap.cpp
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_channel.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_config.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_console.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_db.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_io.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_session.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_sqldb.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_state_machine.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_cpp.cpp
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_event.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_async.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_bridge.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_menu.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_originate.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_play_say.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_loadable_module.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_log.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_regex.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_rtp.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_utils.c
freeswitch/branches/lukedashjr/syslibs/freeswitch/w32/Library/FreeSwitchCore.2008.vcproj
freeswitch/branches/lukedashjr/syslibs/libs/libedit/src/makelist
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/.update
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_header.h
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nta/nta.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/Makefile.am
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_dialog.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_dialog.h
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_notifier.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.h
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_publish.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_register.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.h
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_tag.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/outbound.h
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/sresolv/sres.c
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/Makefile.am
freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/suite_for_nua.c
Log:
MERGE to: http://svn.freeswitch.org/svn/freeswitch/tags/1.0.rc6
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/Makefile.am
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/Makefile.am (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/Makefile.am Thu May 22 15:05:28 2008
@@ -18,7 +18,7 @@
sound_perfix=`echo $@ | sed -e 's|-.*||'`; \
full_sound_dir=`echo $@ | sed -e 's|^sounds||' | sed -e 's|^-||' | sed -e 's|-install$$||'`; \
test ! -z $$full_sound_dir || full_sound_dir=`echo $(DEFAULT_SOUNDS)`; \
- soundfile=`echo freeswitch-sounds-$$full_sound_dir-$(PACKAGE_VERSION).tar.gz`; \
+ soundfile=`echo freeswitch-sounds-$$full_sound_dir-$(SOUNDS_VERSION).tar.gz`; \
if test "$$target" = "install"; then $(MAKE) $(AM_MAKEFLAGS) core_install; else $(MAKE) $(AM_MAKEFLAGS) core ; fi; \
if test "$$target_prefix" = "sounds"; then \
if test "$$target" = "install"; then $(GETSOUNDS) $$soundfile $(PREFIX)/sounds/; else $(GETSOUNDS) $$soundfile ; fi; \
@@ -158,6 +158,13 @@
$(switch_builddir)/quiet_libtool: $(switch_builddir)/libtool
@cat libtool | sed -e 's|$$show "$$command"|if test -z "$$suppress_output" ; then $$show "Compiling $$srcfile ..." ; fi|' > quiet_libtool
+vm-sync:
+ test -d $(DESTDIR)$(prefix)/conf || $(mkinstalldirs) $(DESTDIR)$(prefix)/conf
+ test -d $(DESTDIR)$(prefix)/conf/lang || $(mkinstalldirs) $(DESTDIR)$(prefix)/conf/lang
+ test -d $(DESTDIR)$(prefix)/conf/lang/en || $(mkinstalldirs) $(DESTDIR)$(prefix)/conf/lang/en
+ test -d $(DESTDIR)$(prefix)/conf/lang/en/vm || $(mkinstalldirs) $(DESTDIR)$(prefix)/conf/lang/en/vm
+ $(INSTALL) -m 644 conf/lang/en/vm/* $(DESTDIR)$(prefix)/conf/lang/en/vm
+
samples-conf:
test -d $(DESTDIR)$(prefix)/conf || $(mkinstalldirs) $(DESTDIR)$(prefix)/conf
test -d $(DESTDIR)$(prefix)/conf/dialplan/extensions || $(mkinstalldirs) $(DESTDIR)$(prefix)/conf/dialplan/extensions
@@ -268,6 +275,11 @@
$(MAKE) -j core
$(MAKE) -j modules
+sofia-reconf:
+ cd libs/sofia-sip && $(MAKE) clean
+ cd libs/sofia-sip && autoreconf -fi
+ cd libs/sofia-sip && ./configure --prefix=$(PREFIX) --with-pic --with-glib=no --disable-shared
+
current: update-clean
svn update
$(MAKE) all
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/conference.conf.xml
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/conference.conf.xml (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/conference.conf.xml Thu May 22 15:05:28 2008
@@ -83,6 +83,7 @@
<param name="pin-sound" value="conference/conf-pin.wav"/>
<!-- File to play to when the pin is invalid -->
<param name="bad-pin-sound" value="conference/conf-bad-pin.wav"/>
+ <param name="comfort-noise-level" value="1400"/>
<!-- Conference pin -->
<!--<param name="pin" value="12345"/>-->
<!-- Default Caller ID Name for outbound calls -->
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/modules.conf.xml
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/modules.conf.xml (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/modules.conf.xml Thu May 22 15:05:28 2008
@@ -27,7 +27,7 @@
<!-- Endpoints -->
<!-- <load module="mod_dingaling"/> -->
- <load module="mod_iax"/>
+ <!-- <load module="mod_iax"/> -->
<!-- <load module="mod_portaudio"/> -->
<!-- <load module="mod_alsa"/> -->
<load module="mod_sofia"/>
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/switch.conf.xml
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/switch.conf.xml (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/switch.conf.xml Thu May 22 15:05:28 2008
@@ -37,6 +37,7 @@
<variables>
<variable name="uk-ring" value="%(400,200,400,450);%(400,2200,400,450)"/>
<variable name="us-ring" value="%(2000, 4000, 440.0, 480.0)"/>
+ <variable name="fr-ring" value="%(1500, 3500, 440.0, 0.0)"/>
<variable name="bong-ring" value="v=-7;%(100,0,941.0,1477.0);v=-7;>=2;+=.1;%(1400,0,350,440)"/>
</variables>
</configuration>
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/voicemail.conf.xml
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/voicemail.conf.xml (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/voicemail.conf.xml Thu May 22 15:05:28 2008
@@ -40,6 +40,8 @@
-->
<param name="operator-extension" value="operator XML default"/>
<param name="operator-key" value="9"/>
+ <param name="vmain-extension" value="vmain XML default"/>
+ <param name="vmain-key" value="*"/>
<email>
<param name="template-file" value="voicemail.tpl"/>
<!-- this is the format voicemail_time will have -->
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/xml_curl.conf.xml
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/xml_curl.conf.xml (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/xml_curl.conf.xml Thu May 22 15:05:28 2008
@@ -14,6 +14,8 @@
<!-- optional: if enabled this will disable CA root certificate checks by libcurl -->
<!-- note: default value is disabled. only enable if you want this! -->
<!-- <param name="ignore-cacert-check" value="true" /> -->
+ <!-- one or more of these imply you want to pick the exact variables that are transmitted -->
+ <!--<param name="enable-post-var" value="Unique-ID"/>-->
</binding>
</bindings>
</configuration>
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/jingle_profiles/client.xml
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/jingle_profiles/client.xml (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/jingle_profiles/client.xml Thu May 22 15:05:28 2008
@@ -1,5 +1,6 @@
<include>
<!-- Client Profile (Original mode) -->
+ <!-- to use this profile take the x- away from the open and close tags so its <profile> and </profile> -->
<x-profile type="client">
<param name="name" value="$${xmpp_client_profile}"/>
<param name="login" value="myjid at myserver.com/talk"/>
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/jingle_profiles/server.xml
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/jingle_profiles/server.xml (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/jingle_profiles/server.xml Thu May 22 15:05:28 2008
@@ -1,5 +1,6 @@
<include>
<!-- Component (Server to Server Login) -->
+ <!-- to use this profile take the x- away from the open and close tags so its <profile> and </profile> -->
<x-profile type="component">
<param name="name" value="$${xmpp_server_profile}"/>
<param name="password" value="secret"/>
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/en/vm/sounds.xml
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/en/vm/sounds.xml (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/en/vm/sounds.xml Thu May 22 15:05:28 2008
@@ -50,7 +50,7 @@
</macro>
<macro name="voicemail_message_count">
- <input pattern="^(1):(.*)$">
+ <input pattern="^(1):(.*)$" break_on_match="true">
<match>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
@@ -59,7 +59,7 @@
<action function="play-file" data="voicemail/vm-in_folder.wav"/>
</match>
</input>
- <input pattern="^([0,2-9]+):(.*)$">
+ <input pattern="^(\d+):(.*)$">
<match>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/en/vm/tts.xml
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/en/vm/tts.xml (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/en/vm/tts.xml Thu May 22 15:05:28 2008
@@ -48,12 +48,12 @@
</macro>
<macro name="voicemail_message_count">
- <input pattern="^1:(.*)$">
+ <input pattern="^1:(.*)$" break_on_match="true">
<match>
<action function="speak-text" data="you have 1 $1 message in folder ${voicemail_current_folder}."/>
</match>
</input>
- <input pattern="^([0,2-9]+):(.*)$">
+ <input pattern="^(\d+):(.*)$">
<match>
<action function="speak-text" data="you have $1 $2 messages in folder ${voicemail_current_folder}."/>
</match>
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/internal.xml
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/internal.xml (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/internal.xml Thu May 22 15:05:28 2008
@@ -35,10 +35,11 @@
<!-- ip address to bind to -->
<param name="sip-ip" value="$${local_ip_v4}"/>
<param name="hold-music" value="$${hold_music}"/>
+ <param name="apply-nat-acl" value="rfc1918"/>
<!--<param name="enable-timer" value="false"/>-->
<!--<param name="enable-100rel" value="false"/>-->
- <!--<param name="apply-inbound-acl" value="lan"/>-->
- <!--<param name="apply-register-acl" value="lan"/>-->
+ <!--<param name="apply-inbound-acl" value="rfc1918"/>-->
+ <!--<param name="apply-register-acl" value="rfc1918"/>-->
<!--<param name="dtmf-type" value="info"/>-->
<param name="record-template" value="$${base_dir}/recordings/${caller_id_number}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/>
<!--enable to use presense and mwi -->
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/configure.in
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/configure.in (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/configure.in Thu May 22 15:05:28 2008
@@ -3,11 +3,12 @@
# Must change all of the below together
# For a release, set revision for that tagged release as well and uncomment
-AC_INIT([freeswitch], [1.0.rc5], BUG-REPORT-ADDRESS)
+AC_INIT([freeswitch], [1.0.rc6], BUG-REPORT-ADDRESS)
AC_SUBST(SWITCH_VERSION_MAJOR, [1])
AC_SUBST(SWITCH_VERSION_MINOR, [0])
-AC_SUBST(SWITCH_VERSION_MICRO, [rc5])
-AC_SUBST(SWITCH_VERSION_REVISION, [8381])
+AC_SUBST(SWITCH_VERSION_MICRO, [rc6])
+AC_SUBST(SWITCH_VERSION_REVISION, [8500])
+AC_SUBST(SOUNDS_VERSION, [1.0.1])
AC_CONFIG_FILES([src/include/switch_version.h.in:src/include/switch_version.h.template])
@@ -575,16 +576,11 @@
[with_python="try"]
)
-AC_ARG_WITH(
- [python-config],
- [AS_HELP_STRING([--with-python-config=PATH], [Location of python-config])],
- [with_python_config="$withval"],
- [with_python_config="no"]
-)
-
-
if test "$with_python" != "no"
then
+ save_CFLAGS="$CFLAGS"
+ save_LIBS="$LIBS"
+
if test "$with_python" != "yes" -a "$with_python" != "try" ; then
AC_MSG_CHECKING([for python])
if test ! -x "$with_python" ; then
@@ -605,68 +601,78 @@
fi
AC_MSG_RESULT([$PYTHON_VER])
- AC_MSG_CHECKING([location of site-packages])
-
- # NOTE: this assumes our desired location is always the last one in the list
- # (= system package location is searched last)
- #
- # needs double brackets because m4 removes one pair
- PYTHON_SITE_DIR="`$PYTHON -c 'import sys; print sys.path[[-1]];'`"
-
- if test -z "$PYTHON_SITE_DIR" ; then
- AC_MSG_ERROR([Unable to detect python site-packages path])
- elif test ! -d "$PYTHON_SITE_DIR" ; then
- AC_MSG_ERROR([Path $PYTHON_SITE_DIR returned by python does not exist!])
+ AC_MSG_CHECKING([for python distutils])
+ python_result="`$PYTHON -c 'import distutils;' 2>&1`"
+ if test -z "$python_result" ; then
+ python_has_distutils="yes"
+ else
+ python_has_distutils="no"
fi
- AC_MSG_RESULT([$PYTHON_SITE_DIR])
- AC_SUBST([PYTHON_SITE_DIR], [$PYTHON_SITE_DIR])
+ AC_MSG_RESULT([$python_has_distutils])
+
+ if test "$python_has_distutils" != "no" ; then
+ AC_MSG_CHECKING([location of site-packages])
- if test "$with_python_config" != "no" ; then
- AC_MSG_CHECKING([for python-config])
- if test ! -x "$with_python_config" ; then
- AC_MSG_ERROR([Specified python-config does not exist or is not executable: $with_python_config])
+ PYTHON_SITE_DIR="`$PYTHON -c 'from distutils import sysconfig; print sysconfig.get_python_lib(0);'`"
+
+ if test -z "$PYTHON_SITE_DIR" ; then
+ AC_MSG_ERROR([Unable to detect python site-packages path])
+ elif test ! -d "$PYTHON_SITE_DIR" ; then
+ AC_MSG_ERROR([Path $PYTHON_SITE_DIR returned by python does not exist!])
fi
- AC_MSG_RESULT([$with_python_config])
- AC_SUBST([PYTHON_CONFIG], ["$with_python_config"])
- else
- AC_PATH_PROG([PYTHON_CONFIG], ["python-config"], ["no"], ["$PATH:/usr/bin:/usr/local/bin"])
- fi
+ AC_MSG_RESULT([$PYTHON_SITE_DIR])
+ AC_SUBST([PYTHON_SITE_DIR], [$PYTHON_SITE_DIR])
- # this one is fatal if with_python != try
- if test "$PYTHON_CONFIG" != "no" ; then
- PYTHON_CFLAGS="`$PYTHON_CONFIG --cflags`"
- PYTHON_LDFLAGS="`$PYTHON_CONFIG --ldflags`"
+ #
+ # python distutils found, get settings from python directly
+ #
+ PYTHON_CFLAGS="`$PYTHON -c 'from distutils import sysconfig; flags = [[\"-I\" + sysconfig.get_python_inc(0), \"-I\" + sysconfig.get_python_inc(1), \" \".join(sysconfig.get_config_var(\"CFLAGS\").split())]]; print \" \".join(flags);'`"
+ PYTHON_LDFLAGS="`$PYTHON -c 'from distutils import sysconfig; libs = sysconfig.get_config_var(\"LIBS\").split() + sysconfig.get_config_var(\"SYSLIBS\").split(); libs.append(\"-lpython\"+sysconfig.get_config_var(\"VERSION\")); print \" \".join(libs);'`"
+ PYTHON_LIB="`$PYTHON -c 'from distutils import sysconfig; print \"python\" + sysconfig.get_config_var(\"VERSION\");'`"
+
+ # check libpython
+ AC_CHECK_LIB([$PYTHON_LIB], [main], [has_libpython="yes"], [has_libpython="no"])
+
+ if test "$has_libpython" = "no" ; then
+ AS_IF([test "$with_python" = "try"],
+ [AC_MSG_WARN([$PYTHON_LIB is unusable])],
+ [AC_MSG_ERROR([$PYTHON_LIB is unusable])]
+ )
+ fi
# check whether system libpython is usable and has threads support
- save_LIBS="$LIBS"
+ CFLAGS="$PYTHON_CFLAGS"
LIBS="$PYTHON_LDFLAGS"
AC_CHECK_FUNC([PyThread_init_thread], [python_has_threads="yes"], [python_has_threads="no"])
- LIBS="$save_LIBS"
-
- if test "$python_has_threads" = "no" ; then
- if test "$with_python" = "try" ; then
- AC_MSG_ERROR([Your python lacks threads support, can not build mod_python])
- fi
- AC_MSG_WARN([Your python lacks threads support, can not build mod_python])
+ if test "$python_has_threads" = "no"; then
+ AS_IF([test "$with_python" = "try"],
+ [AC_MSG_WARN([Your python lacks threads support, can not build mod_python])],
+ [AC_MSG_ERROR([Your python lacks threads support, can not build mod_python])]
+ )
else
AC_MSG_NOTICE([Your python seems OK, do not forget to enable mod_python in modules.conf])
- AC_SUBST([PYTHON_CFLAGS], [$PYTHON_CFLAGS])
+ AC_SUBST([PYTHON_CFLAGS], [$PYTHON_CFLAGS])
AC_SUBST([PYTHON_LDFLAGS], [$PYTHON_LDFLAGS])
fi
else
- if test "$with_python" != "try" ; then
- AC_MSG_ERROR([python-config could not be found, use --with-python-config to specify the location])
- fi
-
- AC_MSG_WARN([python-config could not be found, mod_python will not build, use --with-python-config to specify the location])
- fi
- else
- if test "$with_python" != "try" ; then
- AC_MSG_ERROR([Could not find python, use --with-python to specify the location])
+ AS_IF([test "$with_python" = "try"],
+ [AC_MSG_WARN([Could not find or use python distutils module: $python_result])],
+ [AC_MSG_ERROR([Could not find or use python distutils module: $python_result])]
+ )
fi
- AC_MSG_WARN([Could not find python, mod_python will not build, use --with-python to specify the location])
+ LIBS="$save_LIBS"
+ CFLAGS="$save_CFLAGS"
+
+ unset python_has_threads
+ unset python_has_distutils
+ unset python_result
+ else
+ AS_IF([test "$with_python" = "try"],
+ [AC_MSG_WARN([Could not find python, mod_python will not build, use --with-python to specify the location])],
+ [AC_MSG_ERROR([Could not find python, use --with-python to specify the location])]
+ )
fi
else
AC_MSG_WARN([python support disabled, building mod_python will fail!])
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/changelog
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/changelog (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/changelog Thu May 22 15:05:28 2008
@@ -1,3 +1,22 @@
+freeswitch (1.0~rc6-1) unstable; urgency=low
+
+ * Changed to not allow pass_2833 on transcoded calls (it never worked, now it will tell you)
+ * Enhanced sofia sip nat handling
+ * Fix libedit build on solaris
+ * Fix session timers in mod_sofia
+ * Fix conference fire-call
+ * Change: add var_event down into the endpoints so chans with no parents can still pass options
+ * Added enable-post-var param to xml_rpc
+ * Fix mod_lua build on solaris
+ * Many fixes found by Klockwork (www.klocwork.com)
+ * Add unregister event in mod_sofia
+ * Enhance python configure detection
+ * Add vm_boxcount api func
+ * Fixed att_xfer issue
+ * Fix sip now includes the Allow-Events header in more places
+
+-- Michael Jerris <mike at jerris.com> Tue, 13 May 2008 02:01:00 -0400
+
freeswitch (1.0~rc5-1) unstable; urgency=low
* Changed internal state names to avoid confusion
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/docs/ChangeLog
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/docs/ChangeLog (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/docs/ChangeLog Thu May 22 15:05:28 2008
@@ -1,3 +1,19 @@
+freeswitch (1.0.rc6)
+ Changed to not allow pass_2833 on transcoded calls (it never worked, now it will tell you)
+ Enhanced sofia sip nat handling
+ Fix libedit build on solaris
+ Fix session timers in mod_sofia
+ Fix conference fire-call
+ Change: add var_event down into the endpoints so chans with no parents can still pass options
+ Added enable-post-var param to xml_rpc
+ Fix mod_lua build on solaris
+ Many fixes found by Klockwork (www.klocwork.com)
+ Add unregister event in mod_sofia
+ Enhance python configure detection
+ Add vm_boxcount api func
+ Fixed att_xfer issue
+ Fix sip now includes the Allow-Events header in more places
+
freeswitch (1.0.rc5)
Changed internal state names to avoid confusion
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/private/switch_core_pvt.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/private/switch_core_pvt.h (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/private/switch_core_pvt.h Thu May 22 15:05:28 2008
@@ -85,7 +85,8 @@
typedef enum {
SSF_NONE = 0,
- SSF_DESTROYED = (1 << 0)
+ SSF_DESTROYED = (1 << 0),
+ SSF_WARN_TRANSCODE = (1 << 1)
} switch_session_flag_t;
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_channel.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_channel.h (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_channel.h Thu May 22 15:05:28 2008
@@ -254,7 +254,7 @@
\param flags or'd list of channel flags to test
\return TRUE if flags were present
*/
-SWITCH_DECLARE(int) switch_channel_test_flag(switch_channel_t *channel, switch_channel_flag_t flags);
+SWITCH_DECLARE(uint32_t) switch_channel_test_flag(switch_channel_t *channel, switch_channel_flag_t flags);
/*!
\brief Set given flag(s) on a given channel
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_config.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_config.h (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_config.h Thu May 22 15:05:28 2008
@@ -65,7 +65,7 @@
/*! FILE stream buffer to the opened file */
FILE *file;
/*! path to the file */
- char *path;
+ char path[512];
/*! current category */
char category[256];
/*! current section */
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_core.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_core.h (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_core.h Thu May 22 15:05:28 2008
@@ -732,6 +732,7 @@
\return the cause code of the attempted call
*/
SWITCH_DECLARE(switch_call_cause_t) switch_core_session_outgoing_channel(_In_opt_ switch_core_session_t *session,
+ _In_opt_ switch_event_t *var_event,
_In_z_ const char *endpoint_name,
_In_ switch_caller_profile_t *caller_profile,
_Inout_ switch_core_session_t **new_session,
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_core_event_hook.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_core_event_hook.h (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_core_event_hook.h Thu May 22 15:05:28 2008
@@ -48,7 +48,7 @@
typedef struct switch_io_event_hook_state_change switch_io_event_hook_state_change_t;
typedef struct switch_io_event_hook_resurrect_session switch_io_event_hook_resurrect_session_t;
typedef switch_status_t (*switch_outgoing_channel_hook_t)
-(switch_core_session_t *, switch_caller_profile_t *, switch_core_session_t *, switch_originate_flag_t);
+(switch_core_session_t *, switch_event_t *, switch_caller_profile_t *, switch_core_session_t *, switch_originate_flag_t);
typedef switch_status_t (*switch_receive_message_hook_t) (switch_core_session_t *, switch_core_session_message_t *);
typedef switch_status_t (*switch_receive_event_hook_t) (switch_core_session_t *, switch_event_t *);
typedef switch_status_t (*switch_read_frame_hook_t) (switch_core_session_t *, switch_frame_t **, switch_io_flag_t, int);
@@ -56,8 +56,8 @@
typedef switch_status_t (*switch_write_frame_hook_t) (switch_core_session_t *, switch_frame_t *, switch_io_flag_t, int);
typedef switch_status_t (*switch_video_write_frame_hook_t) (switch_core_session_t *, switch_frame_t *, switch_io_flag_t, int);
typedef switch_status_t (*switch_kill_channel_hook_t) (switch_core_session_t *, int);
-typedef switch_status_t (*switch_send_dtmf_hook_t) (switch_core_session_t *, const switch_dtmf_t *);
-typedef switch_status_t (*switch_recv_dtmf_hook_t) (switch_core_session_t *, const switch_dtmf_t *);
+typedef switch_status_t (*switch_send_dtmf_hook_t) (switch_core_session_t *, const switch_dtmf_t *, switch_dtmf_direction_t direction);
+typedef switch_status_t (*switch_recv_dtmf_hook_t) (switch_core_session_t *, const switch_dtmf_t *, switch_dtmf_direction_t direction);
typedef switch_status_t (*switch_state_change_hook_t) (switch_core_session_t *);
typedef switch_call_cause_t (*switch_resurrect_session_hook_t)(switch_core_session_t **, switch_memory_pool_t **, void *);
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_cpp.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_cpp.h (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_cpp.h Thu May 22 15:05:28 2008
@@ -11,10 +11,12 @@
#include <switch.h>
+#define this_check(x) do { if (!this) { switch_log_printf(SWITCH_CHANNEL_LOG,SWITCH_LOG_ERROR, "object is not initalized\n"); return x;}} while(0)
+#define this_check_void() do { if (!this) { switch_log_printf(SWITCH_CHANNEL_LOG,SWITCH_LOG_ERROR, "object is not initalized\n");}} while(0)
#define sanity_check(x) do { if (!(session && allocated)) { switch_log_printf(SWITCH_CHANNEL_LOG,SWITCH_LOG_ERROR, "session is not initalized\n"); return x;}} while(0)
#define sanity_check_noreturn do { if (!(session && allocated)) { switch_log_printf(SWITCH_CHANNEL_LOG,SWITCH_LOG_ERROR, "session is not initalized\n"); return;}} while(0)
-#define init_vars() do { session = NULL; channel = NULL; uuid = NULL; tts_name = NULL; voice_name = NULL; xml_cdr_text = NULL; memset(&args, 0, sizeof(args)); ap = NULL; caller_profile.source = "mod_unknown"; caller_profile.dialplan = ""; caller_profile.context = ""; caller_profile.caller_id_name = ""; caller_profile.caller_id_number = ""; caller_profile.network_addr = ""; caller_profile.ani = ""; caller_profile.aniii = ""; caller_profile.rdnis = ""; caller_profile.username = ""; on_hangup = NULL; memset(&cb_state, 0, sizeof(cb_state)); hook_state = CS_NEW; } while(0)
+#define init_vars() do { allocated = 0; session = NULL; channel = NULL; uuid = NULL; tts_name = NULL; voice_name = NULL; xml_cdr_text = NULL; memset(&args, 0, sizeof(args)); ap = NULL; caller_profile.source = "mod_unknown"; caller_profile.dialplan = ""; caller_profile.context = ""; caller_profile.caller_id_name = ""; caller_profile.caller_id_number = ""; caller_profile.network_addr = ""; caller_profile.ani = ""; caller_profile.aniii = ""; caller_profile.rdnis = ""; caller_profile.username = ""; on_hangup = NULL; memset(&cb_state, 0, sizeof(cb_state)); hook_state = CS_NEW; } while(0)
//
@@ -191,6 +193,8 @@
SWITCH_DECLARE(void *)getPrivate(char *var);
SWITCH_DECLARE(const char *)getVariable(char *var);
SWITCH_DECLARE(switch_status_t) process_callback_result(char *ret);
+ SWITCH_DECLARE(void) say(const char *tosay, const char *module_name, const char *say_type, const char *say_method);
+ SWITCH_DECLARE(void) sayPhrase(const char *phrase_name, const char *phrase_data = "", const char *phrase_lang = NULL);
/** \brief Record to a file
* \param filename
@@ -306,7 +310,7 @@
SWITCH_DECLARE(bool) ready();
- SWITCH_DECLARE(void) execute(char *app, char *data);
+ SWITCH_DECLARE(void) execute(char *app, char *data=NULL);
SWITCH_DECLARE(void) sendEvent(Event *sendME);
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_event.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_event.h (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_event.h Thu May 22 15:05:28 2008
@@ -339,7 +339,7 @@
*/
#define switch_event_fire_data(event, data) switch_event_fire_detailed(__FILE__, (char * )__SWITCH_FUNC__, __LINE__, event, data)
-SWITCH_DECLARE(char *) switch_event_build_param_string(switch_event_t *event, const char *prefix);
+SWITCH_DECLARE(char *) switch_event_build_param_string(switch_event_t *event, const char *prefix,switch_hash_t* vars_map);
///\}
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_ivr.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_ivr.h (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_ivr.h Thu May 22 15:05:28 2008
@@ -753,7 +753,7 @@
const char *valid_terminators);
SWITCH_DECLARE(switch_status_t) switch_ivr_bind_dtmf_meta_session(switch_core_session_t *session, uint32_t key,
- switch_bool_t dial_b, switch_bool_t exec_b, const char *app);
+ switch_bind_flag_t bind_flags, const char *app);
SWITCH_DECLARE(switch_status_t) switch_ivr_unbind_dtmf_meta_session(switch_core_session_t *session);
SWITCH_DECLARE(switch_status_t) switch_ivr_soft_hold(switch_core_session_t *session, const char *unhold_key, const char *moh_a, const char *moh_b);
SWITCH_DECLARE(switch_status_t) switch_ivr_say(switch_core_session_t *session, const char *tosay, const char *module_name, const char *say_type, const char *say_method, switch_input_args_t *args);
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_module_interfaces.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_module_interfaces.h (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_module_interfaces.h Thu May 22 15:05:28 2008
@@ -100,7 +100,7 @@
typedef switch_call_cause_t (*switch_io_outgoing_channel_t)
-(switch_core_session_t *, switch_caller_profile_t *, switch_core_session_t **, switch_memory_pool_t **, switch_originate_flag_t);
+(switch_core_session_t *, switch_event_t *, switch_caller_profile_t *, switch_core_session_t **, switch_memory_pool_t **, switch_originate_flag_t);
typedef switch_status_t (*switch_io_read_frame_t) (switch_core_session_t *, switch_frame_t **, switch_io_flag_t, int);
typedef switch_status_t (*switch_io_write_frame_t) (switch_core_session_t *, switch_frame_t *, switch_io_flag_t, int);
typedef switch_status_t (*switch_io_kill_channel_t) (switch_core_session_t *, int);
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_rtp.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_rtp.h (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_rtp.h Thu May 22 15:05:28 2008
@@ -233,7 +233,7 @@
\param flags the flags to test
\return TRUE or FALSE
*/
-SWITCH_DECLARE(uint8_t) switch_rtp_test_flag(switch_rtp_t *rtp_session, switch_rtp_flag_t flags);
+SWITCH_DECLARE(uint32_t) switch_rtp_test_flag(switch_rtp_t *rtp_session, switch_rtp_flag_t flags);
/*!
\brief Clear an RTP Flag
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_types.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_types.h (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_types.h Thu May 22 15:05:28 2008
@@ -151,6 +151,20 @@
} switch_dtmf_t;
typedef enum {
+ SBF_DIAL_ALEG = (1 << 0),
+ SBF_EXEC_ALEG = (1 << 1),
+ SBF_DIAL_BLEG = (1 << 2),
+ SBF_EXEC_BLEG = (1 << 3),
+ SBF_EXEC_OPPOSITE = (1 << 4),
+ SBF_EXEC_SAME = (1 << 5)
+} switch_bind_flag_t;
+
+typedef enum {
+ SWITCH_DTMF_RECV = 0,
+ SWITCH_DTMF_SEND = 1
+} switch_dtmf_direction_t;
+
+typedef enum {
SOF_NONE = 0,
SOF_NOBLOCK = (1 << 0),
SOF_FORKED_DIAL = (1 << 1)
@@ -513,7 +527,8 @@
SWITCH_MESSAGE_INDICATE_MEDIA_REDIRECT,
SWITCH_MESSAGE_INDICATE_DEFLECT,
SWITCH_MESSAGE_INDICATE_VIDEO_REFRESH_REQ,
- SWITCH_MESSAGE_INDICATE_DISPLAY
+ SWITCH_MESSAGE_INDICATE_DISPLAY,
+ SWITCH_MESSAGE_INDICATE_TRANSCODING_NECESSARY
} switch_core_session_message_types_t;
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_utils.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_utils.h (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_utils.h Thu May 22 15:05:28 2008
@@ -55,6 +55,25 @@
#define switch_is_file_path(file) (file && ((*file == '/') || strstr(file, SWITCH_URL_SEPARATOR)))
#endif
+/*!
+ \brief Test for NULL or zero length string
+ \param s the string to test
+ \return true value if the string is NULL or zero length
+*/
+#define switch_strlen_zero(s) (!s || *s == '\0')
+
+
+static inline switch_bool_t switch_is_moh(const char *s)
+{
+ if (switch_strlen_zero(s) || !strcasecmp(s, "silence") || !strcasecmp(s, "indicate_hold")) {
+ return SWITCH_FALSE;
+ }
+ return SWITCH_TRUE;
+}
+
+
+
+
SWITCH_DECLARE(switch_status_t) switch_b64_encode(unsigned char *in, switch_size_t ilen, unsigned char *out, switch_size_t olen);
SWITCH_DECLARE(switch_size_t) switch_b64_decode(char *in, char *out, switch_size_t olen);
SWITCH_DECLARE(char *) switch_amp_encode(char *s, char *buf, switch_size_t len);
@@ -73,6 +92,7 @@
SWITCH_DECLARE(switch_size_t) switch_fd_read_line(int fd, char *buf, switch_size_t len);
+
/*!
\brief Evaluate the truthfullness of a string expression
\param expr a string expression
@@ -265,13 +285,6 @@
/*!
- \brief Test for NULL or zero length string
- \param s the string to test
- \return true value if the string is NULL or zero length
-*/
-#define switch_strlen_zero(s) (!s || *s == '\0')
-
-/*!
\brief Make a null string a blank string instead
\param s the string to test
\return the original string or blank string.
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_commands/mod_commands.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_commands/mod_commands.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_commands/mod_commands.c Thu May 22 15:05:28 2008
@@ -1513,7 +1513,7 @@
timeout = atoi(argv[6]);
}
- if (switch_ivr_originate(NULL, &caller_session, &cause, aleg, timeout, NULL, cid_name, cid_num, NULL, SOF_NONE) != SWITCH_STATUS_SUCCESS) {
+ if (switch_ivr_originate(NULL, &caller_session, &cause, aleg, timeout, NULL, cid_name, cid_num, NULL, SOF_NONE) != SWITCH_STATUS_SUCCESS || !caller_session) {
if (machine) {
stream->write_function(stream, "-ERR %s\n", switch_channel_cause2str(cause));
} else {
@@ -1555,9 +1555,7 @@
stream->write_function(stream, "+OK Created Session: %s\n", switch_core_session_get_uuid(caller_session));
}
- if (caller_session) {
- switch_core_session_rwunlock(caller_session);
- }
+ switch_core_session_rwunlock(caller_session);
done:
switch_safe_free(mycmd);
@@ -1715,6 +1713,11 @@
char *reply, *freply = NULL;
switch_event_t *event;
char *arg;
+ switch_memory_pool_t *pool;
+
+ if (!job) return NULL;
+
+ pool = job->pool;
SWITCH_STANDARD_STREAM(stream);
@@ -1747,12 +1750,9 @@
switch_safe_free(stream.data);
switch_safe_free(freply);
- if (job) {
- switch_memory_pool_t *pool = job->pool;
- job = NULL;
- switch_core_destroy_memory_pool(&pool);
- pool = NULL;
- }
+ job = NULL;
+ switch_core_destroy_memory_pool(&pool);
+ pool = NULL;
return NULL;
}
@@ -1921,7 +1921,7 @@
{
char sql[1024];
char *errmsg;
- switch_core_db_t *db = switch_core_db_handle();
+ switch_core_db_t *db;
struct holder holder = { 0 };
int help = 0;
char *mydata = NULL, *argv[6] = {0};
@@ -1933,6 +1933,8 @@
return SWITCH_STATUS_FALSE;
}
+ db = switch_core_db_handle();
+
if (cmd && (mydata = strdup(cmd))) {
argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
command = argv[0];
@@ -2023,6 +2025,12 @@
} else if (!strcasecmp(as, "xml")) {
switch_core_db_exec(db, sql, show_as_xml_callback, &holder, &errmsg);
+ if (errmsg) {
+ stream->write_function(stream, "-ERR SQL Error [%s]\n", errmsg);
+ switch_core_db_free(errmsg);
+ errmsg = NULL;
+ }
+
if (holder.xml) {
char count[50];
char *xmlstr;
@@ -2207,6 +2215,7 @@
switch_xml_free(xml);
} else {
stream->write_function(stream, "-ERR Unable to create xml!\n");
+ switch_event_destroy(&event);
switch_core_session_rwunlock(psession);
goto done;
}
@@ -2219,7 +2228,7 @@
switch_event_destroy(&event);
free(buf);
} else {
- abort();
+ stream->write_function(stream, "-ERR Allocation error\n");
}
switch_core_session_rwunlock(psession);
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_conference/mod_conference.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_conference/mod_conference.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_conference/mod_conference.c Thu May 22 15:05:28 2008
@@ -349,7 +349,7 @@
static switch_status_t conference_say(conference_obj_t * conference, const char *text, uint32_t leadin);
static void conference_list(conference_obj_t * conference, switch_stream_handle_t *stream, char *delim);
SWITCH_STANDARD_API(conf_api_main);
-static switch_status_t audio_bridge_on_routing(switch_core_session_t *session);
+
static switch_status_t conference_outcall(conference_obj_t * conference,
char *conference_name,
switch_core_session_t *session,
@@ -1755,7 +1755,7 @@
}
for (cp = call_list; cp; cp = cp->next) {
- conference_outcall_bg(member->conference, NULL, member->session, cp->string, to, switch_str_nil(flags), cid_name, cid_num);
+ conference_outcall_bg(member->conference, NULL, NULL, cp->string, to, switch_str_nil(flags), cid_name, cid_num);
}
}
/* Fair WARNING, If you expect the caller to hear anything or for digit handling to be proccessed, */
@@ -3726,31 +3726,6 @@
}
-/* outbound call bridge progress call state callback handler */
-static switch_status_t audio_bridge_on_routing(switch_core_session_t *session)
-{
- switch_channel_t *channel = NULL;
-
- channel = switch_core_session_get_channel(session);
-
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CUSTOM ROUTING\n");
-
- /* put the channel in a passive state so we can loop audio to it */
- switch_channel_set_state(channel, CS_SOFT_EXECUTE);
- return SWITCH_STATUS_FALSE;
-}
-
-static switch_state_handler_table_t audio_bridge_peer_state_handlers = {
- /*.on_init */ NULL,
- /*.on_routing */ audio_bridge_on_routing,
- /*.on_execute */ NULL,
- /*.on_hangup */ NULL,
- /*.on_exchange_media */ NULL,
- /*.on_soft_execute */ NULL,
- /*.on_consume_media */ NULL,
-};
-
-
/* generate an outbound call from the conference */
static switch_status_t conference_outcall(conference_obj_t * conference,
char *conference_name,
@@ -3769,7 +3744,6 @@
if (conference == NULL) {
char *dialstr = switch_mprintf("{ignore_early_media=true}%s", bridgeto);
-
status = switch_ivr_originate(NULL, &peer_session, cause, dialstr, 60, NULL, cid_name, cid_num, NULL, SOF_NONE);
switch_safe_free(dialstr);
@@ -3802,8 +3776,9 @@
}
/* establish an outbound call leg */
+
if (switch_ivr_originate(session,
- &peer_session, cause, bridgeto, timeout, &audio_bridge_peer_state_handlers, cid_name, cid_num,
+ &peer_session, cause, bridgeto, timeout, NULL, cid_name, cid_num,
NULL, SOF_NONE) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot create outgoing channel, cause: %s\n", switch_channel_cause2str(*cause));
if (caller_channel) {
@@ -3811,10 +3786,11 @@
}
goto done;
}
-
+
rdlock = 1;
peer_channel = switch_core_session_get_channel(peer_session);
-
+ switch_channel_set_state(peer_channel, CS_SOFT_EXECUTE);
+
/* make sure the conference still exists */
if (!switch_test_flag(conference, CFLAG_RUNNING)) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Conference is gone now, nevermind..\n");
@@ -4982,7 +4958,7 @@
conference->mflags = MFLAG_CAN_SPEAK | MFLAG_CAN_HEAR;
}
- if (!switch_strlen_zero(moh_sound)) {
+ if (!switch_strlen_zero(moh_sound) && switch_is_moh(moh_sound)) {
conference->moh_sound = switch_core_strdup(conference->pool, moh_sound);
}
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_dptools/mod_dptools.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_dptools/mod_dptools.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_dptools/mod_dptools.c Thu May 22 15:05:28 2008
@@ -160,7 +160,7 @@
}
}
-#define BIND_SYNTAX "<key> [a|b] [a|b] <app>"
+#define BIND_SYNTAX "<key> [a|b|ab] [a|b|o|s] <app>"
SWITCH_STANDARD_APP(dtmf_bind_function)
{
char *argv[4] = { 0 };
@@ -170,10 +170,46 @@
if (!switch_strlen_zero(data) && (lbuf = switch_core_session_strdup(session, data))
&& (argc = switch_separate_string(lbuf, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) == 4) {
int kval = atoi(argv[0]);
- char a1 = (char)tolower(*argv[1]);
- char a2 = (char)tolower(*argv[2]);
-
- if (switch_ivr_bind_dtmf_meta_session(session, kval, a1 == 'b', a2 == 'b', argv[3]) != SWITCH_STATUS_SUCCESS) {
+ switch_bind_flag_t bind_flags = 0;
+
+ if (strchr(argv[1], 'a')) {
+ bind_flags |= SBF_DIAL_ALEG;
+ }
+ if (strchr(argv[1], 'b')) {
+ bind_flags |= SBF_DIAL_BLEG;
+ }
+ if (strchr(argv[2], 'a')) {
+ if ((bind_flags & SBF_EXEC_BLEG)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot bind execute to multiple legs\n");
+ } else {
+ bind_flags |= SBF_EXEC_ALEG;
+ }
+ }
+ if (strchr(argv[2], 'b')) {
+ if ((bind_flags & SBF_EXEC_ALEG)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot bind execute to multiple legs\n");
+ } else {
+ bind_flags |= SBF_EXEC_BLEG;
+ }
+ }
+
+ if (strchr(argv[2], 'o')) {
+ if ((bind_flags & SBF_EXEC_BLEG) || (bind_flags & SBF_EXEC_ALEG) || (bind_flags & SBF_EXEC_SAME)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot bind execute to multiple legs\n");
+ } else {
+ bind_flags |= SBF_EXEC_OPPOSITE;
+ }
+ }
+
+ if (strchr(argv[2], 's')) {
+ if ((bind_flags & SBF_EXEC_BLEG) || (bind_flags & SBF_EXEC_ALEG) || (bind_flags & SBF_EXEC_SAME)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot bind execute to multiple legs\n");
+ } else {
+ bind_flags |= SBF_EXEC_SAME;
+ }
+ }
+
+ if (switch_ivr_bind_dtmf_meta_session(session, kval, bind_flags, argv[3]) != SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Bind Error!\n");
}
} else {
@@ -714,16 +750,16 @@
if (!strcasecmp(name, "caller_id_number")) {
caller_profile->caller_id_number = val;
}
- if (!strcasecmp(name, "caller_ton")) {
+ if (val && !strcasecmp(name, "caller_ton")) {
caller_profile->caller_ton = (uint8_t)atoi(val);
}
- if (!strcasecmp(name, "caller_numplan")) {
+ if (val && !strcasecmp(name, "caller_numplan")) {
caller_profile->caller_numplan = (uint8_t)atoi(val);
}
- if (!strcasecmp(name, "destination_number_ton")) {
+ if (val && !strcasecmp(name, "destination_number_ton")) {
caller_profile->destination_number_ton = (uint8_t)atoi(val);
}
- if (!strcasecmp(name, "destination_number_numplan")) {
+ if (val && !strcasecmp(name, "destination_number_numplan")) {
caller_profile->destination_number_numplan = (uint8_t)atoi(val);
}
if (!strcasecmp(name, "ani")) {
@@ -768,7 +804,15 @@
} else {
exports = switch_channel_get_variable(channel, SWITCH_EXPORT_VARS_VARIABLE);
var = switch_core_session_strdup(session, data);
- val = strchr(var, '=');
+ if (var) {
+ val = strchr(var, '=');
+ if (!strncasecmp(var, "nolocal:", 8)) {
+ var_name = var + 8;
+ local = 0;
+ } else {
+ var_name = var;
+ }
+ }
if (val) {
*val++ = '\0';
@@ -777,14 +821,7 @@
}
}
- if (!strncasecmp(var, "nolocal:", 8)) {
- var_name = var + 8;
- local = 0;
- } else {
- var_name = var;
- }
-
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "EXPORT %s[%s]=[%s]\n", local ? "" : "(REMOTE ONLY) ", var_name, val ? val : "UNDEF");
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "EXPORT %s[%s]=[%s]\n", local ? "" : "(REMOTE ONLY) ", var_name ? var_name : "", val ? val : "UNDEF");
switch_channel_set_variable(channel, var, val);
if (var && val) {
@@ -864,12 +901,14 @@
for (x = 0; x < argc; x++) {
char *p, *this = argv[x];
- p = this;
- while(*p == ' ') *p++ = '\0';
- this = p;
-
if (this) {
- char *var = this, *val = NULL;
+ char *var, *val;
+ p = this;
+ while(*p == ' ') *p++ = '\0';
+ this = p;
+
+ var = this;
+ val = NULL;
if ((val = strchr(var, '='))) {
p = val - 1;
*val++ = '\0';
@@ -1337,6 +1376,7 @@
switch_channel_set_caller_extension(peer_channel, extension);
switch_channel_set_flag(peer_channel, CF_TRANSFER);
switch_channel_set_state(peer_channel, CS_EXECUTE);
+ switch_channel_set_variable(channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE, NULL);
return SWITCH_STATUS_FALSE;
}
@@ -1380,6 +1420,8 @@
switch_channel_t *channel, *peer_channel = NULL;
const char *bond = NULL;
int timelimit = 60;
+ switch_core_session_t *b_session = NULL;
+
channel = switch_core_session_get_channel(session);
@@ -1394,8 +1436,8 @@
timelimit = atoi(var);
}
- if (switch_ivr_originate(session, &peer_session, &cause, data, timelimit, NULL, NULL, NULL, NULL, SOF_NONE) != SWITCH_STATUS_SUCCESS) {
- return;
+ if (switch_ivr_originate(session, &peer_session, &cause, data, timelimit, NULL, NULL, NULL, NULL, SOF_NONE) != SWITCH_STATUS_SUCCESS || !peer_session) {
+ goto end;
}
peer_channel = switch_core_session_get_channel(peer_session);
@@ -1404,18 +1446,27 @@
switch_ivr_multi_threaded_bridge(session, peer_session, xfer_on_dtmf, peer_session, NULL);
+ switch_channel_clear_flag(peer_channel, CF_INNER_BRIDGE);
+ switch_channel_clear_flag(channel, CF_INNER_BRIDGE);
+
+ if (!switch_channel_get_state(peer_channel) >= CS_HANGUP) {
+ switch_core_session_rwunlock(peer_session);
+ goto end;
+ }
+
if (bond) {
- switch_core_session_t *b_session;
char buf[128] = "";
- if ((b_session = switch_core_session_locate(bond))) {
+ if (!switch_channel_ready(channel)) {
+ switch_ivr_uuid_bridge(switch_core_session_get_uuid(peer_session), bond);
+ } else if ((b_session = switch_core_session_locate(bond))) {
switch_channel_t *b_channel = switch_core_session_get_channel(b_session);
switch_snprintf(buf, sizeof(buf), "%s %s", switch_core_session_get_uuid(peer_session), switch_core_session_get_uuid(session));
switch_channel_set_variable(b_channel, "xfer_uuids", buf);
switch_snprintf(buf, sizeof(buf), "%s %s", switch_core_session_get_uuid(peer_session), bond);
switch_channel_set_variable(channel, "xfer_uuids", buf);
-
+
switch_core_event_hook_add_state_change(session, hanguphook);
switch_core_event_hook_add_state_change(b_session, hanguphook);
@@ -1424,13 +1475,11 @@
switch_channel_set_variable(channel, SWITCH_SIGNAL_BOND_VARIABLE, bond);
}
-
- if (peer_session) {
- switch_core_session_rwunlock(peer_session);
- }
+ switch_core_session_rwunlock(peer_session);
+
+ end:
switch_channel_set_variable(channel, SWITCH_HOLDING_UUID_VARIABLE, NULL);
-
}
@@ -1638,7 +1687,10 @@
}
path = switch_core_session_strdup(session, data);
- if (path && (p = strchr(path, '+'))) {
+
+ if (!path) return;
+
+ if ((p = strchr(path, '+'))) {
char *q = p - 1;
while(q && *q == ' ') {
*q = '\0';
@@ -1771,6 +1823,7 @@
/* fake chan_user */
switch_endpoint_interface_t *user_endpoint_interface;
static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
+ switch_event_t *var_event,
switch_caller_profile_t *outbound_profile,
switch_core_session_t **new_session,
switch_memory_pool_t **pool,
@@ -1780,6 +1833,7 @@
};
static switch_call_cause_t user_outgoing_channel(switch_core_session_t *session,
+ switch_event_t *var_event,
switch_caller_profile_t *outbound_profile,
switch_core_session_t **new_session,
switch_memory_pool_t **pool,
@@ -1798,6 +1852,8 @@
user = strdup(outbound_profile->destination_number);
+ if (!user) goto done;
+
if (!(domain = strchr(user, '@'))) {
goto done;
}
@@ -1856,7 +1912,18 @@
d_dest = switch_channel_expand_variables(channel, dest);
} else {
- d_dest = strdup(dest);
+ switch_event_t *event = var_event;
+ if (!event) {
+ switch_event_create(&event, SWITCH_EVENT_MESSAGE);
+ switch_assert(event);
+ }
+
+ switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "dialed_user", user);
+ switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "dialed_domain", domain);
+ d_dest = switch_event_expand_headers(event, dest);
+ if (event && event != var_event) {
+ switch_event_destroy(&event);
+ }
}
if ((flags & SOF_FORKED_DIAL)) {
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_esf/mod_esf.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_esf/mod_esf.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_esf/mod_esf.c Thu May 22 15:05:28 2008
@@ -76,6 +76,8 @@
switch_port_t mcast_port = 34567;
switch_port_t mcast_control_port = 6061;
char *mcast_port_str = "34567";
+ const char *esf_broadcast_ip = NULL, *var;
+
if (!switch_strlen_zero((char *) data)) {
mydata = switch_core_session_strdup(session, data);
@@ -83,6 +85,10 @@
argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
+ if ((var = switch_channel_get_variable(channel, "esf_multicast_ip"))) {
+ mcast_ip = switch_core_session_strdup(session, var);
+ }
+
if (!switch_strlen_zero(argv[0])) {
mcast_ip = argv[0];
}
@@ -165,13 +171,20 @@
}
}
- switch_find_local_ip(guess_ip, sizeof(guess_ip), AF_INET);
- if (!(rtp_port = switch_rtp_request_port(guess_ip))) {
+ if ((var = switch_channel_get_variable(channel, "esf_broadcast_ip"))) {
+ esf_broadcast_ip = switch_core_session_strdup(session, var);
+ } else {
+ switch_find_local_ip(guess_ip, sizeof(guess_ip), AF_INET);
+ esf_broadcast_ip = guess_ip;
+ }
+
+
+ if (!(rtp_port = switch_rtp_request_port(esf_broadcast_ip))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "RTP Port Error\n");
goto fail;
}
- rtp_session = switch_rtp_new(guess_ip,
+ rtp_session = switch_rtp_new(esf_broadcast_ip,
rtp_port,
mcast_ip,
mcast_port,
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_fifo/mod_fifo.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_fifo/mod_fifo.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_fifo/mod_fifo.c Thu May 22 15:05:28 2008
@@ -569,7 +569,11 @@
switch_core_session_flush_private_events(session);
if (moh) {
- switch_ivr_play_file(session, NULL, moh, &args);
+ switch_status_t status = switch_ivr_play_file(session, NULL, moh, &args);
+ if (!SWITCH_READ_ACCEPTABLE(status)) {
+ aborted = 1;
+ goto abort;
+ }
} else {
switch_ivr_collect_digits_callback(session, &args, 0);
}
@@ -736,10 +740,15 @@
pop = NULL;
if (moh && do_wait) {
+ switch_status_t status = switch_ivr_play_file(session, NULL, moh, &args);
memset(&args, 0, sizeof(args));
args.read_frame_callback = consumer_read_frame_callback;
args.user_data = node_list;
switch_ivr_play_file(session, NULL, moh, &args);
+
+ if (!SWITCH_READ_ACCEPTABLE(status)) {
+ break;
+ }
}
for(i = 0; i < node_count; i++) {
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_soundtouch/mod_soundtouch.cpp
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_soundtouch/mod_soundtouch.cpp (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_soundtouch/mod_soundtouch.cpp Thu May 22 15:05:28 2008
@@ -55,7 +55,7 @@
int literal;
};
-static switch_status_t on_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf)
+static switch_status_t on_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf, switch_dtmf_direction_t direction)
{
switch_media_bug_t *bug;
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_voicemail/mod_voicemail.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_voicemail/mod_voicemail.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_voicemail/mod_voicemail.c Thu May 22 15:05:28 2008
@@ -81,11 +81,13 @@
char rew_key[2];
char urgent_key[2];
char operator_key[2];
+ char vmain_key[2];
char file_ext[10];
char *record_title;
char *record_comment;
char *record_copyright;
char *operator_ext;
+ char *vmain_ext;
char *tone_spec;
char *storage_dir;
char *callback_dialplan;
@@ -272,6 +274,8 @@
char *urgent_key = "*";
char *operator_key = "";
char *operator_ext = "";
+ char *vmain_key = "";
+ char *vmain_ext = "";
char *tone_spec = "%(1000, 0, 640)";
char *file_ext = "wav";
char *storage_dir = "";
@@ -433,6 +437,10 @@
operator_key = val;
} else if (!strcasecmp(var, "operator-extension") && !switch_strlen_zero(val)) {
operator_ext = val;
+ } else if (!strcasecmp(var, "vmain-key") && !switch_strlen_zero(val)) {
+ vmain_key = val;
+ } else if (!strcasecmp(var, "vmain-extension") && !switch_strlen_zero(val)) {
+ vmain_ext = val;
} else if (!strcasecmp(var, "storage-dir") && !switch_strlen_zero(val)) {
storage_dir = val;
} else if (!strcasecmp(var, "callback-dialplan") && !switch_strlen_zero(val)) {
@@ -652,11 +660,13 @@
*profile->rew_key = *rew_key;
*profile->urgent_key = *urgent_key;
*profile->operator_key = *operator_key;
+ *profile->vmain_key = *vmain_key;
profile->record_threshold = record_threshold;
profile->record_silence_hits = record_silence_hits;
profile->record_sample_rate = record_sample_rate;
profile->operator_ext = switch_core_strdup(globals.pool, operator_ext);
+ profile->vmain_ext = switch_core_strdup(globals.pool, vmain_ext);
profile->storage_dir = switch_core_strdup(globals.pool, storage_dir);
profile->tone_spec = switch_core_strdup(globals.pool, tone_spec);
profile->callback_dialplan = switch_core_strdup(globals.pool, callback_dialplan);
@@ -1876,6 +1886,20 @@
goto end;
}
}
+ } else if (!strcasecmp(buf, profile->vmain_key) && !switch_strlen_zero(profile->vmain_key)) {
+ int argc;
+ char *argv[4];
+ char *mycmd;
+
+ if (!switch_strlen_zero(profile->vmain_ext) && (mycmd = switch_core_session_strdup(session, profile->vmain_ext))) {
+ argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0])));
+ if (argc >= 1 && argc <= 4) {
+ switch_ivr_session_transfer(session, argv[0], argv[1], argv[2]);
+ /* the application still runs after we leave it so we need to make sure that we dont do anything evil */
+ send_mail=0;
+ goto end;
+ }
+ }
} else {
goto greet;
}
@@ -2153,11 +2177,75 @@
}
}
-static void message_query_handler(switch_event_t *event)
+#define BOXCOUNT_SYNTAX "<user>@<domain>[|[new|saved|new-urgent|saved-urgent|all]]"
+SWITCH_STANDARD_API(boxcount_api_function)
+{
+ char *dup;
+ char *how = "new";
+ int total_new_messages = 0;
+ int total_saved_messages = 0;
+ int total_new_urgent_messages = 0;
+ int total_saved_urgent_messages = 0;
+
+ if (cmd) {
+ switch_hash_index_t *hi;
+ void *val;
+ vm_profile_t *profile;
+ char *id, *domain, *p;
+
+ dup = strdup(cmd);
+ id = dup;
+
+ if (!strncasecmp(cmd, "sip:", 4)) {
+ id += 4;
+ }
+
+ if (!id) {
+ stream->write_function(stream, "%d", 0);
+ free(dup);
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ if ((domain = strchr(id, '@'))) {
+ *domain++ = '\0';
+ if ((p = strchr(domain, '|'))) {
+ *p++ = '\0';
+ how = p;
+ }
+
+ for (hi = switch_hash_first(NULL, globals.profile_hash); hi; hi = switch_hash_next(hi)) {
+ switch_hash_this(hi, NULL, NULL, &val);
+ profile = (vm_profile_t *) val;
+ total_new_messages = total_saved_messages = 0;
+ message_count(profile, id, domain, "inbox", &total_new_messages, &total_saved_messages,
+ &total_new_urgent_messages, &total_saved_urgent_messages);
+ }
+ }
+
+ switch_safe_free(id);
+ }
+
+ if (!strcasecmp(how, "saved")) {
+ stream->write_function(stream, "%d", total_saved_messages);
+ } else if (!strcasecmp(how, "new-urgent")) {
+ stream->write_function(stream, "%d", total_new_urgent_messages);
+ } else if (!strcasecmp(how, "new-saved")) {
+ stream->write_function(stream, "%d", total_saved_urgent_messages);
+ } else if (!strcasecmp(how, "all")) {
+ stream->write_function(stream, "%d:%d:%d:%d", total_new_messages, total_saved_messages, total_new_urgent_messages, total_saved_urgent_messages);
+ } else {
+ stream->write_function(stream, "%d", total_new_messages);
+ }
+
+ return SWITCH_STATUS_SUCCESS;
+}
+
+static void message_query_handler(switch_event_t *event)
{
char *account = switch_event_get_header(event, "message-account");
int created = 0;
switch_event_t *new_event = NULL;
+ char *dup = NULL;
if (account) {
switch_hash_index_t *hi;
@@ -2169,12 +2257,17 @@
vm_profile_t *profile;
char *id, *domain;
+ dup = strdup(account);
+ id = dup;
+
if (!strncasecmp(account, "sip:", 4)) {
- id = strdup(account + 4);
- } else {
- id = strdup(account);
+ id += 4;
+ }
+
+ if (!id) {
+ free(dup);
+ return;
}
- switch_assert(id);
if ((domain = strchr(id, '@'))) {
*domain++ = '\0';
@@ -2200,7 +2293,7 @@
}
}
- switch_safe_free(id);
+ switch_safe_free(dup);
}
@@ -2784,7 +2877,8 @@
}
SWITCH_ADD_API(commands_api_interface, "voicemail", "voicemail", voicemail_api_function, VOICEMAIL_SYNTAX);
-
+ SWITCH_ADD_API(commands_api_interface, "vm_boxcount", "vm_boxcount", boxcount_api_function, BOXCOUNT_SYNTAX);
+
/* indicate that the module should continue to be loaded */
return SWITCH_STATUS_NOUNLOAD;
}
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_ilbc/mod_ilbc.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_ilbc/mod_ilbc.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_ilbc/mod_ilbc.c Thu May 22 15:05:28 2008
@@ -115,7 +115,7 @@
float buf[240];
for (x = 0; x < loops && new_len < *encoded_data_len; x++) {
- for (y = 0; y < context->dbytes / sizeof(short); y++) {
+ for (y = 0; y < context->dbytes / sizeof(short) && y < 240; y++) {
buf[y] = ddp[y];
}
iLBC_encode(edp, buf, &context->encoder);
@@ -157,7 +157,7 @@
for (x = 0; x < loops && new_len < *decoded_data_len; x++) {
iLBC_decode(buf, edp, &context->decoder, 1);
- for (y = 0; y < context->dbytes / sizeof(short); y++) {
+ for (y = 0; y < context->dbytes / sizeof(short) && y < 240; y++) {
ddp[y] = (short) buf[y];
}
ddp += context->dbytes / sizeof(short);
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/dialplans/mod_dialplan_asterisk/mod_dialplan_asterisk.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/dialplans/mod_dialplan_asterisk/mod_dialplan_asterisk.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/dialplans/mod_dialplan_asterisk/mod_dialplan_asterisk.c Thu May 22 15:05:28 2008
@@ -289,7 +289,7 @@
/* fake chan_sip */
switch_endpoint_interface_t *sip_endpoint_interface;
-static switch_call_cause_t sip_outgoing_channel(switch_core_session_t *session,
+static switch_call_cause_t sip_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
switch_caller_profile_t *outbound_profile,
switch_core_session_t **new_session,
switch_memory_pool_t **pool,
@@ -298,7 +298,7 @@
/*.outgoing_channel */ sip_outgoing_channel
};
-static switch_call_cause_t sip_outgoing_channel(switch_core_session_t *session,
+static switch_call_cause_t sip_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
switch_caller_profile_t *outbound_profile,
switch_core_session_t **new_session,
switch_memory_pool_t **pool,
@@ -316,7 +316,7 @@
}
outbound_profile->destination_number = switch_core_sprintf(outbound_profile->pool, "%s/%s", profile, outbound_profile->destination_number);
- return switch_core_session_outgoing_channel(session, "sofia", outbound_profile, new_session, pool, SOF_NONE);
+ return switch_core_session_outgoing_channel(session, var_event, "sofia", outbound_profile, new_session, pool, SOF_NONE);
}
@@ -324,7 +324,7 @@
/* fake chan_iax2 */
switch_endpoint_interface_t *iax2_endpoint_interface;
-static switch_call_cause_t iax2_outgoing_channel(switch_core_session_t *session,
+static switch_call_cause_t iax2_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
switch_caller_profile_t *outbound_profile,
switch_core_session_t **new_session,
switch_memory_pool_t **pool,
@@ -333,13 +333,13 @@
/*.outgoing_channel */ iax2_outgoing_channel
};
-static switch_call_cause_t iax2_outgoing_channel(switch_core_session_t *session,
+static switch_call_cause_t iax2_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
switch_caller_profile_t *outbound_profile,
switch_core_session_t **new_session,
switch_memory_pool_t **pool,
switch_originate_flag_t flags)
{
- return switch_core_session_outgoing_channel(session, "iax", outbound_profile, new_session, pool, SOF_NONE);
+ return switch_core_session_outgoing_channel(session, var_event, "iax", outbound_profile, new_session, pool, SOF_NONE);
}
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_alsa/mod_alsa.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_alsa/mod_alsa.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_alsa/mod_alsa.c Thu May 22 15:05:28 2008
@@ -146,7 +146,7 @@
static switch_status_t channel_on_routing(switch_core_session_t *session);
static switch_status_t channel_on_exchange_media(switch_core_session_t *session);
static switch_status_t channel_on_soft_execute(switch_core_session_t *session);
-static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session,
+static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
switch_caller_profile_t *outbound_profile,
switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags);
static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id);
@@ -753,7 +753,7 @@
/* Make sure when you have 2 sessions in the same scope that you pass the appropriate one to the routines
that allocate memory or you will have 1 channel with memory allocated from another channel's pool!
*/
-static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session,
+static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
switch_caller_profile_t *outbound_profile,
switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags)
{
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_dingaling/mod_dingaling.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_dingaling/mod_dingaling.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_dingaling/mod_dingaling.c Thu May 22 15:05:28 2008
@@ -208,7 +208,7 @@
static switch_status_t channel_on_routing(switch_core_session_t *session);
static switch_status_t channel_on_exchange_media(switch_core_session_t *session);
static switch_status_t channel_on_soft_execute(switch_core_session_t *session);
-static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session,
+static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
switch_caller_profile_t *outbound_profile,
switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags);
static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id);
@@ -1566,7 +1566,7 @@
/* Make sure when you have 2 sessions in the same scope that you pass the appropriate one to the routines
that allocate memory or you will have 1 channel with memory allocated from another channel's pool!
*/
-static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session,
+static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
switch_caller_profile_t *outbound_profile,
switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags)
{
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/iax.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/iax.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/iax.c Thu May 22 15:05:28 2008
@@ -2984,7 +2984,12 @@
static struct iax_event *iax_net_read(void)
{
unsigned char buf[65536];
- int res, sinlen;
+ int res;
+#ifndef __Linux__
+ socklen_t sinlen;
+#else
+ unsigned int sinlen;
+#endif
struct sockaddr_in sin;
sinlen = sizeof(sin);
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/mod_iax.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/mod_iax.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/mod_iax.c Thu May 22 15:05:28 2008
@@ -419,7 +419,7 @@
static switch_status_t channel_on_routing(switch_core_session_t *session);
static switch_status_t channel_on_exchange_media(switch_core_session_t *session);
static switch_status_t channel_on_soft_execute(switch_core_session_t *session);
-static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session,
+static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
switch_caller_profile_t *outbound_profile,
switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags);
static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id);
@@ -693,7 +693,7 @@
/* Make sure when you have 2 sessions in the same scope that you pass the appropriate one to the routines
that allocate memory or you will have 1 channel with memory allocated from another channel's pool!
*/
-static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session,
+static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
switch_caller_profile_t *outbound_profile,
switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags)
{
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_portaudio/mod_portaudio.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_portaudio/mod_portaudio.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_portaudio/mod_portaudio.c Thu May 22 15:05:28 2008
@@ -143,7 +143,7 @@
static switch_status_t channel_on_routing(switch_core_session_t *session);
static switch_status_t channel_on_exchange_media(switch_core_session_t *session);
static switch_status_t channel_on_soft_execute(switch_core_session_t *session);
-static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session,
+static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
switch_caller_profile_t *outbound_profile,
switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags);
static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id);
@@ -631,7 +631,7 @@
/* Make sure when you have 2 sessions in the same scope that you pass the appropriate one to the routines
that allocate memory or you will have 1 channel with memory allocated from another channel's pool!
*/
-static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session,
+static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
switch_caller_profile_t *outbound_profile,
switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags)
{
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_reference/mod_reference.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_reference/mod_reference.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_reference/mod_reference.c Thu May 22 15:05:28 2008
@@ -103,7 +103,7 @@
static switch_status_t channel_on_routing(switch_core_session_t *session);
static switch_status_t channel_on_exchange_media(switch_core_session_t *session);
static switch_status_t channel_on_soft_execute(switch_core_session_t *session);
-static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session,
+static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
switch_caller_profile_t *outbound_profile,
switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags);
static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id);
@@ -395,7 +395,7 @@
/* Make sure when you have 2 sessions in the same scope that you pass the appropriate one to the routines
that allocate memory or you will have 1 channel with memory allocated from another channel's pool!
*/
-static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session,
+static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
switch_caller_profile_t *outbound_profile,
switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags)
{
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/mod_sofia.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/mod_sofia.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/mod_sofia.c Thu May 22 15:05:28 2008
@@ -52,7 +52,7 @@
static switch_status_t sofia_on_exchange_media(switch_core_session_t *session);
static switch_status_t sofia_on_soft_execute(switch_core_session_t *session);
-static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session,
+static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
switch_caller_profile_t *outbound_profile, switch_core_session_t **new_session,
switch_memory_pool_t **pool, switch_originate_flag_t flags);
static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id);
@@ -339,6 +339,7 @@
const char *val;
const char *b_sdp = NULL;
int is_proxy = 0;
+ char *sticky = NULL;
if (switch_test_flag(tech_pvt, TFLAG_ANS) || switch_channel_test_flag(channel, CF_OUTBOUND)) {
return SWITCH_STATUS_SUCCESS;
@@ -405,9 +406,20 @@
session_timeout = v_session_timeout;
}
}
+
+ if (switch_test_flag(tech_pvt, TFLAG_NAT) ||
+ (val = switch_channel_get_variable(channel, "sip-force-contact")) ||
+ ((val = switch_channel_get_variable(channel, "sip_sticky_contact")) && switch_true(val))) {
+ sticky = tech_pvt->record_route;
+ session_timeout = SOFIA_NAT_SESSION_TIMEOUT;
+ switch_channel_set_variable(channel, "sip_nat_detected", "true");
+ }
+
+
nua_respond(tech_pvt->nh, SIP_200_OK,
NUTAG_AUTOANSWER(0),
+ TAG_IF(sticky, NUTAG_PROXY(tech_pvt->record_route)),
NUTAG_SESSION_TIMER(session_timeout),
SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str),
@@ -752,6 +764,12 @@
}
break;
+ case SWITCH_MESSAGE_INDICATE_TRANSCODING_NECESSARY:
+ if (tech_pvt->rtp_session && switch_rtp_test_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_PASS_RFC2833)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Cannot pass 2833 on a transcoded call.\n");
+ switch_rtp_clear_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_PASS_RFC2833);
+ }
+ break;
case SWITCH_MESSAGE_INDICATE_BROADCAST: {
const char *ip = NULL, *port = NULL;
ip = switch_channel_get_variable(channel, SWITCH_REMOTE_MEDIA_IP_VARIABLE);
@@ -957,7 +975,7 @@
code = 488;
}
- if (!reason && code != 407) {
+ if (switch_strlen_zero(reason) && code != 407) {
reason = sip_status_phrase(code);
if (switch_strlen_zero(reason)) {
reason = "Because";
@@ -967,7 +985,7 @@
if (code == 407 && !msg->numeric_arg) {
const char *to_uri = switch_channel_get_variable(channel, "sip_to_uri");
const char *to_host = reason;
-
+
if (switch_strlen_zero(to_host)) {
to_host = switch_channel_get_variable(channel, "sip_to_host");
}
@@ -996,7 +1014,7 @@
switch_set_flag_locked(tech_pvt, TFLAG_BYE);
}
} else {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Responding with %d %s\n", code, reason);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Responding with %d [%s]\n", code, reason);
if (!switch_strlen_zero(((char *)msg->pointer_arg))) {
tech_pvt->local_sdp_str = switch_core_session_strdup(tech_pvt->session, (char *)msg->pointer_arg);
@@ -1033,6 +1051,9 @@
break;
case SWITCH_MESSAGE_INDICATE_PROGRESS:
{
+ char *sticky = NULL;
+ const char *val = NULL;
+
if (!switch_test_flag(tech_pvt, TFLAG_ANS) && !switch_test_flag(tech_pvt, TFLAG_EARLY_MEDIA)) {
switch_set_flag_locked(tech_pvt, TFLAG_EARLY_MEDIA);
@@ -1081,9 +1102,19 @@
}
}
switch_channel_mark_pre_answered(channel);
+
+
+ if (switch_test_flag(tech_pvt, TFLAG_NAT) ||
+ (val = switch_channel_get_variable(channel, "sip-force-contact")) ||
+ ((val = switch_channel_get_variable(channel, "sip_sticky_contact")) && switch_true(val))) {
+ sticky = tech_pvt->record_route;
+ switch_channel_set_variable(channel, "sip_nat_detected", "true");
+ }
+
nua_respond(tech_pvt->nh,
SIP_183_SESSION_PROGRESS,
NUTAG_AUTOANSWER(0),
+ TAG_IF(sticky, NUTAG_PROXY(tech_pvt->record_route)),
SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
SOATAG_REUSE_REJECTED(1),
SOATAG_ORDERED_USER(1),
@@ -1651,7 +1682,7 @@
return SWITCH_STATUS_SUCCESS;
}
-static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session,
+static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
switch_caller_profile_t *outbound_profile, switch_core_session_t **new_session,
switch_memory_pool_t **pool, switch_originate_flag_t flags)
{
@@ -1663,7 +1694,7 @@
private_object_t *tech_pvt = NULL;
switch_channel_t *nchannel;
char *host = NULL, *dest_to = NULL;
-
+
*new_session = NULL;
if (!(nsession = switch_core_session_request(sofia_endpoint_interface, pool))) {
@@ -1859,6 +1890,8 @@
switch_ivr_transfer_variable(session, nsession, "sip_auto_answer");
switch_ivr_transfer_variable(session, nsession, SOFIA_SIP_HEADER_PREFIX_T);
switch_ivr_transfer_variable(session, nsession, "sip_video_fmtp");
+ switch_ivr_transfer_variable(session, nsession, "sip-force-contact");
+ switch_ivr_transfer_variable(session, nsession, "sip_sticky_contact");
if (switch_core_session_compare(session, nsession)) {
/* It's another sofia channel! so lets cache what they use as a pt for telephone event so
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/mod_sofia.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/mod_sofia.h (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/mod_sofia.h Thu May 22 15:05:28 2008
@@ -45,7 +45,7 @@
#ifdef SWITCH_HAVE_ODBC
#include <switch_odbc.h>
#endif
-
+#define SOFIA_NAT_SESSION_TIMEOUT 20
#define SOFIA_MAX_ACL 100
#define MODNAME "mod_sofia"
@@ -65,7 +65,9 @@
#define SOFIA_SESSION_TIMEOUT "sofia_session_timeout"
#define MY_EVENT_REGISTER "sofia::register"
+#define MY_EVENT_UNREGISTER "sofia::unregister"
#define MY_EVENT_EXPIRE "sofia::expire"
+
#define MULTICAST_EVENT "multicast::event"
#define SOFIA_REPLACES_HEADER "_sofia_replaces_"
#define SOFIA_USER_AGENT "FreeSWITCH-mod_sofia/" SWITCH_VERSION_MAJOR "." SWITCH_VERSION_MINOR "." SWITCH_VERSION_MICRO "-" SWITCH_VERSION_REVISION
@@ -172,7 +174,7 @@
TFLAG_REFER = (1 << 17),
TFLAG_NOHUP = (1 << 18),
TFLAG_XFER = (1 << 19),
- TFLAG_RESERVED = (1 << 20),
+ TFLAG_NAT = (1 << 20),
TFLAG_BUGGY_2833 = (1 << 21),
TFLAG_SIP_HOLD = (1 << 22),
TFLAG_INB_NOMEDIA = (1 << 23),
@@ -330,6 +332,8 @@
uint32_t acl_count;
char *reg_acl[SOFIA_MAX_ACL];
uint32_t reg_acl_count;
+ char *nat_acl[SOFIA_MAX_ACL];
+ uint32_t nat_acl_count;
};
@@ -394,6 +398,7 @@
char *gateway_name;
char *local_crypto_key;
char *remote_crypto_key;
+ char *record_route;
int crypto_tag;
unsigned char local_raw_key[SWITCH_RTP_MAX_CRYPTO_LEN];
unsigned char remote_raw_key[SWITCH_RTP_MAX_CRYPTO_LEN];
@@ -434,6 +439,8 @@
uint32_t video_count;
sofia_dtmf_t dtmf_type;
int q850_cause;
+ char *remote_ip;
+ int remote_port;
};
struct callback_t {
@@ -444,7 +451,8 @@
typedef enum {
REG_REGISTER,
- REG_INVITE
+ REG_AUTO_REGISTER,
+ REG_INVITE,
} sofia_regtype_t;
typedef enum {
@@ -626,3 +634,4 @@
switch_status_t sofia_glue_tech_proxy_remote_addr(private_object_t *tech_pvt);
void sofia_presence_event_thread_start(void);
void sofia_reg_expire_call_id(sofia_profile_t *profile, const char *call_id);
+
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/sofia.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/sofia.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/sofia.c Thu May 22 15:05:28 2008
@@ -1304,6 +1304,12 @@
profile->username = switch_core_strdup(profile->pool, val);
} else if (!strcasecmp(var, "context")) {
profile->context = switch_core_strdup(profile->pool, val);
+ } else if (!strcasecmp(var, "apply-nat-acl")) {
+ if (profile->acl_count < SOFIA_MAX_ACL) {
+ profile->nat_acl[profile->nat_acl_count++] = switch_core_strdup(profile->pool, val);
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Max acl records of %d reached\n", SOFIA_MAX_ACL);
+ }
} else if (!strcasecmp(var, "apply-inbound-acl")) {
if (profile->acl_count < SOFIA_MAX_ACL) {
profile->acl[profile->acl_count++] = switch_core_strdup(profile->pool, val);
@@ -1534,6 +1540,9 @@
if (gateway) {
if (status == 200 || status == 404) {
//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "ping success %s\n", gateway->name);
+ if (gateway->state == REG_STATE_FAILED) {
+ gateway->state = REG_STATE_UNREGED;
+ }
gateway->status = SOFIA_GATEWAY_UP;
} else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "ping failed %s\n", gateway->name);
@@ -2642,7 +2651,8 @@
uint32_t sess_max = switch_core_session_limit(0);
int is_auth = 0, calling_myself = 0;
su_addrinfo_t *my_addrinfo = msg_addrinfo(nua_current_request(nua));
-
+ int network_port = 0;
+ char *sticky = NULL, *is_nat = NULL;
if (sess_count >= sess_max || !(profile->pflags & PFLAG_RUNNING)) {
nua_respond(nh, 503, "Maximum Calls In Progress", SIPTAG_RETRY_AFTER_STR("300"), TAG_END());
@@ -2657,30 +2667,77 @@
get_addr(network_ip, sizeof(network_ip), &((struct sockaddr_in *) my_addrinfo->ai_addr)->sin_addr);
+ network_port = ntohs(((struct sockaddr_in *) msg_addrinfo(nua_current_request(nua))->ai_addr)->sin_port);
+
+ if (profile->nat_acl_count) {
+ uint32_t x = 0;
+ int ok = 1;
+ char *last_acl = NULL;
+ const char *contact_host = NULL;
+
+ if (sip && sip->sip_contact && sip->sip_contact->m_url) {
+ contact_host = sip->sip_contact->m_url->url_host;
+ }
+
+ if (!switch_strlen_zero(contact_host)) {
+ for (x = 0 ; x < profile->nat_acl_count; x++) {
+ last_acl = profile->nat_acl[x];
+ if (!(ok = switch_check_network_list_ip(contact_host, last_acl))) {
+ break;
+ }
+ }
+
+ if (ok) {
+ is_nat = last_acl;
+ }
+ }
+ }
+
if (profile->acl_count) {
uint32_t x = 0;
+ int ok = 1;
+ char *last_acl = NULL;
+
for (x = 0 ; x < profile->acl_count; x++) {
- if (!switch_check_network_list_ip(network_ip, profile->acl[x])) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "IP %s Rejected by acl %s\n", network_ip, profile->acl[x]);
+ last_acl = profile->acl[x];
+ if (!(ok = switch_check_network_list_ip(network_ip, last_acl))) {
+ break;
+ }
+ }
+
+ if (ok) {
+ if ((profile->pflags & PFLAG_AUTH_CALLS)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "IP %s Approved by acl %s. Access Granted.\n",
+ network_ip, switch_str_nil(last_acl));
+ is_auth = 1;
+ }
+ } else {
+ if (!(profile->pflags & PFLAG_AUTH_CALLS)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "IP %s Rejected by acl %s\n", network_ip, switch_str_nil(last_acl));
nua_respond(nh, SIP_403_FORBIDDEN, TAG_END());
return;
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "IP %s Rejected by acl %s. Falling back to Digest auth.\n",
+ network_ip, switch_str_nil(last_acl));
}
}
}
-
- if ((profile->pflags & PFLAG_AUTH_CALLS) || (!(profile->pflags & PFLAG_BLIND_AUTH) && (sip->sip_proxy_authorization || sip->sip_authorization))) {
- int rport = ntohs(((struct sockaddr_in *) msg_addrinfo(nua_current_request(nua))->ai_addr)->sin_port);
- if (!strcmp(network_ip, profile->sipip) && rport == profile->sip_port) {
+
+ if (!is_auth &&
+ ((profile->pflags & PFLAG_AUTH_CALLS) || (!(profile->pflags & PFLAG_BLIND_AUTH) && (sip->sip_proxy_authorization || sip->sip_authorization)))) {
+ if (!strcmp(network_ip, profile->sipip) && network_port == profile->sip_port) {
calling_myself++;
} else {
if (sofia_reg_handle_register(nua, profile, nh, sip, REG_INVITE, key, sizeof(key), &v_event)) {
if (v_event) {
switch_event_destroy(&v_event);
}
+ switch_safe_free(sticky);
return;
}
+ switch_safe_free(sticky);
}
is_auth++;
}
@@ -2706,11 +2763,26 @@
}
switch_mutex_init(&tech_pvt->flag_mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(session));
+ tech_pvt->remote_ip = switch_core_session_strdup(session, network_ip);
+ tech_pvt->remote_port = network_port;
+
+ channel = tech_pvt->channel = switch_core_session_get_channel(session);
+
+ if (sip->sip_contact && sip->sip_contact->m_url) {
+ char tmp[35] = "";
+ tech_pvt->record_route = switch_core_session_sprintf(session, "sip:%s@%s:%d",
+ sip->sip_contact->m_url->url_user,
+ tech_pvt->remote_ip,
+ tech_pvt->remote_port);
+ switch_channel_set_variable(channel, "sip_received_ip", tech_pvt->remote_ip);
+ snprintf(tmp, sizeof(tmp), "%d", tech_pvt->remote_port);
+ switch_channel_set_variable(channel, "sip_received_port", tmp);
+ }
+
if (*key != '\0') {
tech_pvt->key = switch_core_session_strdup(session, key);
}
- channel = tech_pvt->channel = switch_core_session_get_channel(session);
if (is_auth) {
switch_channel_set_variable(channel, "sip_authorized", "true");
@@ -3119,6 +3191,12 @@
switch_assert(sql);
sofia_glue_execute_sql(profile, &sql, SWITCH_TRUE);
}
+
+ if (is_nat) {
+ switch_set_flag(tech_pvt, TFLAG_NAT);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Setting NAT mode based on acl %s\n", is_nat);
+ switch_channel_set_variable(channel, "sip_nat_detected", "true");
+ }
return;
}
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/sofia_glue.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/sofia_glue.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/sofia_glue.c Thu May 22 15:05:28 2008
@@ -868,6 +868,7 @@
uint32_t session_timeout = 0;
const char *val;
const char *rep;
+ char *sticky;
rep = switch_channel_get_variable(channel, SOFIA_REPLACES_HEADER);
@@ -1001,6 +1002,18 @@
TAG_END());
+ if (switch_test_flag(tech_pvt, TFLAG_NAT) ||
+ (val = switch_channel_get_variable(channel, "sip-force-contact")) ||
+ ((val = switch_channel_get_variable(channel, "sip_sticky_contact")) && switch_true(val))) {
+ tech_pvt->record_route = switch_core_session_strdup(tech_pvt->session, url_str);
+ sticky = tech_pvt->record_route;
+ session_timeout = SOFIA_NAT_SESSION_TIMEOUT;
+ switch_channel_set_variable(channel, "sip_nat_detected", "true");
+ }
+
+
+
+
/* TODO: We should use the new tags for making an rpid and add profile options to turn this on/off */
if (switch_test_flag(caller_profile, SWITCH_CPF_HIDE_NAME)) {
priv = "name";
@@ -1091,6 +1104,7 @@
sofia_glue_tech_patch_sdp(tech_pvt);
}
+
nua_invite(tech_pvt->nh,
NUTAG_AUTOANSWER(0),
NUTAG_SESSION_TIMER(session_timeout),
@@ -1519,6 +1533,16 @@
if (tech_pvt->cng_pt) {
flags |= SWITCH_RTP_FLAG_AUTO_CNG;
}
+
+ if (tech_pvt->rtp_session && switch_test_flag(tech_pvt, TFLAG_REINVITE)) {
+ const char *ip = switch_channel_get_variable(tech_pvt->channel, SWITCH_LOCAL_MEDIA_IP_VARIABLE);
+ const char *port = switch_channel_get_variable(tech_pvt->channel, SWITCH_LOCAL_MEDIA_PORT_VARIABLE);
+
+ if (ip && port && !strcmp(ip, tech_pvt->adv_sdp_audio_ip) && atoi(port) == tech_pvt->remote_sdp_audio_port) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Audio params are unchanged.\n");
+ goto video;
+ }
+ }
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "AUDIO RTP [%s] %s:%d->%s:%d codec: %u ms: %d\n",
switch_channel_get_name(tech_pvt->channel),
@@ -1796,7 +1820,7 @@
}
if (((m = sdp->sdp_media)) && m->m_mode == sdp_sendonly) {
- sendonly = 1;
+ sendonly = 2; /* global sendonly always wins */
}
for (attr = sdp->sdp_attributes; attr; attr = attr->a_next) {
@@ -1806,7 +1830,7 @@
if ((!strcasecmp(attr->a_name, "sendonly")) || (!strcasecmp(attr->a_name, "inactive"))) {
sendonly = 1;
- } else if (!strcasecmp(attr->a_name, "sendrecv")) {
+ } else if (sendonly < 2 && !strcasecmp(attr->a_name, "sendrecv")) {
sendonly = 0;
} else if (!strcasecmp(attr->a_name, "ptime")) {
dptime = atoi(attr->a_value);
@@ -1827,8 +1851,8 @@
if (!(stream = switch_channel_get_variable(tech_pvt->channel, SWITCH_HOLD_MUSIC_VARIABLE))) {
stream = tech_pvt->profile->hold_music;
}
-
- if (stream && strcasecmp(stream, "silence")) {
+
+ if (stream && switch_is_moh(stream)) {
if (!strcasecmp(stream, "indicate_hold")) {
switch_channel_set_flag(tech_pvt->channel, CF_SUSPEND);
switch_channel_set_flag(tech_pvt->channel, CF_HOLD);
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/sofia_presence.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/sofia_presence.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/sofia_presence.c Thu May 22 15:05:28 2008
@@ -806,7 +806,7 @@
}
if (!(nh = nua_handle_by_call_id(profile->nua, call_id))) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot find handle for %s\n", call_id);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Cannot find handle for %s\n", call_id);
return 0;
}
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/sofia_reg.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/sofia_reg.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/sofia_reg.c Thu May 22 15:05:28 2008
@@ -269,10 +269,10 @@
}
} else {
#endif
- if (!profile->master_db) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error Opening DB %s\n", profile->dbname);
- return;
- }
+ if (!profile->master_db) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error Opening DB %s\n", profile->dbname);
+ return;
+ }
#ifdef SWITCH_HAVE_ODBC
}
#endif
@@ -401,9 +401,13 @@
switch_mprintf("Digest realm=\"%q\", nonce=\"%q\",%s algorithm=MD5, qop=\"auth\"", realm, uuid_str, stale ? " stale=\"true\"," : "");
if (regtype == REG_REGISTER) {
- nua_respond(nh, SIP_401_UNAUTHORIZED, TAG_IF(nua, NUTAG_WITH_THIS(nua)), SIPTAG_WWW_AUTHENTICATE_STR(auth_str), TAG_END());
+ nua_respond(nh,
+ SIP_401_UNAUTHORIZED,
+ TAG_IF(nua, NUTAG_WITH_THIS(nua)), SIPTAG_WWW_AUTHENTICATE_STR(auth_str), TAG_END());
} else if (regtype == REG_INVITE) {
- nua_respond(nh, SIP_407_PROXY_AUTH_REQUIRED, TAG_IF(nua, NUTAG_WITH_THIS(nua)), SIPTAG_PROXY_AUTHENTICATE_STR(auth_str), TAG_END());
+ nua_respond(nh,
+ SIP_407_PROXY_AUTH_REQUIRED,
+ TAG_IF(nua, NUTAG_WITH_THIS(nua)), SIPTAG_PROXY_AUTHENTICATE_STR(auth_str), TAG_END());
}
switch_safe_free(auth_str);
@@ -421,6 +425,7 @@
const char *to_user = NULL;
const char *to_host = NULL;
char contact_str[1024] = "";
+ int nat_hack = 0;
//char buf[512];
uint8_t stale = 0, forbidden = 0;
auth_res_t auth_res;
@@ -495,7 +500,8 @@
authorization = sip->sip_proxy_authorization;
}
- if (regtype == REG_REGISTER && (profile->pflags & PFLAG_BLIND_REG)) {
+ if (regtype == REG_AUTO_REGISTER || (regtype == REG_REGISTER && (profile->pflags & PFLAG_BLIND_REG))) {
+ regtype = REG_REGISTER;
goto reg;
}
@@ -506,7 +512,7 @@
stale = 1;
}
- if (v_event && *v_event) {
+ if (exptime && v_event && *v_event) {
char *exp_var;
register_gateway = switch_event_get_header(*v_event, "sip-register-gateway");
@@ -524,7 +530,7 @@
!strcasecmp(v_contact_str, "NDLB-connectile-dysfunction") || !strcasecmp(v_contact_str, "NDLB-tls-connectile-dysfunction")) {
if (contact->m_url->url_params) {
switch_snprintf(contact_str, sizeof(contact_str), "%s <sip:%s@%s:%d;%s>",
- display, contact->m_url->url_user, network_ip, network_port, contact->m_url->url_params);
+ display, contact->m_url->url_user, network_ip, network_port, contact->m_url->url_params);
} else {
switch_snprintf(contact_str, sizeof(contact_str), "%s <sip:%s@%s:%d>", display, contact->m_url->url_user, network_ip, network_port);
}
@@ -534,6 +540,7 @@
reg_desc = "Registered(NATHACK)";
exptime = 20;
}
+ nat_hack = 1;
} else {
char *p;
switch_copy_string(contact_str, v_contact_str, sizeof(contact_str));
@@ -556,9 +563,13 @@
if (auth_res != AUTH_OK && !stale) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "send %s for [%s@%s]\n", forbidden ? "forbidden" : "challange", to_user, to_host);
if (auth_res == AUTH_FORBIDDEN) {
- nua_respond(nh, SIP_403_FORBIDDEN, NUTAG_WITH_THIS(nua), TAG_END());
+ nua_respond(nh,
+ SIP_403_FORBIDDEN,
+ NUTAG_WITH_THIS(nua), TAG_END());
} else {
- nua_respond(nh, SIP_401_UNAUTHORIZED, NUTAG_WITH_THIS(nua), TAG_END());
+ nua_respond(nh,
+ SIP_401_UNAUTHORIZED,
+ NUTAG_WITH_THIS(nua), TAG_END());
}
return 1;
}
@@ -571,7 +582,7 @@
}
return 1;
}
- reg:
+ reg:
if (regtype != REG_REGISTER) {
return 0;
@@ -580,7 +591,6 @@
call_id = sip->sip_call_id->i_id; //sip_header_as_string(profile->home, (void *) sip->sip_call_id);
switch_assert(call_id);
-
if (exptime) {
const char *agent = "dunno";
@@ -681,17 +691,23 @@
/*
- if (call_id) {
- su_free(profile->home, call_id);
- }
+ if (call_id) {
+ su_free(profile->home, call_id);
+ }
*/
if (regtype == REG_REGISTER) {
char *new_contact = NULL;
if (exptime) {
- new_contact = switch_mprintf("%s;expires=%ld", contact_str, (long)exptime);
- nua_respond(nh, SIP_200_OK, SIPTAG_CONTACT_STR(new_contact), NUTAG_WITH_THIS(nua), TAG_END());
+ if (nat_hack) {
+ new_contact = switch_mprintf("%s;expires=%ld;received=\"%s:%d\"", contact_str, (long)exptime, network_ip, network_port);
+ } else {
+ new_contact = switch_mprintf("%s;expires=%ld", contact_str, (long)exptime);
+ }
+ nua_respond(nh,
+ SIP_200_OK,
+ SIPTAG_CONTACT_STR(new_contact), NUTAG_WITH_THIS(nua), TAG_END());
switch_safe_free(new_contact);
if (switch_event_create(&event, SWITCH_EVENT_MESSAGE_QUERY) == SWITCH_STATUS_SUCCESS) {
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Message-Account", "sip:%s@%s", to_user, to_host);
@@ -699,7 +715,20 @@
switch_event_fire(&event);
}
} else {
- nua_respond(nh, SIP_200_OK, SIPTAG_CONTACT(contact), NUTAG_WITH_THIS(nua), TAG_END());
+ nua_respond(nh,
+ SIP_200_OK,
+ SIPTAG_CONTACT(contact), NUTAG_WITH_THIS(nua), TAG_END());
+
+ if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_UNREGISTER) == SWITCH_STATUS_SUCCESS) {
+ switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "profile-name", "%s", profile->name);
+ switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "from-user", "%s", to_user);
+ switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "from-host", "%s", to_host);
+ switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "contact", "%s", contact_str);
+ switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "call-id", "%s", call_id);
+ switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "rpid", "%s", rpid);
+ switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "expires", "%ld", (long) exptime);
+ switch_event_fire(&s_event);
+ }
}
return 1;
@@ -716,40 +745,58 @@
switch_event_t *v_event = NULL;
char network_ip[80];
su_addrinfo_t *my_addrinfo = msg_addrinfo(nua_current_request(nua));
+ sofia_regtype_t type = REG_REGISTER;
+ int network_port = 0;
+
+ get_addr(network_ip, sizeof(network_ip), &((struct sockaddr_in *) my_addrinfo->ai_addr)->sin_addr);
+ network_port = ntohs(((struct sockaddr_in *) msg_addrinfo(nua_current_request(nua))->ai_addr)->sin_port);
+
+ if (!(sip->sip_contact && sip->sip_contact->m_url)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "NO CONTACT!\n");
+ nua_respond(nh, 400, "Missing Contact Header", TAG_END());
+ goto end;
+ }
+
+ if (!(profile->mflags & MFLAG_REGISTER)) {
+ nua_respond(nh,
+ SIP_403_FORBIDDEN,
+ NUTAG_WITH_THIS(nua), TAG_END());
+ goto end;
+ }
+
if (profile->reg_acl_count) {
uint32_t x = 0;
+ int ok = 1;
+ char *last_acl = NULL;
- get_addr(network_ip, sizeof(network_ip), &((struct sockaddr_in *) my_addrinfo->ai_addr)->sin_addr);
-
for (x = 0 ; x < profile->reg_acl_count; x++) {
- if (!switch_check_network_list_ip(network_ip, profile->reg_acl[x])) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "IP %s Rejected by acl %s\n", network_ip, profile->reg_acl[x]);
- nua_respond(nh, SIP_403_FORBIDDEN, NUTAG_WITH_THIS(nua), TAG_END());
- goto end;
+ last_acl = profile->reg_acl[x];
+ if (!(ok = switch_check_network_list_ip(network_ip, last_acl))) {
+ break;
}
}
- }
-
-
- if (!(profile->mflags & MFLAG_REGISTER)) {
- nua_respond(nh, SIP_403_FORBIDDEN, NUTAG_WITH_THIS(nua), TAG_END());
- goto end;
+
+ if (ok && !(profile->pflags & PFLAG_BLIND_REG)) {
+ type = REG_AUTO_REGISTER;
+ } else if (!ok) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "IP %s Rejected by acl %s\n", network_ip, profile->reg_acl[x]);
+ nua_respond(nh,
+ SIP_403_FORBIDDEN,
+ NUTAG_WITH_THIS(nua), TAG_END());
+ goto end;
+ }
}
if (!sip || !sip->sip_request || !sip->sip_request->rq_method_name) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Received an invalid packet!\n");
- nua_respond(nh, SIP_500_INTERNAL_SERVER_ERROR, TAG_END());
- goto end;
- }
-
- if (!(sip->sip_contact && sip->sip_contact->m_url)) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "NO CONTACT!\n");
- nua_respond(nh, 400, "Missing Contact Header", TAG_END());
+ nua_respond(nh,
+ SIP_500_INTERNAL_SERVER_ERROR,
+ TAG_END());
goto end;
}
- sofia_reg_handle_register(nua, profile, nh, sip, REG_REGISTER, key, sizeof(key), &v_event);
+ sofia_reg_handle_register(nua, profile, nh, sip, type, key, sizeof(key), &v_event);
if (v_event) {
switch_event_fire(&v_event);
@@ -763,8 +810,8 @@
void sofia_reg_handle_sip_r_register(int status,
- char const *phrase,
- nua_t * nua, sofia_profile_t *profile, nua_handle_t * nh, sofia_private_t * sofia_private, sip_t const *sip, tagi_t tags[])
+ char const *phrase,
+ nua_t * nua, sofia_profile_t *profile, nua_handle_t * nh, sofia_private_t * sofia_private, sip_t const *sip, tagi_t tags[])
{
if (sofia_private && sofia_private->gateway) {
switch (status) {
@@ -866,7 +913,7 @@
}
auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile, sip_authorization_t const *authorization, sip_t const *sip, const char *regstr,
- char *np, size_t nplen, char *ip, switch_event_t **v_event, long exptime, sofia_regtype_t regtype, const char *to_user)
+ char *np, size_t nplen, char *ip, switch_event_t **v_event, long exptime, sofia_regtype_t regtype, const char *to_user)
{
int indexnum;
const char *cur;
@@ -1177,7 +1224,7 @@
}
}
}
- end:
+ end:
switch_event_destroy(¶ms);
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c Thu May 22 15:05:28 2008
@@ -466,7 +466,7 @@
static switch_status_t wanpipe_on_hangup(switch_core_session_t *session);
static switch_status_t wanpipe_on_exchange_media(switch_core_session_t *session);
static switch_status_t wanpipe_on_soft_execute(switch_core_session_t *session);
-static switch_call_cause_t wanpipe_outgoing_channel(switch_core_session_t *session, switch_caller_profile_t *outbound_profile,
+static switch_call_cause_t wanpipe_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event, switch_caller_profile_t *outbound_profile,
switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags);
static switch_status_t wanpipe_read_frame(switch_core_session_t *session, switch_frame_t **frame,
switch_io_flag_t flags, int stream_id);
@@ -1006,7 +1006,7 @@
/*.on_soft_execute */ wanpipe_on_soft_execute
};
-static switch_call_cause_t wanpipe_outgoing_channel(switch_core_session_t *session, switch_caller_profile_t *outbound_profile,
+static switch_call_cause_t wanpipe_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event, switch_caller_profile_t *outbound_profile,
switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags)
{
char *bchan = NULL;
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_woomera/mod_woomera.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_woomera/mod_woomera.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_woomera/mod_woomera.c Thu May 22 15:05:28 2008
@@ -173,7 +173,7 @@
static switch_status_t woomera_on_routing(switch_core_session_t *session);
static switch_status_t woomera_on_exchange_media(switch_core_session_t *session);
static switch_status_t woomera_on_soft_execute(switch_core_session_t *session);
-static switch_call_cause_t woomera_outgoing_channel(switch_core_session_t *session,
+static switch_call_cause_t woomera_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
switch_caller_profile_t *outbound_profile,
switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags);
static switch_status_t woomera_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id);
@@ -401,7 +401,7 @@
/* Make sure when you have 2 sessions in the same scope that you pass the appropriate one to the routines
that allocate memory or you will have 1 channel with memory allocated from another channel's pool!
*/
-static switch_call_cause_t woomera_outgoing_channel(switch_core_session_t *session,
+static switch_call_cause_t woomera_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
switch_caller_profile_t *outbound_profile,
switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags)
{
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_local_stream/mod_local_stream.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_local_stream/mod_local_stream.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_local_stream/mod_local_stream.c Thu May 22 15:05:28 2008
@@ -184,7 +184,7 @@
return NULL;
}
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Playing [%s] rate: %dhz\n", fname, source->rate);
+ //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Playing [%s] rate: %dhz\n", fname, source->rate);
while (RUNNING) {
switch_core_timer_next(&timer);
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_sndfile/mod_sndfile.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_sndfile/mod_sndfile.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_sndfile/mod_sndfile.c Thu May 22 15:05:28 2008
@@ -167,7 +167,7 @@
}
}
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Opening File [%s] rate %dhz\n", path, context->sfinfo.samplerate);
+ //switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Opening File [%s] rate %dhz\n", path, context->sfinfo.samplerate);
handle->samples = (unsigned int) context->sfinfo.frames;
handle->samplerate = context->sfinfo.samplerate;
handle->channels = (uint8_t) context->sfinfo.channels;
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/src/org/freeswitch/swig/CoreSession.java
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/src/org/freeswitch/swig/CoreSession.java (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/src/org/freeswitch/swig/CoreSession.java Thu May 22 15:05:28 2008
@@ -121,6 +121,22 @@
return new SWIGTYPE_p_switch_status_t(freeswitchJNI.CoreSession_process_callback_result(swigCPtr, this, ret), true);
}
+ public void say(String tosay, String module_name, String say_type, String say_method) {
+ freeswitchJNI.CoreSession_say(swigCPtr, this, tosay, module_name, say_type, say_method);
+ }
+
+ public void sayPhrase(String phrase_name, String phrase_data, String phrase_lang) {
+ freeswitchJNI.CoreSession_sayPhrase__SWIG_0(swigCPtr, this, phrase_name, phrase_data, phrase_lang);
+ }
+
+ public void sayPhrase(String phrase_name, String phrase_data) {
+ freeswitchJNI.CoreSession_sayPhrase__SWIG_1(swigCPtr, this, phrase_name, phrase_data);
+ }
+
+ public void sayPhrase(String phrase_name) {
+ freeswitchJNI.CoreSession_sayPhrase__SWIG_2(swigCPtr, this, phrase_name);
+ }
+
public int recordFile(String file_name, int max_len, int silence_threshold, int silence_secs) {
return freeswitchJNI.CoreSession_recordFile__SWIG_0(swigCPtr, this, file_name, max_len, silence_threshold, silence_secs);
}
@@ -210,7 +226,11 @@
}
public void execute(String app, String data) {
- freeswitchJNI.CoreSession_execute(swigCPtr, this, app, data);
+ freeswitchJNI.CoreSession_execute__SWIG_0(swigCPtr, this, app, data);
+ }
+
+ public void execute(String app) {
+ freeswitchJNI.CoreSession_execute__SWIG_1(swigCPtr, this, app);
}
public void sendEvent(Event sendME) {
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/src/org/freeswitch/swig/freeswitchJNI.java
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/src/org/freeswitch/swig/freeswitchJNI.java (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/src/org/freeswitch/swig/freeswitchJNI.java Thu May 22 15:05:28 2008
@@ -81,6 +81,10 @@
public final static native long CoreSession_getPrivate(long jarg1, CoreSession jarg1_, String jarg2);
public final static native String CoreSession_getVariable(long jarg1, CoreSession jarg1_, String jarg2);
public final static native long CoreSession_process_callback_result(long jarg1, CoreSession jarg1_, String jarg2);
+ public final static native void CoreSession_say(long jarg1, CoreSession jarg1_, String jarg2, String jarg3, String jarg4, String jarg5);
+ public final static native void CoreSession_sayPhrase__SWIG_0(long jarg1, CoreSession jarg1_, String jarg2, String jarg3, String jarg4);
+ public final static native void CoreSession_sayPhrase__SWIG_1(long jarg1, CoreSession jarg1_, String jarg2, String jarg3);
+ public final static native void CoreSession_sayPhrase__SWIG_2(long jarg1, CoreSession jarg1_, String jarg2);
public final static native int CoreSession_recordFile__SWIG_0(long jarg1, CoreSession jarg1_, String jarg2, int jarg3, int jarg4, int jarg5);
public final static native int CoreSession_recordFile__SWIG_1(long jarg1, CoreSession jarg1_, String jarg2, int jarg3, int jarg4);
public final static native int CoreSession_recordFile__SWIG_2(long jarg1, CoreSession jarg1_, String jarg2, int jarg3);
@@ -103,7 +107,8 @@
public final static native int CoreSession_setAutoHangup(long jarg1, CoreSession jarg1_, boolean jarg2);
public final static native void CoreSession_setHangupHook(long jarg1, CoreSession jarg1_, long jarg2);
public final static native boolean CoreSession_ready(long jarg1, CoreSession jarg1_);
- public final static native void CoreSession_execute(long jarg1, CoreSession jarg1_, String jarg2, String jarg3);
+ public final static native void CoreSession_execute__SWIG_0(long jarg1, CoreSession jarg1_, String jarg2, String jarg3);
+ public final static native void CoreSession_execute__SWIG_1(long jarg1, CoreSession jarg1_, String jarg2);
public final static native void CoreSession_sendEvent(long jarg1, CoreSession jarg1_, long jarg2, Event jarg2_);
public final static native void CoreSession_setEventData(long jarg1, CoreSession jarg1_, long jarg2, Event jarg2_);
public final static native String CoreSession_getXMLCDR(long jarg1, CoreSession jarg1_);
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/switch_swig_wrap.cpp
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/switch_swig_wrap.cpp (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/switch_swig_wrap.cpp Thu May 22 15:05:28 2008
@@ -1475,6 +1475,120 @@
}
+SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1say(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3, jstring jarg4, jstring jarg5) {
+ CoreSession *arg1 = (CoreSession *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(CoreSession **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return ;
+ }
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)jenv->GetStringUTFChars(jarg3, 0);
+ if (!arg3) return ;
+ }
+ arg4 = 0;
+ if (jarg4) {
+ arg4 = (char *)jenv->GetStringUTFChars(jarg4, 0);
+ if (!arg4) return ;
+ }
+ arg5 = 0;
+ if (jarg5) {
+ arg5 = (char *)jenv->GetStringUTFChars(jarg5, 0);
+ if (!arg5) return ;
+ }
+ (arg1)->say((char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5);
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+ if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3);
+ if (arg4) jenv->ReleaseStringUTFChars(jarg4, (const char *)arg4);
+ if (arg5) jenv->ReleaseStringUTFChars(jarg5, (const char *)arg5);
+}
+
+
+SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1sayPhrase_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3, jstring jarg4) {
+ CoreSession *arg1 = (CoreSession *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(CoreSession **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return ;
+ }
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)jenv->GetStringUTFChars(jarg3, 0);
+ if (!arg3) return ;
+ }
+ arg4 = 0;
+ if (jarg4) {
+ arg4 = (char *)jenv->GetStringUTFChars(jarg4, 0);
+ if (!arg4) return ;
+ }
+ (arg1)->sayPhrase((char const *)arg2,(char const *)arg3,(char const *)arg4);
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+ if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3);
+ if (arg4) jenv->ReleaseStringUTFChars(jarg4, (const char *)arg4);
+}
+
+
+SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1sayPhrase_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3) {
+ CoreSession *arg1 = (CoreSession *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(CoreSession **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return ;
+ }
+ arg3 = 0;
+ if (jarg3) {
+ arg3 = (char *)jenv->GetStringUTFChars(jarg3, 0);
+ if (!arg3) return ;
+ }
+ (arg1)->sayPhrase((char const *)arg2,(char const *)arg3);
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+ if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3);
+}
+
+
+SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1sayPhrase_1_1SWIG_12(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) {
+ CoreSession *arg1 = (CoreSession *) 0 ;
+ char *arg2 = (char *) 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(CoreSession **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return ;
+ }
+ (arg1)->sayPhrase((char const *)arg2);
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+}
+
+
SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1recordFile_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jint jarg3, jint jarg4, jint jarg5) {
jint jresult = 0 ;
CoreSession *arg1 = (CoreSession *) 0 ;
@@ -2005,7 +2119,7 @@
}
-SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1execute(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3) {
+SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1execute_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3) {
CoreSession *arg1 = (CoreSession *) 0 ;
char *arg2 = (char *) 0 ;
char *arg3 = (char *) 0 ;
@@ -2030,6 +2144,24 @@
}
+SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1execute_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) {
+ CoreSession *arg1 = (CoreSession *) 0 ;
+ char *arg2 = (char *) 0 ;
+
+ (void)jenv;
+ (void)jcls;
+ (void)jarg1_;
+ arg1 = *(CoreSession **)&jarg1;
+ arg2 = 0;
+ if (jarg2) {
+ arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+ if (!arg2) return ;
+ }
+ (arg1)->execute(arg2);
+ if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+}
+
+
SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1sendEvent(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) {
CoreSession *arg1 = (CoreSession *) 0 ;
Event *arg2 = (Event *) 0 ;
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/Makefile
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/Makefile (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/Makefile Thu May 22 15:05:28 2008
@@ -11,7 +11,7 @@
local_depend: $(LOCAL_OBJS)
$(LIBLUA_A):
- cd lua && $(MAKE) CFLAGS="$(ALL_CFLAGS) -DLUA_USE_LINUX -w" liblua.a
+ cd lua && $(MAKE) CC="$(CC)" CFLAGS="$(ALL_CFLAGS) -DLUA_USE_LINUX -w" liblua.a
luaclean:
cd lua && $(MAKE) clean
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/mod_lua_wrap.cpp
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/mod_lua_wrap.cpp (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/mod_lua_wrap.cpp Thu May 22 15:05:28 2008
@@ -3750,6 +3750,217 @@
}
+static int _wrap_CoreSession_say(lua_State* L) {
+ int SWIG_arg = -1;
+ CoreSession *arg1 = (CoreSession *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+
+ SWIG_check_num_args("say",5,5)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("say",1,"CoreSession *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("say",2,"char const *");
+ if(!lua_isstring(L,3)) SWIG_fail_arg("say",3,"char const *");
+ if(!lua_isstring(L,4)) SWIG_fail_arg("say",4,"char const *");
+ if(!lua_isstring(L,5)) SWIG_fail_arg("say",5,"char const *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){
+ SWIG_fail_ptr("CoreSession_say",1,SWIGTYPE_p_CoreSession);
+ }
+
+ arg2 = (char *)lua_tostring(L, 2);
+ arg3 = (char *)lua_tostring(L, 3);
+ arg4 = (char *)lua_tostring(L, 4);
+ arg5 = (char *)lua_tostring(L, 5);
+ (arg1)->say((char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5);
+ SWIG_arg=0;
+
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_CoreSession_sayPhrase__SWIG_0(lua_State* L) {
+ int SWIG_arg = -1;
+ CoreSession *arg1 = (CoreSession *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+
+ SWIG_check_num_args("sayPhrase",4,4)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("sayPhrase",1,"CoreSession *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("sayPhrase",2,"char const *");
+ if(!lua_isstring(L,3)) SWIG_fail_arg("sayPhrase",3,"char const *");
+ if(!lua_isstring(L,4)) SWIG_fail_arg("sayPhrase",4,"char const *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){
+ SWIG_fail_ptr("CoreSession_sayPhrase",1,SWIGTYPE_p_CoreSession);
+ }
+
+ arg2 = (char *)lua_tostring(L, 2);
+ arg3 = (char *)lua_tostring(L, 3);
+ arg4 = (char *)lua_tostring(L, 4);
+ (arg1)->sayPhrase((char const *)arg2,(char const *)arg3,(char const *)arg4);
+ SWIG_arg=0;
+
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_CoreSession_sayPhrase__SWIG_1(lua_State* L) {
+ int SWIG_arg = -1;
+ CoreSession *arg1 = (CoreSession *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+
+ SWIG_check_num_args("sayPhrase",3,3)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("sayPhrase",1,"CoreSession *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("sayPhrase",2,"char const *");
+ if(!lua_isstring(L,3)) SWIG_fail_arg("sayPhrase",3,"char const *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){
+ SWIG_fail_ptr("CoreSession_sayPhrase",1,SWIGTYPE_p_CoreSession);
+ }
+
+ arg2 = (char *)lua_tostring(L, 2);
+ arg3 = (char *)lua_tostring(L, 3);
+ (arg1)->sayPhrase((char const *)arg2,(char const *)arg3);
+ SWIG_arg=0;
+
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_CoreSession_sayPhrase__SWIG_2(lua_State* L) {
+ int SWIG_arg = -1;
+ CoreSession *arg1 = (CoreSession *) 0 ;
+ char *arg2 = (char *) 0 ;
+
+ SWIG_check_num_args("sayPhrase",2,2)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("sayPhrase",1,"CoreSession *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("sayPhrase",2,"char const *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){
+ SWIG_fail_ptr("CoreSession_sayPhrase",1,SWIGTYPE_p_CoreSession);
+ }
+
+ arg2 = (char *)lua_tostring(L, 2);
+ (arg1)->sayPhrase((char const *)arg2);
+ SWIG_arg=0;
+
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_CoreSession_sayPhrase(lua_State* L) {
+ int argc;
+ int argv[5]={
+ 1,2,3,4,5
+ };
+
+ argc = lua_gettop(L);
+ if (argc == 2) {
+ int _v;
+ {
+ void *ptr;
+ if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_CoreSession, 0)) {
+ _v = 0;
+ } else {
+ _v = 1;
+ }
+ }
+ if (_v) {
+ {
+ _v = lua_isstring(L,argv[1]);
+ }
+ if (_v) {
+ return _wrap_CoreSession_sayPhrase__SWIG_2(L);
+ }
+ }
+ }
+ if (argc == 3) {
+ int _v;
+ {
+ void *ptr;
+ if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_CoreSession, 0)) {
+ _v = 0;
+ } else {
+ _v = 1;
+ }
+ }
+ if (_v) {
+ {
+ _v = lua_isstring(L,argv[1]);
+ }
+ if (_v) {
+ {
+ _v = lua_isstring(L,argv[2]);
+ }
+ if (_v) {
+ return _wrap_CoreSession_sayPhrase__SWIG_1(L);
+ }
+ }
+ }
+ }
+ if (argc == 4) {
+ int _v;
+ {
+ void *ptr;
+ if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_CoreSession, 0)) {
+ _v = 0;
+ } else {
+ _v = 1;
+ }
+ }
+ if (_v) {
+ {
+ _v = lua_isstring(L,argv[1]);
+ }
+ if (_v) {
+ {
+ _v = lua_isstring(L,argv[2]);
+ }
+ if (_v) {
+ {
+ _v = lua_isstring(L,argv[3]);
+ }
+ if (_v) {
+ return _wrap_CoreSession_sayPhrase__SWIG_0(L);
+ }
+ }
+ }
+ }
+ }
+
+ lua_pushstring(L,"No matching function for overloaded 'CoreSession_sayPhrase'");
+ lua_error(L);return 0;
+}
+
+
static int _wrap_CoreSession_recordFile__SWIG_0(lua_State* L) {
int SWIG_arg = -1;
CoreSession *arg1 = (CoreSession *) 0 ;
@@ -4696,7 +4907,7 @@
}
-static int _wrap_CoreSession_execute(lua_State* L) {
+static int _wrap_CoreSession_execute__SWIG_0(lua_State* L) {
int SWIG_arg = -1;
CoreSession *arg1 = (CoreSession *) 0 ;
char *arg2 = (char *) 0 ;
@@ -4726,6 +4937,89 @@
}
+static int _wrap_CoreSession_execute__SWIG_1(lua_State* L) {
+ int SWIG_arg = -1;
+ CoreSession *arg1 = (CoreSession *) 0 ;
+ char *arg2 = (char *) 0 ;
+
+ SWIG_check_num_args("execute",2,2)
+ if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("execute",1,"CoreSession *");
+ if(!lua_isstring(L,2)) SWIG_fail_arg("execute",2,"char *");
+
+ if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){
+ SWIG_fail_ptr("CoreSession_execute",1,SWIGTYPE_p_CoreSession);
+ }
+
+ arg2 = (char *)lua_tostring(L, 2);
+ (arg1)->execute(arg2);
+ SWIG_arg=0;
+
+ return SWIG_arg;
+
+ if(0) SWIG_fail;
+
+fail:
+ lua_error(L);
+ return SWIG_arg;
+}
+
+
+static int _wrap_CoreSession_execute(lua_State* L) {
+ int argc;
+ int argv[4]={
+ 1,2,3,4
+ };
+
+ argc = lua_gettop(L);
+ if (argc == 2) {
+ int _v;
+ {
+ void *ptr;
+ if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_CoreSession, 0)) {
+ _v = 0;
+ } else {
+ _v = 1;
+ }
+ }
+ if (_v) {
+ {
+ _v = lua_isstring(L,argv[1]);
+ }
+ if (_v) {
+ return _wrap_CoreSession_execute__SWIG_1(L);
+ }
+ }
+ }
+ if (argc == 3) {
+ int _v;
+ {
+ void *ptr;
+ if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_CoreSession, 0)) {
+ _v = 0;
+ } else {
+ _v = 1;
+ }
+ }
+ if (_v) {
+ {
+ _v = lua_isstring(L,argv[1]);
+ }
+ if (_v) {
+ {
+ _v = lua_isstring(L,argv[2]);
+ }
+ if (_v) {
+ return _wrap_CoreSession_execute__SWIG_0(L);
+ }
+ }
+ }
+ }
+
+ lua_pushstring(L,"No matching function for overloaded 'CoreSession_execute'");
+ lua_error(L);return 0;
+}
+
+
static int _wrap_CoreSession_sendEvent(lua_State* L) {
int SWIG_arg = -1;
CoreSession *arg1 = (CoreSession *) 0 ;
@@ -4993,6 +5287,8 @@
{"getPrivate", _wrap_CoreSession_getPrivate},
{"getVariable", _wrap_CoreSession_getVariable},
{"process_callback_result", _wrap_CoreSession_process_callback_result},
+ {"say", _wrap_CoreSession_say},
+ {"sayPhrase", _wrap_CoreSession_sayPhrase},
{"recordFile", _wrap_CoreSession_recordFile},
{"setCallerData", _wrap_CoreSession_setCallerData},
{"originate", _wrap_CoreSession_originate},
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/freeswitch.pm
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/freeswitch.pm (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/freeswitch.pm Thu May 22 15:05:28 2008
@@ -308,6 +308,8 @@
*getPrivate = *freeswitchc::CoreSession_getPrivate;
*getVariable = *freeswitchc::CoreSession_getVariable;
*process_callback_result = *freeswitchc::CoreSession_process_callback_result;
+*say = *freeswitchc::CoreSession_say;
+*sayPhrase = *freeswitchc::CoreSession_sayPhrase;
*recordFile = *freeswitchc::CoreSession_recordFile;
*setCallerData = *freeswitchc::CoreSession_setCallerData;
*originate = *freeswitchc::CoreSession_originate;
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/mod_perl_wrap.cpp
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/mod_perl_wrap.cpp (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/mod_perl_wrap.cpp Thu May 22 15:05:28 2008
@@ -4700,6 +4700,357 @@
}
+XS(_wrap_CoreSession_say) {
+ {
+ CoreSession *arg1 = (CoreSession *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 5) || (items > 5)) {
+ SWIG_croak("Usage: CoreSession_say(self,tosay,module_name,say_type,say_method);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CoreSession, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_say" "', argument " "1"" of type '" "CoreSession *""'");
+ }
+ arg1 = reinterpret_cast< CoreSession * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_say" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CoreSession_say" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ res4 = SWIG_AsCharPtrAndSize(ST(3), &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CoreSession_say" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = reinterpret_cast< char * >(buf4);
+ res5 = SWIG_AsCharPtrAndSize(ST(4), &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CoreSession_say" "', argument " "5"" of type '" "char const *""'");
+ }
+ arg5 = reinterpret_cast< char * >(buf5);
+ (arg1)->say((char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5);
+
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+ if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+ if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_CoreSession_sayPhrase__SWIG_0) {
+ {
+ CoreSession *arg1 = (CoreSession *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 4) || (items > 4)) {
+ SWIG_croak("Usage: CoreSession_sayPhrase(self,phrase_name,phrase_data,phrase_lang);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CoreSession, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_sayPhrase" "', argument " "1"" of type '" "CoreSession *""'");
+ }
+ arg1 = reinterpret_cast< CoreSession * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_sayPhrase" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CoreSession_sayPhrase" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ res4 = SWIG_AsCharPtrAndSize(ST(3), &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CoreSession_sayPhrase" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = reinterpret_cast< char * >(buf4);
+ (arg1)->sayPhrase((char const *)arg2,(char const *)arg3,(char const *)arg4);
+
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_CoreSession_sayPhrase__SWIG_1) {
+ {
+ CoreSession *arg1 = (CoreSession *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 3) || (items > 3)) {
+ SWIG_croak("Usage: CoreSession_sayPhrase(self,phrase_name,phrase_data);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CoreSession, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_sayPhrase" "', argument " "1"" of type '" "CoreSession *""'");
+ }
+ arg1 = reinterpret_cast< CoreSession * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_sayPhrase" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CoreSession_sayPhrase" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ (arg1)->sayPhrase((char const *)arg2,(char const *)arg3);
+
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_CoreSession_sayPhrase__SWIG_2) {
+ {
+ CoreSession *arg1 = (CoreSession *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: CoreSession_sayPhrase(self,phrase_name);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CoreSession, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_sayPhrase" "', argument " "1"" of type '" "CoreSession *""'");
+ }
+ arg1 = reinterpret_cast< CoreSession * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_sayPhrase" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ (arg1)->sayPhrase((char const *)arg2);
+
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_CoreSession_sayPhrase) {
+ dXSARGS;
+
+ {
+ unsigned long _index = 0;
+ SWIG_TypeRank _rank = 0;
+ if (items == 2) {
+ SWIG_TypeRank _ranki = 0;
+ SWIG_TypeRank _rankm = 0;
+ SWIG_TypeRank _pi = 1;
+ int _v = 0;
+ {
+ void *vptr = 0;
+ int res = SWIG_ConvertPtr(ST(0), &vptr, SWIGTYPE_p_CoreSession, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_1;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ {
+ int res = SWIG_AsCharPtrAndSize(ST(1), 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_1;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ if (!_index || (_ranki < _rank)) {
+ _rank = _ranki; _index = 1;
+ if (_rank == _rankm) goto dispatch;
+ }
+ }
+ check_1:
+
+ if (items == 3) {
+ SWIG_TypeRank _ranki = 0;
+ SWIG_TypeRank _rankm = 0;
+ SWIG_TypeRank _pi = 1;
+ int _v = 0;
+ {
+ void *vptr = 0;
+ int res = SWIG_ConvertPtr(ST(0), &vptr, SWIGTYPE_p_CoreSession, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_2;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ {
+ int res = SWIG_AsCharPtrAndSize(ST(1), 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_2;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ {
+ int res = SWIG_AsCharPtrAndSize(ST(2), 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_2;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ if (!_index || (_ranki < _rank)) {
+ _rank = _ranki; _index = 2;
+ if (_rank == _rankm) goto dispatch;
+ }
+ }
+ check_2:
+
+ if (items == 4) {
+ SWIG_TypeRank _ranki = 0;
+ SWIG_TypeRank _rankm = 0;
+ SWIG_TypeRank _pi = 1;
+ int _v = 0;
+ {
+ void *vptr = 0;
+ int res = SWIG_ConvertPtr(ST(0), &vptr, SWIGTYPE_p_CoreSession, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_3;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ {
+ int res = SWIG_AsCharPtrAndSize(ST(1), 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_3;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ {
+ int res = SWIG_AsCharPtrAndSize(ST(2), 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_3;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ {
+ int res = SWIG_AsCharPtrAndSize(ST(3), 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_3;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ if (!_index || (_ranki < _rank)) {
+ _rank = _ranki; _index = 3;
+ if (_rank == _rankm) goto dispatch;
+ }
+ }
+ check_3:
+
+ dispatch:
+ switch(_index) {
+ case 1:
+ ++PL_markstack_ptr; SWIG_CALLXS(_wrap_CoreSession_sayPhrase__SWIG_2); return;
+ case 2:
+ ++PL_markstack_ptr; SWIG_CALLXS(_wrap_CoreSession_sayPhrase__SWIG_1); return;
+ case 3:
+ ++PL_markstack_ptr; SWIG_CALLXS(_wrap_CoreSession_sayPhrase__SWIG_0); return;
+ }
+ }
+
+ croak("No matching function for overloaded 'CoreSession_sayPhrase'");
+ XSRETURN(0);
+}
+
+
XS(_wrap_CoreSession_recordFile__SWIG_0) {
{
CoreSession *arg1 = (CoreSession *) 0 ;
@@ -6196,7 +6547,7 @@
}
-XS(_wrap_CoreSession_execute) {
+XS(_wrap_CoreSession_execute__SWIG_0) {
{
CoreSession *arg1 = (CoreSession *) 0 ;
char *arg2 = (char *) 0 ;
@@ -6245,6 +6596,130 @@
}
+XS(_wrap_CoreSession_execute__SWIG_1) {
+ {
+ CoreSession *arg1 = (CoreSession *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int argvi = 0;
+ dXSARGS;
+
+ if ((items < 2) || (items > 2)) {
+ SWIG_croak("Usage: CoreSession_execute(self,app);");
+ }
+ res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CoreSession, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_execute" "', argument " "1"" of type '" "CoreSession *""'");
+ }
+ arg1 = reinterpret_cast< CoreSession * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_execute" "', argument " "2"" of type '" "char *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ (arg1)->execute(arg2);
+
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ XSRETURN(argvi);
+ fail:
+
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ SWIG_croak_null();
+ }
+}
+
+
+XS(_wrap_CoreSession_execute) {
+ dXSARGS;
+
+ {
+ unsigned long _index = 0;
+ SWIG_TypeRank _rank = 0;
+ if (items == 2) {
+ SWIG_TypeRank _ranki = 0;
+ SWIG_TypeRank _rankm = 0;
+ SWIG_TypeRank _pi = 1;
+ int _v = 0;
+ {
+ void *vptr = 0;
+ int res = SWIG_ConvertPtr(ST(0), &vptr, SWIGTYPE_p_CoreSession, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_1;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ {
+ int res = SWIG_AsCharPtrAndSize(ST(1), 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_1;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ if (!_index || (_ranki < _rank)) {
+ _rank = _ranki; _index = 1;
+ if (_rank == _rankm) goto dispatch;
+ }
+ }
+ check_1:
+
+ if (items == 3) {
+ SWIG_TypeRank _ranki = 0;
+ SWIG_TypeRank _rankm = 0;
+ SWIG_TypeRank _pi = 1;
+ int _v = 0;
+ {
+ void *vptr = 0;
+ int res = SWIG_ConvertPtr(ST(0), &vptr, SWIGTYPE_p_CoreSession, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_2;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ {
+ int res = SWIG_AsCharPtrAndSize(ST(1), 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_2;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ {
+ int res = SWIG_AsCharPtrAndSize(ST(2), 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ }
+ if (!_v) goto check_2;
+ _ranki += _v*_pi;
+ _rankm += _pi;
+ _pi *= SWIG_MAXCASTRANK;
+ if (!_index || (_ranki < _rank)) {
+ _rank = _ranki; _index = 2;
+ if (_rank == _rankm) goto dispatch;
+ }
+ }
+ check_2:
+
+ dispatch:
+ switch(_index) {
+ case 1:
+ ++PL_markstack_ptr; SWIG_CALLXS(_wrap_CoreSession_execute__SWIG_1); return;
+ case 2:
+ ++PL_markstack_ptr; SWIG_CALLXS(_wrap_CoreSession_execute__SWIG_0); return;
+ }
+ }
+
+ croak("No matching function for overloaded 'CoreSession_execute'");
+ XSRETURN(0);
+}
+
+
XS(_wrap_CoreSession_sendEvent) {
{
CoreSession *arg1 = (CoreSession *) 0 ;
@@ -7796,6 +8271,8 @@
{"freeswitchc::CoreSession_getPrivate", _wrap_CoreSession_getPrivate},
{"freeswitchc::CoreSession_getVariable", _wrap_CoreSession_getVariable},
{"freeswitchc::CoreSession_process_callback_result", _wrap_CoreSession_process_callback_result},
+{"freeswitchc::CoreSession_say", _wrap_CoreSession_say},
+{"freeswitchc::CoreSession_sayPhrase", _wrap_CoreSession_sayPhrase},
{"freeswitchc::CoreSession_recordFile", _wrap_CoreSession_recordFile},
{"freeswitchc::CoreSession_setCallerData", _wrap_CoreSession_setCallerData},
{"freeswitchc::CoreSession_originate", _wrap_CoreSession_originate},
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/Makefile.in
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/Makefile.in (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/Makefile.in Thu May 22 15:05:28 2008
@@ -4,10 +4,12 @@
# and define these variables to impact your build
LOCAL_CFLAGS = @PYTHON_CFLAGS@
-LOCAL_LDFLAGS= @PYTHON_LDFLAGS@ -lstdc++
+LOCAL_LDFLAGS= @PYTHON_LDFLAGS@
LOCAL_OBJS=freeswitch_python.o mod_python_wrap.o
include ../../../../build/modmake.rules
+LINK=$(CXXLINK)
+
PYMOD=freeswitch
PYTHON_SITE_DIR=@PYTHON_SITE_DIR@
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/freeswitch.py
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/freeswitch.py (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/freeswitch.py Thu May 22 15:05:28 2008
@@ -199,6 +199,8 @@
def getPrivate(*args): return _freeswitch.CoreSession_getPrivate(*args)
def getVariable(*args): return _freeswitch.CoreSession_getVariable(*args)
def process_callback_result(*args): return _freeswitch.CoreSession_process_callback_result(*args)
+ def say(*args): return _freeswitch.CoreSession_say(*args)
+ def sayPhrase(*args): return _freeswitch.CoreSession_sayPhrase(*args)
def recordFile(*args): return _freeswitch.CoreSession_recordFile(*args)
def setCallerData(*args): return _freeswitch.CoreSession_setCallerData(*args)
def originate(*args): return _freeswitch.CoreSession_originate(*args)
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/mod_python_wrap.cpp
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/mod_python_wrap.cpp (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/mod_python_wrap.cpp Thu May 22 15:05:28 2008
@@ -5289,6 +5289,282 @@
}
+SWIGINTERN PyObject *_wrap_CoreSession_say(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ CoreSession *arg1 = (CoreSession *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ char *arg5 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ int res5 ;
+ char *buf5 = 0 ;
+ int alloc5 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+ PyObject * obj4 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OOOOO:CoreSession_say",&obj0,&obj1,&obj2,&obj3,&obj4)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CoreSession, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_say" "', argument " "1"" of type '" "CoreSession *""'");
+ }
+ arg1 = reinterpret_cast< CoreSession * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_say" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CoreSession_say" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ res4 = SWIG_AsCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CoreSession_say" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = reinterpret_cast< char * >(buf4);
+ res5 = SWIG_AsCharPtrAndSize(obj4, &buf5, NULL, &alloc5);
+ if (!SWIG_IsOK(res5)) {
+ SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "CoreSession_say" "', argument " "5"" of type '" "char const *""'");
+ }
+ arg5 = reinterpret_cast< char * >(buf5);
+ (arg1)->say((char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5);
+ resultobj = SWIG_Py_Void();
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+ if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+ if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CoreSession_sayPhrase__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ CoreSession *arg1 = (CoreSession *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ char *arg4 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ int res4 ;
+ char *buf4 = 0 ;
+ int alloc4 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+ PyObject * obj3 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OOOO:CoreSession_sayPhrase",&obj0,&obj1,&obj2,&obj3)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CoreSession, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_sayPhrase" "', argument " "1"" of type '" "CoreSession *""'");
+ }
+ arg1 = reinterpret_cast< CoreSession * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_sayPhrase" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CoreSession_sayPhrase" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ res4 = SWIG_AsCharPtrAndSize(obj3, &buf4, NULL, &alloc4);
+ if (!SWIG_IsOK(res4)) {
+ SWIG_exception_fail(SWIG_ArgError(res4), "in method '" "CoreSession_sayPhrase" "', argument " "4"" of type '" "char const *""'");
+ }
+ arg4 = reinterpret_cast< char * >(buf4);
+ (arg1)->sayPhrase((char const *)arg2,(char const *)arg3,(char const *)arg4);
+ resultobj = SWIG_Py_Void();
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CoreSession_sayPhrase__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ CoreSession *arg1 = (CoreSession *) 0 ;
+ char *arg2 = (char *) 0 ;
+ char *arg3 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ int res3 ;
+ char *buf3 = 0 ;
+ int alloc3 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+ PyObject * obj2 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OOO:CoreSession_sayPhrase",&obj0,&obj1,&obj2)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CoreSession, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_sayPhrase" "', argument " "1"" of type '" "CoreSession *""'");
+ }
+ arg1 = reinterpret_cast< CoreSession * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_sayPhrase" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3);
+ if (!SWIG_IsOK(res3)) {
+ SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "CoreSession_sayPhrase" "', argument " "3"" of type '" "char const *""'");
+ }
+ arg3 = reinterpret_cast< char * >(buf3);
+ (arg1)->sayPhrase((char const *)arg2,(char const *)arg3);
+ resultobj = SWIG_Py_Void();
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CoreSession_sayPhrase__SWIG_2(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ CoreSession *arg1 = (CoreSession *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:CoreSession_sayPhrase",&obj0,&obj1)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CoreSession, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_sayPhrase" "', argument " "1"" of type '" "CoreSession *""'");
+ }
+ arg1 = reinterpret_cast< CoreSession * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_sayPhrase" "', argument " "2"" of type '" "char const *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ (arg1)->sayPhrase((char const *)arg2);
+ resultobj = SWIG_Py_Void();
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CoreSession_sayPhrase(PyObject *self, PyObject *args) {
+ int argc;
+ PyObject *argv[5];
+ int ii;
+
+ if (!PyTuple_Check(args)) SWIG_fail;
+ argc = (int)PyObject_Length(args);
+ for (ii = 0; (ii < argc) && (ii < 4); ii++) {
+ argv[ii] = PyTuple_GET_ITEM(args,ii);
+ }
+ if (argc == 2) {
+ int _v;
+ void *vptr = 0;
+ int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CoreSession, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ return _wrap_CoreSession_sayPhrase__SWIG_2(self, args);
+ }
+ }
+ }
+ if (argc == 3) {
+ int _v;
+ void *vptr = 0;
+ int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CoreSession, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ return _wrap_CoreSession_sayPhrase__SWIG_1(self, args);
+ }
+ }
+ }
+ }
+ if (argc == 4) {
+ int _v;
+ void *vptr = 0;
+ int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CoreSession, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ int res = SWIG_AsCharPtrAndSize(argv[3], 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ return _wrap_CoreSession_sayPhrase__SWIG_0(self, args);
+ }
+ }
+ }
+ }
+ }
+
+fail:
+ SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CoreSession_sayPhrase'.\n"
+ " Possible C/C++ prototypes are:\n"
+ " sayPhrase(CoreSession *,char const *,char const *,char const *)\n"
+ " sayPhrase(CoreSession *,char const *,char const *)\n"
+ " sayPhrase(CoreSession *,char const *)\n");
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_CoreSession_recordFile__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
CoreSession *arg1 = (CoreSession *) 0 ;
@@ -6484,7 +6760,7 @@
}
-SWIGINTERN PyObject *_wrap_CoreSession_execute(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+SWIGINTERN PyObject *_wrap_CoreSession_execute__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
CoreSession *arg1 = (CoreSession *) 0 ;
char *arg2 = (char *) 0 ;
@@ -6529,6 +6805,89 @@
}
+SWIGINTERN PyObject *_wrap_CoreSession_execute__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+ PyObject *resultobj = 0;
+ CoreSession *arg1 = (CoreSession *) 0 ;
+ char *arg2 = (char *) 0 ;
+ void *argp1 = 0 ;
+ int res1 = 0 ;
+ int res2 ;
+ char *buf2 = 0 ;
+ int alloc2 = 0 ;
+ PyObject * obj0 = 0 ;
+ PyObject * obj1 = 0 ;
+
+ if (!PyArg_ParseTuple(args,(char *)"OO:CoreSession_execute",&obj0,&obj1)) SWIG_fail;
+ res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CoreSession, 0 | 0 );
+ if (!SWIG_IsOK(res1)) {
+ SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_execute" "', argument " "1"" of type '" "CoreSession *""'");
+ }
+ arg1 = reinterpret_cast< CoreSession * >(argp1);
+ res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+ if (!SWIG_IsOK(res2)) {
+ SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_execute" "', argument " "2"" of type '" "char *""'");
+ }
+ arg2 = reinterpret_cast< char * >(buf2);
+ (arg1)->execute(arg2);
+ resultobj = SWIG_Py_Void();
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return resultobj;
+fail:
+ if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+ return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CoreSession_execute(PyObject *self, PyObject *args) {
+ int argc;
+ PyObject *argv[4];
+ int ii;
+
+ if (!PyTuple_Check(args)) SWIG_fail;
+ argc = (int)PyObject_Length(args);
+ for (ii = 0; (ii < argc) && (ii < 3); ii++) {
+ argv[ii] = PyTuple_GET_ITEM(args,ii);
+ }
+ if (argc == 2) {
+ int _v;
+ void *vptr = 0;
+ int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CoreSession, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ return _wrap_CoreSession_execute__SWIG_1(self, args);
+ }
+ }
+ }
+ if (argc == 3) {
+ int _v;
+ void *vptr = 0;
+ int res = SWIG_ConvertPtr(argv[0], &vptr, SWIGTYPE_p_CoreSession, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ int res = SWIG_AsCharPtrAndSize(argv[1], 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ int res = SWIG_AsCharPtrAndSize(argv[2], 0, NULL, 0);
+ _v = SWIG_CheckState(res);
+ if (_v) {
+ return _wrap_CoreSession_execute__SWIG_0(self, args);
+ }
+ }
+ }
+ }
+
+fail:
+ SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CoreSession_execute'.\n"
+ " Possible C/C++ prototypes are:\n"
+ " execute(CoreSession *,char *,char *)\n"
+ " execute(CoreSession *,char *)\n");
+ return NULL;
+}
+
+
SWIGINTERN PyObject *_wrap_CoreSession_sendEvent(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
PyObject *resultobj = 0;
CoreSession *arg1 = (CoreSession *) 0 ;
@@ -7358,6 +7717,8 @@
{ (char *)"CoreSession_getPrivate", _wrap_CoreSession_getPrivate, METH_VARARGS, NULL},
{ (char *)"CoreSession_getVariable", _wrap_CoreSession_getVariable, METH_VARARGS, NULL},
{ (char *)"CoreSession_process_callback_result", _wrap_CoreSession_process_callback_result, METH_VARARGS, NULL},
+ { (char *)"CoreSession_say", _wrap_CoreSession_say, METH_VARARGS, NULL},
+ { (char *)"CoreSession_sayPhrase", _wrap_CoreSession_sayPhrase, METH_VARARGS, NULL},
{ (char *)"CoreSession_recordFile", _wrap_CoreSession_recordFile, METH_VARARGS, NULL},
{ (char *)"CoreSession_setCallerData", _wrap_CoreSession_setCallerData, METH_VARARGS, NULL},
{ (char *)"CoreSession_originate", _wrap_CoreSession_originate, METH_VARARGS, NULL},
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/xml_int/mod_xml_curl/mod_xml_curl.c Thu May 22 15:05:28 2008
@@ -43,6 +43,8 @@
char *cred;
int disable100continue;
uint32_t ignore_cacert_check;
+ switch_hash_t* vars_map;
+ switch_memory_pool_t* vars_map_pool;
};
static int keep_files_around = 0;
@@ -110,7 +112,7 @@
struct curl_slist *headers = NULL;
char hostname[256] = "";
char basic_data[512];
-
+
gethostname(hostname, sizeof(hostname));
if (!binding) {
@@ -134,7 +136,7 @@
switch_str_nil(key_name),
switch_str_nil(key_value));
- data = switch_event_build_param_string(params, basic_data);
+ data = switch_event_build_param_string(params, basic_data,binding->vars_map);
switch_assert(data);
switch_uuid_get(&uuid);
@@ -204,14 +206,17 @@
return xml;
}
-
+#define ENABLE_PARAM_VALUE "enabled"
static switch_status_t do_config(void)
{
char *cf = "xml_curl.conf";
switch_xml_t cfg, xml, bindings_tag, binding_tag, param;
xml_binding_t *binding = NULL;
int x = 0;
-
+ int need_vars_map = 0;
+ switch_hash_t* vars_map = NULL;
+ switch_memory_pool_t* vars_map_pool = NULL;
+
if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf);
return SWITCH_STATUS_TERM;
@@ -244,7 +249,29 @@
disable100continue = 1;
} else if (!strcasecmp(var, "ignore-cacert-check") && switch_true(val)) {
ignore_cacert_check = 1;
- }
+ } else if(!strcasecmp(var, "enable-post-var")) {
+ if (!vars_map && need_vars_map == 0) {
+ if (switch_core_new_memory_pool(&vars_map_pool) != SWITCH_STATUS_SUCCESS) {
+ need_vars_map = -1;
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Cant create memory pool!\n");
+ continue;
+ }
+
+ if (switch_core_hash_init(&vars_map,vars_map_pool) != SWITCH_STATUS_SUCCESS) {
+ need_vars_map = -1;
+ switch_core_destroy_memory_pool(&vars_map_pool);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Cant init params hash!\n");
+ continue;
+ }
+ need_vars_map = 1;
+ }
+
+ if (vars_map && val)
+ if (switch_core_hash_insert(vars_map, val, ENABLE_PARAM_VALUE) != SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Cant add %s to params hash!\n",val);
+ }
+
+ }
}
if (!url) {
@@ -269,6 +296,9 @@
binding->disable100continue = disable100continue;
binding->ignore_cacert_check = ignore_cacert_check;
+
+ binding->vars_map = vars_map;
+ binding->vars_map_pool = vars_map_pool;
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Binding [%s] XML Fetch Function [%s] [%s]\n",
switch_strlen_zero(bname) ? "N/A" : bname, binding->url, binding->bindings ? binding->bindings : "all");
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch.c Thu May 22 15:05:28 2008
@@ -404,6 +404,10 @@
x++;
if (argv[x] && strlen(argv[x])) {
SWITCH_GLOBAL_dirs.conf_dir = (char *) malloc(strlen(argv[x]) + 1);
+ if (!SWITCH_GLOBAL_dirs.conf_dir) {
+ fprintf(stderr, "Allocation error\n");
+ return 255;
+ }
strcpy(SWITCH_GLOBAL_dirs.conf_dir, argv[x]);
alt_dirs++;
} else {
@@ -417,6 +421,10 @@
x++;
if (argv[x] && strlen(argv[x])) {
SWITCH_GLOBAL_dirs.log_dir = (char *) malloc(strlen(argv[x]) + 1);
+ if (!SWITCH_GLOBAL_dirs.log_dir) {
+ fprintf(stderr, "Allocation error\n");
+ return 255;
+ }
strcpy(SWITCH_GLOBAL_dirs.log_dir, argv[x]);
alt_dirs++;
} else {
@@ -430,6 +438,10 @@
x++;
if (argv[x] && strlen(argv[x])) {
SWITCH_GLOBAL_dirs.db_dir = (char *) malloc(strlen(argv[x]) + 1);
+ if (!SWITCH_GLOBAL_dirs.db_dir) {
+ fprintf(stderr, "Allocation error\n");
+ return 255;
+ }
strcpy(SWITCH_GLOBAL_dirs.db_dir, argv[x]);
alt_dirs++;
} else {
@@ -443,6 +455,10 @@
x++;
if (argv[x] && strlen(argv[x])) {
SWITCH_GLOBAL_dirs.script_dir = (char *) malloc(strlen(argv[x]) + 1);
+ if (!SWITCH_GLOBAL_dirs.script_dir) {
+ fprintf(stderr, "Allocation error\n");
+ return 255;
+ }
strcpy(SWITCH_GLOBAL_dirs.script_dir, argv[x]);
} else {
fprintf(stderr, "When using -scripts you must specify a scripts directory\n");
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_channel.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_channel.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_channel.c Thu May 22 15:05:28 2008
@@ -130,7 +130,7 @@
uint8_t x;
const char *str = "UNKNOWN";
- for (x = 0; CAUSE_CHART[x].name; x++) {
+ for (x = 0; x < (sizeof(CAUSE_CHART) / sizeof(struct switch_cause_table)) ; x++) {
if (CAUSE_CHART[x].cause == cause) {
str = CAUSE_CHART[x].name;
}
@@ -147,7 +147,7 @@
if (*str > 47 && *str < 58) {
cause = atoi(str);
} else {
- for (x = 0; CAUSE_CHART[x].name; x++) {
+ for (x = 0; x < (sizeof(CAUSE_CHART) / sizeof(struct switch_cause_table)) && CAUSE_CHART[x].name; x++) {
if (!strcasecmp(CAUSE_CHART[x].name, str)) {
cause = CAUSE_CHART[x].cause;
}
@@ -585,7 +585,7 @@
return SWITCH_STATUS_FALSE;
}
-SWITCH_DECLARE(int) switch_channel_test_flag(switch_channel_t *channel, switch_channel_flag_t flags)
+SWITCH_DECLARE(uint32_t) switch_channel_test_flag(switch_channel_t *channel, switch_channel_flag_t flags)
{
switch_assert(channel != NULL);
return switch_test_flag(channel, flags) ? 1 : 0;
@@ -776,6 +776,8 @@
channel->state_flags = 0;
}
+ switch_clear_flag(channel, CF_TAGGED);
+
if (channel->state >= CS_ROUTING) {
switch_clear_flag(channel, CF_TRANSFER);
switch_channel_presence(channel, "unknown", (char *) state_names[state]);
@@ -1270,10 +1272,9 @@
int index, i = channel->state_handler_index;
const switch_state_handler_table_t *new_handlers[SWITCH_MAX_STATE_HANDLERS] = { 0 };
+ switch_assert(channel != NULL);
switch_mutex_lock(channel->flag_mutex);
-
- switch_assert(channel != NULL);
channel->state_handler_index = 0;
if (state_handler) {
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_config.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_config.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_config.c Thu May 22 15:05:28 2008
@@ -66,7 +66,7 @@
}
cfg->file = f;
- cfg->path = path;
+ switch_set_string(cfg->path, path);
while (switch_config_next_pair(cfg, &var, &val)) {
if (file_path && (cfg->sectno != last) && !strcmp(cfg->section, file_path)) {
@@ -83,7 +83,7 @@
return 0;
} else {
cfg->file = f;
- cfg->path = path;
+ switch_set_string(cfg->path, path);
return 1;
}
}
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_console.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_console.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_console.c Thu May 22 15:05:28 2008
@@ -824,7 +824,7 @@
for (x = 0; x < (sizeof(cmd) - 1); x++) {
int c = getchar();
if (c < 0) {
- int y = read(fileno(stdin), cmd, sizeof(cmd));
+ int y = read(fileno(stdin), cmd, sizeof(cmd) - 1);
cmd[y - 1] = '\0';
break;
}
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core.c Thu May 22 15:05:28 2008
@@ -369,6 +369,16 @@
runtime.memory_pool);
switch_safe_free(dir_path);
+ switch_assert(SWITCH_GLOBAL_dirs.base_dir);
+ switch_assert(SWITCH_GLOBAL_dirs.mod_dir);
+ switch_assert(SWITCH_GLOBAL_dirs.conf_dir);
+ switch_assert(SWITCH_GLOBAL_dirs.log_dir);
+ switch_assert(SWITCH_GLOBAL_dirs.db_dir);
+ switch_assert(SWITCH_GLOBAL_dirs.script_dir);
+ switch_assert(SWITCH_GLOBAL_dirs.htdocs_dir);
+ switch_assert(SWITCH_GLOBAL_dirs.grammar_dir);
+ switch_assert(SWITCH_GLOBAL_dirs.temp_dir);
+
switch_dir_make_recursive(SWITCH_GLOBAL_dirs.base_dir, SWITCH_DEFAULT_DIR_PERMS, runtime.memory_pool);
switch_dir_make_recursive(SWITCH_GLOBAL_dirs.mod_dir, SWITCH_DEFAULT_DIR_PERMS, runtime.memory_pool);
switch_dir_make_recursive(SWITCH_GLOBAL_dirs.conf_dir, SWITCH_DEFAULT_DIR_PERMS, runtime.memory_pool);
@@ -571,12 +581,14 @@
SWITCH_DECLARE(switch_status_t) switch_core_mime_add_type(const char *type, const char *ext)
{
- const char *check = (const char *) switch_core_hash_find(runtime.mime_types, ext);
+ const char *check;
switch_status_t status = SWITCH_STATUS_FALSE;
switch_assert(type);
switch_assert(ext);
+ check = (const char *) switch_core_hash_find(runtime.mime_types, ext);
+
if (!check) {
char *ptype = switch_core_permanent_strdup(type);
char *ext_list = strdup(ext);
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_db.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_db.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_db.c Thu May 22 15:05:28 2008
@@ -96,6 +96,10 @@
if (errmsg) {
*errmsg = err;
+ } else if (err) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "SQL ERR [%s]\n", err);
+ switch_core_db_free(err);
+ err = NULL;
}
return ret;
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_io.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_io.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_io.c Thu May 22 15:05:28 2008
@@ -61,6 +61,8 @@
switch_status_t status = SWITCH_STATUS_FALSE;
switch_io_event_hook_video_read_frame_t *ptr;
+ switch_assert(session != NULL);
+
if (switch_channel_get_state(session->channel) >= CS_HANGUP) {
return SWITCH_STATUS_FALSE;
}
@@ -84,7 +86,6 @@
goto done;
}
- switch_assert(session != NULL);
switch_assert(*frame != NULL);
if (switch_test_flag(*frame, SFF_CNG)) {
@@ -104,7 +105,9 @@
int need_codec, perfect, do_bugs = 0, do_resample = 0, is_cng = 0;
unsigned int flag = 0;
- top:
+ switch_assert(session != NULL);
+
+top:
if (switch_channel_get_state(session->channel) >= CS_HANGUP) {
*frame = NULL;
@@ -115,7 +118,6 @@
status = SWITCH_STATUS_FALSE;
need_codec = perfect = 0;
- switch_assert(session != NULL);
*frame = NULL;
if (switch_channel_test_flag(session->channel, CF_HOLD)) {
@@ -142,7 +144,6 @@
goto done;
}
- switch_assert(session != NULL);
switch_assert(*frame != NULL);
if (switch_test_flag(*frame, SFF_PROXY_PACKET)) {
@@ -192,6 +193,14 @@
if (status == SWITCH_STATUS_SUCCESS && need_codec) {
switch_frame_t *enc_frame, *read_frame = *frame;
+ if (!switch_test_flag(session, SSF_WARN_TRANSCODE)) {
+ switch_core_session_message_t msg = { 0 };
+
+ msg.message_id = SWITCH_MESSAGE_INDICATE_TRANSCODING_NECESSARY;
+ switch_core_session_receive_message(session, &msg);
+ switch_set_flag(session, SSF_WARN_TRANSCODE);
+ }
+
if (read_frame->codec || is_cng) {
session->raw_read_frame.datalen = session->raw_read_frame.buflen;
@@ -558,6 +567,14 @@
}
if (need_codec) {
+ if (!switch_test_flag(session, SSF_WARN_TRANSCODE)) {
+ switch_core_session_message_t msg = { 0 };
+
+ msg.message_id = SWITCH_MESSAGE_INDICATE_TRANSCODING_NECESSARY;
+ switch_core_session_receive_message(session, &msg);
+ switch_set_flag(session, SSF_WARN_TRANSCODE);
+ }
+
if (frame->codec) {
session->raw_write_frame.datalen = session->raw_write_frame.buflen;
status = switch_core_codec_decode(frame->codec,
@@ -945,7 +962,7 @@
}
for (ptr = session->event_hooks.recv_dtmf; ptr; ptr = ptr->next) {
- if ((status = ptr->recv_dtmf(session, &new_dtmf)) != SWITCH_STATUS_SUCCESS) {
+ if ((status = ptr->recv_dtmf(session, &new_dtmf, SWITCH_DTMF_RECV)) != SWITCH_STATUS_SUCCESS) {
return status;
}
}
@@ -976,7 +993,7 @@
for (ptr = session->event_hooks.send_dtmf; ptr; ptr = ptr->next) {
- if ((status = ptr->send_dtmf(session, dtmf)) != SWITCH_STATUS_SUCCESS) {
+ if ((status = ptr->send_dtmf(session, dtmf, SWITCH_DTMF_SEND)) != SWITCH_STATUS_SUCCESS) {
return SWITCH_STATUS_SUCCESS;
}
}
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_session.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_session.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_session.c Thu May 22 15:05:28 2008
@@ -188,12 +188,12 @@
return endpoint_interface->io_routines->resurrect_session(new_session, pool, data);
}
-SWITCH_DECLARE(switch_call_cause_t) switch_core_session_outgoing_channel(switch_core_session_t *session,
- const char *endpoint_name,
- switch_caller_profile_t *caller_profile,
- switch_core_session_t **new_session,
- switch_memory_pool_t **pool,
- switch_originate_flag_t flags)
+ SWITCH_DECLARE(switch_call_cause_t) switch_core_session_outgoing_channel(switch_core_session_t *session, switch_event_t *var_event,
+ const char *endpoint_name,
+ switch_caller_profile_t *caller_profile,
+ switch_core_session_t **new_session,
+ switch_memory_pool_t **pool,
+ switch_originate_flag_t flags)
{
switch_io_event_hook_outgoing_channel_t *ptr;
switch_status_t status = SWITCH_STATUS_FALSE;
@@ -217,6 +217,8 @@
if (session) {
channel = switch_core_session_get_channel(session);
+ switch_assert(channel != NULL);
+
forwardvar = switch_channel_get_variable(channel, SWITCH_MAX_FORWARDS_VARIABLE);
if (!switch_strlen_zero(forwardvar)) {
forwardval = atoi(forwardvar) - 1;
@@ -247,13 +249,13 @@
}
}
- if ((cause = endpoint_interface->io_routines->outgoing_channel(session, outgoing_profile, new_session, pool, flags)) != SWITCH_CAUSE_SUCCESS) {
+ if ((cause = endpoint_interface->io_routines->outgoing_channel(session, var_event, outgoing_profile, new_session, pool, flags)) != SWITCH_CAUSE_SUCCESS) {
return cause;
}
if (session) {
for (ptr = session->event_hooks.outgoing_channel; ptr; ptr = ptr->next) {
- if ((status = ptr->outgoing_channel(session, caller_profile, *new_session, flags)) != SWITCH_STATUS_SUCCESS) {
+ if ((status = ptr->outgoing_channel(session, var_event, caller_profile, *new_session, flags)) != SWITCH_STATUS_SUCCESS) {
break;
}
}
@@ -267,20 +269,20 @@
switch_caller_profile_t *profile = NULL, *peer_profile = NULL, *cloned_profile = NULL;
switch_event_t *event;
switch_channel_t *peer_channel = switch_core_session_get_channel(*new_session);
+
+ switch_assert(peer_channel);
+
+ peer_profile = switch_channel_get_caller_profile(peer_channel);
- if (session && channel) {
- profile = switch_channel_get_caller_profile(channel);
- }
- if (peer_channel) {
- peer_profile = switch_channel_get_caller_profile(peer_channel);
- }
-
- if (channel && peer_channel) {
+ if (channel) {
const char *export_vars, *val;
switch_codec_t *read_codec = switch_core_session_get_read_codec(session);
const char *max_forwards = switch_core_session_sprintf(session, "%d", forwardval);
+
switch_channel_set_variable(peer_channel, SWITCH_MAX_FORWARDS_VARIABLE, max_forwards);
+ profile = switch_channel_get_caller_profile(channel);
+
if (read_codec) {
char tmp[80];
switch_codec2str(read_codec, tmp, sizeof(tmp));
@@ -336,7 +338,7 @@
}
if (peer_profile) {
- if (session && (cloned_profile = switch_caller_profile_clone(session, peer_profile)) != 0) {
+ if ((cloned_profile = switch_caller_profile_clone(session, peer_profile)) != 0) {
switch_channel_set_originatee_caller_profile(channel, cloned_profile);
}
}
@@ -571,7 +573,9 @@
SWITCH_DECLARE(uint32_t) switch_core_session_private_event_count(switch_core_session_t *session)
{
- if (session->private_event_queue) {
+ switch_channel_t *channel = switch_core_session_get_channel(session);
+
+ if (!switch_channel_test_flag(channel, CF_EVENT_LOCK) && session->private_event_queue) {
return switch_queue_size(session->private_event_queue);
}
@@ -634,6 +638,7 @@
}
}
+ switch_clear_flag(session, SSF_WARN_TRANSCODE);
switch_ivr_deactivate_unicast(session);
switch_channel_clear_flag(channel, CF_BREAK);
}
@@ -1095,7 +1100,10 @@
if ((dparg = strchr(dpname, ':'))) {
*dparg++ = '\0';
}
+ } else {
+ continue;
}
+
if (!(dialplan_interface = switch_loadable_module_get_dialplan_interface(dpname))) {
continue;
}
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_sqldb.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_sqldb.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_sqldb.c Thu May 22 15:05:28 2008
@@ -71,9 +71,10 @@
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "SQL Retry [%s]\n", errmsg);
}
switch_core_db_free(errmsg);
+ errmsg = NULL;
if (again) {
- switch_core_db_exec(db, "end transaction", NULL, NULL, &errmsg);
+ switch_core_db_exec(db, "end transaction", NULL, NULL, NULL);
goto again;
}
@@ -93,6 +94,7 @@
if (errmsg) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "SQL ERR [%s]\n", errmsg);
switch_core_db_free(errmsg);
+ errmsg = NULL;
switch_yield(100000);
retries--;
if (retries == 0 && forever) {
@@ -107,7 +109,7 @@
done:
- switch_core_db_exec(db, "end transaction", NULL, NULL, &errmsg);
+ switch_core_db_exec(db, "end transaction", NULL, NULL, NULL);
return status;
}
@@ -234,6 +236,8 @@
{
char *sql = NULL;
+ switch_assert(event);
+
switch (event->event_id) {
case SWITCH_EVENT_ADD_SCHEDULE:
sql = switch_mprintf("insert into tasks values('%q','%q','%q','%q')",
@@ -282,10 +286,14 @@
);
break;
case SWITCH_EVENT_CHANNEL_STATE:
- if (event) {
+ {
char *state = switch_event_get_header_nil(event, "channel-state-number");
- switch_channel_state_t state_i = atoi(state);
+ switch_channel_state_t state_i = CS_DONE;
+ if (!switch_strlen_zero(state)) {
+ state_i = atoi(state);
+ }
+
switch (state_i) {
case CS_HANGUP:
case CS_DONE:
@@ -300,18 +308,15 @@
switch_event_get_header_nil(event, "caller-destination-number"),
switch_event_get_header_nil(event, "caller-dialplan"),
switch_event_get_header_nil(event, "caller-context"),
- switch_event_get_header_nil(event, "unique-id")
- );
+ switch_event_get_header_nil(event, "unique-id"));
break;
default:
sql = switch_mprintf("update channels set state='%s' where uuid='%s'",
- switch_event_get_header_nil(event, "channel-state"), switch_event_get_header_nil(event, "unique-id")
- );
+ switch_event_get_header_nil(event, "channel-state"), switch_event_get_header_nil(event, "unique-id"));
break;
}
-
+ break;
}
- break;
case SWITCH_EVENT_CHANNEL_BRIDGE:
sql = switch_mprintf("insert into calls values ('%s', '%ld', '%s','%q','%q','%q','%q','%s','%q','%q','%q','%q','%s')",
switch_event_get_header_nil(event, "event-date-local"),
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_state_machine.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_state_machine.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_state_machine.c Thu May 22 15:05:28 2008
@@ -84,6 +84,8 @@
if ((dparg = strchr(dpname, ':'))) {
*dparg++ = '\0';
}
+ } else {
+ continue;
}
if (!(dialplan_interface = switch_loadable_module_get_dialplan_interface(dpname))) {
continue;
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_cpp.cpp
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_cpp.cpp (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_cpp.cpp Thu May 22 15:05:28 2008
@@ -77,6 +77,8 @@
{
switch_ivr_action_t ivr_action = SWITCH_IVR_ACTION_NOOP;
+ this_check_void();
+
if (switch_ivr_menu_str2action(action, &ivr_action) == SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "bind %s to %s(%s)\n", bind, action, arg);
switch_ivr_menu_bind_action(menu, ivr_action, arg, bind);
@@ -87,6 +89,7 @@
SWITCH_DECLARE(void) IVRMenu::execute(CoreSession *session, const char *name)
{
+ this_check_void();
switch_ivr_menu_execute(session->session, menu, (char *)name, NULL);
}
@@ -104,6 +107,7 @@
SWITCH_DECLARE(char *) API::execute(const char *cmd, const char *arg)
{
switch_stream_handle_t stream = { 0 };
+ this_check("");
SWITCH_STANDARD_STREAM(stream);
switch_api_execute(cmd, arg, NULL, &stream);
last_data = (char *) stream.data;
@@ -118,6 +122,8 @@
switch_assert(mycmd);
+ this_check("");
+
if ((arg = strchr(mycmd, ' '))) {
*arg++ = '\0';
}
@@ -168,6 +174,8 @@
{
int isxml = 0;
+ this_check("");
+
if (serialized_string) {
free(serialized_string);
}
@@ -201,6 +209,9 @@
SWITCH_DECLARE(bool) Event::fire(void)
{
+
+ this_check(false);
+
if (!mine) {
switch_log_printf(SWITCH_CHANNEL_LOG,SWITCH_LOG_ERROR, "Not My event!\n");
return false;
@@ -218,6 +229,8 @@
SWITCH_DECLARE(bool) Event::setPriority(switch_priority_t priority)
{
+ this_check(false);
+
if (event) {
switch_event_set_priority(event, priority);
return true;
@@ -227,6 +240,8 @@
SWITCH_DECLARE(char *)Event::getHeader(char *header_name)
{
+ this_check("");
+
if (event) {
return switch_event_get_header(event, header_name);
}
@@ -235,6 +250,8 @@
SWITCH_DECLARE(bool) Event::addHeader(const char *header_name, const char *value)
{
+ this_check(false);
+
if (event) {
return switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, header_name, value) == SWITCH_STATUS_SUCCESS ? true : false;
}
@@ -244,6 +261,8 @@
SWITCH_DECLARE(bool) Event::delHeader(const char *header_name)
{
+ this_check(false);
+
if (event) {
return switch_event_del_header(event, header_name) == SWITCH_STATUS_SUCCESS ? true : false;
}
@@ -254,6 +273,8 @@
SWITCH_DECLARE(bool) Event::addBody(const char *value)
{
+ this_check(false);
+
if (event) {
return switch_event_add_body(event, "%s", value) == SWITCH_STATUS_SUCCESS ? true : false;
}
@@ -263,6 +284,9 @@
SWITCH_DECLARE(char *)Event::getBody(void)
{
+
+ this_check((char *)"");
+
if (event) {
return switch_event_get_body(event);
}
@@ -272,6 +296,8 @@
SWITCH_DECLARE(const char *)Event::getType(void)
{
+ this_check("");
+
if (event) {
return switch_event_name(event->event_id);
}
@@ -302,11 +328,14 @@
SWITCH_DECLARE(void) Stream::write(const char *data)
{
+ this_check_void();
stream_p->write_function(stream_p, "%s", data);
}
SWITCH_DECLARE(const char *)Stream::get_data()
{
+ this_check("");
+
return stream_p ? (const char *)stream_p->data : NULL;
}
@@ -392,7 +421,8 @@
{
switch_xml_t cdr;
-
+
+ this_check((char *)"");
sanity_check((char *)"");
switch_safe_free(xml_cdr_text);
@@ -407,6 +437,7 @@
SWITCH_DECLARE(void) CoreSession::setEventData(Event *e)
{
+ this_check_void();
sanity_check_noreturn;
if (channel && e->event) {
@@ -417,7 +448,7 @@
SWITCH_DECLARE(int) CoreSession::answer()
{
switch_status_t status;
-
+ this_check(-1);
sanity_check(-1);
status = switch_channel_answer(channel);
return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
@@ -426,6 +457,7 @@
SWITCH_DECLARE(int) CoreSession::preAnswer()
{
switch_status_t status;
+ this_check(-1);
sanity_check(-1);
status = switch_channel_pre_answer(channel);
return status == SWITCH_STATUS_SUCCESS ? 1 : 0;
@@ -433,8 +465,9 @@
SWITCH_DECLARE(void) CoreSession::hangup(char *cause)
{
+ this_check_void();
+ sanity_check_noreturn;
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CoreSession::hangup\n");
- sanity_check_noreturn;
this->begin_allow_threads();
switch_channel_hangup(channel, switch_channel_str2cause(cause));
this->end_allow_threads();
@@ -442,31 +475,36 @@
SWITCH_DECLARE(void) CoreSession::setPrivate(char *var, void *val)
{
+ this_check_void();
sanity_check_noreturn;
switch_channel_set_private(channel, var, val);
}
SWITCH_DECLARE(void *)CoreSession::getPrivate(char *var)
{
+ this_check(NULL);
sanity_check(NULL);
return switch_channel_get_private(channel, var);
}
SWITCH_DECLARE(void) CoreSession::setVariable(char *var, char *val)
{
+ this_check_void();
sanity_check_noreturn;
switch_channel_set_variable(channel, var, val);
}
SWITCH_DECLARE(const char *)CoreSession::getVariable(char *var)
{
- sanity_check(NULL);
+ this_check("");
+ sanity_check("");
return switch_channel_get_variable(channel, var);
}
SWITCH_DECLARE(void) CoreSession::execute(char *app, char *data)
{
const switch_application_interface_t *application_interface;
+ this_check_void();
sanity_check_noreturn;
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CoreSession::execute. app: %s data:%s\n", app, data);
@@ -479,6 +517,7 @@
SWITCH_DECLARE(void) CoreSession::setDTMFCallback(void *cbfunc, char *funcargs) {
+ this_check_void();
sanity_check_noreturn;
cb_state.funcargs = funcargs;
@@ -501,6 +540,9 @@
SWITCH_DECLARE(void) CoreSession::sendEvent(Event *sendME)
{
+ this_check_void();
+ sanity_check_noreturn;
+
if (sendME->event) {
switch_event_t *new_event;
if (switch_event_dup(&new_event, sendME->event) == SWITCH_STATUS_SUCCESS) {
@@ -513,6 +555,7 @@
{
switch_status_t status;
+ this_check(-1);
sanity_check(-1);
// create and store an empty filehandle in callback args
@@ -539,6 +582,7 @@
SWITCH_DECLARE(void) CoreSession::set_tts_parms(char *tts_name_p, char *voice_name_p)
{
+ this_check_void();
sanity_check_noreturn;
switch_safe_free(tts_name);
switch_safe_free(voice_name);
@@ -549,6 +593,7 @@
SWITCH_DECLARE(int) CoreSession::collectDigits(int timeout) {
+ this_check(-1);
sanity_check(-1);
begin_allow_threads();
switch_ivr_collect_digits_callback(session, ap, timeout);
@@ -561,6 +606,7 @@
int timeout)
{
switch_status_t status;
+ this_check((char *)"");
sanity_check((char *)"");
begin_allow_threads();
char terminator;
@@ -582,6 +628,7 @@
SWITCH_DECLARE(int) CoreSession::transfer(char *extension, char *dialplan, char *context)
{
switch_status_t status;
+ this_check(-1);
sanity_check(-1);
begin_allow_threads();
status = switch_ivr_session_transfer(session, extension, dialplan, context);
@@ -597,6 +644,8 @@
int timeout,
const char *valid_terminators)
{
+ this_check((char *)"");
+ sanity_check((char *)"");
if (min_digits < 1) {
min_digits = 1;
}
@@ -624,6 +673,7 @@
{
switch_status_t status;
sanity_check((char *)"");
+ this_check((char *)"");
begin_allow_threads();
memset(dtmf_buf, 0, sizeof(dtmf_buf));
status = switch_play_and_get_digits( session,
@@ -644,12 +694,41 @@
return dtmf_buf;
}
+SWITCH_DECLARE(void) CoreSession::say(const char *tosay, const char *module_name, const char *say_type, const char *say_method)
+{
+ this_check_void();
+ sanity_check_noreturn;
+ if (!(tosay && module_name && say_type && say_method)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error! invalid args.\n");
+ return;
+ }
+ begin_allow_threads();
+ switch_ivr_say(session, tosay, module_name, say_type, say_method, ap);
+ end_allow_threads();
+}
+
+SWITCH_DECLARE(void) CoreSession::sayPhrase(const char *phrase_name, const char *phrase_data, const char *phrase_lang)
+{
+ this_check_void();
+ sanity_check_noreturn;
+
+ if (!(phrase_name)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error! invalid args.\n");
+ return;
+ }
+
+ begin_allow_threads();
+ switch_ivr_phrase_macro(session, phrase_name, phrase_data, phrase_lang, ap);
+ end_allow_threads();
+}
+
SWITCH_DECLARE(int) CoreSession::streamFile(char *file, int starting_sample_count) {
switch_status_t status;
//switch_file_handle_t fh = { 0 };
const char *prebuf;
+ this_check(-1);
sanity_check(-1);
memset(&local_fh, 0, sizeof(local_fh));
@@ -677,6 +756,7 @@
SWITCH_DECLARE(bool) CoreSession::ready() {
+ this_check(false);
sanity_check(false);
return switch_channel_ready(channel) != 0;
}
@@ -688,6 +768,9 @@
switch_core_session_t *aleg_core_session = NULL;
switch_call_cause_t cause;
+ this_check(0);
+ sanity_check(0);
+
cause = SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER;
if (a_leg_session != NULL) {
@@ -737,6 +820,9 @@
switch_file_handle_t fh = { 0 };
switch_status_t status;
+ this_check(-1);
+ sanity_check(-1);
+
fh.thresh = silence_threshold;
fh.silence_hits = silence_secs;
store_file_handle(&fh);
@@ -752,6 +838,9 @@
switch_event_t *event;
switch_channel_t *channel;
+ this_check(-1);
+ sanity_check(-1);
+
if (!session) {
return SWITCH_STATUS_FALSE;
}
@@ -765,12 +854,17 @@
SWITCH_DECLARE(int) CoreSession::flushDigits()
{
+ this_check(-1);
+ sanity_check(-1);
switch_channel_flush_dtmf(switch_core_session_get_channel(session));
return SWITCH_STATUS_SUCCESS;
}
SWITCH_DECLARE(int) CoreSession::setAutoHangup(bool val)
{
+ this_check(-1);
+ sanity_check(-1);
+
if (!session) {
return SWITCH_STATUS_FALSE;
}
@@ -784,6 +878,9 @@
SWITCH_DECLARE(void) CoreSession::setCallerData(char *var, char *val) {
+ this_check_void();
+ sanity_check_noreturn;
+
if (strcmp(var, "dialplan") == 0) {
caller_profile.dialplan = val;
}
@@ -816,8 +913,9 @@
SWITCH_DECLARE(void) CoreSession::setHangupHook(void *hangup_func) {
+ this_check_void();
sanity_check_noreturn;
-
+
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CoreSession::seHangupHook, hangup_func: %p\n", hangup_func);
on_hangup = hangup_func;
switch_channel_t *channel = switch_core_session_get_channel(session);
@@ -943,6 +1041,9 @@
switch_file_handle_t *fh = NULL;
+ this_check(SWITCH_STATUS_FALSE);
+ sanity_check(SWITCH_STATUS_FALSE);
+
if (switch_strlen_zero(ret)) {
return SWITCH_STATUS_SUCCESS;
}
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_event.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_event.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_event.c Thu May 22 15:05:28 2008
@@ -429,13 +429,15 @@
{
switch_thread_t *thread;
switch_threadattr_t *thd_attr;;
+
+ switch_assert(pool != NULL);
+
switch_threadattr_create(&thd_attr, pool);
switch_threadattr_detach_set(thd_attr, 1);
gethostname(hostname, sizeof(hostname));
switch_find_local_ip(guess_ip_v4, sizeof(guess_ip_v4), AF_INET);
switch_find_local_ip(guess_ip_v6, sizeof(guess_ip_v6), AF_INET6);
- switch_assert(pool != NULL);
THRUNTIME_POOL = RUNTIME_POOL = pool;
switch_queue_create(&EVENT_QUEUE[0], POOL_COUNT_MAX + 10, THRUNTIME_POOL);
@@ -732,6 +734,7 @@
/* go ahead and give ourselves some space to work with, should save a few reallocs */
if (!(encode_buf = malloc(encode_len))) {
+ switch_safe_free(buf);
return SWITCH_STATUS_MEMERR;
}
@@ -787,7 +790,7 @@
}
}
- switch_snprintf(buf + len, dlen - len, "%s: %s\n", hp->name, switch_strlen_zero(encode_buf) ? "_undef_" : encode_buf);
+ switch_snprintf(buf + len, dlen - len, "%s: %s\n", hp->name, *encode_buf == '\0' ? "_undef_" : encode_buf);
len = strlen(buf);
}
@@ -860,11 +863,14 @@
ret = vasprintf(&data, fmt, ap);
#else
data = (char *) malloc(2048);
- switch_assert(data);
+ if (!data) return NULL;
ret = vsnprintf(data, 2048, fmt, ap);
#endif
va_end(ap);
if (ret == -1) {
+#ifndef HAVE_VASPRINTF
+ free(data);
+#endif
return NULL;
}
}
@@ -1275,7 +1281,7 @@
return data;
}
-SWITCH_DECLARE(char *) switch_event_build_param_string(switch_event_t *event, const char *prefix)
+SWITCH_DECLARE(char *) switch_event_build_param_string(switch_event_t *event, const char *prefix, switch_hash_t* vars_map)
{
switch_stream_handle_t stream = { 0 };
switch_size_t encode_len = 1024, new_len = 0;
@@ -1284,6 +1290,7 @@
char *e = NULL;
switch_event_header_t *hi;
uint32_t x = 0;
+ void* data = NULL;
SWITCH_STANDARD_STREAM(stream);
@@ -1318,10 +1325,18 @@
if (event) {
if ((hi = event->headers)) {
+
for (; hi; hi = hi->next) {
char *var = hi->name;
char *val = hi->value;
-
+
+ if (vars_map != NULL)
+ {
+ if ((data = switch_core_hash_find(vars_map,var)) == NULL || strcasecmp(((char*)data),"enabled"))
+ continue;
+
+ }
+
new_len = (strlen((char *) var) * 3) + 1;
if (encode_len < new_len) {
char *tmp;
@@ -1339,6 +1354,7 @@
}
}
}
+
e = (char *) stream.data + (strlen((char *) stream.data) - 1);
if (e && *e == '&') {
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr.c Thu May 22 15:05:28 2008
@@ -279,8 +279,9 @@
if (lead_frames) {
switch_frame_t *read_frame;
int frame_count = atoi(lead_frames);
-
- while(frame_count > 0) {
+ int max_frames = frame_count * 2;
+
+ while(frame_count > 0 && --max_frames > 0) {
status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
if (!SWITCH_READ_ACCEPTABLE(status)) {
goto done;
@@ -321,7 +322,7 @@
stream = switch_channel_get_variable(channel, SWITCH_HOLD_MUSIC_VARIABLE);
}
- if (stream) {
+ if (stream && switch_is_moh(stream)) {
if ((b_session = switch_core_session_locate(b_uuid))) {
switch_channel_t *b_channel = switch_core_session_get_channel(b_session);
switch_ivr_broadcast(b_uuid, stream, SMF_ECHO_ALEG | SMF_LOOP);
@@ -334,10 +335,14 @@
}
}
for (x = 0; x < loops || loops < 0; x++) {
+ switch_time_t b4, aftr;
+
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s Command Execute %s(%s)\n",
switch_channel_get_name(channel), app_name, app_arg);
+ b4 = switch_timestamp_now();
switch_core_session_exec(session, application_interface, app_arg);
- if (!switch_channel_ready(channel) || switch_channel_test_flag(channel, CF_STOP_BROADCAST)) {
+ aftr = switch_timestamp_now();
+ if (!switch_channel_ready(channel) || switch_channel_test_flag(channel, CF_STOP_BROADCAST) || aftr - b4 < 500000) {
break;
}
}
@@ -573,7 +578,7 @@
switch_time_t started = 0;
uint32_t elapsed;
- if (!args->input_callback) {
+ if (!args || !args->input_callback) {
return SWITCH_STATUS_GENERR;
}
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_async.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_async.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_async.c Thu May 22 15:05:28 2008
@@ -928,7 +928,7 @@
return 0;
}
-static switch_status_t generate_on_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf)
+static switch_status_t generate_on_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf, switch_dtmf_direction_t direction)
{
switch_channel_t *channel = switch_core_session_get_channel(session);
switch_media_bug_t *bug = switch_channel_get_private(channel, "dtmf_generate");
@@ -1298,17 +1298,23 @@
typedef struct {
const char *app;
uint32_t flags;
+ switch_bind_flag_t bind_flags;
} dtmf_meta_app_t;
typedef struct {
dtmf_meta_app_t map[10];
time_t last_digit;
- switch_bool_t meta_on;
+ switch_bool_t meta_on;
+ int up;
+} dtmf_meta_settings_t;
+
+typedef struct {
+ dtmf_meta_settings_t sr[3];
} dtmf_meta_data_t;
#define SWITCH_META_VAR_KEY "__dtmf_meta"
-static switch_status_t meta_on_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf)
+static switch_status_t meta_on_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf, switch_dtmf_direction_t direction)
{
switch_channel_t *channel = switch_core_session_get_channel(session);
dtmf_meta_data_t *md = switch_channel_get_private(channel, SWITCH_META_VAR_KEY);
@@ -1320,39 +1326,77 @@
return SWITCH_STATUS_SUCCESS;
}
- if (md->meta_on && now - md->last_digit > 5) {
- md->meta_on = SWITCH_FALSE;
+ if (direction == SWITCH_DTMF_RECV && !md->sr[SWITCH_DTMF_RECV].up) {
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ if (direction == SWITCH_DTMF_SEND && !md->sr[SWITCH_DTMF_SEND].up) {
+ return SWITCH_STATUS_SUCCESS;
+ }
+
+ if (md->sr[direction].meta_on && now - md->sr[direction].last_digit > 5) {
+ md->sr[direction].meta_on = SWITCH_FALSE;
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%s Meta digit timeout parsing %c\n", switch_channel_get_name(channel), dtmf->digit);
return SWITCH_STATUS_SUCCESS;
}
- md->last_digit = now;
+ md->sr[direction].last_digit = now;
if (dtmf->digit == '*') {
- if (md->meta_on) {
- md->meta_on = SWITCH_FALSE;
+ if (md->sr[direction].meta_on) {
+ md->sr[direction].meta_on = SWITCH_FALSE;
return SWITCH_STATUS_SUCCESS;
} else {
- md->meta_on = SWITCH_TRUE;
+ md->sr[direction].meta_on = SWITCH_TRUE;
return SWITCH_STATUS_FALSE;
}
}
- if (md->meta_on) {
+ if (md->sr[direction].meta_on) {
if (dtmf->digit >= '0' && dtmf->digit <= '9') {
+ int ok = 0;
*digit = dtmf->digit;
dval = atoi(digit);
- if (md->map[dval].app) {
+
+ if (direction == SWITCH_DTMF_RECV && (md->sr[direction].map[dval].bind_flags & SBF_DIAL_ALEG)) {
+ ok = 1;
+ } else if (direction == SWITCH_DTMF_SEND && (md->sr[direction].map[dval].bind_flags & SBF_DIAL_BLEG)) {
+ ok = 1;
+ }
+
+ if (ok && md->sr[direction].map[dval].app) {
+ uint32_t flags = md->sr[direction].map[dval].flags;
+
+ if ((md->sr[direction].map[dval].bind_flags & SBF_EXEC_OPPOSITE)) {
+ if (direction == SWITCH_DTMF_SEND) {
+ flags |= SMF_ECHO_ALEG;
+ } else {
+ flags |= SMF_ECHO_BLEG;
+ }
+ } else if ((md->sr[direction].map[dval].bind_flags & SBF_EXEC_SAME)) {
+ if (direction == SWITCH_DTMF_SEND) {
+ flags |= SMF_ECHO_BLEG;
+ } else {
+ flags |= SMF_ECHO_ALEG;
+ }
+ } else if ((md->sr[direction].map[dval].bind_flags & SBF_EXEC_ALEG)) {
+ flags |= SMF_ECHO_ALEG;
+ } else if ((md->sr[direction].map[dval].bind_flags & SBF_EXEC_BLEG)) {
+ flags |= SMF_ECHO_BLEG;
+ } else {
+ flags |= SMF_ECHO_ALEG;
+ }
+
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s Processing meta digit '%c' [%s]\n",
- switch_channel_get_name(channel), dtmf->digit, md->map[dval].app);
- switch_ivr_broadcast(switch_core_session_get_uuid(session), md->map[dval].app, md->map[dval].flags);
+ switch_channel_get_name(channel), dtmf->digit, md->sr[direction].map[dval].app);
+ switch_ivr_broadcast(switch_core_session_get_uuid(session), md->sr[direction].map[dval].app, flags);
} else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "%s Ignoring meta digit '%c' not mapped\n",
switch_channel_get_name(channel), dtmf->digit);
}
}
- md->meta_on = SWITCH_FALSE;
+ md->sr[direction].meta_on = SWITCH_FALSE;
return SWITCH_STATUS_FALSE;
}
@@ -1368,7 +1412,7 @@
}
SWITCH_DECLARE(switch_status_t) switch_ivr_bind_dtmf_meta_session(switch_core_session_t *session, uint32_t key,
- switch_bool_t dial_b, switch_bool_t exec_b, const char *app)
+ switch_bind_flag_t bind_flags, const char *app)
{
switch_channel_t *channel = switch_core_session_get_channel(session);
dtmf_meta_data_t *md = switch_channel_get_private(channel, SWITCH_META_VAR_KEY);
@@ -1377,25 +1421,39 @@
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid key %u\n", key);
return SWITCH_STATUS_FALSE;
}
-
+
if (!md) {
md = switch_core_session_alloc(session, sizeof(*md));
switch_channel_set_private(channel, SWITCH_META_VAR_KEY, md);
- if (dial_b) {
- switch_core_event_hook_add_send_dtmf(session, meta_on_dtmf);
- } else {
- switch_core_event_hook_add_recv_dtmf(session, meta_on_dtmf);
- }
+ switch_core_event_hook_add_send_dtmf(session, meta_on_dtmf);
+ switch_core_event_hook_add_recv_dtmf(session, meta_on_dtmf);
}
if (!switch_strlen_zero(app)) {
- md->map[key].app = switch_core_session_strdup(session, app);
- md->map[key].flags = exec_b ? SMF_ECHO_BLEG : SMF_ECHO_ALEG;
- md->map[key].flags |= SMF_HOLD_BLEG;
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Bound: %d %s\n", key, app);
+ if ((bind_flags & SBF_DIAL_ALEG)) {
+ md->sr[SWITCH_DTMF_RECV].up = 1;
+ md->sr[SWITCH_DTMF_RECV].map[key].app = switch_core_session_strdup(session, app);
+ md->sr[SWITCH_DTMF_RECV].map[key].flags |= SMF_HOLD_BLEG;
+ md->sr[SWITCH_DTMF_RECV].map[key].bind_flags = bind_flags;
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Bound A-Leg: %d %s\n", key, app);
+ }
+ if ((bind_flags & SBF_DIAL_BLEG)) {
+ md->sr[SWITCH_DTMF_SEND].up = 1;
+ md->sr[SWITCH_DTMF_SEND].map[key].app = switch_core_session_strdup(session, app);
+ md->sr[SWITCH_DTMF_SEND].map[key].flags |= SMF_HOLD_BLEG;
+ md->sr[SWITCH_DTMF_SEND].map[key].bind_flags = bind_flags;
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Bound B-Leg: %d %s\n", key, app);
+ }
+
} else {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "UnBound: %d\n", key);
- md->map[key].app = NULL;
+ if ((bind_flags & SBF_DIAL_ALEG)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "UnBound A-Leg: %d\n", key);
+ md->sr[SWITCH_DTMF_SEND].map[key].app = NULL;
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "UnBound: B-Leg %d\n", key);
+ md->sr[SWITCH_DTMF_SEND].map[key].app = NULL;
+ }
}
return SWITCH_STATUS_SUCCESS;
@@ -1848,6 +1906,11 @@
mypath = strdup(path);
+ if (!mypath) {
+ switch_core_session_rwunlock(session);
+ return SWITCH_STATUS_MEMERR;
+ }
+
if ((nomedia = switch_channel_test_flag(channel, CF_PROXY_MODE))) {
switch_ivr_media(uuid, SMF_REBRIDGE);
}
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_bridge.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_bridge.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_bridge.c Thu May 22 15:05:28 2008
@@ -99,7 +99,7 @@
uint32_t loop_count = 0;
const char *app_name = NULL, *app_arg = NULL;
const char *hook_var = NULL;
- int nosuspend = 0;
+ int inner_bridge = 0;
#ifdef SWITCH_VIDEO_IN_THREADS
struct vid_helper vh = { 0 };
uint32_t vid_launch = 0;
@@ -123,16 +123,24 @@
ans_b = switch_channel_test_flag(chan_b, CF_ANSWERED);
}
- switch_channel_set_flag(chan_a, CF_BRIDGED);
-
- nosuspend = switch_channel_test_flag(chan_a, CF_INNER_BRIDGE);
+ inner_bridge = switch_channel_test_flag(chan_a, CF_INNER_BRIDGE);
+
+ switch_channel_set_flag(chan_a, CF_BRIDGED);
+
+
+ switch_channel_wait_for_flag(chan_b, CF_BRIDGED, SWITCH_TRUE, 1000000);
+
for (;;) {
switch_channel_state_t b_state;
switch_status_t status;
switch_event_t *event;
loop_count++;
+ if (!switch_channel_test_flag(chan_b, CF_BRIDGED)) {
+ goto end_of_bridge_loop;
+ }
+
if (!switch_channel_ready(chan_a)) {
goto end_of_bridge_loop;
}
@@ -160,7 +168,7 @@
switch_core_session_kill_channel(session_b, SWITCH_SIG_BREAK);
}
- if (!nosuspend && (switch_channel_test_flag(chan_a, CF_SUSPEND) || switch_channel_test_flag(chan_b, CF_SUSPEND))) {
+ if (!inner_bridge && (switch_channel_test_flag(chan_a, CF_SUSPEND) || switch_channel_test_flag(chan_b, CF_SUSPEND))) {
status = switch_core_session_read_frame(session_a, &read_frame, SWITCH_IO_FLAG_NONE, stream_id);
if (!SWITCH_READ_ACCEPTABLE(status)) {
@@ -290,7 +298,7 @@
}
#endif
- if (!nosuspend) {
+ if (!inner_bridge) {
hook_var = switch_channel_get_variable(chan_a, SWITCH_API_BRIDGE_END_VARIABLE);
}
@@ -319,7 +327,7 @@
msg.from = __FILE__;
switch_core_session_receive_message(session_a, &msg);
- if (!nosuspend && switch_channel_get_state(chan_a) < CS_HANGUP) {
+ if (!inner_bridge && switch_channel_get_state(chan_a) < CS_HANGUP) {
if ((app_name = switch_channel_get_variable(chan_a, SWITCH_EXEC_AFTER_BRIDGE_APP_VARIABLE))) {
switch_caller_extension_t *extension = NULL;
if ((extension = switch_caller_extension_new(session_a, app_name, app_name)) == 0) {
@@ -345,7 +353,9 @@
switch_core_session_reset(session_a, SWITCH_TRUE);
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_channel_clear_flag(chan_a, CF_BRIDGED);
+ if (!inner_bridge) {
+ switch_channel_clear_flag(chan_a, CF_BRIDGED);
+ }
switch_core_session_rwunlock(session_b);
return NULL;
}
@@ -369,8 +379,8 @@
switch_channel_clear_state_handler(channel, &audio_bridge_peer_state_handlers);
state = switch_channel_get_state(channel);
-
- if (!switch_channel_test_flag(channel, CF_TRANSFER) && state != CS_PARK && state != CS_ROUTING) {
+
+ if (!switch_channel_test_flag(channel, CF_TRANSFER) && state != CS_PARK && state != CS_ROUTING && !switch_channel_test_flag(channel, CF_INNER_BRIDGE)) {
switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING);
}
@@ -648,7 +658,8 @@
switch_channel_state_t state;
switch_event_t *event;
int br = 0;
-
+ int inner_bridge = switch_channel_test_flag(caller_channel, CF_INNER_BRIDGE);
+
switch_channel_set_flag(caller_channel, CF_ORIGINATOR);
switch_channel_clear_flag(caller_channel, CF_TRANSFER);
switch_channel_clear_flag(peer_channel, CF_TRANSFER);
@@ -757,8 +768,7 @@
audio_bridge_thread(NULL, (void *) a_leg);
switch_channel_clear_flag(caller_channel, CF_ORIGINATOR);
- //make sure this doesnt break anything
-
+
if (!switch_channel_test_flag(peer_channel, CF_TRANSFER) && switch_channel_get_state(peer_channel) == CS_EXCHANGE_MEDIA) {
switch_channel_set_state(peer_channel, CS_RESET);
}
@@ -785,9 +795,6 @@
done:
- switch_channel_clear_flag(caller_channel, CF_INNER_BRIDGE);
- switch_channel_clear_flag(peer_channel, CF_INNER_BRIDGE);
-
if (br && switch_event_create(&event, SWITCH_EVENT_CHANNEL_UNBRIDGE) == SWITCH_STATUS_SUCCESS) {
switch_channel_event_set_data(caller_channel, event);
switch_event_fire(&event);
@@ -795,7 +802,7 @@
state = switch_channel_get_state(caller_channel);
- if (!switch_channel_test_flag(caller_channel, CF_TRANSFER)) {
+ if (!switch_channel_test_flag(caller_channel, CF_TRANSFER) && !inner_bridge) {
if ((state != CS_EXECUTE && state != CS_PARK && state != CS_ROUTING) ||
(switch_channel_test_flag(peer_channel, CF_ANSWERED) && state < CS_HANGUP &&
switch_true(switch_channel_get_variable(caller_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE)))) {
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_menu.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_menu.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_menu.c Thu May 22 15:05:28 2008
@@ -268,80 +268,77 @@
switch_status_t status = SWITCH_STATUS_FALSE;
switch_input_args_t args = { 0 };
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "sound=[%s]\n", sound);
+ if (!session || !menu || switch_strlen_zero(sound)) {
+ return status;
+ }
- if (session != NULL && menu != NULL && !switch_strlen_zero(sound)) {
- memset(menu->buf, 0, menu->inlen + 1);
- menu->ptr = menu->buf;
+ memset(menu->buf, 0, menu->inlen + 1);
+ menu->ptr = menu->buf;
- if (!need) {
- len = 1;
- ptr = NULL;
- } else {
- len = (uint32_t) menu->inlen + 1;
- ptr = menu->ptr;
- }
- args.buf = ptr;
- args.buflen = len;
+ if (!need) {
+ len = 1;
+ ptr = NULL;
+ } else {
+ len = (uint32_t) menu->inlen + 1;
+ ptr = menu->ptr;
+ }
+ args.buf = ptr;
+ args.buflen = len;
- status = switch_ivr_play_file(session, NULL, sound, &args);
+ status = switch_ivr_play_file(session, NULL, sound, &args);
-
- if (need) {
+ if (!need) {
+ return status;
+ }
- menu->ptr += strlen(menu->buf);
- if (strlen(menu->buf) < need) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "waiting for %u/%u digits t/o %d\n",
- (uint32_t)(menu->inlen - strlen(menu->buf)), (uint32_t)need, menu->inter_timeout);
- status = switch_ivr_collect_digits_count(session, menu->ptr, menu->inlen - strlen(menu->buf),
- need, "#", &terminator, menu->inter_timeout, 0, 0);
- }
+ menu->ptr += strlen(menu->buf);
+ if (strlen(menu->buf) < need) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "waiting for %u/%u digits t/o %d\n",
+ (uint32_t)(menu->inlen - strlen(menu->buf)), (uint32_t)need, menu->inter_timeout);
+ status = switch_ivr_collect_digits_count(session, menu->ptr, menu->inlen - strlen(menu->buf),
+ need, "#", &terminator, menu->inter_timeout, 0, 0);
+ }
-
- if (menu->confirm_macro && status == SWITCH_STATUS_SUCCESS && !switch_strlen_zero(menu->buf)) {
- switch_input_args_t confirm_args = { 0 }, *ap = NULL;
- char buf[10] = "";
- char terminator_key;
- int att = menu->confirm_attempts;
+ if (menu->confirm_macro && status == SWITCH_STATUS_SUCCESS && *menu->buf != '\0') {
+ switch_input_args_t confirm_args = { 0 }, *ap = NULL;
+ char buf[10] = "";
+ char terminator_key;
+ int att = menu->confirm_attempts;
-
- while (att) {
- confirm_args.buf = buf;
- confirm_args.buflen = sizeof(buf);
- memset(buf, 0, confirm_args.buflen);
+ while (att) {
+ confirm_args.buf = buf;
+ confirm_args.buflen = sizeof(buf);
+ memset(buf, 0, confirm_args.buflen);
- if (menu->confirm_key) {
- ap = &confirm_args;
- }
-
- switch_ivr_phrase_macro(session, menu->confirm_macro, menu->buf, NULL, ap);
+ if (menu->confirm_key) {
+ ap = &confirm_args;
+ }
+
+ switch_ivr_phrase_macro(session, menu->confirm_macro, menu->buf, NULL, ap);
- if (menu->confirm_key && *buf == '\0') {
- switch_ivr_collect_digits_count(session, buf, sizeof(buf), 1, "#", &terminator_key, menu->timeout, 0, 0);
- }
+ if (menu->confirm_key && *buf == '\0') {
+ switch_ivr_collect_digits_count(session, buf, sizeof(buf), 1, "#", &terminator_key, menu->timeout, 0, 0);
+ }
- if (menu->confirm_key && *buf != '\0') {
- if (*menu->confirm_key == *buf) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,
- "approving digits '%s' via confirm key %s\n", menu->buf, menu->confirm_key);
- break;
- } else {
- att = 0;
- break;
- }
- }
- att--;
- }
- if (!att) {
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "rejecting digits '%s' via confirm key %s\n", menu->buf, menu->confirm_key);
- *menu->buf = '\0';
+ if (menu->confirm_key && *buf != '\0') {
+ if (*menu->confirm_key == *buf) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG,
+ "approving digits '%s' via confirm key %s\n", menu->buf, menu->confirm_key);
+ break;
+ } else {
+ att = 0;
+ break;
}
}
-
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "digits '%s'\n", menu->buf);
+ att--;
+ }
+ if (!att) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "rejecting digits '%s' via confirm key %s\n", menu->buf, menu->confirm_key);
+ *menu->buf = '\0';
}
}
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "returning [%d]\n", status);
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "digits '%s'\n", menu->buf);
return status;
}
@@ -357,7 +354,7 @@
switch_channel_t *channel;
switch_status_t status = SWITCH_STATUS_SUCCESS;
- if (session == NULL || stack == NULL || switch_strlen_zero(name)) {
+ if (!session || !stack || switch_strlen_zero(name)) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid menu context\n");
return SWITCH_STATUS_FALSE;
}
@@ -395,8 +392,7 @@
memset(menu->buf, 0, menu->inlen + 1);
status = play_and_collect(session, menu, greeting_sound, menu->inlen);
- if (!switch_strlen_zero(menu->buf)) {
-
+ if (*menu->buf != '\0') {
for (ap = menu->actions; ap; ap = ap->next) {
int ok = 0;
@@ -485,7 +481,6 @@
}
}
-
if (switch_test_flag(menu, SWITCH_IVR_MENU_FLAG_STACK)) { // top level
if (switch_test_flag(stack, SWITCH_IVR_MENU_FLAG_FALLTOMAIN)) { // catch the fallback and recover
switch_clear_flag(stack, SWITCH_IVR_MENU_FLAG_FALLTOMAIN);
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_originate.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_originate.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_originate.c Thu May 22 15:05:28 2008
@@ -39,7 +39,7 @@
switch_channel_t *channel = switch_core_session_get_channel(session);
if (!switch_channel_test_flag(channel, CF_PROXY_MODE)) {
- while(switch_channel_get_state(channel) == CS_CONSUME_MEDIA) {
+ while(switch_channel_get_state(channel) == CS_CONSUME_MEDIA && !switch_channel_test_flag(channel, CF_TAGGED)) {
switch_ivr_sleep(session, 10);
}
}
@@ -268,6 +268,10 @@
const char *var = switch_channel_get_variable(caller_channel, "call_timeout");
switch_time_t start = 0;
+ if ((switch_channel_test_flag(peer_channel, CF_ANSWERED) || switch_channel_test_flag(peer_channel, CF_EARLY_MEDIA))) {
+ return SWITCH_STATUS_SUCCESS;
+ }
+
switch_zmalloc(write_frame.data, SWITCH_RECOMMENDED_BUFFER_SIZE);
write_frame.buflen = SWITCH_RECOMMENDED_BUFFER_SIZE;
@@ -281,10 +285,6 @@
timelimit *= 1000000;
start = switch_timestamp_now();
- if ((switch_channel_test_flag(peer_channel, CF_ANSWERED) || switch_channel_test_flag(peer_channel, CF_EARLY_MEDIA))) {
- return SWITCH_STATUS_SUCCESS;
- }
-
if (switch_channel_test_flag(caller_channel, CF_ANSWERED)) {
ringback_data = switch_channel_get_variable(caller_channel, "transfer_ringback");
}
@@ -821,7 +821,7 @@
myflags |= SOF_FORKED_DIAL;
}
}
- if ((reason = switch_core_session_outgoing_channel(session, chan_type, new_profile, &new_session, &pool, myflags)) != SWITCH_CAUSE_SUCCESS) {
+ if ((reason = switch_core_session_outgoing_channel(session, var_event, chan_type, new_profile, &new_session, &pool, myflags)) != SWITCH_CAUSE_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot create outgoing channel of type [%s] cause: [%s]\n",
chan_type, switch_channel_cause2str(reason));
if (pool) {
@@ -1154,16 +1154,17 @@
}
}
}
-
- if (caller_channel && i == 0) {
- holding = switch_channel_get_variable(caller_channel, SWITCH_HOLDING_UUID_VARIABLE);
- holding = switch_core_session_strdup(session, holding);
- switch_channel_set_variable(caller_channel, SWITCH_HOLDING_UUID_VARIABLE, NULL);
- }
- if (holding) {
- switch_ivr_uuid_bridge(holding, switch_core_session_get_uuid(peer_sessions[i]));
- } else {
- switch_channel_hangup(peer_channels[i], reason);
+ if (switch_channel_ready(peer_channels[i])) {
+ if (caller_channel && i == 0) {
+ holding = switch_channel_get_variable(caller_channel, SWITCH_HOLDING_UUID_VARIABLE);
+ holding = switch_core_session_strdup(session, holding);
+ switch_channel_set_variable(caller_channel, SWITCH_HOLDING_UUID_VARIABLE, NULL);
+ }
+ if (holding) {
+ switch_ivr_uuid_bridge(holding, switch_core_session_get_uuid(peer_sessions[i]));
+ } else {
+ switch_channel_hangup(peer_channels[i], reason);
+ }
}
}
}
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_play_say.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_play_say.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_play_say.c Thu May 22 15:05:28 2008
@@ -209,7 +209,8 @@
while (input && !done) {
char *pattern = (char *) switch_xml_attr(input, "pattern");
-
+ const char *do_break = switch_xml_attr_soft(input, "break_on_match");
+
if (pattern) {
switch_regex_t *re = NULL;
int proceed = 0, ovector[30];
@@ -220,7 +221,7 @@
switch_xml_t match = NULL;
status = SWITCH_STATUS_SUCCESS;
-
+
if ((proceed = switch_regex_perform(data, pattern, &re, ovector, sizeof(ovector) / sizeof(ovector[0])))) {
match = switch_xml_child(input, "match");
} else {
@@ -232,7 +233,7 @@
for (action = switch_xml_child(match, "action"); action && status == SWITCH_STATUS_SUCCESS; action = action->next) {
char *adata = (char *) switch_xml_attr_soft(action, "data");
char *func = (char *) switch_xml_attr_soft(action, "function");
-
+
if (strchr(pattern, '(') && strchr(adata, '$')) {
len = (uint32_t) (strlen(data) + strlen(adata) + 10);
if (!(substituted = malloc(len))) {
@@ -269,6 +270,12 @@
status = SWITCH_STATUS_FALSE;
cmd = switch_core_session_strdup(session, odata);
+
+ if (!cmd) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Allocation error calling execute\n");
+ break;
+ }
+
cmd_args = switch_separate_paren_args(cmd);
if (!cmd_args ) {
@@ -313,6 +320,12 @@
switch_regex_safe_free(re);
switch_safe_free(expanded);
switch_safe_free(substituted);
+
+
+ if (match && do_break && switch_true(do_break)) {
+ break;
+ }
+
}
if (status != SWITCH_STATUS_SUCCESS) {
@@ -637,12 +650,12 @@
}
if ((write_frame.datalen = (uint32_t) switch_buffer_read_loop(audio_buffer, write_frame.data,
- read_frame->codec->implementation->bytes_per_frame)) <= 0) {
+ read_codec->implementation->bytes_per_frame)) <= 0) {
break;
}
write_frame.samples = write_frame.datalen / 2;
-
+
if (switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0) != SWITCH_STATUS_SUCCESS) {
break;
}
@@ -663,7 +676,7 @@
SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *session, switch_file_handle_t *fh, const char *file, switch_input_args_t *args)
{
switch_channel_t *channel = switch_core_session_get_channel(session);
- int16_t *abuf;
+ int16_t *abuf = NULL;
switch_dtmf_t dtmf = {0};
uint32_t interval = 0, samples = 0, framelen, sample_start = 0;
uint32_t ilen = 0;
@@ -686,8 +699,6 @@
const char *prebuf;
const char *alt = NULL;
- switch_zmalloc(abuf, FILE_STARTSAMPLES * sizeof(*abuf));
-
switch_channel_pre_answer(channel);
prefix = switch_channel_get_variable(channel, "sound_prefix");
@@ -708,12 +719,11 @@
const char *lang = switch_channel_get_variable(channel, "language");
alt = file + 7;
dup = switch_core_session_strdup(session, alt);
-
- if ((arg = strchr(dup, ':'))) {
- *arg++ = '\0';
- }
if (dup) {
+ if ((arg = strchr(dup, ':'))) {
+ *arg++ = '\0';
+ }
return switch_ivr_phrase_macro(session, dup, arg, lang, args);
} else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid Args\n");
@@ -748,12 +758,10 @@
}
-
if (!prefix) {
prefix = SWITCH_GLOBAL_dirs.base_dir;
}
-
if (!strstr(file, SWITCH_URL_SEPARATOR)) {
if (!switch_is_file_path(file)) {
file = switch_core_session_sprintf(session, "%s%s%s", prefix, SWITCH_PATH_SEPARATOR, file);
@@ -797,6 +805,7 @@
asis = 1;
}
+ switch_zmalloc(abuf, FILE_STARTSAMPLES * sizeof(*abuf));
write_frame.data = abuf;
write_frame.buflen = FILE_STARTSAMPLES;
@@ -988,7 +997,6 @@
if (done || olen <= 0) {
break;
}
-
if (!asis) {
if (fh->speed > 2) {
@@ -1144,7 +1152,7 @@
end:
- free(abuf);
+ switch_safe_free(abuf);
switch_core_session_reset(session, SWITCH_TRUE);
return status;
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_loadable_module.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_loadable_module.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_loadable_module.c Thu May 22 15:05:28 2008
@@ -1349,7 +1349,7 @@
}
}
- if ((api = switch_loadable_module_get_api_interface(cmd)) != 0) {
+ if (cmd && (api = switch_loadable_module_get_api_interface(cmd)) != 0) {
status = api->function(arg, session, stream);
} else {
status = SWITCH_STATUS_FALSE;
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_log.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_log.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_log.c Thu May 22 15:05:28 2008
@@ -311,7 +311,9 @@
switch_safe_free(data);
switch_safe_free(new_fmt);
- fflush(handle);
+ if (handle) {
+ fflush(handle);
+ }
}
SWITCH_DECLARE(switch_status_t) switch_log_init(switch_memory_pool_t *pool)
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_regex.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_regex.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_regex.c Thu May 22 15:05:28 2008
@@ -144,6 +144,10 @@
z = 0;
num = atoi(index);
+ if (num < 0 || num > 256) {
+ num = -1;
+ }
+
if (pcre_copy_substring(field_data, ovector, match_count, num, replace, sizeof(replace)) > 0) {
switch_size_t r;
for (r = 0; r < strlen(replace); r++) {
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_rtp.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_rtp.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_rtp.c Thu May 22 15:05:28 2008
@@ -201,12 +201,12 @@
unsigned int elapsed;
switch_size_t bytes;
switch_status_t status = SWITCH_STATUS_SUCCESS;
-
- WRITE_INC(rtp_session);
switch_assert(rtp_session != NULL);
switch_assert(rtp_session->ice_user != NULL);
+ WRITE_INC(rtp_session);
+
if (rtp_session->stuncount != 0) {
rtp_session->stuncount--;
goto end;
@@ -985,9 +985,9 @@
}
}
-SWITCH_DECLARE(uint8_t) switch_rtp_test_flag(switch_rtp_t *rtp_session, switch_rtp_flag_t flags)
+SWITCH_DECLARE(uint32_t) switch_rtp_test_flag(switch_rtp_t *rtp_session, switch_rtp_flag_t flags)
{
- return (uint8_t) switch_test_flag(rtp_session, flags);
+ return (uint32_t) switch_test_flag(rtp_session, flags);
}
SWITCH_DECLARE(void) switch_rtp_clear_flag(switch_rtp_t *rtp_session, switch_rtp_flag_t flags)
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_utils.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_utils.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_utils.c Thu May 22 15:05:28 2008
@@ -568,12 +568,16 @@
const char *sp = str;
char *p, *s = NULL;
- while(sp && *sp && *sp == ' ') {
+ if (!sp) return NULL;
+
+ while(*sp == ' ') {
sp++;
}
s = strdup(sp);
+ if (!s) return NULL;
+
p = s + (strlen(s) - 1);
while(*p == ' ') {
Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/w32/Library/FreeSwitchCore.2008.vcproj
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/w32/Library/FreeSwitchCore.2008.vcproj (original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/w32/Library/FreeSwitchCore.2008.vcproj Thu May 22 15:05:28 2008
@@ -363,6 +363,14 @@
<File
RelativePath="..\..\src\switch_core_session.c"
>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ DisableSpecificWarnings="6385"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\..\src\switch_core_speech.c"
Modified: freeswitch/branches/lukedashjr/syslibs/libs/libedit/src/makelist
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/libedit/src/makelist (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/libedit/src/makelist Thu May 22 15:05:28 2008
@@ -36,6 +36,7 @@
# makelist.sh: Automatically generate header files...
AWK=awk
+
USAGE="Usage: $0 -h|-e|-fc|-fh|-bc|-bh|-m <filenames>"
if [ "x$1" = "x" ]
@@ -140,7 +141,7 @@
#
-fh)
cat $FILES | $AWK '/el_action_t/ { print $3 }' | \
- sort | tr '[:lower:]' '[:upper:]' | $AWK '
+ sort | LANG=C tr '[:lower:]' '[:upper:]' | $AWK '
BEGIN {
printf("/* Automatically generated file, do not edit */\n");
printf("#ifndef _h_fcns_c\n#define _h_fcns_c\n");
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/.update
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/.update (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/.update Thu May 22 15:05:28 2008
@@ -1 +1 @@
-Mon May 12 14:41:23 EDT 2008
+Wed May 21 00:25:55 CEST 2008
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_header.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_header.h (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/msg/sofia-sip/msg_header.h Thu May 22 15:05:28 2008
@@ -282,7 +282,7 @@
#define MSG_STRUCT_ALIGN(p) ((p) = (void*)MSG_ALIGN(p, sizeof(void *)))
enum {
- msg_n_params = 8, /* allocation size of parameter string list */
+ msg_n_params = 8 /* allocation size of parameter string list */
#define MSG_N_PARAMS msg_n_params
};
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nta/nta.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nta/nta.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nta/nta.c Thu May 22 15:05:28 2008
@@ -2579,6 +2579,10 @@
rport = su_sprintf(msg_home(msg), "rport=%u", ntohs(from->su_port));
msg_header_replace_param(msg_home(msg), v->v_common, rport);
}
+ else {
+ rport = su_sprintf(msg_home(msg), "rport=%u", ntohs(from->su_port));
+ msg_header_replace_param(msg_home(msg), v->v_common, rport);
+ }
return 0;
}
@@ -8008,7 +8012,7 @@
outgoing_queue_init(sa->sa_out.free = rq, 0);
while ((orq = sa->sa_out.re_list)) {
- if ((int32_t)(orq->orq_retry) - now > 0)
+ if ((int32_t)(orq->orq_retry - now) > 0)
break;
if (retransmitted >= timer_max_retransmit)
break;
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/Makefile.am
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/Makefile.am (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/Makefile.am Thu May 22 15:05:28 2008
@@ -13,13 +13,13 @@
noinst_LTLIBRARIES = libnua.la
-check_LTLIBRARIES = libtestnua.la libtestproxy.la libtestnat.la
+check_PROGRAMS =
+TESTS =
-check_PROGRAMS = test_nua
-
-TESTS = test_nua
-
-CLEANFILES = tmp_sippasswd.??????
+if HAVE_CHECK
+check_PROGRAMS += check_nua
+TESTS += check_nua
+endif
# ----------------------------------------------------------------------
# Rules for building the targets
@@ -30,7 +30,7 @@
sofia-sip/nua.h sofia-sip/nua_tag.h
libnua_la_SOURCES = nua.c nua_stack.h nua_common.c nua_stack.c \
- nua_extension.c \
+ nua_extension.c nua_types.h \
nua_dialog.c nua_dialog.h \
outbound.c outbound.h \
nua_params.c nua_params.h \
@@ -43,27 +43,13 @@
COVERAGE_INPUT = $(libnua_la_SOURCES) $(include_sofia_HEADERS)
-test_nua_LDFLAGS = -static
-
-libtestnua_la_SOURCES = test_nua.h test_ops.c \
- test_init.c \
- test_nua_api.c test_nua_params.c \
- test_register.c test_basic_call.c \
- test_offer_answer.c \
- test_call_reject.c test_cancel_bye.c \
- test_call_hold.c test_session_timer.c \
- test_refer.c test_100rel.c \
- test_sip_events.c test_simple.c \
- test_extension.c
-
-
-libtestproxy_la_SOURCES = test_proxy.h test_proxy.c
-
-libtestnat_la_SOURCES = test_nat.h test_nat.c test_nat_tags.c
+check_nua_SOURCES = check_nua.c check_nua.h \
+ check_session.c check_register.c \
+ test_s2.h test_s2.c
-test_nua_SOURCES = test_nua.c
+check_nua_LDADD = $(nua_libs) @CHECK_LIBS@
-test_nua_LDADD = libnua.la libtestnua.la libtestproxy.la libtestnat.la \
+nua_libs = libnua.la \
../iptsec/libiptsec.la \
../ipt/libipt.la \
../nea/libnea.la \
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_dialog.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_dialog.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_dialog.c Thu May 22 15:05:28 2008
@@ -468,6 +468,26 @@
ds->ds_terminating = 0;
}
+void nua_dialog_update_params(nua_dialog_state_t *ds,
+ nua_handle_preferences_t const *changed,
+ nua_handle_preferences_t const *params,
+ nua_handle_preferences_t const *defaults)
+{
+ nua_dialog_usage_t *usage;
+
+ for (usage = ds->ds_usage; usage; usage = usage->du_next) {
+ usage->du_class->usage_update_params(usage, changed, params, defaults);
+ }
+}
+
+void nua_base_usage_update_params(nua_dialog_usage_t const *du,
+ nua_handle_preferences_t const *changed,
+ nua_handle_preferences_t const *params,
+ nua_handle_preferences_t const *defaults)
+{
+ (void)du, (void)changed, (void)params, (void)defaults;
+}
+
/**@internal
* Set refresh value suitably.
*
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_dialog.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_dialog.h (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_dialog.h Thu May 22 15:05:28 2008
@@ -35,27 +35,12 @@
* @date Created: Wed Mar 8 11:38:18 EET 2006 ppessi
*/
-#ifndef NUA_OWNER_T
-#define NUA_OWNER_T struct nua_owner_s
-#endif
-typedef NUA_OWNER_T nua_owner_t;
+#include <nua_types.h>
#ifndef NTA_H
#include <sofia-sip/nta.h>
#endif
-typedef struct nua_dialog_state nua_dialog_state_t;
-typedef struct nua_dialog_usage nua_dialog_usage_t;
-typedef struct nua_server_request nua_server_request_t;
-typedef struct nua_client_request nua_client_request_t;
-typedef struct nua_dialog_peer_info nua_dialog_peer_info_t;
-
-#ifndef NUA_SAVED_SIGNAL_T
-#define NUA_SAVED_SIGNAL_T struct nua_saved_signal *
-#endif
-
-typedef NUA_SAVED_SIGNAL_T nua_saved_signal_t;
-
typedef struct {
sip_method_t sm_method;
char const *sm_method_name;
@@ -386,6 +371,10 @@
nua_client_request_t *cr,
nua_server_request_t *sr);
char const *(*usage_name)(nua_dialog_usage_t const *du);
+ void (*usage_update_params)(nua_dialog_usage_t const *du,
+ nua_handle_preferences_t const *changed,
+ nua_handle_preferences_t const *params,
+ nua_handle_preferences_t const *defaults);
void (*usage_peer_info)(nua_dialog_usage_t *du,
nua_dialog_state_t const *ds,
sip_t const *sip);
@@ -452,6 +441,16 @@
nua_client_request_t *cr,
nua_server_request_t *sr);
+void nua_dialog_update_params(nua_dialog_state_t *ds,
+ nua_handle_preferences_t const *changed,
+ nua_handle_preferences_t const *params,
+ nua_handle_preferences_t const *defaults);
+
+void nua_base_usage_update_params(nua_dialog_usage_t const *du,
+ nua_handle_preferences_t const *changed,
+ nua_handle_preferences_t const *params,
+ nua_handle_preferences_t const *defaults);
+
void nua_dialog_deinit(nua_owner_t *own,
nua_dialog_state_t *ds);
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_notifier.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_notifier.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_notifier.c Thu May 22 15:05:28 2008
@@ -92,6 +92,7 @@
nua_notify_usage_add,
nua_notify_usage_remove,
nua_notify_usage_name,
+ nua_base_usage_update_params,
NULL,
nua_notify_usage_refresh,
nua_notify_usage_shutdown,
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.c Thu May 22 15:05:28 2008
@@ -82,17 +82,6 @@
/* Bitwise or of bitfields, casted to unsigned */
a->nhp_set_.set_unsigned[0] |= b->nhp_set_.set_unsigned[0];
a->nhp_set_.set_unsigned[1] |= b->nhp_set_.set_unsigned[1];
-
- /*
- unsigned *ap, const *bp;
- size_t i;
-
- ap = a->nhp_set_.set_unsigned;
- bp = b->nhp_set_.set_unsigned;
- for (i = 0; i < (sizeof a->nhp_set); i += (sizeof *ap))
- *ap++ |= *bp++;
-
- */
}
static int nhp_set_tags(su_home_t *home,
@@ -110,10 +99,9 @@
tag_value_t value);
static int nhp_save_params(nua_handle_t *nh,
- su_home_t *tmphome,
- nua_global_preferences_t *gsrc,
- nua_handle_preferences_t *src);
-
+ su_home_t *tmphome,
+ nua_global_preferences_t *gsrc,
+ nua_handle_preferences_t *src);
/* ====================================================================== */
/* Magical NUTAG_USER_AGENT() - add NHP_USER_AGENT there if it is not there */
@@ -310,6 +298,7 @@
* NUTAG_ONLY183_100REL() \n
* NUTAG_OUTBOUND() \n
* NUTAG_PATH_ENABLE() \n
+ * NUTAG_PROXY() (aka NTATAG_DEFAULT_PROXY()) \n
* NUTAG_REFER_EXPIRES() \n
* NUTAG_REFER_WITH_ID() \n
* NUTAG_REGISTRAR() \n
@@ -430,6 +419,7 @@
* NUTAG_ONLY183_100REL() \n
* NUTAG_OUTBOUND() \n
* NUTAG_PATH_ENABLE() \n
+ * NUTAG_PROXY() (aka NTATAG_DEFAULT_PROXY()) \n
* NUTAG_REFER_EXPIRES() \n
* NUTAG_REFER_WITH_ID() \n
* NUTAG_REGISTRAR() \n
@@ -482,13 +472,15 @@
int status;
char const *phrase;
+ nua_handle_preferences_t tmp[1];
+ int any_changes = 0;
+
enter;
{
su_home_t tmphome[1] = { SU_HOME_INIT(tmphome) };
nua_handle_preferences_t *nhp = nh->nh_prefs;
nua_handle_preferences_t const *dnhp = dnh->nh_prefs;
- nua_handle_preferences_t tmp[1];
nua_global_preferences_t gtmp[1], *ngp = NULL;
*tmp = *nhp; NHP_UNSET_ALL(tmp);
@@ -521,7 +513,7 @@
status = 900, phrase = "Error storing default handle parameters";
else if (nhp_set_tags(tmphome, tmp, ngp, tags) < 0)
status = 900, phrase = "Error storing parameters";
- else if (nhp_save_params(nh, tmphome, ngp, tmp) < 0)
+ else if ((any_changes = nhp_save_params(nh, tmphome, ngp, tmp)) < 0)
status = 900, phrase = su_strerror(ENOMEM);
else
status = 200, phrase = "OK", nh->nh_used_ptags = 1;
@@ -562,7 +554,8 @@
if (nua_stack_set_smime_params(nua, tags) < 0) {
status = 900, phrase = "Error setting S/MIME parameters";
}
- else if (nua->nua_nta && nta_agent_set_params(nua->nua_nta, TAG_NEXT(tags)) < 0) {
+ else if (nua->nua_nta &&
+ nta_agent_set_params(nua->nua_nta, TAG_NEXT(tags)) < 0) {
status = 900, phrase = "Error setting NTA parameters";
}
else {
@@ -581,6 +574,18 @@
else {
if (e == nua_r_set_params)
UA_EVENT2(e, status, phrase);
+
+ if (any_changes) {
+ nua_handle_preferences_t changed[1];
+
+ *changed = *nh->nh_prefs;
+ memcpy(&changed->nhp_set_, &tmp->nhp_set_, sizeof changed->nhp_set_);
+
+ nua_dialog_update_params(nh->nh_ds,
+ changed,
+ nh->nh_prefs,
+ dnh->nh_prefs);
+ }
return 0;
}
}
@@ -612,11 +617,10 @@
}
/* Set copy of string from url to handle pref structure */
-#define NHP_SET_STR_BY_URL(nhp, name, v) \
+#define NHP_SET_STR_BY_URL(nhp, type, name, v) \
if ((v) != (tag_value_t)-1) { \
url_t const *_value = (url_t const *)(v); \
- char *_new; \
- _new = url_as_string(home, (void *)_value); \
+ type *_new = (type *)url_as_string(home, (void *)_value); \
if (NHP_ISSET(nhp, name)) \
su_free(home, (void *)nhp->nhp_##name); \
NHP_SET(nhp, name, _new); \
@@ -953,7 +957,7 @@
}
/* NUTAG_REGISTRAR(registrar) */
else if (tag == nutag_registrar) {
- NHP_SET_STR_BY_URL(nhp, registrar, value);
+ NHP_SET_STR_BY_URL(nhp, char, registrar, value);
if (NHP_ISSET(nhp, registrar) && !str0cmp(nhp->nhp_registrar, "*"))
NHP_SET_STR(nhp, registrar, 0);
}
@@ -981,6 +985,10 @@
else if (tag == nutag_outbound) {
NHP_SET_STR(nhp, outbound, value);
}
+ /* NUTAG_PROXY() (aka NTATAG_DEFAULT_PROXY()) */
+ else if (tag == ntatag_default_proxy) {
+ NHP_SET_STR_BY_URL(nhp, url_string_t, proxy, value);
+ }
/* NUTAG_DETECT_NETWORK_UPDATES(detect_network_updates) */
else if (ngp && tag == nutag_detect_network_updates) {
int detector = (int)value;
@@ -1070,6 +1078,10 @@
}
/** Save parameters in @a gtmp and @a tmp.
+ *
+ * @retval 1 - parameters were changed
+ * @retval 0 - no changes in parameters
+ * @retval -1 - an error
*/
static
int nhp_save_params(nua_handle_t *nh,
@@ -1132,7 +1144,7 @@
nh->nh_prefs = dst;
- return 0;
+ return memcmp(dst, old, sizeof *dst) != 0;
}
static int nua_handle_tags_filter(tagi_t const *f, tagi_t const *t);
@@ -1141,21 +1153,6 @@
/** Save taglist to a handle */
int nua_handle_save_tags(nua_handle_t *nh, tagi_t *tags)
{
-#if HAVE_OPEN_C
- /* Nice. An old symbian compiler */
- tagi_t tagfilter[2];
- tagi_t paramfilter[2];
-#else
- tagi_t const tagfilter[] = {
- { TAG_FILTER(nua_handle_tags_filter) },
- { TAG_NULL() }
- };
- tagi_t const paramfilter[] = {
- { TAG_FILTER(nua_handle_param_filter) },
- { TAG_NULL() }
- };
-#endif
-
/* Initialization parameters */
url_string_t const *url = NULL;
sip_to_t const *p_to = NULL;
@@ -1171,6 +1168,10 @@
int error;
#if HAVE_OPEN_C
+ /* Nice. An old symbian compiler */
+ tagi_t tagfilter[2];
+ tagi_t paramfilter[2];
+
tagfilter[0].t_tag = tag_filter;
tagfilter[0].t_value = tag_filter_v(nua_handle_tags_filter);
tagfilter[1].t_tag = (tag_type_t)0;
@@ -1180,6 +1181,16 @@
paramfilter[0].t_value = tag_filter_v(nua_handle_param_filter);
paramfilter[1].t_tag = (tag_type_t)0;
paramfilter[1].t_value = (tag_value_t)0;
+
+#else
+ tagi_t const tagfilter[] = {
+ { TAG_FILTER(nua_handle_tags_filter) },
+ { TAG_NULL() }
+ };
+ tagi_t const paramfilter[] = {
+ { TAG_FILTER(nua_handle_param_filter) },
+ { TAG_NULL() }
+ };
#endif
for (t = tags; t; t = tl_next(t)) {
@@ -1525,7 +1536,7 @@
nua_handle_t *dnh = nua->nua_dhandle;
nua_global_preferences_t const *ngp = nua->nua_prefs;
nua_handle_preferences_t const *nhp = nh->nh_prefs;
-
+ nua_handle_preferences_t const nhp_zero[1] = {{ 0 }};
tagi_t *lst;
int has_from;
@@ -1549,18 +1560,19 @@
enter;
- nta_agent_get_params(nua->nua_nta,
- NTATAG_UDP_MTU_REF(udp_mtu),
- NTATAG_MAX_PROCEEDING_REF(max_proceeding),
- NTATAG_SIP_T1_REF(sip_t1),
- NTATAG_SIP_T2_REF(sip_t2),
- NTATAG_SIP_T4_REF(sip_t4),
- NTATAG_SIP_T1X64_REF(sip_t1x64),
- NTATAG_DEBUG_DROP_PROB_REF(debug_drop_prob),
- NTATAG_DEFAULT_PROXY_REF(proxy),
- NTATAG_ALIASES_REF(aliases),
- NTATAG_SIPFLAGS_REF(flags),
- TAG_END());
+ if (nh == dnh)
+ nta_agent_get_params(nua->nua_nta,
+ NTATAG_UDP_MTU_REF(udp_mtu),
+ NTATAG_MAX_PROCEEDING_REF(max_proceeding),
+ NTATAG_SIP_T1_REF(sip_t1),
+ NTATAG_SIP_T2_REF(sip_t2),
+ NTATAG_SIP_T4_REF(sip_t4),
+ NTATAG_SIP_T1X64_REF(sip_t1x64),
+ NTATAG_DEBUG_DROP_PROB_REF(debug_drop_prob),
+ NTATAG_DEFAULT_PROXY_REF(proxy),
+ NTATAG_ALIASES_REF(aliases),
+ NTATAG_SIPFLAGS_REF(flags),
+ TAG_END());
if (nh->nh_ds->ds_local)
has_from = 1, *from = *nh->nh_ds->ds_local, from->a_params = NULL;
@@ -1597,6 +1609,9 @@
? sip_##pref##_make(tmphome, (char *)nhp->nhp_##pref) \
: NULL))
+ if (nh != dnh && nhp == dnh->nh_prefs)
+ nhp = nhp_zero;
+
su_home_auto(tmphome, sizeof(tmphome));
lst = tl_filtered_tlist
@@ -1669,6 +1684,10 @@
TIF(NUTAG_M_FEATURES, m_features),
TIF(NUTAG_OUTBOUND, outbound),
+ /* Handle-specific proxy */
+ TAG_IF(nh != dnh && nhp->nhp_set.nhb_proxy,
+ NUTAG_PROXY(nhp->nhp_proxy)),
+
/* Skip user-agent-level parameters if parameters are for handle only */
TAG_IF(nh != dnh, TAG_NEXT(media_params)),
@@ -1693,12 +1712,13 @@
#endif
NTATAG_UDP_MTU(udp_mtu),
- NTATAG_MAX_PROCEEDING(max_proceeding),
+ NTATAG_MAX_PROCEEDING(max_proceeding),
NTATAG_SIP_T1(sip_t1),
NTATAG_SIP_T2(sip_t2),
NTATAG_SIP_T4(sip_t4),
NTATAG_SIP_T1X64(sip_t1x64),
NTATAG_DEBUG_DROP_PROB(debug_drop_prob),
+ /* Stack-wide proxy */
NTATAG_DEFAULT_PROXY(proxy),
NTATAG_ALIASES(aliases),
NTATAG_SIPFLAGS(flags),
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.h (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_params.h Thu May 22 15:05:28 2008
@@ -35,6 +35,8 @@
* @date Created: Wed Mar 8 11:38:18 EET 2006 ppessi
*/
+#include <nua_types.h>
+
/**@internal @brief NUA preferences.
*
* This structure contains values for various preferences and a separate
@@ -50,7 +52,7 @@
*
* @see NHP_GET(), NH_PGET(), NHP_ISSET(), NH_PISSET()
*/
-typedef struct nua_handle_preferences
+struct nua_handle_preferences
{
unsigned nhp_retry_count; /**< times to retry a request */
unsigned nhp_max_subscriptions;
@@ -133,6 +135,9 @@
/** Initial route set */
sip_route_t *nhp_initial_route;
+ /** Next hop URI (used instead of route). */
+ url_string_t *nhp_proxy;
+
union { struct {
/* A bit for each feature set by application */
/* NOTE:
@@ -191,16 +196,17 @@
unsigned nhb_outbound:1;
unsigned nhb_appl_method:1;
unsigned nhb_initial_route:1;
+ unsigned nhb_proxy:1;
unsigned :0;
} set_bits;
unsigned set_unsigned[2];
} nhp_set_;
-} nua_handle_preferences_t;
+};
#define nhp_set nhp_set_.set_bits
/** Global preferences for nua. */
-typedef struct {
+struct nua_global_preferences {
/** Network detection: NONE, INFORMAL, TRY_FULL */
signed int ngp_detect_network_updates:3;
/** Pass events during shutdown, too */
@@ -215,7 +221,7 @@
} set_bits;
unsigned set_unsigned[2];
} ngp_set_;
-} nua_global_preferences_t;
+};
#define ngp_set ngp_set_.set_bits
@@ -238,7 +244,7 @@
/* Get preference from handle, if set, otherwise from default handle */
#define NH_PGET(nh, pref) \
- NHP_GET((nh)->nh_prefs, (nh)->nh_nua->nua_dhandle->nh_prefs, pref)
+ NHP_GET((nh)->nh_prefs, (nh)->nh_dprefs, pref)
/* Get preference from handle, if exists and set,
otherwise from default handle */
@@ -255,7 +261,7 @@
(NHP_ISSET((nh)->nh_prefs, pref) && \
(nh)->nh_nua->nua_dhandle->nh_prefs != (nh)->nh_prefs)
-/* Check if preference has been set by applicationx */
+/* Check if preference has been set by application */
#define NUA_PISSET(nua, nh, pref) \
(NHP_ISSET((nua)->nua_dhandle->nh_prefs, pref) || \
((nh) && NHP_ISSET((nh)->nh_prefs, pref)))
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_publish.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_publish.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_publish.c Thu May 22 15:05:28 2008
@@ -79,6 +79,7 @@
nua_publish_usage_add,
nua_publish_usage_remove,
nua_publish_usage_name,
+ nua_base_usage_update_params,
NULL,
nua_publish_usage_refresh,
nua_publish_usage_shutdown,
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_register.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_register.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_register.c Thu May 22 15:05:28 2008
@@ -107,6 +107,10 @@
nua_dialog_usage_t *du,
nua_client_request_t *cr,
nua_server_request_t *sr);
+static void nua_register_usage_update_params(nua_dialog_usage_t const *du,
+ nua_handle_preferences_t const *,
+ nua_handle_preferences_t const *,
+ nua_handle_preferences_t const *);
static void nua_register_usage_peer_info(nua_dialog_usage_t *du,
nua_dialog_state_t const *ds,
sip_t const *sip);
@@ -169,6 +173,7 @@
nua_register_usage_add,
nua_register_usage_remove,
nua_register_usage_name,
+ nua_register_usage_update_params,
nua_register_usage_peer_info,
nua_register_usage_refresh,
nua_register_usage_shutdown
@@ -672,6 +677,11 @@
NH_PGET(nh, instance));
if (!nr->nr_ob)
return nua_client_return(cr, 900, "Cannot create outbound", msg);
+
+ nua_register_usage_update_params(du,
+ NULL,
+ nh->nh_prefs,
+ nh->nh_dprefs);
}
if (nr->nr_ob) {
@@ -687,13 +697,6 @@
unreg = 1; /* All contacts have expires=0 */
}
- outbound_set_options(ob,
- NH_PGET(nh, outbound),
- NH_PGET(nh, keepalive),
- NH_PISSET(nh, keepalive_stream)
- ? NH_PGET(nh, keepalive_stream)
- : NH_PGET(nh, keepalive));
-
if (outbound_set_contact(ob, sip->sip_contact, nr->nr_via, unreg) < 0)
return nua_client_return(cr, 900, "Cannot set outbound contact", msg);
}
@@ -712,6 +715,7 @@
sip_contact_t *m, *contacts = sip->sip_contact;
char const *min_expires = NULL;
int unreg;
+ tport_t *tport = NULL;
(void)nh;
@@ -755,6 +759,8 @@
if (previous)
sip_add_dup(msg, sip, (sip_header_t *)previous);
}
+
+ tport = nr->nr_tport;
}
for (m = sip->sip_contact; m; m = m->m_next) {
@@ -789,7 +795,7 @@
TAG_IF(unreg, NTATAG_SIGCOMP_CLOSE(1)),
TAG_IF(!unreg, NTATAG_COMP("sigcomp")),
#endif
- NTATAG_TPORT(nr->nr_tport),
+ NTATAG_TPORT(tport),
TAG_NEXT(tags));
}
@@ -1038,6 +1044,42 @@
nua_dialog_usage_set_refresh_range(du, 0, 0);
}
+static void
+nua_register_usage_update_params(nua_dialog_usage_t const *du,
+ nua_handle_preferences_t const *changed,
+ nua_handle_preferences_t const *nhp,
+ nua_handle_preferences_t const *dnhp)
+{
+ nua_registration_t *nr = nua_dialog_usage_private(du);
+ outbound_t *ob = nr->nr_ob;
+
+ if (!ob)
+ return;
+
+ if (!changed ||
+ NHP_ISSET(changed, outbound) ||
+ NHP_ISSET(changed, keepalive) ||
+ NHP_ISSET(changed, keepalive_stream)) {
+ char const *outbound =
+ NHP_ISSET(nhp, outbound) ? nhp->nhp_outbound
+ : dnhp->nhp_outbound;
+ unsigned keepalive =
+ NHP_ISSET(nhp, keepalive) ? nhp->nhp_keepalive
+ : dnhp->nhp_keepalive;
+ unsigned keepalive_stream =
+ NHP_ISSET(nhp, keepalive_stream) ? nhp->nhp_keepalive_stream
+ : NHP_ISSET(dnhp, keepalive_stream) ? nhp->nhp_keepalive_stream
+ : keepalive;
+
+ outbound_set_options(ob, outbound, keepalive, keepalive_stream);
+ }
+
+ if (!changed || NHP_ISSET(changed, proxy)) {
+ if (NHP_ISSET(nhp, proxy))
+ outbound_set_proxy(ob, nhp->nhp_proxy);
+ }
+}
+
static void nua_register_usage_refresh(nua_handle_t *nh,
nua_dialog_state_t *ds,
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c Thu May 22 15:05:28 2008
@@ -207,6 +207,7 @@
nua_session_usage_add,
nua_session_usage_remove,
nua_session_usage_name,
+ nua_base_usage_update_params,
NULL,
nua_session_usage_refresh,
nua_session_usage_shutdown
@@ -335,9 +336,6 @@
/* ======================================================================== */
/* INVITE and call (session) processing */
-int nua_stack_prack(nua_t *nua, nua_handle_t *nh, nua_event_t e,
- tagi_t const *tags);
-
static int session_timer_is_supported(struct session_timer const *t);
static void session_timer_preferences(struct session_timer *t,
@@ -1206,6 +1204,8 @@
sip_authorization_t *wa;
sip_proxy_authorization_t *pa;
sip_cseq_t *cseq;
+ int proxy_is_set;
+ url_string_t *proxy;
nta_outgoing_t *ack;
int status = 200;
char const *phrase = "OK", *reason = NULL;
@@ -1314,9 +1314,14 @@
}
}
+ proxy_is_set = NH_PISSET(nh, proxy);
+ proxy = NH_PGET(nh, proxy);
+
if ((ack = nta_outgoing_mcreate(nh->nh_nua->nua_nta, NULL, NULL, NULL,
msg,
NTATAG_ACK_BRANCH(invite_branch),
+ TAG_IF(proxy_is_set,
+ NTATAG_DEFAULT_PROXY(proxy)),
SIPTAG_END(),
TAG_NEXT(tags)))) {
/* TR engine keeps this around for T2 so it catches all 2XX retransmissions */
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.c Thu May 22 15:05:28 2008
@@ -2541,8 +2541,9 @@
/**
* Next, values previously set with nua_set_params() or nua_set_hparams()
- * are used: @Allow, @Supported, @Organization, and @UserAgent headers are
- * added to the request if they are not already set.
+ * are used: @Allow, @Supported, @Organization, @UserAgent and
+ * @AllowEvents headers are added to the request if they are not already
+ * set.
*/
if (!sip->sip_allow)
sip_add_dup(msg, sip, (sip_header_t*)NH_PGET(nh, allow));
@@ -2561,6 +2562,20 @@
if (!sip->sip_user_agent && NH_PGET(nh, user_agent))
sip_add_make(msg, sip, sip_user_agent_class, NH_PGET(nh, user_agent));
+ /** Any node implementing one or more event packages SHOULD include an
+ * appropriate @AllowEvents header indicating all supported events in
+ * all methods which initiate dialogs and their responses (such as
+ * INVITE) and OPTIONS responses.
+ */
+ if (!sip->sip_allow_events &&
+ NH_PGET(nh, allow_events) &&
+ (method == sip_method_notify || /* Always in NOTIFY */
+ (!ds->ds_remote_tag && /* And in initial requests */
+ (method == sip_method_subscribe || method == sip_method_refer ||
+ method == sip_method_options ||
+ method == sip_method_invite))))
+ sip_add_dup(msg, sip, (void *)NH_PGET(nh, allow_events));
+
/**
* Next, the stack generates a @Contact header for the request (unless
* the application already gave a @Contact header or it does not want to
@@ -2633,6 +2648,8 @@
tagi_t const *tags)
{
nua_handle_t *nh = cr->cr_owner;
+ int proxy_is_set = NH_PISSET(nh, proxy);
+ url_string_t * proxy = NH_PGET(nh, proxy);
if (nh->nh_auth) {
if (cr->cr_challenged ||
@@ -2648,6 +2665,8 @@
nua_client_orq_response, cr,
NULL,
msg,
+ TAG_IF(proxy_is_set,
+ NTATAG_DEFAULT_PROXY(proxy)),
TAG_NEXT(tags));
return cr->cr_orq ? 0 : -1;
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.h (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.h Thu May 22 15:05:28 2008
@@ -154,6 +154,7 @@
nua_handle_t *nh_identity; /**< Identity */
nua_handle_preferences_t *nh_prefs; /**< Preferences */
+#define nh_dprefs nh_nua->nua_dhandle->nh_prefs
/* Handle type is determined by special event and flags. */
nua_event_t nh_special; /**< Special event */
@@ -431,8 +432,6 @@
/* ---------------------------------------------------------------------- */
-typedef unsigned longlong ull;
-
#define SET_STATUS(_status, _phrase) status = _status, phrase = _phrase
#define SET_STATUS2(_status, _phrase) status = _status, phrase = _phrase
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c Thu May 22 15:05:28 2008
@@ -91,6 +91,7 @@
nua_subscribe_usage_add,
nua_subscribe_usage_remove,
nua_subscribe_usage_name,
+ nua_base_usage_update_params,
NULL,
nua_subscribe_usage_refresh,
nua_subscribe_usage_shutdown
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_tag.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_tag.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_tag.c Thu May 22 15:05:28 2008
@@ -598,6 +598,8 @@
* Retry count determines how many times stack will automatically retry
* after an recoverable error response, like 302, 401 or 407.
*
+ * Note that the first request does not count as retry.
+ *
* @par Used with
* nua_create(), nua_set_params(), nua_handle(), nua_set_hparams(),
* nua_get_params(), nua_get_hparams(),
@@ -613,7 +615,9 @@
* unsigned
*
* @par Values
- * @c 0 Never retry automatically \n
+ * - 0 - Never retry automatically \n
+ * - Otherwise, number of extra transactions initiated after initial
+ * transaction failed with recoverable error response
*
* @NEW_1_12_4.
*
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c Thu May 22 15:05:28 2008
@@ -104,8 +104,8 @@
unsigned ob_registering:1;
/** 2XX response to REGISTER containg ob_rcontact has been received */
unsigned ob_registered:1;
- /**The registration has been validated:
- * We have successfully sent OPTIONS to ourselves.
+ /** The registration has been validated:
+ * We have successfully sent OPTIONS to ourselves.
*/
unsigned ob_validated:1;
/** The registration has been validated once.
@@ -113,8 +113,11 @@
* up if OPTIONS probe fails.
*/
unsigned ob_once_validated:1;
+
+ unsigned ob_proxy_override:1; /**< Override stack default proxy */
unsigned :0;
+ url_string_t *ob_proxy; /**< Outbound-specific proxy */
char const *ob_instance; /**< Our instance ID */
int32_t ob_reg_id; /**< Flow-id */
sip_contact_t *ob_rcontact; /**< Our contact */
@@ -209,10 +212,11 @@
ob->ob_nta = agent;
if (instance)
- ob->ob_instance = su_strcat_all(ob->ob_home, "+sip.instance=\"<", instance, ">\"", NULL);
+ ob->ob_instance =
+ su_sprintf(ob->ob_home, "+sip.instance=\"<%s>\"", instance);
ob->ob_reg_id = 0;
- /* Generate a cookie (used as Call-ID) for us */
+ /* Generate a random cookie (used as Call-ID) for us */
su_md5_init(md5);
su_guid_generate(guid);
if (instance)
@@ -246,16 +250,23 @@
/** Set various outbound and nat-traversal related options. */
int outbound_set_options(outbound_t *ob,
- char const *options,
+ char const *_options,
unsigned interval,
unsigned stream_interval)
{
struct outbound_prefs prefs[1] = {{ 0 }};
- char const *s;
+ char *s, *options = su_strdup(NULL, _options);
+ int invalid;
prefs->interval = interval;
prefs->stream_interval = stream_interval;
+#define MATCH(v) (len == sizeof(#v) - 1 && strncasecmp(#v, s, len) == 0)
+
+ if (options) {
+ for (s = options; s[0]; s++) if (s[0] == '-') s[0] = '_';
+ }
+
prefs->gruuize = 1;
prefs->outbound = 0;
prefs->natify = 1;
@@ -263,17 +274,11 @@
prefs->validate = 1;
prefs->use_rport = 1;
-#define MATCH(v) (len == sizeof(#v) - 1 && strncasecmp(#v, s, len) == 0)
-
for (s = options; s && s[0]; ) {
size_t len = span_token(s);
int value = 1;
- if (len > 3 && strncasecmp(s, "no-", 3) == 0)
- value = 0, s += 3, len -= 3;
- else if (len > 4 && strncasecmp(s, "not-", 4) == 0)
- value = 0, s += 4, len -= 4;
- else if (len > 3 && strncasecmp(s, "no_", 3) == 0)
+ if (len > 3 && strncasecmp(s, "no_", 3) == 0)
value = 0, s += 3, len -= 3;
else if (len > 4 && strncasecmp(s, "not_", 4) == 0)
value = 0, s += 4, len -= 4;
@@ -284,14 +289,12 @@
else if (MATCH(outbound)) prefs->outbound = value;
else if (MATCH(natify)) prefs->natify = value;
else if (MATCH(validate)) prefs->validate = value;
- else if (MATCH(options-keepalive)) prefs->okeepalive = value;
else if (MATCH(options_keepalive)) prefs->okeepalive = value;
- else if (MATCH(use-connect)) prefs->use_connect = value;
else if (MATCH(use_connect)) prefs->use_connect = value;
- else if (MATCH(use-rport) || MATCH(use_rport)) prefs->use_rport = value;
- else if (MATCH(use-socks) || MATCH(use_socks)) prefs->use_socks = value;
- else if (MATCH(use-upnp) || MATCH(use_upnp)) prefs->use_upnp = value;
- else if (MATCH(use-stun) || MATCH(use_stun)) prefs->use_stun = value;
+ else if (MATCH(use_rport)) prefs->use_rport = value;
+ else if (MATCH(use_socks)) prefs->use_socks = value;
+ else if (MATCH(use_upnp)) prefs->use_upnp = value;
+ else if (MATCH(use_stun)) prefs->use_stun = value;
else
SU_DEBUG_1(("outbound(%p): unknown option \"%.*s\"\n",
(void *)ob->ob_owner, (int)len, s));
@@ -303,7 +306,10 @@
s += len;
}
- if (s && s[0]) {
+ invalid = s && s[0];
+ su_free(NULL, options);
+
+ if (invalid) {
SU_DEBUG_1(("outbound(%p): invalid options \"%s\"\n",
(void *)ob->ob_owner, options));
return -1;
@@ -326,6 +332,25 @@
return 0;
}
+/** Override stack default proxy for outbound */
+int outbound_set_proxy(outbound_t *ob,
+ url_string_t *proxy)
+{
+ url_string_t *new_proxy = NULL, *old_proxy = ob->ob_proxy;
+
+ if (proxy)
+ new_proxy = (url_string_t *)url_as_string(ob->ob_home, proxy->us_url);
+
+ if (proxy == NULL || new_proxy != NULL) {
+ ob->ob_proxy_override = 1;
+ ob->ob_proxy = new_proxy;
+ su_free(ob->ob_home, old_proxy);
+ return 0;
+ }
+
+ return -1;
+}
+
/* ---------------------------------------------------------------------- */
/** Obtain contacts for REGISTER */
@@ -784,6 +809,8 @@
ob,
NULL,
req,
+ TAG_IF(ob->ob_proxy_override,
+ NTATAG_DEFAULT_PROXY(ob->ob_proxy)),
TAG_END());
if (!ob->ob_keepalive.orq)
@@ -949,6 +976,8 @@
ob,
NULL,
req,
+ TAG_IF(ob->ob_proxy_override,
+ NTATAG_DEFAULT_PROXY(ob->ob_proxy)),
SIPTAG_SUBJECT_STR("REGISTRATION PROBE"),
/* NONE is used to remove
Max-Forwards: 0 found in ordinary keepalives */
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/outbound.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/outbound.h (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/outbound.h Thu May 22 15:05:28 2008
@@ -70,6 +70,9 @@
unsigned dgram_interval,
unsigned stream_interval);
+int outbound_set_proxy(outbound_t *ob,
+ url_string_t *proxy);
+
int outbound_get_contacts(outbound_t *ob,
sip_contact_t **return_current_contact,
sip_contact_t **return_previous_contact);
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/sresolv/sres.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/sresolv/sres.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/sresolv/sres.c Thu May 22 15:05:28 2008
@@ -2190,6 +2190,8 @@
return c;
}
+uint16_t _sres_default_port = 53;
+
/** Parse config file.
*
* @return Number of search domains, if successful.
@@ -2212,7 +2214,7 @@
c->c_opt.check_names = 1;
c->c_opt.timeout = SRES_RETRY_INTERVAL;
c->c_opt.attempts = SRES_MAX_RETRY_COUNT;
- c->c_port = 53;
+ c->c_port = _sres_default_port;
if (f != NULL) {
for (line = 1; fgets(buf, sizeof(buf), f); line++) {
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/Makefile.am
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/Makefile.am (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/Makefile.am Thu May 22 15:05:28 2008
@@ -1,35 +1,63 @@
#
-# Tests using check
+# Makefile.am for Sofia SIP tests
#
+# Copyright (C) 2007,2008 Nokia Corporation
+# Contact: Pekka Pessi <pekka.pessi at nokia.com>
+# Licensed under LGPL. See file COPYING.
+
+TESTS = test_nua
+check_PROGRAMS = test_nua
EXTRA_DIST = check_sofia.h check_sofia.c suite_for_nua.c
-TESTS =
-tests_PROGRAMS =
-testsdir := ${libdir}/tests/libsofia-sip-ua-tests
+test_nua_SOURCES = test_nua.c
-include $(top_srcdir)/rules/sofia.am
+test_nua_LDADD = $(check_LIBRARIES) \
+ ${sofiabuilddir}/libsofia-sip-ua.la
-INCLUDES = ${INTERNAL_INCLUDES}
+check_LIBRARIES = libtestnua.a libtestproxy.a libtestnat.a
-AM_CFLAGS += @CHECK_CFLAGS@
+libtestnua_a_SOURCES = test_nua.h test_ops.c \
+ test_init.c \
+ test_nua_api.c test_nua_params.c \
+ test_register.c test_basic_call.c \
+ test_offer_answer.c \
+ test_call_reject.c test_cancel_bye.c \
+ test_call_hold.c test_session_timer.c \
+ test_refer.c test_100rel.c \
+ test_simple.c test_sip_events.c \
+ test_extension.c
-if HAVE_CHECK
+libtestproxy_a_SOURCES = test_proxy.h test_proxy.c
+
+libtestnat_a_SOURCES = test_nat.h test_nat.c test_nat_tags.c
+#
+# Install in special test package
+#
+testsdir = ${libdir}/tests/libsofia-sip-ua-tests
+tests_PROGRAMS =
+
+if HAVE_CHECK
TESTS += check_sofia
tests_PROGRAMS += check_sofia
+endif
+
+check_sofia_CFLAGS = @CHECK_CFLAGS@
+
check_sofia_SOURCES = check_sofia.c check_sofia.h \
suite_for_nua.c
-CHECKLIBS = ${sofiabuilddir}/nua/libtestnua.la \
- ${sofiabuilddir}/nua/libtestproxy.la \
- ${sofiabuilddir}/nua/libtestnat.la
-
-$(CHECKLIBS):
- cd ${sofiabuilddir}/nua && make checklib
-
-check_sofia_LDADD = \
- $(CHECKLIBS) ${sofiabuilddir}/libsofia-sip-ua.la \
- @CHECK_LIBS@
-endif
+check_sofia_LDADD = $(check_LIBRARIES) \
+ ${sofiabuilddir}/libsofia-sip-ua.la \
+ @CHECK_LIBS@
+
+CLEANFILES = tmp_sippasswd.??????
+
+# ----------------------------------------------------------------------
+# Sofia specific rules
+
+include $(top_srcdir)/rules/sofia.am
+
+INCLUDES = ${INTERNAL_INCLUDES}
Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/suite_for_nua.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/suite_for_nua.c (original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/suite_for_nua.c Thu May 22 15:05:28 2008
@@ -22,7 +22,7 @@
*
*/
-/**@CFILE check_sofia.c
+/**@CFILE suite_for_nua.c
*
* @brief Check-driven tester for Sofia SIP User Agent library
*
More information about the Freeswitch-branches
mailing list