From lukedashjr at freeswitch.org Mon Aug 4 21:29:59 2008 From: lukedashjr at freeswitch.org (Freeswitch SVN) Date: Mon, 04 Aug 2008 21:29:59 -0400 Subject: [Freeswitch-branches] [commit] r9223 - in freeswitch/branches/lukedashjr/syslibs: freeswitch freeswitch/build freeswitch/conf freeswitch/conf/autoload_configs freeswitch/conf/dialplan freeswitch/conf/dialplan/extensions freeswitch/conf/directory/default freeswitch/conf/lang/de/demo freeswitch/conf/lang/en freeswitch/conf/lang/en/demo freeswitch/conf/lang/fr/vm freeswitch/conf/sip_profiles freeswitch/conf/sip_profiles/external freeswitch/conf/yaml freeswitch/debian freeswitch/debian/default freeswitch/debian/monit freeswitch/docs freeswitch/docs/phrase freeswitch/scripts freeswitch/scripts/contrib/intralanman/PHP/fs_curl freeswitch/scripts/contrib/intralanman/PHP/fs_curl/configuration freeswitch/scripts/contrib/intralanman/perl freeswitch/scripts/contrib/verifier/EventSocket/trunk/EventWatcher freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents freeswitch/scripts/js_modules freeswitch/scripts/scenario freeswitch/scripts/socket/FreeSWITCH freeswitch/scripts/socket/FreeSWITCH/debian freeswitch/scripts/socket/freepy 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_enum freeswitch/src/mod/applications/mod_esf freeswitch/src/mod/applications/mod_expr freeswitch/src/mod/applications/mod_fifo freeswitch/src/mod/applications/mod_fsv freeswitch/src/mod/applications/mod_limit freeswitch/src/mod/applications/mod_rss freeswitch/src/mod/applications/mod_snom freeswitch/src/mod/applications/mod_voicemail freeswitch/src/mod/asr_tts freeswitch/src/mod/asr_tts/mod_cepstral freeswitch/src/mod/asr_tts/mod_flite freeswitch/src/mod/asr_tts/mod_lumenvox freeswitch/src/mod/asr_tts/mod_openmrcp freeswitch/src/mod/asr_tts/mod_pocketsphinx freeswitch/src/mod/codecs/mod_amr freeswitch/src/mod/codecs/mod_g723_1 freeswitch/src/mod/codecs/mod_g729 freeswitch/src/mod/codecs/mod_h26x freeswitch/src/mod/codecs/mod_ilbc freeswitch/src/mod/codecs/mod_speex freeswitch/src/mod/codecs/mod_voipcodecs freeswitch/src/mod/dialplans/mod_dialplan_asterisk freeswitch/src/mod/dialplans/mod_dialplan_directory freeswitch/src/mod/dialplans/mod_dialplan_xml freeswitch/src/mod/directories/mod_ldap freeswitch/src/mod/endpoints/mod_dingaling freeswitch/src/mod/endpoints/mod_iax freeswitch/src/mod/endpoints/mod_portaudio freeswitch/src/mod/endpoints/mod_sofia freeswitch/src/mod/endpoints/mod_woomera freeswitch/src/mod/event_handlers/mod_cdr_csv freeswitch/src/mod/event_handlers/mod_event_multicast freeswitch/src/mod/event_handlers/mod_event_socket freeswitch/src/mod/event_handlers/mod_radius_cdr freeswitch/src/mod/event_handlers/mod_zeroconf freeswitch/src/mod/formats/mod_local_stream freeswitch/src/mod/formats/mod_native_file freeswitch/src/mod/formats/mod_shout freeswitch/src/mod/formats/mod_sndfile freeswitch/src/mod/formats/mod_tone_stream 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_lua/lua freeswitch/src/mod/languages/mod_mono freeswitch/src/mod/languages/mod_mono_managed freeswitch/src/mod/languages/mod_mono_managed/swig freeswitch/src/mod/languages/mod_perl freeswitch/src/mod/languages/mod_python freeswitch/src/mod/languages/mod_spidermonkey freeswitch/src/mod/languages/mod_spidermonkey_core_db freeswitch/src/mod/languages/mod_spidermonkey_curl freeswitch/src/mod/languages/mod_spidermonkey_odbc freeswitch/src/mod/languages/mod_spidermonkey_socket freeswitch/src/mod/languages/mod_spidermonkey_teletone freeswitch/src/mod/languages/mod_yaml freeswitch/src/mod/loggers/mod_console freeswitch/src/mod/loggers/mod_logfile freeswitch/src/mod/loggers/mod_syslog freeswitch/src/mod/say/mod_say_de freeswitch/src/mod/say/mod_say_en freeswitch/src/mod/say/mod_say_es freeswitch/src/mod/say/mod_say_fr freeswitch/src/mod/say/mod_say_it freeswitch/src/mod/say/mod_say_nl freeswitch/src/mod/say/mod_say_zh freeswitch/src/mod/xml_int/mod_xml_cdr freeswitch/src/mod/xml_int/mod_xml_curl freeswitch/src/mod/xml_int/mod_xml_ldap freeswitch/src/mod/xml_int/mod_xml_rpc freeswitch/w32/Library freeswitch/w32/Setup libs libs/apr/memory/unix libs/curl/lib libs/libdingaling/src libs/libedit libs/libsndfile libs/libteletone/src libs/pcre libs/portaudio libs/portaudio/bindings/cpp libs/portaudio/bindings/cpp/build/gnu libs/portaudio/build/msvc libs/portaudio/include libs/portaudio/src libs/portaudio/src/common libs/portaudio/src/hostapi/alsa libs/portaudio/src/hostapi/asihpi libs/portaudio/src/hostapi/asio libs/portaudio/src/hostapi/coreaudio libs/portaudio/src/hostapi/dsound libs/portaudio/src/hostapi/jack libs/portaudio/src/hostapi/oss libs/portaudio/src/hostapi/wasapi libs/portaudio/src/hostapi/wdmks libs/portaudio/src/hostapi/wmme libs/portaudio/src/os/unix libs/portaudio/src/os/win libs/portaudio/test libs/sofia-sip libs/sofia-sip/libsofia-sip-ua/nta libs/sofia-sip/libsofia-sip-ua/nth libs/sofia-sip/libsofia-sip-ua/nua libs/sofia-sip/libsofia-sip-ua/sresolv libs/sofia-sip/libsofia-sip-ua/stun libs/sofia-sip/libsofia-sip-ua/su libs/sofia-sip/libsofia-sip-ua/tport libs/sofia-sip/tests libs/sofia-sip/utils libs/sofia-sip/win32 libs/sofia-sip/win32/tests/test_nua libs/stfu libs/voipcodecs libs/win32 libs/win32/Sound_Files libs/win32/flite libs/win32/libmp3lame libs/win32/libogg libs/win32/libshout libs/win32/pocketsphinx libs/win32/sphinxbase libs/xmlrpc-c libs/xmlrpc-c/include/xmlrpc-c libs/xmlrpc-c/lib/abyss/src libs/xmlrpc-c/lib/util/include libs/yaml Message-ID: Author: lukedashjr Date: Mon Aug 4 21:29:58 2008 New Revision: 9223 Added: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/pocketsphinx.conf.xml - copied unchanged from r9222, /freeswitch/tags/1.0.1/conf/autoload_configs/pocketsphinx.conf.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/python.conf.xml - copied unchanged from r9222, /freeswitch/tags/1.0.1/conf/autoload_configs/python.conf.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/dialplan/extensions/00_pizza_demo.xml - copied unchanged from r9222, /freeswitch/tags/1.0.1/conf/dialplan/extensions/00_pizza_demo.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/dialplan/extensions/99999_enum.xml - copied unchanged from r9222, /freeswitch/tags/1.0.1/conf/dialplan/extensions/99999_enum.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/notify-voicemail.tpl - copied unchanged from r9222, /freeswitch/tags/1.0.1/conf/notify-voicemail.tpl freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/yaml/ - copied from r9222, /freeswitch/tags/1.0.1/conf/yaml/ freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch-lang-es.install - copied unchanged from r9222, /freeswitch/tags/1.0.1/debian/freeswitch-lang-es.install freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch-lang-nl.install - copied unchanged from r9222, /freeswitch/tags/1.0.1/debian/freeswitch-lang-nl.install freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch-sounds-en-us-callie-16000.install - copied unchanged from r9222, /freeswitch/tags/1.0.1/debian/freeswitch-sounds-en-us-callie-16000.install freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch-sounds-en-us-callie-32000.install - copied unchanged from r9222, /freeswitch/tags/1.0.1/debian/freeswitch-sounds-en-us-callie-32000.install freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch-sounds-en-us-callie-8000.install - copied unchanged from r9222, /freeswitch/tags/1.0.1/debian/freeswitch-sounds-en-us-callie-8000.install freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch-sounds-music-8000.install - copied unchanged from r9222, /freeswitch/tags/1.0.1/debian/freeswitch-sounds-music-8000.install freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch.default - copied unchanged from r9222, /freeswitch/tags/1.0.1/debian/freeswitch.default freeswitch/branches/lukedashjr/syslibs/freeswitch/docs/phrase/phrase_zh_HK.xml - copied unchanged from r9222, /freeswitch/tags/1.0.1/docs/phrase/phrase_zh_HK.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/Makefile.gram - copied unchanged from r9222, /freeswitch/tags/1.0.1/scripts/Makefile.gram freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/api.lua - copied unchanged from r9222, /freeswitch/tags/1.0.1/scripts/api.lua freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.Designer.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/scripts/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.Designer.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/scripts/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.resx - copied unchanged from r9222, /freeswitch/tags/1.0.1/scripts/contrib/verifier/EventSocket/trunk/EventWatcher/ChannelWatcher.resx freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelPark.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelPark.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventSessionCrash.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventSessionCrash.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/mklm - copied unchanged from r9222, /freeswitch/tags/1.0.1/scripts/mklm freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/ps_pizza.js - copied unchanged from r9222, /freeswitch/tags/1.0.1/scripts/ps_pizza.js freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/quick_lm.pl - copied unchanged from r9222, /freeswitch/tags/1.0.1/scripts/quick_lm.pl freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/FreeSWITCH/ChangeLog - copied unchanged from r9222, /freeswitch/tags/1.0.1/scripts/socket/FreeSWITCH/ChangeLog freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/FreeSWITCH/Makefile.PL - copied unchanged from r9222, /freeswitch/tags/1.0.1/scripts/socket/FreeSWITCH/Makefile.PL freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/FreeSWITCH/README - copied unchanged from r9222, /freeswitch/tags/1.0.1/scripts/socket/FreeSWITCH/README freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/FreeSWITCH/debian/ - copied from r9222, /freeswitch/tags/1.0.1/scripts/socket/FreeSWITCH/debian/ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_snom/ - copied from r9222, /freeswitch/tags/1.0.1/src/mod/applications/mod_snom/ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_flite/ - copied from r9222, /freeswitch/tags/1.0.1/src/mod/asr_tts/mod_flite/ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_pocketsphinx/ - copied from r9222, /freeswitch/tags/1.0.1/src/mod/asr_tts/mod_pocketsphinx/ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/Makefile - copied unchanged from r8702, /freeswitch/tags/1.0.0/src/mod/endpoints/mod_iax/Makefile freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/mod_shout.vcproj - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/formats/mod_shout/mod_shout.vcproj freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/src/org/freeswitch/swig/DTMF.java - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_java/src/org/freeswitch/swig/DTMF.java freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/src/org/freeswitch/swig/EventConsumer.java - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_java/src/org/freeswitch/swig/EventConsumer.java freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/src/org/freeswitch/swig/SWIGTYPE_p_switch_event_node_t.java - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_java/src/org/freeswitch/swig/SWIGTYPE_p_switch_event_node_t.java freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/src/org/freeswitch/swig/SWIGTYPE_p_switch_event_types_t.java - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_java/src/org/freeswitch/swig/SWIGTYPE_p_switch_event_types_t.java freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/src/org/freeswitch/swig/SWIGTYPE_p_switch_queue_t.java - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_java/src/org/freeswitch/swig/SWIGTYPE_p_switch_queue_t.java freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/src/org/freeswitch/swig/SWIGTYPE_p_uint32_t.java - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_java/src/org/freeswitch/swig/SWIGTYPE_p_uint32_t.java freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_asr_handle_p_p_char_p_unsigned_long__switch_status_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_asr_handle_p_p_char_p_unsigned_long__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char_int_p_q_const__char_p_unsigned_long__switch_status_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char_int_p_q_const__char_p_unsigned_long__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_asr_handle_p_unsigned_long__switch_status_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_asr_handle_p_unsigned_long__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_asr_handle_p_void_unsigned_int_p_unsigned_long__switch_status_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_asr_handle_p_void_unsigned_int_p_unsigned_long__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_codec_unsigned_long_p_q_const__switch_codec_settings__switch_status_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_codec_unsigned_long_p_q_const__switch_codec_settings__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_unsigned_long_int__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_p_switch_core_session_p_p_apr_pool_t_unsigned_long__switch_call_cause_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_p_switch_core_session_p_p_apr_pool_t_unsigned_long__switch_call_cause_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_switch_core_session_unsigned_long__switch_status_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_switch_core_session_unsigned_long__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_unsigned_long_int__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_speech_handle_p_char_p_unsigned_long__switch_status_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_speech_handle_p_char_p_unsigned_long__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_speech_handle_p_q_const__char_int_p_unsigned_long__switch_status_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_speech_handle_p_q_const__char_int_p_unsigned_long__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_speech_handle_p_unsigned_long__switch_status_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_speech_handle_p_unsigned_long__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_speech_handle_p_void_p_switch_size_t_p_unsigned_long_p_unsigned_long__switch_status_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_speech_handle_p_void_p_switch_size_t_p_unsigned_long_p_unsigned_long__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_application_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_application_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_asr_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_asr_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_bind_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_bind_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_caller_profile_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_caller_profile_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_channel_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_channel_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_codec_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_codec_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_core_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_core_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_core_session_message_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_core_session_message_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_directory_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_directory_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_eavesdrop_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_eavesdrop_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_file_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_file_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_frame_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_frame_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_io_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_io_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_ivr_option_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_ivr_option_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_media_bug_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_media_bug_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_media_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_media_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_originate_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_originate_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_port_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_port_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_rtp_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_rtp_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_scheduler_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_scheduler_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_speech_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_speech_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_timer_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_timer_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_unicast_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_unicast_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_vad_flag_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_vad_flag_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_xml_section_enum_t.cs - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_mono_managed/swig/switch_xml_section_enum_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/hack.diff - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_python/hack.diff freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/mod_python_extra.c - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_python/mod_python_extra.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/mod_python_extra.h - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_python/mod_python_extra.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/python_example.py - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_python/python_example.py freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_yaml/ - copied from r9222, /freeswitch/tags/1.0.1/src/mod/languages/mod_yaml/ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/xml_int/mod_xml_ldap/lutil_ldap.h - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/mod/xml_int/mod_xml_ldap/lutil_ldap.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_xml.c - copied unchanged from r9222, /freeswitch/tags/1.0.1/src/switch_xml.c freeswitch/branches/lukedashjr/syslibs/freeswitch/w32/Setup/freeswitch.aip - copied unchanged from r9222, /freeswitch/tags/1.0.1/w32/Setup/freeswitch.aip freeswitch/branches/lukedashjr/syslibs/libs/portaudio/aclocal.m4 - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/portaudio/aclocal.m4 freeswitch/branches/lukedashjr/syslibs/libs/portaudio/bindings/cpp/aclocal.m4 - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/portaudio/bindings/cpp/aclocal.m4 freeswitch/branches/lukedashjr/syslibs/libs/portaudio/bindings/cpp/build/gnu/aclocal.m4 - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/portaudio/bindings/cpp/build/gnu/aclocal.m4 freeswitch/branches/lukedashjr/syslibs/libs/portaudio/include/pa_jack.h - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/portaudio/include/pa_jack.h freeswitch/branches/lukedashjr/syslibs/libs/portaudio/include/pa_win_ds.h - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/portaudio/include/pa_win_ds.h freeswitch/branches/lukedashjr/syslibs/libs/portaudio/include/pa_win_waveformat.h - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/portaudio/include/pa_win_waveformat.h freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/os/win/pa_win_waveformat.c - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/portaudio/src/os/win/pa_win_waveformat.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/os/win/pa_win_wdmks_utils.c - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/portaudio/src/os/win/pa_win_wdmks_utils.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/os/win/pa_win_wdmks_utils.h - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/portaudio/src/os/win/pa_win_wdmks_utils.h freeswitch/branches/lukedashjr/syslibs/libs/portaudio/test/patest_dsound_surround.c - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/portaudio/test/patest_dsound_surround.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/test/patest_sine_channelmaps.c - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/portaudio/test/patest_sine_channelmaps.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/test/patest_wmme_surround.c - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/portaudio/test/patest_wmme_surround.c freeswitch/branches/lukedashjr/syslibs/libs/win32/Dowload 32khz Sounds.2008.vcproj - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/win32/Dowload 32khz Sounds.2008.vcproj freeswitch/branches/lukedashjr/syslibs/libs/win32/Download 16khz Sounds.2008.vcproj - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/win32/Download 16khz Sounds.2008.vcproj freeswitch/branches/lukedashjr/syslibs/libs/win32/Download 8khz Sounds.2008.vcproj - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/win32/Download 8khz Sounds.2008.vcproj freeswitch/branches/lukedashjr/syslibs/libs/win32/Download FLITE.2008.vcproj - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/win32/Download FLITE.2008.vcproj freeswitch/branches/lukedashjr/syslibs/libs/win32/Download LAME.2008.vcproj - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/win32/Download LAME.2008.vcproj freeswitch/branches/lukedashjr/syslibs/libs/win32/Download LIBSHOUT.2008.vcproj - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/win32/Download LIBSHOUT.2008.vcproj freeswitch/branches/lukedashjr/syslibs/libs/win32/Download OGG.2008.vcproj - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/win32/Download OGG.2008.vcproj freeswitch/branches/lukedashjr/syslibs/libs/win32/Download pocketsphinx.2008.vcproj - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/win32/Download pocketsphinx.2008.vcproj freeswitch/branches/lukedashjr/syslibs/libs/win32/Download sphinxbase.2008.vcproj - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/win32/Download sphinxbase.2008.vcproj freeswitch/branches/lukedashjr/syslibs/libs/win32/Download sphinxmodel.2008.vcproj - copied unchanged from r9222, /freeswitch/tags/1.0.1/libs/win32/Download sphinxmodel.2008.vcproj freeswitch/branches/lukedashjr/syslibs/libs/win32/Sound_Files/ - copied from r9222, /freeswitch/tags/1.0.1/libs/win32/Sound_Files/ freeswitch/branches/lukedashjr/syslibs/libs/win32/flite/ - copied from r9222, /freeswitch/tags/1.0.1/libs/win32/flite/ freeswitch/branches/lukedashjr/syslibs/libs/win32/libmp3lame/ - copied from r9222, /freeswitch/tags/1.0.1/libs/win32/libmp3lame/ freeswitch/branches/lukedashjr/syslibs/libs/win32/libogg/ - copied from r9222, /freeswitch/tags/1.0.1/libs/win32/libogg/ freeswitch/branches/lukedashjr/syslibs/libs/win32/libshout/ - copied from r9222, /freeswitch/tags/1.0.1/libs/win32/libshout/ freeswitch/branches/lukedashjr/syslibs/libs/win32/pocketsphinx/ - copied from r9222, /freeswitch/tags/1.0.1/libs/win32/pocketsphinx/ freeswitch/branches/lukedashjr/syslibs/libs/win32/sphinxbase/ - copied from r9222, /freeswitch/tags/1.0.1/libs/win32/sphinxbase/ freeswitch/branches/lukedashjr/syslibs/libs/yaml/ - copied from r9222, /freeswitch/tags/1.0.1/libs/yaml/ Removed: freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/default/ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_asr_handle_p_enum_switch_asr_flag_t__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_asr_handle_p_p_char_p_enum_switch_asr_flag_t__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_asr_handle_p_q_const__char_int_p_q_const__char_p_enum_switch_asr_flag_t__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_asr_handle_p_void_unsigned_int_p_enum_switch_asr_flag_t__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_codec_enum_switch_codec_flag_t_p_q_const__switch_codec_settings__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_core_session_p_p_switch_frame_enum_switch_io_flag_t_int__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_p_switch_core_session_p_p_apr_pool_t_enum_switch_originate_flag_t__switch_call_cause_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_core_session_p_switch_event_p_switch_caller_profile_p_switch_core_session_enum_switch_originate_flag_t__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_core_session_p_switch_frame_enum_switch_io_flag_t_int__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_speech_handle_p_char_p_enum_switch_speech_flag_t__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_speech_handle_p_enum_switch_speech_flag_t__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_speech_handle_p_q_const__char_int_p_enum_switch_speech_flag_t__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_f_p_switch_speech_handle_p_void_p_switch_size_t_p_unsigned_long_p_enum_switch_speech_flag_t__switch_status_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_switch_asr_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_switch_frame_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/SWIGTYPE_p_switch_speech_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_application_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_asr_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_bind_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_caller_profile_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_channel_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_codec_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_core_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_core_session_message_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_directory_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_eavesdrop_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_file_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_frame_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_io_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_ivr_option_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_media_bug_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_media_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_originate_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_port_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_rtp_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_scheduler_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_speech_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_timer_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_unicast_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_vad_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_xml_section_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/python.py freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/switch_swig_wrap.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/switch_swig_wrap.c.bkp freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_xml.cpp Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/ (props changed) freeswitch/branches/lukedashjr/syslibs/freeswitch/Freeswitch.2008.sln freeswitch/branches/lukedashjr/syslibs/freeswitch/Makefile.am freeswitch/branches/lukedashjr/syslibs/freeswitch/build/modmake.rules.in freeswitch/branches/lukedashjr/syslibs/freeswitch/build/modules.conf.in freeswitch/branches/lukedashjr/syslibs/freeswitch/build/swigall.sh freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/acl.conf.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/cdr_csv.conf.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/conference.conf.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/console.conf.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/enum.conf.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/ivr.conf.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/lua.conf.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/modules.conf.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/openmrcp.conf.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/perl.conf.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/switch.conf.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/syslog.conf.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/voicemail.conf.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/xml_cdr.conf.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/dialplan/default.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/directory/default/brian.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/de/demo/demo.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/en/demo/demo-ivr.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/en/demo/demo.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/en/en.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/fr/vm/sounds.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/external.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/external/example.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/internal.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/nat.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/vars.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/configure.in freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/changelog freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/control freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/files freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch.conffiles freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch.init freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch.install freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/monit/freeswitch.monitrc freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/rules freeswitch/branches/lukedashjr/syslibs/freeswitch/docs/ChangeLog freeswitch/branches/lukedashjr/syslibs/freeswitch/docs/phrase/phrase_en.xml freeswitch/branches/lukedashjr/syslibs/freeswitch/freeswitch.spec freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/PHP/fs_curl/configuration/console.conf.php freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/PHP/fs_curl/dialplan_importer.php freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/PHP/fs_curl/fs_curl.php freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/PHP/fs_curl/fs_dialplan.php freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/PHP/fs_curl/global_defines.php freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/perl/fspb freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/EventWatcher/EventWatcher.csproj freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/EventWatcher/Program.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/Program.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/ChannelEvent.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelAnswer.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelApplication.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelBridge.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelCreate.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelDestroy.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelExecute.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelExecuteComplete.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelHangup.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelOriginate.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelOutgoing.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelProgress.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelState.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelUnbridge.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelUnpark.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventCodec.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventDtmf.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventDtmfStatus.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelInfo.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Originate.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventManager.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventParser.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventSocket.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventBase.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/FreeSwitch.EventSocket.csproj freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/PartyInfo.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/PlainEventMsg.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresence.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceIn.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceOut.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceProbe.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventRoster.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaExpire.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaRegister.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/SipEvent.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/StringParser.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/js_modules/SpeechTools.jm freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/scenario/phones.cfg freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/FreeSWITCH/Client.pm freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/README freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/__init__.py freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/apirequest.sm freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/apirequest_sm.py freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/bgapirequest.sm freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/bgapirequest_sm.py freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/globals.py freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/loginrequest.sm freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/loginrequest_sm.py freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/request.py freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/ (props changed) freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/private/switch_core_pvt.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_apr.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_bitpack.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_buffer.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_caller.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_console.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_core.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_core_db.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_frame.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_ivr.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_loadable_module.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_log.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_module_interfaces.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_odbc.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_platform.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_regex.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_resample.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_rtp.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_scheduler.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_stun.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/include/switch_xml.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_enum/mod_enum.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_esf/mod_esf.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_expr/mod_expr.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_fifo/mod_fifo.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_fsv/mod_fsv.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_limit/mod_limit.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_rss/mod_rss.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_voicemail/mod_voicemail.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/ (props changed) freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_cepstral/Makefile freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_cepstral/mod_cepstral.2008.vcproj freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_cepstral/mod_cepstral.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_cepstral/mod_cepstral.vcproj freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_lumenvox/mod_lumenvox.cpp freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_openmrcp/mod_openmrcp.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_amr/mod_amr.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_g723_1/mod_g723_1.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_g729/mod_g729.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_h26x/mod_h26x.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_ilbc/mod_ilbc.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_speex/mod_speex.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_voipcodecs/mod_voipcodecs.c 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_directory/mod_dialplan_directory.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/directories/mod_ldap/mod_ldap.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_dingaling/mod_dingaling.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.2008.vcproj freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_portaudio/mod_PortAudio.vcproj freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_portaudio/mod_portaudio.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_portaudio/pablio.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_woomera/mod_woomera.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_cdr_csv/mod_cdr_csv.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_event_socket/mod_event_socket.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_zeroconf/mod_zeroconf.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_native_file/mod_native_file.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/decode_i386.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/interface.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/layer3.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/mod_shout.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/mpg123.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/mpglib.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_sndfile/mod_sndfile.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_tone_stream/mod_tone_stream.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/ (props changed) freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/Makefile freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/freeswitch_lua.cpp freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/freeswitch_lua.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/hack.diff freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/lua/ (props changed) freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/mod_lua.cpp freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/mod_lua_wrap.cpp freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/freeswitch.i freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/freeswitch_mono.cpp freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/freeswitch_mono.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/freeswitch_wrap.cxx freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/mod_mono.cpp freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/mod_mono.vcproj freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/AppFunction.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/Demo.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/Loader.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/MonoSession.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/mod_mono_managed.csproj freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/CoreSession.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/freeswitch.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/freeswitchPINVOKE.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/freeswitchPINVOKE_fixed.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/session_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_asr_interface.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_caller_profile.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_codec_implementation.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_core_session_message.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_frame.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_io_event_hook_outgoing_channel.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_io_event_hook_read_frame.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_io_event_hook_video_read_frame.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_io_event_hook_video_write_frame.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_io_event_hook_write_frame.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_io_routines.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_speech_interface.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/swig/switch_xml_flag_t.cs freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/ (props changed) freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/Makefile freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/freeswitch.pm freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/freeswitch_perl.cpp freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/freeswitch_perl.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/hack.diff freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/mod_perl.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/mod_perl_wrap.cpp freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/ (props changed) 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/freeswitch_python.cpp freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/freeswitch_python.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/mod_python.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/mod_python.i freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/mod_python_wrap.cpp freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_spidermonkey/mod_spidermonkey.h freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_spidermonkey_core_db/mod_spidermonkey_core_db.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_spidermonkey_curl/mod_spidermonkey_curl.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_spidermonkey_odbc/mod_spidermonkey_odbc.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_spidermonkey_socket/mod_spidermonkey_socket.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_spidermonkey_teletone/mod_spidermonkey_teletone.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/loggers/mod_console/mod_console.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/loggers/mod_logfile/mod_logfile.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/loggers/mod_syslog/mod_syslog.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/say/mod_say_de/mod_say_de.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/say/mod_say_en/mod_say_en.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/say/mod_say_es/mod_say_es.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/say/mod_say_fr/mod_say_fr.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/say/mod_say_it/mod_say_it.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/say/mod_say_nl/mod_say_nl.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/say/mod_say_zh/mod_say_zh.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/xml_int/mod_xml_cdr/mod_xml_cdr.c 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_ldap/Makefile freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/xml_int/mod_xml_ldap/mod_xml_ldap.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/xml_int/mod_xml_rpc/mod_xml_rpc.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_apr.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_buffer.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_caller.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_asr.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_codec.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_db.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_directory.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_event_hook.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_file.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_hash.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_io.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_media_bug.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_memory.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_port_allocator.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_rwlock.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_session.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_speech.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_core_timer.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_odbc.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_pcm.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_regex.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_resample.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_rtp.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_scheduler.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_stun.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_time.c freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_utils.c freeswitch/branches/lukedashjr/syslibs/freeswitch/w32/Library/ (props changed) freeswitch/branches/lukedashjr/syslibs/freeswitch/w32/Library/FreeSwitchCore.2008.vcproj freeswitch/branches/lukedashjr/syslibs/freeswitch/w32/Library/FreeSwitchCore.vcproj freeswitch/branches/lukedashjr/syslibs/libs/ (props changed) freeswitch/branches/lukedashjr/syslibs/libs/apr/memory/unix/apr_pools.c freeswitch/branches/lukedashjr/syslibs/libs/curl/lib/ (props changed) freeswitch/branches/lukedashjr/syslibs/libs/libdingaling/src/ldl_compat.h freeswitch/branches/lukedashjr/syslibs/libs/libdingaling/src/libdingaling.c freeswitch/branches/lukedashjr/syslibs/libs/libdingaling/src/libdingaling.h freeswitch/branches/lukedashjr/syslibs/libs/libedit/ (props changed) freeswitch/branches/lukedashjr/syslibs/libs/libsndfile/configure.ac freeswitch/branches/lukedashjr/syslibs/libs/libteletone/src/libteletone.h freeswitch/branches/lukedashjr/syslibs/libs/libteletone/src/libteletone_detect.c freeswitch/branches/lukedashjr/syslibs/libs/libteletone/src/libteletone_detect.h freeswitch/branches/lukedashjr/syslibs/libs/libteletone/src/libteletone_generate.c freeswitch/branches/lukedashjr/syslibs/libs/libteletone/src/libteletone_generate.h freeswitch/branches/lukedashjr/syslibs/libs/pcre/Makefile.in freeswitch/branches/lukedashjr/syslibs/libs/portaudio/Makefile.in freeswitch/branches/lukedashjr/syslibs/libs/portaudio/SConstruct freeswitch/branches/lukedashjr/syslibs/libs/portaudio/bindings/cpp/configure freeswitch/branches/lukedashjr/syslibs/libs/portaudio/build/msvc/portaudio.2008.vcproj freeswitch/branches/lukedashjr/syslibs/libs/portaudio/build/msvc/portaudio.def freeswitch/branches/lukedashjr/syslibs/libs/portaudio/build/msvc/portaudio.dsp freeswitch/branches/lukedashjr/syslibs/libs/portaudio/build/msvc/portaudio.sln freeswitch/branches/lukedashjr/syslibs/libs/portaudio/build/msvc/portaudio.vcproj freeswitch/branches/lukedashjr/syslibs/libs/portaudio/build/msvc/readme.txt freeswitch/branches/lukedashjr/syslibs/libs/portaudio/config.guess freeswitch/branches/lukedashjr/syslibs/libs/portaudio/config.sub freeswitch/branches/lukedashjr/syslibs/libs/portaudio/configure freeswitch/branches/lukedashjr/syslibs/libs/portaudio/configure.in freeswitch/branches/lukedashjr/syslibs/libs/portaudio/include/pa_linux_alsa.h freeswitch/branches/lukedashjr/syslibs/libs/portaudio/include/pa_mac_core.h freeswitch/branches/lukedashjr/syslibs/libs/portaudio/include/pa_win_wmme.h freeswitch/branches/lukedashjr/syslibs/libs/portaudio/include/portaudio.h freeswitch/branches/lukedashjr/syslibs/libs/portaudio/ltmain.sh freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/SConscript freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/common/pa_debugprint.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/common/pa_debugprint.h freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/common/pa_endianness.h freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/common/pa_front.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/common/pa_ringbuffer.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/common/pa_util.h freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/hostapi/alsa/pa_linux_alsa.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/hostapi/asihpi/pa_linux_asihpi.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/hostapi/asio/pa_asio.cpp freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/hostapi/coreaudio/notes.txt freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/hostapi/coreaudio/pa_mac_core.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.h freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/hostapi/coreaudio/pa_mac_core_internal.h freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/hostapi/coreaudio/pa_mac_core_utilities.h freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/hostapi/dsound/pa_win_ds.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/hostapi/dsound/pa_win_ds_dynlink.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/hostapi/dsound/pa_win_ds_dynlink.h freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/hostapi/jack/pa_jack.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/hostapi/oss/pa_unix_oss.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/hostapi/wasapi/pa_win_wasapi.cpp freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/hostapi/wdmks/pa_win_wdmks.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/hostapi/wmme/pa_win_wmme.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/os/unix/pa_unix_util.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/os/unix/pa_unix_util.h freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/os/win/pa_win_util.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/src/os/win/pa_x86_plain_converters.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/test/patest_callbackstop.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/test/patest_read_write_wire.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/test/patest_record.c freeswitch/branches/lukedashjr/syslibs/libs/portaudio/test/patest_sine.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/.update freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/RELEASE freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/configure.ac freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nta/nta.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nta/test_nta.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nth/test_nth.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/test_s2.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/sresolv/resolve_sip.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/sresolv/test_sresolv.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/stun/stunc.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/su/addrinfo.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/su/localinfo.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/su/su_addrinfo.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/su/su_localinfo.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/su/su_proxy.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/su/test_su.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/su/test_su_osx.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/su/torture_su.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/su/torture_su_root.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/su/torture_su_root_osx.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/tport/tport.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/tport/tport_type_stun.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/tport/tport_type_udp.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_init.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_nat.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/tests/test_nua_params.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/utils/sip-dig.c freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/win32/README.txt freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/win32/tests/test_nua/test_nua.dsp freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/win32/tests/test_nua/test_nua.vcproj freeswitch/branches/lukedashjr/syslibs/libs/stfu/stfu.c freeswitch/branches/lukedashjr/syslibs/libs/voipcodecs/INSTALL freeswitch/branches/lukedashjr/syslibs/libs/xmlrpc-c/ (props changed) freeswitch/branches/lukedashjr/syslibs/libs/xmlrpc-c/include/xmlrpc-c/ (props changed) freeswitch/branches/lukedashjr/syslibs/libs/xmlrpc-c/include/xmlrpc-c/util_int.h freeswitch/branches/lukedashjr/syslibs/libs/xmlrpc-c/lib/abyss/src/http.c freeswitch/branches/lukedashjr/syslibs/libs/xmlrpc-c/lib/abyss/src/server.c freeswitch/branches/lukedashjr/syslibs/libs/xmlrpc-c/lib/abyss/src/socket_unix.c freeswitch/branches/lukedashjr/syslibs/libs/xmlrpc-c/lib/util/include/mallocvar.h Log: MERGE to: http://svn.freeswitch.org/svn/freeswitch/tags/1.0.1 Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/Freeswitch.2008.sln ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/Freeswitch.2008.sln (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/Freeswitch.2008.sln Mon Aug 4 21:29:58 2008 @@ -863,6 +863,104 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xmltok", "libs\xmlrpc-c\Windows\xmltok.2008.vcproj", "{B535402E-38D2-4D54-8360-423ACBD17192}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download sphinxbase", "libs\win32\Download sphinxbase.2008.vcproj", "{4F92B672-DADB-4047-8D6A-4BB3796733FD}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download sphinxmodel", "libs\win32\Download sphinxmodel.2008.vcproj", "{2DEE4895-1134-439C-B688-52203E57D878}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download pocketsphinx", "libs\win32\Download pocketsphinx.2008.vcproj", "{AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sphinxbase", "libs\win32\sphinxbase\sphinxbase.2008.vcproj", "{2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}" + ProjectSection(ProjectDependencies) = postProject + {4F92B672-DADB-4047-8D6A-4BB3796733FD} = {4F92B672-DADB-4047-8D6A-4BB3796733FD} + {2DEE4895-1134-439C-B688-52203E57D878} = {2DEE4895-1134-439C-B688-52203E57D878} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pocketsphinx", "libs\win32\pocketsphinx\pocketsphinx.2008.vcproj", "{94001A0E-A837-445C-8004-F918F10D0226}" + ProjectSection(ProjectDependencies) = postProject + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D} = {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D} + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E} = {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_pocketsphinx", "src\mod\asr_tts\mod_pocketsphinx\mod_pocketsphinx.2008.vcproj", "{2286DA73-9FC5-45BC-A508-85994C3317AB}" + ProjectSection(ProjectDependencies) = postProject + {94001A0E-A837-445C-8004-F918F10D0226} = {94001A0E-A837-445C-8004-F918F10D0226} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {4F92B672-DADB-4047-8D6A-4BB3796733FD} = {4F92B672-DADB-4047-8D6A-4BB3796733FD} + {2DEE4895-1134-439C-B688-52203E57D878} = {2DEE4895-1134-439C-B688-52203E57D878} + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D} = {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D} + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E} = {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download 8khzsound", "libs\win32\Download 8khz Sounds.2008.vcproj", "{3CE1DC99-8246-4DB1-A709-74F19F08EC67}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sound Files", "Sound Files", "{4F227C26-768F-46A3-8684-1D08A46FB374}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download 16khzsound", "libs\win32\Download 16khz Sounds.2008.vcproj", "{87A1FE3D-F410-4C8E-9591-8C625985BC70}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "8khz", "libs\win32\Sound_Files\8khz.2008.vcproj", "{7A8D8174-B355-4114-AFC1-04777CB9DE0A}" + ProjectSection(ProjectDependencies) = postProject + {3CE1DC99-8246-4DB1-A709-74F19F08EC67} = {3CE1DC99-8246-4DB1-A709-74F19F08EC67} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "16khz", "libs\win32\Sound_Files\16khz.2008.vcproj", "{7EB71250-F002-4ED8-92CA-CA218114537A}" + ProjectSection(ProjectDependencies) = postProject + {87A1FE3D-F410-4C8E-9591-8C625985BC70} = {87A1FE3D-F410-4C8E-9591-8C625985BC70} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download 32khzsound", "libs\win32\Dowload 32khz Sounds.2008.vcproj", "{6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "32khz", "libs\win32\Sound_Files\32khz.2008.vcproj", "{464AAB78-5489-4916-BE51-BF8D61822311}" + ProjectSection(ProjectDependencies) = postProject + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F} = {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "flite", "libs\win32\flite\flite.2008.vcproj", "{0AD1177E-1FD8-4643-9391-431467A11084}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_flite", "src\mod\asr_tts\mod_flite\mod_flite.2008.vcproj", "{66444AEE-554C-11DD-A9F0-8C5D56D89593}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B} = {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B} + {0AD1177E-1FD8-4643-9391-431467A11084} = {0AD1177E-1FD8-4643-9391-431467A11084} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download FLITE", "libs\win32\Download FLITE.2008.vcproj", "{D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download LAME", "libs\win32\Download LAME.2008.vcproj", "{D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download LIBSHOUT", "libs\win32\Download LIBSHOUT.2008.vcproj", "{D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download OGG", "libs\win32\Download OGG.2008.vcproj", "{D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libmp3lame", "libs\win32\libmp3lame\libmp3lame_vc7.vcproj", "{E316772F-5D8F-4F2A-8F71-094C3E859D34}" + ProjectSection(ProjectDependencies) = postProject + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B} = {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libshout", "libs\win32\libshout\libshout.vcproj", "{D3D8B329-20BE-475E-9E83-653CEA0E0EF5}" + ProjectSection(ProjectDependencies) = postProject + {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A} = {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A} + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B} = {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B} + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B} = {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B} + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B} = {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B} + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4} = {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_shout", "src\mod\formats\mod_shout\mod_shout.vcproj", "{38FE0559-9910-43A8-9E45-3E5004C27692}" + ProjectSection(ProjectDependencies) = postProject + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5} = {D3D8B329-20BE-475E-9E83-653CEA0E0EF5} + {E316772F-5D8F-4F2A-8F71-094C3E859D34} = {E316772F-5D8F-4F2A-8F71-094C3E859D34} + {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4} = {DF018947-0FFF-4EB3-BDEE-441DC81DA7A4} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libogg", "libs\win32\libogg\libogg.2008.vcproj", "{0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_snom", "src\mod\applications\mod_snom\mod_snom.2008.vcproj", "{2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -974,6 +1072,7 @@ {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|Win32.ActiveCfg = Debug|Win32 {692F6330-4D87-4C82-81DF-40DB5892636E}.Debug|x64.ActiveCfg = Debug|Win32 {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|Win32.ActiveCfg = Release|Win32 + {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|Win32.Build.0 = Release|Win32 {692F6330-4D87-4C82-81DF-40DB5892636E}.Release|x64.ActiveCfg = Release|Win32 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Win32.ActiveCfg = Debug|Win32 {D3EC0AFF-76FC-4210-A825-9A17410660A3}.Debug|Win32.Build.0 = Debug|Win32 @@ -1449,6 +1548,120 @@ {B535402E-38D2-4D54-8360-423ACBD17192}.Release|Win32.ActiveCfg = Release|Win32 {B535402E-38D2-4D54-8360-423ACBD17192}.Release|Win32.Build.0 = Release|Win32 {B535402E-38D2-4D54-8360-423ACBD17192}.Release|x64.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|Win32.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|Win32.Build.0 = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Debug|x64.ActiveCfg = Debug|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|Win32.ActiveCfg = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|Win32.Build.0 = Release|Win32 + {4F92B672-DADB-4047-8D6A-4BB3796733FD}.Release|x64.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug|Win32.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug|Win32.Build.0 = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Debug|x64.ActiveCfg = Debug|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release|Win32.ActiveCfg = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release|Win32.Build.0 = Release|Win32 + {2DEE4895-1134-439C-B688-52203E57D878}.Release|x64.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|Win32.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|Win32.Build.0 = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Debug|x64.ActiveCfg = Debug|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|Win32.ActiveCfg = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|Win32.Build.0 = Release|Win32 + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E}.Release|x64.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|Win32.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|Win32.Build.0 = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Debug|x64.ActiveCfg = Debug|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|Win32.ActiveCfg = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|Win32.Build.0 = Release|Win32 + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D}.Release|x64.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug|Win32.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug|Win32.Build.0 = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Debug|x64.ActiveCfg = Debug|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release|Win32.ActiveCfg = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release|Win32.Build.0 = Release|Win32 + {94001A0E-A837-445C-8004-F918F10D0226}.Release|x64.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|Win32.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|Win32.Build.0 = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Debug|x64.ActiveCfg = Debug|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|Win32.ActiveCfg = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|Win32.Build.0 = Release|Win32 + {2286DA73-9FC5-45BC-A508-85994C3317AB}.Release|x64.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|Win32.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|Win32.Build.0 = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Debug|x64.ActiveCfg = Debug|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|Win32.ActiveCfg = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|Win32.Build.0 = Release|Win32 + {3CE1DC99-8246-4DB1-A709-74F19F08EC67}.Release|x64.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug|Win32.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Debug|x64.ActiveCfg = Debug|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|Win32.ActiveCfg = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|Win32.Build.0 = Release|Win32 + {87A1FE3D-F410-4C8E-9591-8C625985BC70}.Release|x64.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Win32.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|Win32.Build.0 = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Debug|x64.ActiveCfg = Debug|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|Win32.ActiveCfg = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|Win32.Build.0 = Release|Win32 + {7A8D8174-B355-4114-AFC1-04777CB9DE0A}.Release|x64.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|Win32.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Debug|x64.ActiveCfg = Debug|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|Win32.ActiveCfg = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|Win32.Build.0 = Release|Win32 + {7EB71250-F002-4ED8-92CA-CA218114537A}.Release|x64.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|Win32.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Debug|x64.ActiveCfg = Debug|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|Win32.ActiveCfg = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|Win32.Build.0 = Release|Win32 + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F}.Release|x64.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|Win32.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Debug|x64.ActiveCfg = Debug|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release|Win32.ActiveCfg = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release|Win32.Build.0 = Release|Win32 + {464AAB78-5489-4916-BE51-BF8D61822311}.Release|x64.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|Win32.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Debug|x64.ActiveCfg = Debug|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release|Win32.ActiveCfg = Release|Win32 + {0AD1177E-1FD8-4643-9391-431467A11084}.Release|x64.ActiveCfg = Release|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|Win32.ActiveCfg = Debug|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Debug|x64.ActiveCfg = Debug|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|Win32.ActiveCfg = Release|Win32 + {66444AEE-554C-11DD-A9F0-8C5D56D89593}.Release|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Debug|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82FDD086DB1B}.Release|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Debug|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B}.Release|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Debug|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B}.Release|x64.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|Win32.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Debug|x64.ActiveCfg = Debug|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|Win32.ActiveCfg = Release|Win32 + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B}.Release|x64.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|Win32.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Debug|x64.ActiveCfg = Debug|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|Win32.ActiveCfg = Release|Win32 + {E316772F-5D8F-4F2A-8F71-094C3E859D34}.Release|x64.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|Win32.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Debug|x64.ActiveCfg = Debug|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|Win32.ActiveCfg = Release|Win32 + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5}.Release|x64.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|Win32.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Debug|x64.ActiveCfg = Debug|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|Win32.ActiveCfg = Release|Win32 + {38FE0559-9910-43A8-9E45-3E5004C27692}.Release|x64.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|Win32.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Debug|x64.ActiveCfg = Debug|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|Win32.ActiveCfg = Release|Win32 + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4}.Release|x64.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|Win32.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|Win32.Build.0 = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Debug|x64.ActiveCfg = Debug|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|Win32.ActiveCfg = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|Win32.Build.0 = Release|Win32 + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03}.Release|x64.ActiveCfg = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1477,6 +1690,7 @@ {F6A33240-8F29-48BD-98F0-826995911799} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} {65A6273D-FCAB-4C55-B09E-65100141A5D4} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} {E3246D17-E29B-4AB5-962A-C69B0C5837BB} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} + {2A3D00C6-588D-4E86-81AC-9EF5EDE86E03} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} {07113B25-D3AF-4E04-BA77-4CD1171F022C} = {C5F182F9-754A-4EC5-B50F-76ED02BE13F4} {A27CCA23-1541-4337-81A4-F0A6413078A0} = {C5F182F9-754A-4EC5-B50F-76ED02BE13F4} {E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24} = {C5F182F9-754A-4EC5-B50F-76ED02BE13F4} @@ -1488,6 +1702,7 @@ {9254C4B0-6F60-42B6-BB3A-36D63FC001C7} = {A5A27244-AD24-46E5-B01B-840CD296C91D} {2CA40887-1622-46A1-A7F9-17FD7E7E545B} = {A5A27244-AD24-46E5-B01B-840CD296C91D} {6FF941AC-82C5-429F-AA4C-AD2FB9E5DA52} = {A5A27244-AD24-46E5-B01B-840CD296C91D} + {38FE0559-9910-43A8-9E45-3E5004C27692} = {A5A27244-AD24-46E5-B01B-840CD296C91D} {1A1FF289-4FD6-4285-A422-D31DD67A4723} = {CBD81696-EFB4-4D2F-8451-1B8DAA86155A} {EC3E5C7F-EE09-47E2-80FE-546363D14A98} = {B8F5B47B-8568-46EB-B320-64C17D2A98BC} {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {0C808854-54D1-4230-BFF5-77B5FD905000} @@ -1499,6 +1714,8 @@ {7B077E7F-1BE7-4291-AB86-55E527B25CAC} = {0C808854-54D1-4230-BFF5-77B5FD905000} {692F6330-4D87-4C82-81DF-40DB5892636E} = {4CF6A6AC-07DE-4B9E-ABE1-7F98B64E0BB0} {E7116F50-2B10-472F-92BD-C8667AA9C1AE} = {4CF6A6AC-07DE-4B9E-ABE1-7F98B64E0BB0} + {2286DA73-9FC5-45BC-A508-85994C3317AB} = {4CF6A6AC-07DE-4B9E-ABE1-7F98B64E0BB0} + {66444AEE-554C-11DD-A9F0-8C5D56D89593} = {4CF6A6AC-07DE-4B9E-ABE1-7F98B64E0BB0} {1C453396-D912-4213-89FD-9B489162B7B5} = {A7AB4405-FDB7-4853-9FBB-1516B1C3D80A} {D0BCAC02-D94B-46B8-9B49-CDDCC2BD7909} = {A7AB4405-FDB7-4853-9FBB-1516B1C3D80A} {CBEC7225-0C21-4DA8-978E-1F158F8AD950} = {F69A4A6B-9360-4EBB-A280-22AA3C455AC5} @@ -1532,8 +1749,22 @@ {CEE544A9-0303-44C2-8ECE-EFA7D7BCBBBA} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} {0D108721-EAE8-4BAF-8102-D8960EC93647} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} {B535402E-38D2-4D54-8360-423ACBD17192} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {2F025EAD-99BD-40F5-B2CC-F0A28CAD7F2D} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {94001A0E-A837-445C-8004-F918F10D0226} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {E316772F-5D8F-4F2A-8F71-094C3E859D34} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {D3D8B329-20BE-475E-9E83-653CEA0E0EF5} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} + {0FEEAEC6-4399-4C46-B7DB-62ECE80D15B4} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B} {5927104D-C14C-4AC8-925C-4AB681762E75} = {C120A020-773F-4EA3-923F-B67AF28B750D} {8B3B4C4C-13C2-446C-BEB0-F412CC2CFB9A} = {C120A020-773F-4EA3-923F-B67AF28B750D} + {4F92B672-DADB-4047-8D6A-4BB3796733FD} = {C120A020-773F-4EA3-923F-B67AF28B750D} + {2DEE4895-1134-439C-B688-52203E57D878} = {C120A020-773F-4EA3-923F-B67AF28B750D} + {AF8163EE-FA76-4904-A11D-7D70A1B5BA2E} = {C120A020-773F-4EA3-923F-B67AF28B750D} + {3CE1DC99-8246-4DB1-A709-74F19F08EC67} = {C120A020-773F-4EA3-923F-B67AF28B750D} + {87A1FE3D-F410-4C8E-9591-8C625985BC70} = {C120A020-773F-4EA3-923F-B67AF28B750D} + {6E49F6C2-ADDA-4BFB-81FE-AB9AF51B455F} = {C120A020-773F-4EA3-923F-B67AF28B750D} + {D5D2BF72-29FE-4982-A9FA-82AB2086DB1B} = {C120A020-773F-4EA3-923F-B67AF28B750D} + {D5D2BF72-29FE-4982-A9FA-82AB3086DB1B} = {C120A020-773F-4EA3-923F-B67AF28B750D} + {D5D2BF72-29FE-4982-A9FA-82AB1086DB1B} = {C120A020-773F-4EA3-923F-B67AF28B750D} {988CACF7-3FCB-4992-BE69-77872AE67DC8} = {6CD61A1D-797C-470A-BE08-8C31B68BB336} {5BC072DB-3826-48EA-AF34-FE32AA01E83B} = {6CD61A1D-797C-470A-BE08-8C31B68BB336} {FA429E98-8B03-45E6-A096-A4BC5E821DE4} = {6CD61A1D-797C-470A-BE08-8C31B68BB336} @@ -1595,5 +1826,8 @@ {FC0DB2A2-B1A3-426E-9E37-BE28FE8FE01B} = {EB577858-8284-4DEA-ADDA-DD046BCA0126} {91C6DEDE-CE4A-47D1-A84B-3E828F82E2B0} = {89A94241-1DA6-44E8-A685-AED1E665C2AD} {8F5A511B-F716-4D07-9657-55B9E4F1D3E9} = {89A94241-1DA6-44E8-A685-AED1E665C2AD} + {7A8D8174-B355-4114-AFC1-04777CB9DE0A} = {4F227C26-768F-46A3-8684-1D08A46FB374} + {7EB71250-F002-4ED8-92CA-CA218114537A} = {4F227C26-768F-46A3-8684-1D08A46FB374} + {464AAB78-5489-4916-BE51-BF8D61822311} = {4F227C26-768F-46A3-8684-1D08A46FB374} EndGlobalSection EndGlobal Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/Makefile.am ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/Makefile.am (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/Makefile.am Mon Aug 4 21:29:58 2008 @@ -21,7 +21,7 @@ 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; \ + if test "$$target" = "install"; then $(GETSOUNDS) $$soundfile $(DESTDIR)$(PREFIX)/sounds/; else $(GETSOUNDS) $$soundfile ; fi; \ else \ cd src/mod && $(MAKE) $(AM_MAKEFLAGS) $@ ;\ fi @@ -85,7 +85,7 @@ src/switch_ivr.c \ src/switch_stun.c\ src/switch_log.c\ -src/switch_xml.cpp\ +src/switch_xml.c\ src/switch_config.c\ src/switch_time.c\ src/switch_cpp.cpp\ @@ -158,6 +158,11 @@ $(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 + +yaml-files: + @echo `mkdir $(DESTDIR)$(prefix)/conf/yaml 2>/dev/null` + $(INSTALL) -m 644 conf/yaml/*.yaml $(DESTDIR)$(prefix)/conf/yaml + vm-sync: test -d $(DESTDIR)$(prefix)/conf || $(mkinstalldirs) $(DESTDIR)$(prefix)/conf test -d $(DESTDIR)$(prefix)/conf/lang || $(mkinstalldirs) $(DESTDIR)$(prefix)/conf/lang @@ -275,6 +280,15 @@ $(MAKE) -j core $(MAKE) -j modules +python-reconf: + rm -f src/mod/languages/mod_python/Makefile + ./config.status + +pa-reconf: + cd libs/portaudio && $(MAKE) clean + cd libs/portaudio && sh ./configure.gnu + $(MAKE) mod_portaudio-clean + sofia-reconf: cd libs/sofia-sip && sh ./autogen.sh cd libs/sofia-sip && $(MAKE) clean Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/build/modmake.rules.in ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/build/modmake.rules.in (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/build/modmake.rules.in Mon Aug 4 21:29:58 2008 @@ -103,9 +103,9 @@ @test -d .libs || mkdir .libs @error="";\ if test -f $(CSOURCEFILE); then \ - $(LINK) $(SOLINK) $(MODNAME).o -o $(MODNAME).$(DYNAMIC_LIB_EXTEN) $(LIBS) $(LOCAL_LDFLAGS) $(LOCAL_OBJS) $(OUR_OBJS) $(LOCAL_LIBADD) $(LINK_OUTPUT_REDIR) ;\ + $(LINK) $(SOLINK) $(MODNAME).o $(LIBS) $(LOCAL_LDFLAGS) $(LOCAL_OBJS) $(OUR_OBJS) $(LOCAL_LIBADD) $(LINK_OUTPUT_REDIR) ;\ else \ - $(CXXLINK) $(SOLINK) $(MODNAME).o -o $(MODNAME).$(DYNAMIC_LIB_EXTEN) $(LIBS) $(LOCAL_LDFLAGS) $(LOCAL_OBJS) $(OUR_OBJS) $(LOCAL_LIBADD) $(LINK_OUTPUT_REDIR) ;\ + $(CXXLINK) $(SOLINK) $(MODNAME).o $(LIBS) $(LOCAL_LDFLAGS) $(LOCAL_OBJS) $(OUR_OBJS) $(LOCAL_LIBADD) $(LINK_OUTPUT_REDIR) ;\ fi; mod_clean: Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/build/modules.conf.in ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/build/modules.conf.in (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/build/modules.conf.in Mon Aug 4 21:29:58 2008 @@ -13,6 +13,9 @@ applications/mod_fsv #applications/mod_soundtouch #applications/mod_rss +#applications/mod_snom +#asr_tts/mod_flite +#asr_tts/mod_pocketsphinx #asr_tts/mod_cepstral #asr_tts/mod_openmrcp codecs/mod_g723_1 @@ -49,8 +52,9 @@ languages/mod_spidermonkey_core_db languages/mod_spidermonkey_socket #languages/mod_spidermonkey_odbc -#languages/mod_lua +languages/mod_lua #languages/mod_perl +#languages/mod_yaml xml_int/mod_xml_rpc #xml_int/mod_xml_curl xml_int/mod_xml_cdr @@ -61,3 +65,4 @@ #say/mod_say_fr #say/mod_say_it #say/mod_say_nl +#say/mod_say_zh Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/build/swigall.sh ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/build/swigall.sh (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/build/swigall.sh Mon Aug 4 21:29:58 2008 @@ -9,7 +9,8 @@ cd ../../../.. cd src/mod/languages/mod_python -make reswig +make swigclean +make mod_python_wrap.cpp cd ../../../.. cd src/mod/languages/mod_java Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/acl.conf.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/acl.conf.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/acl.conf.xml Mon Aug 4 21:29:58 2008 @@ -19,6 +19,11 @@ + + + + + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/cdr_csv.conf.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/cdr_csv.conf.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/cdr_csv.conf.xml Mon Aug 4 21:29:58 2008 @@ -6,11 +6,14 @@ + + + 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 Mon Aug 4 21:29:58 2008 @@ -94,6 +94,11 @@ + + + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/console.conf.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/console.conf.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/console.conf.xml Mon Aug 4 21:29:58 2008 @@ -30,7 +30,7 @@ --> - + + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/ivr.conf.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/ivr.conf.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/ivr.conf.xml Mon Aug 4 21:29:58 2008 @@ -1,56 +1,57 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/lua.conf.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/lua.conf.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/lua.conf.xml Mon Aug 4 21:29:58 2008 @@ -2,5 +2,14 @@ + + + + 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 Mon Aug 4 21:29:58 2008 @@ -6,6 +6,8 @@ + + @@ -19,7 +21,6 @@ - @@ -46,6 +47,9 @@ + + + @@ -76,14 +80,17 @@ - + + + + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/openmrcp.conf.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/openmrcp.conf.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/openmrcp.conf.xml Mon Aug 4 21:29:58 2008 @@ -1,10 +1,11 @@ - - - - - - - - - - + + + + + + + + + + + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/perl.conf.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/perl.conf.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/perl.conf.xml Mon Aug 4 21:29:58 2008 @@ -2,5 +2,15 @@ + + + + + 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 Mon Aug 4 21:29:58 2008 @@ -16,6 +16,8 @@ + + @@ -26,6 +28,32 @@ + @@ -33,12 +61,6 @@ - - - - - - - + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/syslog.conf.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/syslog.conf.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/syslog.conf.xml Mon Aug 4 21:29:58 2008 @@ -10,6 +10,6 @@ - + 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 Mon Aug 4 21:29:58 2008 @@ -43,6 +43,7 @@ + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/xml_cdr.conf.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/xml_cdr.conf.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/xml_cdr.conf.xml Mon Aug 4 21:29:58 2008 @@ -1,39 +1,40 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/dialplan/default.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/dialplan/default.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/dialplan/default.xml Mon Aug 4 21:29:58 2008 @@ -64,6 +64,29 @@ + + + + + + + + + + + + + + + + + + + + + @@ -105,14 +128,14 @@ - + - + @@ -270,6 +293,15 @@ + + + + + + + + + @@ -361,11 +393,6 @@ --> - - - - - Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/directory/default/brian.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/directory/default/brian.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/directory/default/brian.xml Mon Aug 4 21:29:58 2008 @@ -1,7 +1,7 @@ - + @@ -50,6 +50,8 @@ + + @@ -76,6 +78,8 @@ + + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/de/demo/demo.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/de/demo/demo.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/de/demo/demo.xml Mon Aug 4 21:29:58 2008 @@ -3,9 +3,9 @@ - + - + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/en/demo/demo-ivr.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/en/demo/demo-ivr.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/en/demo/demo-ivr.xml Mon Aug 4 21:29:58 2008 @@ -1,158 +1,159 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/en/demo/demo.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/en/demo/demo.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/en/demo/demo.xml Mon Aug 4 21:29:58 2008 @@ -3,9 +3,9 @@ - + - + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/en/en.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/en/en.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/en/en.xml Mon Aug 4 21:29:58 2008 @@ -1,7 +1,8 @@ - - - - - - - + + + + + + + + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/fr/vm/sounds.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/fr/vm/sounds.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/lang/fr/vm/sounds.xml Mon Aug 4 21:29:58 2008 @@ -1,210 +1,211 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/external.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/external.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/external.xml Mon Aug 4 21:29:58 2008 @@ -37,5 +37,6 @@ + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/external/example.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/external/example.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/external/example.xml Mon Aug 4 21:29:58 2008 @@ -28,5 +28,7 @@ + + 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 Mon Aug 4 21:29:58 2008 @@ -39,8 +39,8 @@ - - + + @@ -76,7 +76,10 @@ - + + + + @@ -118,6 +121,12 @@ + + + + + + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/nat.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/nat.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/nat.xml Mon Aug 4 21:29:58 2008 @@ -28,5 +28,6 @@ + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/vars.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/vars.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/vars.xml Mon Aug 4 21:29:58 2008 @@ -93,3 +93,8 @@ + + + + + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/configure.in ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/configure.in (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/configure.in Mon Aug 4 21:29:58 2008 @@ -3,11 +3,11 @@ # 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.0], BUG-REPORT-ADDRESS) +AC_INIT([freeswitch], [1.0.1], BUG-REPORT-ADDRESS) AC_SUBST(SWITCH_VERSION_MAJOR, [1]) AC_SUBST(SWITCH_VERSION_MINOR, [0]) -AC_SUBST(SWITCH_VERSION_MICRO, [0]) -AC_SUBST(SWITCH_VERSION_REVISION, [8691]) +AC_SUBST(SWITCH_VERSION_MICRO, [1]) +AC_SUBST(SWITCH_VERSION_REVISION, [9171]) AC_SUBST(SOUNDS_VERSION, [1.0.2]) AC_CONFIG_FILES([src/include/switch_version.h.in:src/include/switch_version.h.template]) @@ -99,6 +99,9 @@ *darwin*) SOLINK="-dynamic -bundle -force-flat-namespace" ;; + *-solaris2*) + SOLINK="-shared -Xlinker" + ;; *) SOLINK="-shared -Xlinker -x" ;; @@ -335,7 +338,7 @@ # Checks for header files. AC_HEADER_DIRENT AC_HEADER_STDC -AC_CHECK_HEADERS([sys/types.h sys/resource.h sched.h wchar.h sys/filio.h sys/ioctl.h]) +AC_CHECK_HEADERS([sys/types.h sys/resource.h sched.h wchar.h sys/filio.h sys/ioctl.h netdb.h execinfo.h]) # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/changelog ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/changelog (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/changelog Mon Aug 4 21:29:58 2008 @@ -1,3 +1,146 @@ +freeswitch (1.0.1-1) unstable; urgency=low + + * FIX: prevent intercept race condition that can also be solved with continue_on_fail=originator_cancel + * FIX: NULL dereference detected by klockwork (www.klockwork.com) + * FIX: don't open failed local stream (MODFORM-9) + * FIX: instability in mod_local_stream in failure scenarios + * FIX: xmlrpc-c build on OS X 10.4 (FSBUILD-47) + * ENHANCEMENT: Added tab completion on many api commands in console + * ENHANCEMENT: polycom BLF support + * FIX: many sip NAT related fixes in mod_sofia + * FIX: support sip unregister with Contact: * + * FIX: multiple segfaults in xmlrpc-c + * FIX: sip unregister event being skipped + * FIX: hangup properly on malformed sip 3pcc calls being used as a way to ping + * ADD: enable-3pcc sofia profile param, it is now disabled by default. + * ADD: presence events to sip proxy mode + * ADD: legs param to cdr_csv + * ADD: support for perl as an embedded lanugage + * ENHANCEMENT: many new api's and functions to the embedded languages including api support, xml interface support, auto start scripts, and many new objects + * CHANGE: python embedded language api changed to match perl, lua, java + * FIX: many stability fixes in embedded langauges perl, lua, java, python + * ADD: failed_xml_cdr magic channel variable + * FIX: access free memory error in mod_sofia when using respond app + * ENHNACEMENT: make global_setvar only have 2 fields so you can set foo=bar=blah w/o quotes + * FIX: mod_spidermonkey keep hangup hook in the session thread + * ENHANCEMENT: mod_ldap added sasl support and search filters + * ADD: answered, waitForAnswer and mediaReady methods to embedded language Session object + * ENHANCEMENT: mod_voicemail param change to allow notification emails using templates + * ADD: per user acl in sofia + * FIX: deadlock in mod_portaudio + * ENHANCEMENT: blank username in sip will trigger a lookup for the user "nobody" + * ADD: import variable to import variables from a peer channel at time of originate + * FIX: api type fix for c++ modules when incorrectly using enums + * FIX: eliminate need for escaped , in [] on originate + * ADD: NDLB-force-rport option to force behavior as if rport was sent in the via + * ENHANCEMENT: honor execute_on_answer on outbound legs too + * ADD: execute_on_ring variable + * FIX: Seg fault in CoreSession() class destructor + * ADD: per channel caller id in originate + * ADD: sip_outgoing_call_id variable + * FIX: multiple memory leaks in mod_sofia + * FIX: find_local_ip IPv6 support + * ADD: variable expansion to on execute vars.(FSCORE-114) + * ADD: count optional arg to show calls and show channels (MODAPP-103) + * FIX: MODEVENT-25 (WSAWOULDBLOCK error on socket send in windows) in event socket + * FIX: multiple fixes to the logic in mod_say_zh + * ADD: inter digit timeout to swigged embedded languages getDigits method. (MODLANG-65) + * ADD: Linksys P-RTP-Stat SIP header values (SFSIP-66) + * FIX: small leak in core + * ADD: progress_timeout var to originate + * UPDATE: portaudio library + * FIX: added timeout to iax read + * ADD: 'pa rescan' to portaudio to look for new devices + * FIX: wait for broadcast to start when starting async hold to avoid race + * FIX: mod_rss, don't always play the first news feed + * FIX: mod_rss inverval to use the session inteval (audio problems on 30ms channels) + * ADD: Path: support in mod_sofia on register + * FIX: mod_shout record stream + * ENHANCEMENT: mod_voicemail support for effective_caller_id_name/number + * ADD: url encode/decode api calls + * FIX: "nua()" in debug information in sofia instead of the real function name + * FIX: better handling of sips: uris + * FIX: don't seg when using more than SWITCH_MAX_CODECS and bump SWITCH_MAX_CODECS to 50 (we have more than 30 in tree) (MODFORM-10) + * ADD: mod_yaml + * FIX: segfault on freeswitch startup if installed directories are removed + * FIX: segfault when intercept with inbound_late_negotiation=true set + * FIX: dont flood logs with eavesdrop messages (MODAPP-101) + * FIX: don't destroy a codec that has not been created (MODAPP-101) + * ENHANCEMENT: allows the "eavesdrop_group" variable to contain several groups, comma separated. (MODAPP-101) + * FIX: cross compile (FSBUILD-53) + * FIX: add header that Nuaunce considers mandatory (MODASRTTS-5) + * ADD: write locks to the core and a function to unregister event bindings (adds better ability to unload modules) + * ENHANCEMENT: make modules unbind events and un-reserve subclasses on module unload + * ADD: removable xml hook bindings + * ADD: EventConsumer object to embedded languages so you can make event handlers + * FIX: sending CN with supress-cng true + * FIX: segfault in the event system when trying to remove NULL event + * ADD: flags to turn off srtp auth and rtp auto adj (FSCORE-149 && MODENDP-115) + * FIX: use lighter math and avoid infinite loop in port allocator (FSCORE-148) + * ENHANCEMENT: let conference pin entry start during prompt (MODAPP-111) + * ADD: mod_pocketsphinx + * FIX: Misuse of SQLRowCount, issues with MSSQL (MODAPP-105) + * FIX: segfaults in mod_python with dtmf callback + * ENHANCEMENT: mod_conference auto-record parameter (MODAPP-112) + * ENHANCEMENT: reload support to many modules + * FIX: mod_sofia add replaces to supported header + * ENHANCEMENT: add args callback to sleep so you can process dtmf and events while "sleeping" + * ADD: mod_flite + * ENHANCEMENT: switch_xml converted back to c code and support double globs on windows + * ENHANCEMENT: mod_sofia support for adding and removing gateways without restarting profiles + * ADD: extract contact header info into A channel when unhandled 3xx response is received (MODENDP-116) + * FIX: outbound event_socket + late negotiation + * ADD: copy_xml_cdr variable + * ADD: silence_stream (like tone_stream but silent) + * ADD: module_exists api call + * ADD: emailer implementation for windows + * ADD: wait_for_silence application + * FIX: no error message generated if OS is unable to load a module ( due to dependency/installation issues ) + * FIX: segfault in media bugs + * FIX: acl lists not correctly matching all ip adresses + * FIX: mod_spidermonkey exit() does not stop script when called from the hangup callback (return "exit" from the callback) + * FIX: mod_syslog works again + * FIX: crash on terminal resize + * FIX: audio problems on big endian + * ENHANCEMENT: Disable multiple registrations on a per-device basis (MODENDP-117) + * ADD: fifo_consumer_exit_key variable (MODAPP-100) + * ADD: cidr based user auth in mod_sofia + * ADD: uuid_send_dtmf fsapi command (MODAPP-114) + * ADD: server registration fiels to sip_registration database (MODENDP-118) + * FIX: use a variable, realm or to host to find gateway when it's not obvious (handles challenged REFER) + * ADD: timeout to curl run in javascript + * ADD: voicemail_inject fsapi command + * ADD: reboot option for sip phones to flush_inboud_reg sofia profile api command + * FIX: add small padding to end of mp3 to avoid cut off mp3 recording + * FIX: patch multiple SDP connection lines in sdp for proxy media mode (MODENDP-109) + * FIX: don't parse ringback varable in proxy situations + * ADD: per call vm recording ext with vm_message_ext variable + * ADD: sip_bye_h prefix to add headers to bye + * ENHANCEMENT: more interfaces available in show fsapi command + * FIX: don't leak in buffers on realloc fail + * FIX: fail out of a conference call if write fails + * ADD: auto ip-change detection + * ADD: mod_snom + * FIX: mod_sofia don't send sipfrag on transfer to cisco so they don't hang up the call + + -- Mike Jerris Thu, 24 Jul 2008 07:00:00 -0500 + +freeswitch (1.0.1~trunk) unstable; urgency=low + + * Updated revision number + * Fixed init problem reported by Jay Binks (FSSCRIPTS-1) + * Added a patch to the debian build system add more features (thanks to Hadley Rich) (FSBUILD-45) + - Added en-us-callie sounds and music on hold packages + - Added recommends and suggests + - Added mod_say_es and mod_say_nl + - Updated descriptions + - Added mod_cdr_csv + * Fixed typos and some errors in the previus patch. + * Modified monit script. Now it should work. + * The debian build system now bootstrap automagically if it's necessary and all scripts are in place. + + -- Massimo Cetra Sun, 6 Jul 2008 16:30:00 +0100 + freeswitch (1.0.0-1) unstable; urgency=low * Enhanced sofia sip nat handling Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/control ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/control (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/control Mon Aug 4 21:29:58 2008 @@ -2,14 +2,15 @@ Maintainer: Michal Bielicki Section: net Priority: extra -Build-Depends: debhelper (>= 5), automake1.9, autoconf, libtool, unixodbc-dev, libasound2-dev, libcurl3-dev|libcurl4-openssl-dev, libssl-dev, ncurses-dev, libogg-dev, libvorbis-dev, libperl-dev, libgdbm-dev, libdb4.4-dev, libgnutls-dev -Standards-Version: 3.7.2 +Build-Depends: debhelper (>= 5), fakeroot, automake1.9, autoconf, libtool, unixodbc-dev, libasound2-dev, libcurl3-openssl-dev|libcurl4-openssl-dev, libssl-dev, ncurses-dev, libogg-dev, libvorbis-dev, libperl-dev, libgdbm-dev, libdb-dev, libgnutls-dev +Standards-Version: 3.7.3 Package: freeswitch Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, unixodbc, libasound2, libcurl3, openssl, libncurses5 -Suggests: monit -Description: A telephony platform that really kicks some ass... +Recommends: freeswitch-lang-en +Suggests: freeswitch-spidermonkey, freeswitch-lua, freeswitch-perl, freeswitch-sounds-music-8000, monit +Description: The FreeSWITCH open source telephony platform FreeSWITCH is an open source telephony platform designed to facilitate the creation of voice and chat driven products scaling from a soft-phone up to a soft-switch. It can be used as a simple switching engine, a media gateway @@ -19,22 +20,22 @@ Package: freeswitch-dev Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch -Description: Development Package for the FreeSwitch open source telephony platform +Description: Development Package for the FreeSWITCH open source telephony platform Package: freeswitch-spidermonkey Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch -Description: A Javascript engine for freeswitch +Description: A Javascript engine for FreeSWITCH Package: freeswitch-perl Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch -Description: A perl engine for freeswitch +Description: A perl engine for FreeSWITCH Package: freeswitch-lua Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch -Description: A lua engine for freeswitch +Description: A lua engine for FreeSWITCH Package: freeswitch-codec-passthru-g7231 Architecture: any @@ -54,8 +55,30 @@ Package: freeswitch-lang-en Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch +Recommends: freeswitch-sounds-en-us-callie-8000 +Suggests: freeswitch-sounds-en-us-callie-16000, freeswitch-sounds-en-us-callie-32000 Description: English language files for the FreeSWITCH open source telephony platform +Package: freeswitch-sounds-en-us-callie-8000 +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch +Description: English language files for the FreeSWITCH open source telephony platform + +Package: freeswitch-sounds-en-us-callie-16000 +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch +Description: English language files for the FreeSWITCH open source telephony platform (16000) + +Package: freeswitch-sounds-en-us-callie-32000 +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch +Description: English language files for the FreeSWITCH open source telephony platform (32000) + +Package: freeswitch-sounds-music-8000 +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch +Description: Music on hold files for the FreeSWITCH open source telephony platform + Package: freeswitch-lang-de Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch @@ -70,3 +93,13 @@ Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch Description: Italian language files for the FreeSWITCH open source telephony platform + +Package: freeswitch-lang-es +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch +Description: Spanish language files for the FreeSWITCH open source telephony platform + +Package: freeswitch-lang-nl +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch +Description: Dutch language files for the FreeSWITCH open source telephony platform Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/files ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/files (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/files Mon Aug 4 21:29:58 2008 @@ -1,12 +1,18 @@ -freeswitch_1.0~rc6-1_i386.deb net extra -freeswitch-dev_1.0~rc6-1_i386.deb net extra -freeswitch-spidermonkey_1.0~rc6-1_i386.deb net extra -freeswitch-perl_1.0~rc6-1_i386.deb net extra -freeswitch-lua_1.0~rc6-1_i386.deb net extra -freeswitch-codec-passthru-g7231_1.0~rc6-1_i386.deb net extra -freeswitch-codec-passthru-amr_1.0~rc6-1_i386.deb net extra -freeswitch-codec-passthru-g729_1.0~rc6-1_i386.deb net extra -freeswitch-lang-en_1.0~rc6-1_i386.deb net extra -freeswitch-lang-de_1.0~rc6-1_i386.deb net extra -freeswitch-lang-fr_1.0~rc6-1_i386.deb net extra -freeswitch-lang-it_1.0~rc6-1_i386.deb net extra +freeswitch_1.0.1~trunk_i386.deb net extra +freeswitch-dev_1.0.1~trunk_i386.deb net extra +freeswitch-spidermonkey_1.0.1~trunk_i386.deb net extra +freeswitch-perl_1.0.1~trunk_i386.deb net extra +freeswitch-lua_1.0.1~trunk_i386.deb net extra +freeswitch-codec-passthru-g7231_1.0.1~trunk_i386.deb net extra +freeswitch-codec-passthru-amr_1.0.1~trunk_i386.deb net extra +freeswitch-codec-passthru-g729_1.0.1~trunk_i386.deb net extra +freeswitch-lang-en_1.0.1~trunk_i386.deb net extra +freeswitch-sounds-en-us-callie-8000_1.0.1~trunk_i386.deb net extra +freeswitch-sounds-en-us-callie-16000_1.0.1~trunk_i386.deb net extra +freeswitch-sounds-en-us-callie-32000_1.0.1~trunk_i386.deb net extra +freeswitch-sounds-music-8000_1.0.1~trunk_i386.deb net extra +freeswitch-lang-de_1.0.1~trunk_i386.deb net extra +freeswitch-lang-fr_1.0.1~trunk_i386.deb net extra +freeswitch-lang-it_1.0.1~trunk_i386.deb net extra +freeswitch-lang-es_1.0.1~trunk_i386.deb net extra +freeswitch-lang-nl_1.0.1~trunk_i386.deb net extra Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch.conffiles ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch.conffiles (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch.conffiles Mon Aug 4 21:29:58 2008 @@ -64,6 +64,7 @@ /opt/freeswitch/conf/autoload_configs/iax.conf.xml /opt/freeswitch/conf/autoload_configs/woomera.conf.xml /opt/freeswitch/conf/autoload_configs/post_load_modules.conf.xml +/opt/freeswitch/conf/autoload_configs/pocketsphinx.conf.xml /opt/freeswitch/conf/autoload_configs/xml_cdr.conf.xml /opt/freeswitch/conf/autoload_configs/cdr_csv.conf.xml /opt/freeswitch/conf/autoload_configs/dialplan_directory.conf.xml Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch.init ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch.init (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch.init Mon Aug 4 21:29:58 2008 @@ -19,26 +19,20 @@ DESC="FreeSwitch Voice Switching System" NAME=freeswitch DAEMON=/opt/freeswitch/bin/$NAME -DAEMON_ARGS="-nc" USER=freeswitch PIDFILE=/opt/freeswitch/log/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME # Check if we are being executed by init -. /etc/default/$NAME CALLEDSCRIPT=`basename $0` -echo $CALLEDSCRIPT -case "$CALLEDSCRIPT" in - freeswitch) - ;; - *) - if [ "USE_INIT" != "TRUE" ]; then - echo "FreeSwitch disabled" ; - exit 0 ; - fi - ;; -esac + +if [ -r /etc/default/$NAME ]; then . /etc/default/$NAME; fi + +if [ "$FREESWITCH_ENABLED" != "true" ]; then + echo "$DESC not enabled yet. Edit /etc/default/$NAME first." + exit 0 ; +fi # Exit if the package is not installed # [ -x "$DAEMON" ] || exit 0 @@ -65,7 +59,7 @@ start-stop-daemon -c $USER --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon -c $USER --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ - $DAEMON_ARGS \ + $FREESWITCH_PARAMS \ || return 2 # Add code here, if necessary, that waits for the process to be ready # to handle requests from services started subsequently which depend Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch.install ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch.install (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch.install Mon Aug 4 21:29:58 2008 @@ -3,6 +3,7 @@ opt/freeswitch/bin/scripts/* opt/freeswitch/lib/libfreeswitch*.so* opt/freeswitch/mod/mod_shout* +opt/freeswitch/mod/mod_cdr_csv.so* opt/freeswitch/mod/mod_console.so* opt/freeswitch/mod/mod_expr.so* opt/freeswitch/mod/mod_rss.so* @@ -45,6 +46,7 @@ opt/freeswitch/conf/dialplan/default.xml opt/freeswitch/conf/dialplan/features.xml opt/freeswitch/conf/dialplan/extensions +opt/freeswitch/conf/dialplan/extensions/*.xml opt/freeswitch/conf/sip_profiles/external.xml opt/freeswitch/conf/sip_profiles/nat.xml opt/freeswitch/conf/sip_profiles/nat/example.xml @@ -103,6 +105,7 @@ opt/freeswitch/conf/autoload_configs/iax.conf.xml opt/freeswitch/conf/autoload_configs/woomera.conf.xml opt/freeswitch/conf/autoload_configs/post_load_modules.conf.xml +opt/freeswitch/conf/autoload_configs/pocketsphinx.conf.xml opt/freeswitch/conf/autoload_configs/xml_cdr.conf.xml opt/freeswitch/conf/autoload_configs/cdr_csv.conf.xml opt/freeswitch/conf/autoload_configs/dialplan_directory.conf.xml Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/monit/freeswitch.monitrc ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/monit/freeswitch.monitrc (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/monit/freeswitch.monitrc Mon Aug 4 21:29:58 2008 @@ -2,7 +2,10 @@ group voice start program = "/etc/init.d/freeswitch start" stop program = "/etc/init.d/freeswitch stop" - if failed port 5060 type UDP then restart +# Checks sip port on localhost, not wlways suitable +# if failed port 5060 type UDP then restart +# Checks mod_event_socket on localhost. Maybe more suitable + if failed port 8021 type TCP then restart if 5 restarts within 5 cycles then timeout depends on freeswitch_bin depends on freeswitch_rc @@ -10,9 +13,9 @@ check file freeswitch_bin with path /opt/freeswitch/bin/freeswitch group voice if failed checksum then unmonitor - if failed permission 755 then unmonitor + if failed permission 750 then unmonitor if failed uid freeswitch then unmonitor - if failed gid daemon then unmonitor +# if failed gid daemon then unmonitor check file freeswitch_rc with path /etc/init.d/freeswitch group voice Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/rules ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/rules (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/rules Mon Aug 4 21:29:58 2008 @@ -16,13 +16,13 @@ export DIRECTORIES_MODULES= export DOTNET_MODULES= export ENDPOINTS_MODULES=endpoints/mod_dingaling endpoints/mod_iax endpoints/mod_portaudio endpoints/mod_sofia endpoints/mod_woomera ../../libs/openzap/mod_openzap -export EVENT_HANDLERS_MODULES=event_handlers/mod_event_multicast event_handlers/mod_event_socket +export EVENT_HANDLERS_MODULES=event_handlers/mod_event_multicast event_handlers/mod_event_socket event_handlers/mod_cdr_csv export FORMATS_MODULES=formats/mod_local_stream formats/mod_native_file formats/mod_sndfile formats/mod_tone_stream formats/mod_shout export LANGUAGES_MODULES=languages/mod_perl languages/mod_lua export LOGGERS_MODULES=loggers/mod_console loggers/mod_logfile loggers/mod_syslog -export SAY_MODULES=say/mod_say_de say/mod_say_en say/mod_say_fr say/mod_say_it +export SAY_MODULES=say/mod_say_en say/mod_say_it say/mod_say_de say/mod_say_fr say/mod_say_es say/mod_say_nl export TIMERS_MODULES= -export DISABLED_MODULES=applications/mod_soundtouch directories/mod_ldap languages/mod_java languages/mod_python languages/mod_spidermonkey_skel ast_tts/mod_cepstral asr_tts/mod_lumenvox endpoints/mod_wanpipe event_handlers/mod_event_test event_handlers/mod_radius_cdr event_handlers/mod_zeroconf say/mod_say_es say/mod_say_nl +export DISABLED_MODULES=applications/mod_soundtouch directories/mod_ldap languages/mod_java languages/mod_python languages/mod_spidermonkey_skel ast_tts/mod_cepstral asr_tts/mod_lumenvox endpoints/mod_wanpipe event_handlers/mod_event_test event_handlers/mod_radius_cdr event_handlers/mod_zeroconf export XML_INT_MODULES=xml_int/mod_xml_rpc xml_int/mod_xml_curl xml_int/mod_xml_cdr export MYMODULES=$(PASSTHRU_CODEC_MODULES) $(SPIDERMONKEY_MODULES) $(APPLICATIONS_MODULES) $(ASR_TTS_MODULES) $(CODECS_MODULES) $(DIALPLANS_MODULES) $(DIRECTORIES_MODULES) $(DOTNET_MODULES) $(ENDPOINTS_MODULES) $(EVENT_HANDLERS_MODULES) $(FORMATS_MODULES) $(LANGUAGES_MODULES) $(LOGGERS_MODULES) $(SAY_MODULES) $(TIMERS_MODULES) $(XML_INT_MODULES) export MODULES=$(MYMODULES) @@ -49,14 +49,21 @@ config.status: configure dh_testdir - rm modules.conf + rm -f modules.conf touch modules.conf echo $(MODULES) for i in $(MODULES); do echo $$i >> modules.conf; done ./configure --prefix=/opt/freeswitch --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) ${FEATURES} -configure: bootstrap.sh - AUTOCONF=${AUTOCONF} ./bootstrap.sh +configure: + if test ! -f Makefile.in ; then \ + if test -f ./bootstrap.sh ; then \ + AUTOCONF=${AUTOCONF} ./bootstrap.sh ; \ + else \ + echo "No Makefile.in and no known way to bootstrap." ; \ + exit 1; \ + fi; \ + fi; build: build-stamp build-stamp: config.status @@ -89,7 +96,7 @@ dh_clean -k dh_installdirs -A --sourcedir=debian/tmp - $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install + $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install uhd-sounds-install moh-install # Build architecture-independent files here. @@ -116,8 +123,7 @@ # dh_installinfo # dh_undocumented # dh_installman - cp debian/monit/freeswitch.monitrc debian/freeswitch/etc/monit/freswitch.monitrc - cp debian/default/freeswitch debian/freeswitch/etc/default + cp debian/monit/freeswitch.monitrc debian/freeswitch/etc/monit/freeswitch.monitrc dh_install --sourcedir=debian/tmp dh_strip dh_compress Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/docs/ChangeLog ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/docs/ChangeLog (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/docs/ChangeLog Mon Aug 4 21:29:58 2008 @@ -1,143 +1,270 @@ -freeswitch (1.0.0) - - Enhanced sofia sip nat handling - Many fixes found by Klockwork (www.klocwork.com) - Added disable_app_log variable - Fixed mod_local_stream with rates on windows - Fixed finding of files in rate dirs on windows - Fixed memory corruption from sofia_contact function - Added sofia profile param NDLB-received-in-nat-reg-contact - Added sofia profile param aggressive-nat-detection - Fixed video sip calls in proxy media mode - Added bridge_terminate_key var - Update xmlrpc-c lib to trunk revision from upstream, fix windows xmlrpc - Enhanced nat handling in proxy media mode in sip - Add progress media to timetable so you can calculate pdd - Fixed seg when using unicast on socket when call has no read_codec - Fixed missed log events on busy box - Added -bleg to intercept - Enhance configure detection of python - Fixed build on solaris and freebsd for several modules - Added param "vm-email-only" to make voicemail sent by email only (previously default behavior) - Added param "vm-mailto-notify" to allow sending a notification email - Fixed mod_java build - Fixed mwi failures for some devices that don't subscribe - Removed fsapi functions (killchan, transfer, session_displace, reject) - Removed fsapi functions (session_record, broadcast, hold, media) - Many updates to sofia-sip library including over 100 fixes - -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 - Fixed video negotiation - Enhanced accuracy of windows timer - Fixed mod_ldap build - Added dialplan and context to sql table for channels - Multiple fixes to mod_lua and mod_perl - Fixed logic bug in fifo causing segfault - internal changes to sip stack so we can remove a hash redundant to the stack - Fixed multiple memory leaks in mod_sofia - Fixed event fetch segfault on sip subscribe - Fixed segfault on timer rollover in sofia on 64bit - Fixed audio timing issues in mod_portaudio - Changed names of sip profiles in default config to avoid confusion - Fixed memory usage leak-like behavior when playing files requiring resampling - Removed some unused api's - Fix rtp timeout when playing moh - Removed some un-needed libraries and files from tree - Fixed multiple issues in sip stack including multiple segfaults - Added support for sip transfers on bypass_media and proxy_media calls - Added say application - Fixed --disable-debug configure option - Enhanced switch_cpp wrapper (and perl, python, lua, java) - Fixed segfault on inavalid stun response - Fixed configure help output - Fixed segfault on mp3 playback - Fixed assert on invalid sdp (missing m= line) - Added configurable windows service name - Fixed proxy mode call transition to non proxy call - Fixed solaris build of voipcodecs - Fixed sofia seg when call failure edge case - -freeswitch (1.0.rc4) - - Add tab completion in cli - Add "inline" dialplan - Fixed segfault in enum - Enhance enum to fork dial equal priority entries - Added auto-reload to enum - Fixed odbc bug is mod_sofia presence handling - Add presence for conference and dial an eavesdrop - Fix stack overflow segfault when recursively parking calls - Fixed race is sofia registration handling - Enhance sofia registration, unregister on keep-alive OPTIONS failure - Added internal routing loop detection/avoidance - Fixed race in bgapi in event socket - Fixed vars to execute apps before bridge "bridge_pre_execute_aleg_app" and "bridge_pre_execute_bleg_app" - Fixed re-setting sound prefix to no prefix after a pharse - Enhanced setting of bracket vars from originate so they show in the CHANNEL_ORIGINATE event - Add "enable-timer" and "enable-100rel" options to turn off default behaviors in sofia - Add originate_timeout to originate vars - Fixed hanging channels in mod_portaudio - Added auto time sync on vps migration to different hardware - Fixed seg on transfer when both legs are not sip - Added configurable dtmf duration defaults - Enhanced voicemail, allow interruption of hello message - Fixed voicemail to not light up light on saved messages - Enhance mod_amr honor disable dtx in fmtp (MODCODEC-3) - Fixed bootstrap to install automake dependencies so you can use tarball without same version of automake installed - Fixed MODLANG-56 (bad audio on originate and javascript streamFile) - Added hold/unhold dialplan apps - Enhanced sofia error checking to outlaw 0.0.0.0 in sofia ip params - Backport fixes from sofia-sip tree - Fixed MSVC build - Fixed segfault on sip SUBSCRIBE with Expires: 0 - Added mod_say_zh - Added --with-pyton and --with-pyton-config configure options - Added mod_lua - Enhanced switch_cpp wrapper in core and normalized interfaces for perl, python, lua, and java - Fixed multiple issues in cpp wrapper and the languages perl, python, lua and java - Added back mod_perl - Added sofia gateway option ping to adjust options ping frequency - Added .net event socket lib to contrib - Fixed passing of exact response codes of sip across a bridge - Added mod_reference, reference endpoint module - Enhanced build so you can now make commented out modules using "make mod_name" - -freeswitch (1.0.rc3) - - Enhance xml menu system - Fixes upstream from sofia-sip library - Enhance mod_fifo - Added close method to ODBC spidermonkey class - Fix multiple bugs in the cpp wrapper used in mod_java and mod_python - Fix hung sip channel issue using respond app or on re-invite with bypass media after 1xx or 2xx responses - -freeswitch (1.0.rc2) - - Fixed speex protocol negotiation issues (8k vs 16k) - Fixed mod_iax race conditions - Fixed ptime negotiation issues when re-packetizing - Added ip based acl lists - -freeswitch (1.0.rc1) - - - +freeswitch (1.0.1) + + FIX: prevent intercept race condition that can also be solved with continue_on_fail=originator_cancel + FIX: NULL dereference detected by klockwork (www.klockwork.com) + FIX: don't open failed local stream (MODFORM-9) + FIX: instability in mod_local_stream in failure scenarios + FIX: xmlrpc-c build on OS X 10.4 (FSBUILD-47) + ENHANCEMENT: Added tab completion on many api commands in console + ENHANCEMENT: polycom BLF support + FIX: many sip NAT related fixes in mod_sofia + FIX: support sip unregister with Contact: * + FIX: multiple segfaults in xmlrpc-c + FIX: sip unregister event being skipped + FIX: hangup properly on malformed sip 3pcc calls being used as a way to ping + ADD: enable-3pcc sofia profile param, it is now disabled by default. + ADD: presence events to sip proxy mode + ADD: legs param to cdr_csv + ADD: support for perl as an embedded lanugage + ENHANCEMENT: many new api's and functions to the embedded languages including api support, xml interface support, auto start scripts, and many new objects + CHANGE: python embedded language api changed to match perl, lua, java + FIX: many stability fixes in embedded langauges perl, lua, java, python + ADD: failed_xml_cdr magic channel variable + FIX: access free memory error in mod_sofia when using respond app + ENHNACEMENT: make global_setvar only have 2 fields so you can set foo=bar=blah w/o quotes + FIX: mod_spidermonkey keep hangup hook in the session thread + ENHANCEMENT: mod_ldap added sasl support and search filters + ADD: answered, waitForAnswer and mediaReady methods to embedded language Session object + ENHANCEMENT: mod_voicemail param change to allow notification emails using templates + ADD: per user acl in sofia + FIX: deadlock in mod_portaudio + ENHANCEMENT: blank username in sip will trigger a lookup for the user "nobody" + ADD: import variable to import variables from a peer channel at time of originate + FIX: api type fix for c++ modules when incorrectly using enums + FIX: eliminate need for escaped , in [] on originate + ADD: NDLB-force-rport option to force behavior as if rport was sent in the via + ENHANCEMENT: honor execute_on_answer on outbound legs too + ADD: execute_on_ring variable + FIX: Seg fault in CoreSession() class destructor + ADD: per channel caller id in originate + ADD: sip_outgoing_call_id variable + FIX: multiple memory leaks in mod_sofia + FIX: find_local_ip IPv6 support + ADD: variable expansion to on execute vars.(FSCORE-114) + ADD: count optional arg to show calls and show channels (MODAPP-103) + FIX: MODEVENT-25 (WSAWOULDBLOCK error on socket send in windows) in event socket + FIX: multiple fixes to the logic in mod_say_zh + ADD: inter digit timeout to swigged embedded languages getDigits method. (MODLANG-65) + ADD: Linksys P-RTP-Stat SIP header values (SFSIP-66) + FIX: small leak in core + ADD: progress_timeout var to originate + UPDATE: portaudio library + FIX: added timeout to iax read + ADD: 'pa rescan' to portaudio to look for new devices + FIX: wait for broadcast to start when starting async hold to avoid race + FIX: mod_rss, don't always play the first news feed + FIX: mod_rss inverval to use the session inteval (audio problems on 30ms channels) + ADD: Path: support in mod_sofia on register + FIX: mod_shout record stream + ENHANCEMENT: mod_voicemail support for effective_caller_id_name/number + ADD: url encode/decode api calls + FIX: "nua()" in debug information in sofia instead of the real function name + FIX: better handling of sips: uris + FIX: don't seg when using more than SWITCH_MAX_CODECS and bump SWITCH_MAX_CODECS to 50 (we have more than 30 in tree) (MODFORM-10) + ADD: mod_yaml + FIX: segfault on freeswitch startup if installed directories are removed + FIX: segfault when intercept with inbound_late_negotiation=true set + FIX: dont flood logs with eavesdrop messages (MODAPP-101) + FIX: don't destroy a codec that has not been created (MODAPP-101) + ENHANCEMENT: allows the "eavesdrop_group" variable to contain several groups, comma separated. (MODAPP-101) + FIX: cross compile (FSBUILD-53) + FIX: add header that Nuaunce considers mandatory (MODASRTTS-5) + ADD: write locks to the core and a function to unregister event bindings (adds better ability to unload modules) + ENHANCEMENT: make modules unbind events and un-reserve subclasses on module unload + ADD: removable xml hook bindings + ADD: EventConsumer object to embedded languages so you can make event handlers + FIX: sending CN with supress-cng true + FIX: segfault in the event system when trying to remove NULL event + ADD: flags to turn off srtp auth and rtp auto adj (FSCORE-149 && MODENDP-115) + FIX: use lighter math and avoid infinite loop in port allocator (FSCORE-148) + ENHANCEMENT: let conference pin entry start during prompt (MODAPP-111) + ADD: mod_pocketsphinx + FIX: Misuse of SQLRowCount, issues with MSSQL (MODAPP-105) + FIX: segfaults in mod_python with dtmf callback + ENHANCEMENT: mod_conference auto-record parameter (MODAPP-112) + ENHANCEMENT: reload support to many modules + FIX: mod_sofia add replaces to supported header + ENHANCEMENT: add args callback to sleep so you can process dtmf and events while "sleeping" + ADD: mod_flite + ENHANCEMENT: switch_xml converted back to c code and support double globs on windows + ENHANCEMENT: mod_sofia support for adding and removing gateways without restarting profiles + ADD: extract contact header info into A channel when unhandled 3xx response is received (MODENDP-116) + FIX: outbound event_socket + late negotiation + ADD: copy_xml_cdr variable + ADD: silence_stream (like tone_stream but silent) + ADD: module_exists api call + ADD: emailer implementation for windows + ADD: wait_for_silence application + FIX: no error message generated if OS is unable to load a module ( due to dependency/installation issues ) + FIX: segfault in media bugs + FIX: acl lists not correctly matching all ip adresses + FIX: mod_spidermonkey exit() does not stop script when called from the hangup callback (return "exit" from the callback) + FIX: mod_syslog works again + FIX: crash on terminal resize + FIX: audio problems on big endian + ENHANCEMENT: Disable multiple registrations on a per-device basis (MODENDP-117) + ADD: fifo_consumer_exit_key variable (MODAPP-100) + ADD: cidr based user auth in mod_sofia + ADD: uuid_send_dtmf fsapi command (MODAPP-114) + ADD: server registration fiels to sip_registration database (MODENDP-118) + FIX: use a variable, realm or to host to find gateway when it's not obvious (handles challenged REFER) + ADD: timeout to curl run in javascript + ADD: voicemail_inject fsapi command + ADD: reboot option for sip phones to flush_inboud_reg sofia profile api command + FIX: add small padding to end of mp3 to avoid cut off mp3 recording + FIX: patch multiple SDP connection lines in sdp for proxy media mode (MODENDP-109) + FIX: don't parse ringback varable in proxy situations + ADD: per call vm recording ext with vm_message_ext variable + ADD: sip_bye_h prefix to add headers to bye + ENHANCEMENT: more interfaces available in show fsapi command + FIX: don't leak in buffers on realloc fail + FIX: fail out of a conference call if write fails + ADD: auto ip-change detection + ADD: mod_snom + FIX: mod_sofia don't send sipfrag on transfer to cisco so they don't hang up the call + + + +freeswitch (1.0.0) + + Enhanced sofia sip nat handling + Many fixes found by Klockwork (www.klocwork.com) + Added disable_app_log variable + Fixed mod_local_stream with rates on windows + Fixed finding of files in rate dirs on windows + Fixed memory corruption from sofia_contact function + Added sofia profile param NDLB-received-in-nat-reg-contact + Added sofia profile param aggressive-nat-detection + Fixed video sip calls in proxy media mode + Added bridge_terminate_key var + Update xmlrpc-c lib to trunk revision from upstream, fix windows xmlrpc + Enhanced nat handling in proxy media mode in sip + Add progress media to timetable so you can calculate pdd + Fixed seg when using unicast on socket when call has no read_codec + Fixed missed log events on busy box + Added -bleg to intercept + Enhance configure detection of python + Fixed build on solaris and freebsd for several modules + Added param "vm-email-only" to make voicemail sent by email only (previously default behavior) + Added param "vm-mailto-notify" to allow sending a notification email + Fixed mod_java build + Fixed mwi failures for some devices that don't subscribe + Removed fsapi functions (killchan, transfer, session_displace, reject) + Removed fsapi functions (session_record, broadcast, hold, media) + Many updates to sofia-sip library including over 100 fixes + +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 + Fixed video negotiation + Enhanced accuracy of windows timer + Fixed mod_ldap build + Added dialplan and context to sql table for channels + Multiple fixes to mod_lua and mod_perl + Fixed logic bug in fifo causing segfault + internal changes to sip stack so we can remove a hash redundant to the stack + Fixed multiple memory leaks in mod_sofia + Fixed event fetch segfault on sip subscribe + Fixed segfault on timer rollover in sofia on 64bit + Fixed audio timing issues in mod_portaudio + Changed names of sip profiles in default config to avoid confusion + Fixed memory usage leak-like behavior when playing files requiring resampling + Removed some unused api's + Fix rtp timeout when playing moh + Removed some un-needed libraries and files from tree + Fixed multiple issues in sip stack including multiple segfaults + Added support for sip transfers on bypass_media and proxy_media calls + Added say application + Fixed --disable-debug configure option + Enhanced switch_cpp wrapper (and perl, python, lua, java) + Fixed segfault on inavalid stun response + Fixed configure help output + Fixed segfault on mp3 playback + Fixed assert on invalid sdp (missing m= line) + Added configurable windows service name + Fixed proxy mode call transition to non proxy call + Fixed solaris build of voipcodecs + Fixed sofia seg when call failure edge case + +freeswitch (1.0.rc4) + + Add tab completion in cli + Add "inline" dialplan + Fixed segfault in enum + Enhance enum to fork dial equal priority entries + Added auto-reload to enum + Fixed odbc bug is mod_sofia presence handling + Add presence for conference and dial an eavesdrop + Fix stack overflow segfault when recursively parking calls + Fixed race is sofia registration handling + Enhance sofia registration, unregister on keep-alive OPTIONS failure + Added internal routing loop detection/avoidance + Fixed race in bgapi in event socket + Fixed vars to execute apps before bridge "bridge_pre_execute_aleg_app" and "bridge_pre_execute_bleg_app" + Fixed re-setting sound prefix to no prefix after a pharse + Enhanced setting of bracket vars from originate so they show in the CHANNEL_ORIGINATE event + Add "enable-timer" and "enable-100rel" options to turn off default behaviors in sofia + Add originate_timeout to originate vars + Fixed hanging channels in mod_portaudio + Added auto time sync on vps migration to different hardware + Fixed seg on transfer when both legs are not sip + Added configurable dtmf duration defaults + Enhanced voicemail, allow interruption of hello message + Fixed voicemail to not light up light on saved messages + Enhance mod_amr honor disable dtx in fmtp (MODCODEC-3) + Fixed bootstrap to install automake dependencies so you can use tarball without same version of automake installed + Fixed MODLANG-56 (bad audio on originate and javascript streamFile) + Added hold/unhold dialplan apps + Enhanced sofia error checking to outlaw 0.0.0.0 in sofia ip params + Backport fixes from sofia-sip tree + Fixed MSVC build + Fixed segfault on sip SUBSCRIBE with Expires: 0 + Added mod_say_zh + Added --with-pyton and --with-pyton-config configure options + Added mod_lua + Enhanced switch_cpp wrapper in core and normalized interfaces for perl, python, lua, and java + Fixed multiple issues in cpp wrapper and the languages perl, python, lua and java + Added back mod_perl + Added sofia gateway option ping to adjust options ping frequency + Added .net event socket lib to contrib + Fixed passing of exact response codes of sip across a bridge + Added mod_reference, reference endpoint module + Enhanced build so you can now make commented out modules using "make mod_name" + +freeswitch (1.0.rc3) + + Enhance xml menu system + Fixes upstream from sofia-sip library + Enhance mod_fifo + Added close method to ODBC spidermonkey class + Fix multiple bugs in the cpp wrapper used in mod_java and mod_python + Fix hung sip channel issue using respond app or on re-invite with bypass media after 1xx or 2xx responses + +freeswitch (1.0.rc2) + + Fixed speex protocol negotiation issues (8k vs 16k) + Fixed mod_iax race conditions + Fixed ptime negotiation issues when re-packetizing + Added ip based acl lists + +freeswitch (1.0.rc1) + + + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/docs/phrase/phrase_en.xml ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/docs/phrase/phrase_en.xml (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/docs/phrase/phrase_en.xml Mon Aug 4 21:29:58 2008 @@ -209,7 +209,7 @@ - + @@ -232,5 +232,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/freeswitch.spec ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/freeswitch.spec (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/freeswitch.spec Mon Aug 4 21:29:58 2008 @@ -5,7 +5,7 @@ Summary: FreeSWITCH open source telephony platform License: MPL Group: Productivity/Telephony/Servers -Version: 1.0.rc6 +Version: 1.0 Release: 1 URL: http://www.freeswitch.org/ Packager: Michal Bielicki @@ -16,11 +16,9 @@ #AutoReqProv: no %if 0%{?suse_version} > 100 -BuildRequires: alsa-devel #BuildRequires: openldap2-devel BuildRequires: lzo-devel %else -BuildRequires: alsa-lib-devel BuildRequires: openldap-devel %endif BuildRequires: autoconf @@ -35,6 +33,8 @@ BuildRequires: pkgconfig BuildRequires: termcap BuildRequires: unixODBC-devel +BuildRequires: gdbm-devel +BuildRequires: db4-devel %if %{?suse_version:1}0 %if 0%{?suse_version} > 910 @@ -153,7 +153,7 @@ PASSTHRU_CODEC_MODULES="codecs/mod_g729 codecs/mod_g723_1 codecs/mod_amr" SPIDERMONKEY_MODULES="languages/mod_spidermonkey languages/mod_spidermonkey_curl languages/mod_spidermonkey_core_db languages/mod_spidermonkey_odbc languages/mod_spidermonkey_socket languages/mod_spidermonkey_teletone" APPLICATIONS_MODULES="applications/mod_commands applications/mod_conference applications/mod_dptools applications/mod_enum applications/mod_esf applications/mod_expr applications/mod_fifo applications/mod_limit applications/mod_rss applications/mod_voicemail applications/mod_fsv" -ASR_TTS_MODULES="asr_tts/mod_openmrcp" +ASR_TTS_MODULES="asr_tts/mod_openmrcp asr_tts/mod_pocketsphinx asr_tts/mod_flite" CODECS_MODULES="codecs/mod_ilbc codecs/mod_h26x codecs/mod_voipcodecs codecs/mod_speex" DIALPLANS_MODULES="dialplans/mod_dialplan_asterisk dialplans/mod_dialplan_directory dialplans/mod_dialplan_xml" DIRECTORIES_MODULES= @@ -165,12 +165,12 @@ LOGGERS_MODULES="loggers/mod_console loggers/mod_logfile loggers/mod_syslog" SAY_MODULES="say/mod_say_en" TIMERS_MODULES= -DISABLED_MODULES="applications/mod_sountouch directories/mod_ldap languages/mod_java languages/mod_python languages/mod_spidermonkey_skel ast_tts/mod_cepstral asr_tts/mod_lumenvox endpoints/mod_wanpipe event_handlers/mod_event_test event_handlers/mod_radius_cdr event_handlers/mod_zeroconf formats/mod_shout say/mod_say_it say/mod_say_es say/mod_say_nl" +DISABLED_MODULES="applications/mod_soundtouch directories/mod_ldap languages/mod_java languages/mod_python languages/mod_spidermonkey_skel ast_tts/mod_cepstral asr_tts/mod_lumenvox endpoints/mod_wanpipe event_handlers/mod_event_test event_handlers/mod_radius_cdr event_handlers/mod_zeroconf formats/mod_shout say/mod_say_it say/mod_say_es say/mod_say_nl" XML_INT_MODULES="xml_int/mod_xml_rpc xml_int/mod_xml_curl xml_int/mod_xml_cdr" MYMODULES="$PASSTHRU_CODEC_MODULES $SPIDERMONKEY_MODULES $APPLICATIONS_MODULES $ASR_TTS_MODULES $CODECS_MODULES $DIALPLANS_MODULES $DIRECTORIES_MODULES $DOTNET_MODULES $ENDPOINTS_MODULES $EVENT_HANDLERS_MODULES $FORMATS_MODULES $LANGUAGES_MODULES $LOGGERS_MODULES $SAY_MODULES $TIMERS_MODULES $XML_INT_MODULES" export MODULES=$MYMODULES -rm modules.conf +test ! -f modules.conf || rm -f modules.conf touch modules.conf for i in $MODULES; do echo $i >> modules.conf; done export VERBOSE=yes @@ -180,7 +180,7 @@ if test ! -f Makefile.in then - bootstrap.sh + ./bootstrap.sh fi @@ -279,7 +279,7 @@ %dir %attr(0750, freeswitch, daemon) %{prefix}/conf/autoload_configs %dir %attr(0750, freeswitch, daemon) %{prefix}/conf/dialplan %dir %attr(0750, freeswitch, daemon) %{prefix}/conf/directory -%dir %attr(0750, freeswitch. daemon) %{prefix}/conf/directory/default +%dir %attr(0750, freeswitch, daemon) %{prefix}/conf/directory/default %dir %attr(0750, freeswitch, daemon) %{prefix}/conf/lang %dir %attr(0750, freeswitch, daemon) %{prefix}/conf/mrcp_profiles %dir %attr(0750, freeswitch, daemon) %{prefix}/conf/sip_profiles @@ -288,6 +288,10 @@ %dir %attr(0750, freeswitch, daemon) %{prefix}/conf/sip_profiles/internal %dir %attr(0750, freeswitch, daemon) %{prefix}/conf/sip_profiles/external %dir %attr(0750, freeswitch, daemon) %{prefix}/conf/jingle_profiles +%dir %attr(0750, freeswitch, daemon) %{prefix}/grammar +%dir %attr(0750, freeswitch, daemon) %{prefix}/grammar/model +%dir %attr(0750, freeswitch, daemon) %{prefix}/grammar/model/communicator +%dir %attr(0750, freeswitch, daemon) %{prefix}/grammar/model/wsj1 %ifos linux %config(noreplace) %attr(0644, freeswitch, daemon) /etc/monit.d/freeswitch.monitrc %endif @@ -296,6 +300,7 @@ %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/*.ttml %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/*.xml %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/*.conf +%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/cmudict.0.6d %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/acl.conf.xml %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/alsa.conf.xml %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/conference.conf.xml @@ -314,8 +319,10 @@ %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/logfile.conf.xml %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/modules.conf.xml %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/openmrcp.conf.xml +%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/pocketsphinx.conf.xml %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/portaudio.conf.xml %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/post_load_modules.conf.xml +%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/python.conf.xml %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/rss.conf.xml %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/sofia.conf.xml %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/switch.conf.xml @@ -328,6 +335,7 @@ %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/xml_rpc.conf.xml %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/autoload_configs/zeroconf.conf.xml %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/dialplan/*.xml +%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/dialplan/extensions/*.xml %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/directory/*.xml %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/directory/default/* %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/mrcp_profiles/*.xml @@ -336,6 +344,9 @@ %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/sip_profiles/external/*.xml %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/sip_profiles/nat/*.xml %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/conf/jingle_profiles/*.xml +%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/grammar/Makefile +%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/grammar/model/communicator/* +%config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/grammar/model/wsj1/* %config(noreplace) %attr(0640, freeswitch, daemon) %{prefix}/htdocs/* %ifos linux /etc/ld.so.conf.d/* @@ -361,6 +372,8 @@ %{prefix}/mod/mod_rss.so* %{prefix}/mod/mod_voicemail.so* %{prefix}/mod/mod_openmrcp.so* +%{prefix}/mod/mod_pocketsphinx.so* +%{prefix}/mod/mod_flite.so* %{prefix}/mod/mod_ilbc.so* %{prefix}/mod/mod_h26x.so* %{prefix}/mod/mod_voipcodecs.so* Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/PHP/fs_curl/configuration/console.conf.php ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/PHP/fs_curl/configuration/console.conf.php (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/PHP/fs_curl/configuration/console.conf.php Mon Aug 4 21:29:58 2008 @@ -30,21 +30,36 @@ $this -> xmlw -> writeAttribute('name', basename(__FILE__, '.php')); $this -> xmlw -> writeAttribute('description', 'Console configuration'); + $this -> xmlw -> startElement('mappings'); + + $this -> xmlw -> startElement('map'); + $this -> xmlw -> writeAttribute('name', 'all'); + $this -> xmlw -> writeAttribute('value', 'notice,warning,error,crit,alert,info,debug'); + $this -> xmlw -> endElement(); + + $this -> xmlw -> endElement(); + + + + $this -> xmlw -> startElement('settings'); - $this -> xmlw -> startElement('param'); + + $this -> xmlw -> startElement('param'); $this -> xmlw -> writeAttribute('name', 'colorize'); $this -> xmlw -> writeAttribute('value', 'true'); - $this -> xmlw -> endElement(); - $this -> xmlw -> endElement(); + $this -> xmlw -> endElement(); + + $this -> xmlw -> startElement('param'); + $this -> xmlw -> writeAttribute('name', 'loglevel'); + $this -> xmlw -> writeAttribute('value', 'debug'); + $this -> xmlw -> endElement(); + + $this -> xmlw -> endElement(); + + - $this -> xmlw -> startElement('mappings'); - $this -> xmlw -> startElement('map'); - $this -> xmlw -> writeAttribute('name', 'all'); - $this -> xmlw -> writeAttribute('value', 'notice,warning,error,crit,alert'); - $this -> xmlw -> endElement(); - $this -> xmlw -> endElement(); $this -> xmlw -> endElement(); } } -?> \ No newline at end of file +?> Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/PHP/fs_curl/dialplan_importer.php ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/PHP/fs_curl/dialplan_importer.php (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/PHP/fs_curl/dialplan_importer.php Mon Aug 4 21:29:58 2008 @@ -39,12 +39,13 @@ * @return null */ function run_query($db, $query) { + syslog(LOG_INFO, $query); $affected = $db -> exec($query); if (MDB2::isError($affected)) { if (!defined('UNSUCCESSFUL_QUERY')) { define('UNSUCCESSFUL_QUERY', true); } - echo "$query\n"; + echo "$query
\n"; echo $affected -> getMessage() . "\n"; } } @@ -96,7 +97,7 @@ $xml_file = $_FILES['file']['tmp_name']; move_uploaded_file($tmp_file, $xml_file); //echo $xml_file . "\n
"; - $xml_str = sprintf('%s', file_get_contents($xml_file)); + $xml_str = sprintf('%s', file_get_contents($xml_file)); //echo $xml_str; } @@ -111,27 +112,29 @@ $global_weight = 100; foreach ($context -> extension as $extension) { $en = $extension['name']; - $ec = is_numeric($extension['continue']) ? $extension['continue'] : '0'; + //printf("
%s
", print_r($extension, true)); + $ec = $extension['continue']; $global_weight+=100; foreach ($extension -> condition as $condition) { //print_r($condition); $cf = $condition['field']; - $ce = $condition['expression']; - $cc = $condition['continue']; + $ce = addslashes($condition['expression']); + //echo "
Condidtion Expression for $en:\n    before: " . $condition['expression'] . "\n    after: $ce
"; + $cb = $condition['break']; $weight = 0; foreach ($condition as $type => $action) { //echo "-------------------$type-----------------------------\n"; $app_name = $action['application']; - $app_data = $action['data']; + $app_data = addslashes($action['data']); $weight++; //echo "$cn\t$en\t$cf\t$ce\t$cc\t$app_name\t$app_data\t$ec\t$global_weight\t$weight\n"; $query = sprintf('%s %s %s %s %s %s;', - "INSERT INTO curl_dialplan SET", + "INSERT INTO dialplan SET", "context='$cn', extension='$en', condition_field='$cf',", "condition_expression='$ce', application_name='$app_name',", "application_data='$app_data', weight='$weight', type='$type',", "ext_continue='$ec', global_weight='$global_weight',", - "condition_continue='$cc'" + "cond_break='$cb'" ); run_query($db, $query); } @@ -144,4 +147,6 @@ echo "

File Successfully Imported

"; } upload_form(); -?> \ No newline at end of file + +//printf("
%s
", print_r($xml_obj, true); +?> Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/PHP/fs_curl/fs_curl.php ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/PHP/fs_curl/fs_curl.php (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/PHP/fs_curl/fs_curl.php Mon Aug 4 21:29:58 2008 @@ -51,6 +51,7 @@ * @return void */ public function fs_curl() { + openlog('fs_curl', LOG_NDELAY | LOG_PID, LOG_LOCAL0); header('Content-Type: text/xml'); $this -> open_xml(); $this -> generate_request_array(); @@ -187,7 +188,7 @@ } $xml_out = $this -> xmlw -> outputMemory(); $this -> debug('---- Start XML Output ----'); - $this -> debug($xml_out); + $this -> debug(explode("\n", $xml_out)); $this -> debug('---- End XML Output ----'); echo $xml_out; exit(); @@ -320,4 +321,4 @@ } } } -?> \ No newline at end of file +?> Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/PHP/fs_curl/fs_dialplan.php ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/PHP/fs_curl/fs_dialplan.php (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/PHP/fs_curl/fs_dialplan.php Mon Aug 4 21:29:58 2008 @@ -26,7 +26,7 @@ /** * This is the method that determines the XML output. Customized dialplans can - * be easily created by adding a record to the dialplan_special table with the + * be easily created by adding a record to the dialplan_special table with the * appropriate values. The php class MUST contain a "main()" method. The method * should write directly to the xmlw obj that's pased or take care of writing * out the xml itself and exiting as to not return. @@ -120,7 +120,7 @@ * @see fs_dialplan::get_dialplan * @param array $dpArray Multi-dimentional array from which we write the XML * @todo this method should REALLY be broken down into several smaller methods - * + * */ private function writeDialplan($dpArray) { //print_r($dpArray); @@ -140,7 +140,7 @@ $ex_split = split(';', $extension); $this -> xmlw -> startElement('extension'); $this -> xmlw -> writeAttribute('name', $ex_split[0]); - if ($ex_split[1] > 0) { + if (strlen($ex_split[1]) > 0) { $this -> xmlw -> writeAttribute('continue', $ex_split[1]); } $this -> debug($conditions); Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/PHP/fs_curl/global_defines.php ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/PHP/fs_curl/global_defines.php (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/PHP/fs_curl/global_defines.php Mon Aug 4 21:29:58 2008 @@ -43,7 +43,7 @@ /** * Define debug level... should not be used in production for performance reasons */ -define('FS_CURL_DEBUG', 0); +define('FS_CURL_DEBUG', 9); /** * define how debugging should be done (depends on FS_CURL_DEBUG) @@ -62,4 +62,4 @@ //define('', ''); -?> \ No newline at end of file +?> Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/perl/fspb ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/perl/fspb (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/intralanman/perl/fspb Mon Aug 4 21:29:58 2008 @@ -14,6 +14,7 @@ } my $ua = new LWP::UserAgent; +$ua->env_proxy(); my $url = 'http://pastebin.freeswitch.org/'; my $line; my $text; Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/EventWatcher/EventWatcher.csproj ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/EventWatcher/EventWatcher.csproj (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/EventWatcher/EventWatcher.csproj Mon Aug 4 21:29:58 2008 @@ -40,6 +40,12 @@ + + Form + + + ChannelWatcher.cs + Form @@ -52,6 +58,10 @@ + + Designer + ChannelWatcher.cs + Designer Form1.cs Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/EventWatcher/Program.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/EventWatcher/Program.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/EventWatcher/Program.cs Mon Aug 4 21:29:58 2008 @@ -14,7 +14,7 @@ { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new Form1()); + Application.Run(new ChannelWatcher()); } } } \ No newline at end of file Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/Program.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/Program.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitch.EventSocket.Test/Program.cs Mon Aug 4 21:29:58 2008 @@ -1,8 +1,7 @@ using System; -using System.Collections.Generic; +using System.Collections.Specialized; using System.IO; -using System.Reflection; -using System.Text; +using System.Threading; namespace FreeSwitch.EventSocket.Test { @@ -10,18 +9,70 @@ { static void Main(string[] args) { - EventManager mgr = new EventManager(); + /*EventManager mgr = new EventManager(); mgr.Subscribe(Events.GetChannelEvents()); mgr.Start("localhost"); Console.ReadLine(); + */ + Program p = new Program(); + p.Test(); - string buffer = File.ReadAllText("..\\..\\..\\watcherRaw.log"); - int bufLen = buffer.Length; + } + + private int _counter; + private EventParser _parser; + Random _rand = new Random((int)DateTime.Now.Ticks); + + public void Test() + { + _parser = new EventParser(); + string text = File.ReadAllText("C:\\mymsgs.txt"); + Thread[] threads = new Thread[5]; + for (int i = 0; i < 5; ++i) + threads[i] = new Thread(FeedStream); + + while (StreamFeeder(ref text)) ; + //Parse(text); +/* + Parse(File.ReadAllText("C:\\events1.txt")); + Parse(File.ReadAllText("C:\\events2.txt")); + Parse(File.ReadAllText("C:\\events3.txt")); +*/ + } + + public void FeedStream() + { + + } + public bool StreamFeeder(ref string text) + { + int length; + if (text.Length < 5) + length = text.Length; + else + length = _rand.Next(text.Length / 2); + + string myText = text.Substring(0, length); + Parse(myText); + text = text.Remove(0, length); + return text.Length > 0; + } + + public void Parse(string text) + { + _parser.Append(text); + PlainEventMsg msg = _parser.ParseOne(); + while (msg != null) + { + ++_counter; + + NameValueCollection pars = msg.ParseBody(true); + Console.WriteLine(pars["event-name"]); + + msg = _parser.ParseOne(); + } - EventParser ep = new EventParser(buffer); - //int cnt = 0; - EventSocket es = new EventSocket(); - es.Setup(); + } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/ChannelEvent.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/ChannelEvent.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/ChannelEvent.cs Mon Aug 4 21:29:58 2008 @@ -1,7 +1,3 @@ -using System; -using System.Collections.Generic; -using System.Text; - namespace FreeSwitch.EventSocket { public class ChannelEvent : EventBase @@ -62,5 +58,12 @@ return true; } + + public override string ToString() + { + return + "ChannelEvent(" + _uniqueId + " [" + _callDirection + "] " + _answerState + + ", channelInfo{" + _channelInfo + "})"; + } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelAnswer.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelAnswer.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelAnswer.cs Mon Aug 4 21:29:58 2008 @@ -2,5 +2,9 @@ { public class EventChannelAnswer : EventChannelState { + public override string ToString() + { + return "ChannelAnswer." + base.ToString(); + } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelApplication.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelApplication.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelApplication.cs Mon Aug 4 21:29:58 2008 @@ -1,10 +1,10 @@ -using System; -using System.Collections.Generic; -using System.Text; - namespace FreeSwitch.EventSocket { public class EventChannelApplication : EventChannelState { + public override string ToString() + { + return "ChannelApplication." + base.ToString(); + } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelBridge.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelBridge.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelBridge.cs Mon Aug 4 21:29:58 2008 @@ -1,10 +1,10 @@ -using System; -using System.Collections.Generic; -using System.Text; - namespace FreeSwitch.EventSocket { public class EventChannelBridge : EventChannelState { + public override string ToString() + { + return "ChannelBridge." + base.ToString(); + } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelCreate.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelCreate.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelCreate.cs Mon Aug 4 21:29:58 2008 @@ -2,5 +2,9 @@ { public class EventChannelCreate : ChannelEvent { + public override string ToString() + { + return "ChannelCreate." + base.ToString(); + } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelDestroy.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelDestroy.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelDestroy.cs Mon Aug 4 21:29:58 2008 @@ -1,10 +1,10 @@ -using System; -using System.Collections.Generic; -using System.Text; - namespace FreeSwitch.EventSocket { public class EventChannelDestroy : EventChannelState { + public override string ToString() + { + return "ChannelDestroy." + base.ToString(); + } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelExecute.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelExecute.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelExecute.cs Mon Aug 4 21:29:58 2008 @@ -28,5 +28,10 @@ return true; } + + public override string ToString() + { + return "EventChannelExecute(" + _appName + ", '" + _arguments + "')." + base.ToString(); + } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelExecuteComplete.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelExecuteComplete.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelExecuteComplete.cs Mon Aug 4 21:29:58 2008 @@ -28,6 +28,11 @@ return true; } + + public override string ToString() + { + return "ExecuteComplete(" + _appName + ", '" + _arguments + "')." + base.ToString(); + } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelHangup.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelHangup.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelHangup.cs Mon Aug 4 21:29:58 2008 @@ -33,6 +33,10 @@ return true; } + public override string ToString() + { + return "ChannelHangup(" + _hangupCause + ")." + base.ToString(); + } } public enum HangupCause Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelOriginate.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelOriginate.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelOriginate.cs Mon Aug 4 21:29:58 2008 @@ -1,11 +1,10 @@ -using System; -using System.Collections.Generic; -using System.Text; - namespace FreeSwitch.EventSocket { public class EventChannelOriginate : ChannelEvent { - + public override string ToString() + { + return "ChannelOriginate." + base.ToString(); + } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelOutgoing.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelOutgoing.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelOutgoing.cs Mon Aug 4 21:29:58 2008 @@ -1,11 +1,10 @@ -using System; -using System.Collections.Generic; -using System.Text; - namespace FreeSwitch.EventSocket { public class EventChannelOutgoing : EventChannelState { - + public override string ToString() + { + return "ChannelOutgoing." + base.ToString(); + } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelProgress.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelProgress.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelProgress.cs Mon Aug 4 21:29:58 2008 @@ -1,10 +1,10 @@ -using System; -using System.Collections.Generic; -using System.Text; - namespace FreeSwitch.EventSocket { public class EventChannelProgress : EventChannelState { + public override string ToString() + { + return "ChannelProgress" + base.ToString(); + } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelState.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelState.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelState.cs Mon Aug 4 21:29:58 2008 @@ -2,8 +2,15 @@ { public class EventChannelState : ChannelEvent { - private PartyInfo _caller = new PartyInfo(); - private PartyInfo _originator = new PartyInfo(); + private const string Yes = "yes"; + private const string CallerTag = "caller-"; + private const string OriginatorTag = "originator-"; + private const string OriginateeTag = "originatee-"; + private const string OtherLegTag = "other-leg-"; + private const string ScreenBitTag = "screen-bit"; + private PartyInfo _caller = PartyInfo.Empty; + private PartyInfo _originator = PartyInfo.Empty; + private PartyInfo _otherLeg = PartyInfo.Empty; private bool _screenBit = false; /// @@ -34,30 +41,58 @@ set { _screenBit = value; } } + /// + /// Other leg of call. + /// + public PartyInfo OtherLeg + { + get { return _otherLeg; } + set { _otherLeg = value; } + } + public override bool ParseCommand(string name, string value) { - if (name == "screen-bit") + if (name == ScreenBitTag) { - ScreenBit = value == "yes"; + ScreenBit = value == Yes; return true; } - else if (name.Length > 11 && name.Substring(0, 11) == "originator-" - || name.Length > 11 && name.Substring(0, 11) == "originatee-") + else if (name.Length > 11 && name.Substring(0, 11) == OriginatorTag + || name.Length > 11 && name.Substring(0, 11) == OriginateeTag) { - if (_originator == null) + if (_originator == PartyInfo.Empty) _originator = new PartyInfo(); return _originator.Parse(name.Substring(11), value); } - else if (name.Length > 7 && name.Substring(0, 7) == "caller-") + else if (name.Length > 7 && name.Substring(0, 7) == CallerTag) { - if (_caller == null) + if (_caller == PartyInfo.Empty) _caller = new PartyInfo(); return _caller.Parse(name.Substring(7), value); } + else if (name.Length > 10 && name.Substring(0, 10) == OtherLegTag) + { + if (_otherLeg == PartyInfo.Empty) + _otherLeg = new PartyInfo(); + + return _otherLeg.Parse(name.Substring(10), value); + } else return base.ParseCommand(name, value); } + + public override string ToString() + { + string temp = "ChannelState("; + if (Caller != PartyInfo.Empty) + temp += " Caller{" + Caller + "}"; + if (Originator != PartyInfo.Empty) + temp += " Originator{" + Originator + "}"; + if (OtherLeg != PartyInfo.Empty) + temp += " OtherLeg{" + OtherLeg + "}"; + return temp + ")." + base.ToString(); + } } } \ No newline at end of file Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelUnbridge.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelUnbridge.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelUnbridge.cs Mon Aug 4 21:29:58 2008 @@ -1,10 +1,10 @@ -using System; -using System.Collections.Generic; -using System.Text; - namespace FreeSwitch.EventSocket { public class EventChannelUnbridge : EventChannelState { + public override string ToString() + { + return "ChannelUnbridge." + base.ToString(); + } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelUnpark.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelUnpark.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventChannelUnpark.cs Mon Aug 4 21:29:58 2008 @@ -1,10 +1,10 @@ -using System; -using System.Collections.Generic; -using System.Text; - namespace FreeSwitch.EventSocket { public class EventChannelUnpark : EventChannelState { + public override string ToString() + { + return "ChannelUnpark." + base.ToString(); + } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventCodec.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventCodec.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventCodec.cs Mon Aug 4 21:29:58 2008 @@ -2,5 +2,9 @@ { public class EventCodec : EventChannelState { + public override string ToString() + { + return "Codec." + base.ToString(); + } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventDtmf.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventDtmf.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventDtmf.cs Mon Aug 4 21:29:58 2008 @@ -31,5 +31,10 @@ return base.ParseCommand(name, value); } + + public override string ToString() + { + return "Dtmf(" + _digit + ")." + base.ToString(); + } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventDtmfStatus.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventDtmfStatus.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelEvents/EventDtmfStatus.cs Mon Aug 4 21:29:58 2008 @@ -27,5 +27,10 @@ return base.ParseCommand(name, value); } + + public override string ToString() + { + return "DtmfStatus." + base.ToString(); + } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelInfo.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelInfo.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/ChannelInfo.cs Mon Aug 4 21:29:58 2008 @@ -9,8 +9,10 @@ SoftExecute, // Channel is in a passive transmit state Execute, // Channel is executing it's dialplan ExchangeMedia, // Channel is exchanging media + Park, ConsumeMedia, // Channel is consuming media Hibernate, // Channel is in a sleep state + Reset, Hangup, // Channel is flagged for hangup and ready to end Done, // Channel is ready to be destroyed and out of the state machine Unknown @@ -21,9 +23,9 @@ { private ChannelState _state; private int _stateNumber; - private string _profile; - private string _address; - private string _hostName; + private string _profile = string.Empty; + private string _address = string.Empty; + private string _hostName = string.Empty; private string _protocol = string.Empty; private string _readCodecName; private int _readCodecRate; @@ -209,10 +211,12 @@ case "CS_SOFT_EXECUTE": return ChannelState.SoftExecute; case "CS_EXECUTE": return ChannelState.Execute; case "CS_EXCHANGE_MEDIA": return ChannelState.ExchangeMedia; + case "CS_PARK": return ChannelState.Park; case "CS_CONSUME_MEDIA": return ChannelState.ConsumeMedia; case "CS_HIBERNATE": return ChannelState.Hibernate; case "CS_HANGUP": return ChannelState.Hangup; case "CS_DONE": return ChannelState.Done; + case "CS_RESET": return ChannelState.Reset; default: return ChannelState.Unknown; } } @@ -221,5 +225,10 @@ { return "Unknown"; } + + public override string ToString() + { + return _address + "@" + _hostName + ": " + _state; + } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Originate.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Originate.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/Originate.cs Mon Aug 4 21:29:58 2008 @@ -25,6 +25,7 @@ private readonly IList _variables = new List(); private string _callerIdName = null; private string _callerIdNumber = null; + private bool _varsAdded = false; public Originate() {} @@ -73,9 +74,13 @@ { get { - _variables.Add(new ChannelVariable("origination_caller_id_name", CallerIdName ?? _caller.Extension)); - if (!string.IsNullOrEmpty(_callerIdNumber)) - _variables.Add(new ChannelVariable("origination_caller_id_number", _callerIdNumber)); + if (!_varsAdded) + { + _variables.Add(new ChannelVariable("origination_caller_id_name", CallerIdName ?? _caller.Extension)); + if (!string.IsNullOrEmpty(_callerIdNumber)) + _variables.Add(new ChannelVariable("origination_caller_id_number", _callerIdNumber)); + _varsAdded = true; + } string variables = string.Empty; foreach (ChannelVariable var in _variables) Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventManager.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventManager.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventManager.cs Mon Aug 4 21:29:58 2008 @@ -13,8 +13,8 @@ { private readonly EventSocket _socket = new EventSocket(); public event EventHandler EventReceived; - private EventsWriter _writer; - private TextWriter _myWriter; + private readonly EventsWriter _writer; + private readonly TextWriter _rawLog; public string Password { set { _socket.Password = value; } @@ -22,13 +22,14 @@ public EventManager() { - _writer = MyWriter; - _myWriter = new StreamWriter(new FileStream("C:\\temp\\WatcherRow.log", FileMode.Create, FileAccess.Write, FileShare.ReadWrite)); + _writer = RawWriter; + _rawLog = new StreamWriter(new FileStream("C:\\temp\\WatcherRaw.log", FileMode.Create, FileAccess.Write, FileShare.ReadWrite)); } - private void MyWriter(string text) + private void RawWriter(string text) { - _myWriter.Write(text); + _rawLog.Write(text); + _rawLog.Flush(); } @@ -68,7 +69,7 @@ protected void OnMessage(PlainEventMsg msg) { - NameValueCollection parameters = msg.BodyToNameValue(true); + NameValueCollection parameters = msg.ParseBody(true); string eventName = parameters["event-name"]; if (eventName == null) return; Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventParser.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventParser.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventParser.cs Mon Aug 4 21:29:58 2008 @@ -1,99 +1,190 @@ -using EventSocketParser; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; namespace FreeSwitch.EventSocket { public class EventParser { - private PlainEventMsg _msg; - private readonly StringParser _parser; + private static readonly char[] BugWorkaround = {'C', 'o', 'n', 't', 'e', 'n', 't', '-'}; + private readonly StringBuilder _text = new StringBuilder(); + private readonly Queue _piecesToAppend = new Queue(); - public EventParser(string text) + public string Text { - _parser = new StringParser(text); + get { return _text.ToString(); } } - public PlainEventMsg ParseMessage() + internal static void ParseHeaders(PlainEventMsg msg, string header) { - _parser.ClearSavedPositions(); - _msg = new PlainEventMsg(); - - // Save pos if we cant parse the whole message - _parser.SavePos(); - - ReadHeader(); - if (!_msg.ValidateHeader()) - { - _parser.RestorePos(); - return null; - } - - // skip empty line between body and header - _parser.ReadLine(true); - - // we got no body. - if (_msg.ContentLength == -1) - return _msg; - - // Unfortunately, \n\n doesnt appear after all content. - if (_msg.ContentLength != 0) - _msg.Body = _parser.Read(_msg.ContentLength); - else - _msg.Body = _parser.ReadToEmptyLine(); - - // assume that we have not got a complete packet yet. - if (!_msg.Validate()) - { - _parser.RestorePos(); - return null; - } - - return _msg; - } - - public bool ReadHeader() - { - // skip empty lines - while (!_parser.EOF && _parser.PeekWord(true, true) == string.Empty) - _parser.ReadLine(false); - - if (_parser.EOF) - return false; - - string name = _parser.Read(':', true); + StringParser parser = new StringParser(header); + string name = parser.Read(':', true); while (name != string.Empty) { switch (name) { case "Content-Length": - _msg.ContentLength = int.Parse(_parser.ReadLine(true)); + msg.ContentLength = int.Parse(parser.ReadLine(true)); break; case "Content-Type": - _msg.ContentType = _parser.ReadLine(true); + msg.ContentType = parser.ReadLine(true); break; case "Reply-Text": - _msg.Body = _parser.ReadLine(); + msg.Body = parser.ReadLine(true); break; } // empty line == end of header - if (_parser.EOL) + if (parser.EOL) break; - name = _parser.Read(':', true); + name = parser.Read(':', true); } + } + /* + private int IsLineBreaks(int pos) + { + if (pos > 0 && Text[pos] == '\n' && Text[pos - 1] == '\n') + return 1; + if (pos > 3 && Text[pos] == '\n' && Text[pos - 1] == '\r' + && Text[pos - 2] == '\n' && Text[pos - 3] == '\r') + return 3; + return 0; + } + */ + public void Clear() + { + lock (Text) + _text.Length = 0; + } - return _msg.ContentType != string.Empty; + private void IgnoreLineBreaks(ref int i) + { + while (i < Text.Length && (Text[i] == '\n' || Text[i] == '\r')) + ++i; } - public void Append(string value) + /// + /// + /// + /// + /// If parsing failed due to invalid format. + public PlainEventMsg ParseOne() { - _parser.RemoveUsedContent(); - _parser.Append(value); + // Move queue to text + lock (_piecesToAppend) + { + while (_piecesToAppend.Count > 0) + _text.Append(_piecesToAppend.Dequeue()); + } + + PlainEventMsg plainEvent; + lock (Text) + { + int i = 0; + + // find complete header + bool found = false; + for (; i < Text.Length - 1; ++i) + { + if (Text[i] == '\n' && Text[i+1] == '\n') + { + found = true; + break; + } + } + if (!found) + return null; + + // extract header + char[] chars = new char[i]; + Text.CopyTo(0, chars, 0, i); + string headers = new string(chars); +#if DEBUG + Console.WriteLine("===================================="); + Console.WriteLine("Headers: "); + Console.WriteLine(headers); +#endif + IgnoreLineBreaks(ref i); + + plainEvent = new PlainEventMsg(); + ParseHeaders(plainEvent, headers); + + // we got a body? + if (plainEvent.ContentLength > 0) + { + // Start of Empty header bugfix + // FS seems to send a header with content-length without sending an actual body + // this will eat that kind of header. + if (Text.Length >= BugWorkaround.Length + i) + { + found = true; + for (int index = 0; index < BugWorkaround.Length; ++index) + { + if (Text[index + i] != BugWorkaround[index]) + { + found = false; + break; + } + } + if (found) + { + Text.Remove(0, i); + Console.WriteLine("Removing empty content header."); + return null; + } + } + // end of bugfix. + + // not enough data for body. + if (plainEvent.ContentLength + i > Text.Length) + return null; + + // extract body + chars = new char[plainEvent.ContentLength]; + Text.CopyTo(i, chars, 0, plainEvent.ContentLength); + plainEvent.Body = new string(chars); + + // check for errors. + int pos = plainEvent.Body.IndexOf("\n\n"); + if (pos < plainEvent.Body.Length - 2) + { + Console.WriteLine("Fucked up event"); + Console.WriteLine("Header"); + Console.WriteLine(headers); + Console.WriteLine("Body"); + Console.WriteLine(plainEvent.Body); + Console.WriteLine("=========================== EVERYTHING in _text =============================="); + Console.WriteLine(Text); + throw new InvalidDataException("Fucked up event: " + Text); + } + +#if DEBUG + Console.WriteLine("Body:"); + Console.WriteLine(plainEvent.Body); +#endif + if (plainEvent.Body.Length < plainEvent.ContentLength) + throw new InvalidDataException("Body contents are too small!"); + + // Move forward to next header + i += plainEvent.ContentLength; + IgnoreLineBreaks(ref i); + } + + + // remove header( + body) from buffer + Text.Remove(0, i); + } + + return plainEvent; } - public void Clear() + + public void Append(string text) { - _parser.Clear(); + lock (_piecesToAppend) + _piecesToAppend.Enqueue(text); } } } \ No newline at end of file Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventSocket.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventSocket.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/EventSocket.cs Mon Aug 4 21:29:58 2008 @@ -24,18 +24,30 @@ private bool _autoConnect = true; private Events _events; private string _hostName; - private readonly EventParser _parser = new EventParser(string.Empty); + private readonly EventParser _parser = new EventParser(); public event DataHandler DataReceived; private string _password = "ClueCon"; private int _port = 8021; - private object _lockobj = new object(); + private readonly object _lockobj = new object(); private readonly byte[] _readBuffer = new byte[8192]; - private string _temp = string.Empty; - private Socket _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + private Socket _socket; private NetworkStream _stream; private Timer _timer; private bool _authed = false; const int RetryTimeout = 5000; + private bool _parsing = false; + + public EventSocket() + { + CreateSocket(); + } + + private void CreateSocket() + { + _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + _socket.NoDelay = true; + _socket.ReceiveBufferSize = 65535; + } public string Password { @@ -112,15 +124,18 @@ private void OnReadCompleted(IAsyncResult ar) { - int bytesRead; + string inbuffer; try { - bytesRead = _stream.EndRead(ar); + int bytesRead = _stream.EndRead(ar); if (bytesRead == 0) { HandleDisconnect(); return; } + inbuffer = Encoding.ASCII.GetString(_readBuffer, 0, bytesRead); + _parser.Append(inbuffer); + BeginRead(); } catch (IOException) { @@ -129,14 +144,22 @@ return; } - string text = Encoding.ASCII.GetString(_readBuffer, 0, bytesRead); if (DataReceived != null) - DataReceived(text); - _temp += text; - _parser.Append(text); - ParseMessages(); + DataReceived(inbuffer); - _stream.BeginRead(_readBuffer, 0, _readBuffer.Length, OnReadCompleted, null); + try + { + ParseMessages(); + } + catch (InvalidDataException) + { + HandleDisconnect(); + } + catch (ArgumentException) + { + Console.WriteLine(_parser.Text); + HandleDisconnect(); + } } /// @@ -176,39 +199,56 @@ _stream.Write(bytes, 0, bytes.Length); } + static readonly object locker = new object(); private void ParseMessages() { - PlainEventMsg msg = _parser.ParseMessage(); - while (msg != null) + + lock (locker) { - if (msg.ContentType == "auth/request") - { - AuthCommand cmd = new AuthCommand(_password); - cmd.ReplyReceived += OnAuthed; - _commands.Enqueue(cmd); - Write(cmd + "\n\n"); - } - else if (msg.ContentType == "command/reply" - || msg.ContentType == "api/response") + if (_parsing) + return; + _parsing = true; + } + + try + { + PlainEventMsg msg = _parser.ParseOne(); + while (msg != null) { - if (_commands.Count > 0) + if (msg.ContentType == "auth/request") { - CmdBase cmd = _commands.Dequeue(); - cmd.HandleReply(cmd.CreateReply(msg.Body)); + AuthCommand cmd = new AuthCommand(_password); + cmd.ReplyReceived += OnAuthed; + _commands.Enqueue(cmd); + Write(cmd + "\n\n"); + } + else if (msg.ContentType == "command/reply" + || msg.ContentType == "api/response") + { + if (_commands.Count > 0) + { + CmdBase cmd = _commands.Dequeue(); + cmd.HandleReply(cmd.CreateReply(msg.Body.Trim())); + } + else + { + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine("Got command reply or api response, but no actual command/api: " + msg.Body); + Console.ForegroundColor = ConsoleColor.Gray; + } } else { - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine("Got command reply or api response, but no actual command/api: " + msg.Body); - Console.ForegroundColor = ConsoleColor.Gray; + if (MessageReceived != null) + MessageReceived(msg); } - } - else - { - if (MessageReceived != null) - MessageReceived(msg); - } - msg = _parser.ParseMessage(); + msg = _parser.ParseOne(); + } + } + finally + { + lock (locker) + _parsing = false; } } @@ -223,7 +263,7 @@ _parser.Clear(); _authed = false; _socket.Close(); - _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); + CreateSocket(); if (_stream != null) { _stream.Dispose(); Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventBase.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventBase.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Events/EventBase.cs Mon Aug 4 21:29:58 2008 @@ -155,5 +155,10 @@ } return true; } + + public override string ToString() + { + return "Base(" + m_name + ")"; + } } } \ No newline at end of file Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/FreeSwitch.EventSocket.csproj ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/FreeSwitch.EventSocket.csproj (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/FreeSwitch.EventSocket.csproj Mon Aug 4 21:29:58 2008 @@ -43,10 +43,12 @@ + + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/PartyInfo.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/PartyInfo.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/PartyInfo.cs Mon Aug 4 21:29:58 2008 @@ -1,12 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Text; - namespace FreeSwitch.EventSocket { public class PartyInfo { - private string m_userName = string.Empty; + public static PartyInfo Empty = new PartyInfo(); + private string _userName = string.Empty; private string m_dialplan = string.Empty; private string m_callerIdName = string.Empty; private string m_callerIdNumber = string.Empty; @@ -14,14 +11,14 @@ private string m_uniqueId = string.Empty; private string m_source = string.Empty; private string m_context = string.Empty; - private string m_channelName = string.Empty; + private string _channelName = string.Empty; private bool m_screenBit; private bool m_privacyHideName; private bool m_privacyHideNumber; public PartyInfo() { - m_userName = string.Empty; + _userName = string.Empty; m_dialplan = string.Empty; m_callerIdName = string.Empty; } @@ -70,8 +67,8 @@ public string ChannelName { - get { return m_channelName; } - set { m_channelName = value; } + get { return _channelName; } + set { _channelName = value; } } public bool ScreenBit @@ -94,8 +91,8 @@ public string UserName { - get { return m_userName; } - set { m_userName = value; } + get { return _userName; } + set { _userName = value; } } public bool Parse(string name, string value) @@ -103,7 +100,7 @@ switch (name) { case "username": - m_userName = value; + _userName = value; break; case "dialplan": Dialplan = value; @@ -146,5 +143,11 @@ } + public override string ToString() + { + return _channelName + "(" + CallerIdName + "/" + CallerIdNumber + ") id: "+UniqueId+", destination: " + DestinationNumber; + + } + } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/PlainEventMsg.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/PlainEventMsg.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/PlainEventMsg.cs Mon Aug 4 21:29:58 2008 @@ -1,6 +1,5 @@ using System; using System.Collections.Specialized; -using EventSocketParser; namespace FreeSwitch.EventSocket { @@ -50,7 +49,7 @@ } - public NameValueCollection BodyToNameValue(bool urlDecodeValues) + public NameValueCollection ParseBody(bool urlDecodeValues) { NameValueCollection items = new NameValueCollection(); StringParser parser = new StringParser(_body); @@ -64,7 +63,7 @@ { items.Add(name.ToLower(), Uri.UnescapeDataString(value)); } - catch (UriFormatException) + catch (UriFormatException) { // add the value unformatted items.Add(name.ToLower(), value); @@ -77,4 +76,4 @@ return items; } } -} +} \ No newline at end of file Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresence.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresence.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresence.cs Mon Aug 4 21:29:58 2008 @@ -10,7 +10,7 @@ //private string _expires; //not "presencein/register", "presenceout/register" private string _eventType = string.Empty; private string _login = string.Empty; - private EventChannelState _channelState; + private EventChannelState _channelState = new EventChannelState(); public string Login { @@ -71,6 +71,7 @@ * */ public override bool ParseCommand(string name, string value) { + bool res = _channelState.ParseCommand(name, value); switch (name) { case "status": @@ -87,6 +88,7 @@ break; default: + if (name.Length > 7 && name.Substring(0, 7) == "caller-") { if (Caller == null) @@ -98,15 +100,16 @@ if (base.ParseCommand(name, value)) return true; else - { - if (_channelState == null) - _channelState = new EventChannelState(); - return _channelState.ParseCommand(name, value); - } + return res; } } return true; } + + public override string ToString() + { + return "Presence(" + _login + ", " + _status + ")." + _channelState + "." + base.ToString(); + } } } \ No newline at end of file Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceIn.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceIn.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceIn.cs Mon Aug 4 21:29:58 2008 @@ -2,5 +2,9 @@ { public class EventPresenceIn : EventPresence { + public override string ToString() + { + return "PresenceIn." + base.ToString(); + } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceOut.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceOut.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceOut.cs Mon Aug 4 21:29:58 2008 @@ -2,7 +2,11 @@ { public class EventPresenceOut : EventPresence { - + public override string ToString() + { + return "PresenceOut." + base.ToString(); + } + } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceProbe.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceProbe.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventPresenceProbe.cs Mon Aug 4 21:29:58 2008 @@ -6,5 +6,11 @@ { class EventPresenceProbe : EventPresence { + public override string ToString() + { + return "PresenceProbe." + base.ToString(); + } + } + } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventRoster.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventRoster.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventRoster.cs Mon Aug 4 21:29:58 2008 @@ -1,7 +1,3 @@ -using System; -using System.Collections.Generic; -using System.Text; - namespace FreeSwitch.EventSocket { class EventRoster : SipEvent Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaExpire.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaExpire.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaExpire.cs Mon Aug 4 21:29:58 2008 @@ -59,5 +59,10 @@ return true; } + + public override string ToString() + { + return "SofiaExpire(" + _userName + "@" + _domain + ")." + base.ToString(); + } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaRegister.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaRegister.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/EventSofiaRegister.cs Mon Aug 4 21:29:58 2008 @@ -88,5 +88,12 @@ } return true; } + + public override string ToString() + { + return "SofiaRegister(" + _user + "@" + _domain + ", " + _expires + ")." + base.ToString(); + } } + + } \ No newline at end of file Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/SipEvent.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/SipEvent.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/SipEvents/SipEvent.cs Mon Aug 4 21:29:58 2008 @@ -35,5 +35,10 @@ } return true; } + + public override string ToString() + { + return "Sip(" + _from + ")." + base.ToString(); + } } } \ No newline at end of file Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/StringParser.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/StringParser.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/StringParser.cs Mon Aug 4 21:29:58 2008 @@ -1,6 +1,6 @@ using System.Collections.Generic; -namespace EventSocketParser +namespace FreeSwitch.EventSocket { internal class StringParser { @@ -44,12 +44,8 @@ public void RestorePos() { - _pos = _savedPositions.Pop(); - } - - public void RemoveSavedPos() - { - _savedPositions.Pop(); + if (_savedPositions.Count > 0) + _pos = _savedPositions.Pop(); } public void ClearSavedPositions() @@ -59,17 +55,19 @@ private bool IsEOF(int pos) { - return pos >= _text.Length - 1; + return pos >= _text.Length; } public bool IsEmptyLine(bool skipWhitespaces) { if (EOF) return false; - else if (_pos == _text.Length - 1) + else if (_pos < _text.Length - 1) return _text[_pos] == '\n'; - else + else if (_pos < _text.Length - 2) return _text[_pos] == '\r' && _text[_pos + 1] == '\n'; + + return false; } public string PeekWord(bool skipWS, bool stopAtEOL) @@ -126,10 +124,10 @@ int endpos = _pos; _pos = pos; - // Move to after new line chars - if (_text[_pos] == '\r') - _pos += 2; - else + // Move to after new line chars + if (!EOF && _text[_pos] == '\r') + ++_pos; + if (!EOF && _text[_pos] == '\n') ++_pos; // .. and the result is line without whitespaces at the end and without new line chars. @@ -196,6 +194,9 @@ private int TrimEnd() { + if (EOF) + return _pos; + int pos = _pos; while (IsWS(_text[pos])) --pos; @@ -216,7 +217,9 @@ private bool IsEOL() { - if (_text[_pos] == '\r' && _text[_pos + 1] == '\n') + if (EOF) + return true; + if (_text[_pos] == '\r') return true; else if (_text[_pos] == '\n') return true; Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/js_modules/SpeechTools.jm ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/js_modules/SpeechTools.jm (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/js_modules/SpeechTools.jm Mon Aug 4 21:29:58 2008 @@ -63,7 +63,7 @@ this.AutoUnload = false; this.debug = false; - /* Set the TTS info*/ + /* Set the TTS info */ this.setTTS = function (tts_eng, tts_voice) { this.tts_eng = tts_eng; this.tts_voice = tts_voice; @@ -79,7 +79,7 @@ this.audio_ext = audio_ext; } - /* Add a grammar to be used*/ + /* Add a grammar to be used */ this.addGrammar = function(grammar_object) { this.grammar_hash[grammar_object.grammar_name] = grammar_object; } @@ -180,21 +180,38 @@ console_log("debug", "----Heard [" + interp.input + "]\n"); console_log("debug", "----Hit score " + interp. at score + "/" + grammar_object.min_score + "/" + grammar_object.confirm_score + "\n"); } - - if (interp. at score >= grammar_object.min_score) { - if (interp. at score < grammar_object.confirm_score) { - rv.push("_confirm_"); - } - eval("xo = interp." + grammar_object.obj_path + ";"); - for (x = 0; x < xo.length(); x++) { - rv.push(xo[x]); + if (_this.mod == "pocketsphinx") { + /* pocketsphinx scores 0 best to 100 worst. */ + if (interp. at score >= grammar_object.min_score) { + if (interp. at score >= grammar_object.confirm_score) { + rv.push("_confirm_"); + } + + eval("xo = interp." + grammar_object.obj_path + ";"); + for (x = 0; x < xo.length(); x++) { + rv.push(xo[x]); + console_log("info", "----" +xo[x] + "\n"); + } + } else { + rv.push("_no_idea_"); } } else { - rv.push("_no_idea_"); + if (interp. at score >= grammar_object.min_score) { + if (interp. at score < grammar_object.confirm_score) { + rv.push("_confirm_"); + } + + eval("xo = interp." + grammar_object.obj_path + ";"); + for (x = 0; x < xo.length(); x++) { + rv.push(xo[x]); + console_log("info", "----" +xo[x] + "\n"); + } + } else { + rv.push("_no_idea_"); + } } - console_log("debug", "dammit: " + rv + "\n"); delete interp; return rv; } @@ -235,7 +252,7 @@ this.waitTime = wait_time + 0; - /* Set the TTS info*/ + /* Set the TTS info */ this.setTTS = function (tts_eng, tts_voice) { this.tts_eng = tts_eng; this.tts_voice = tts_voice; @@ -278,7 +295,7 @@ this.add_sound = add_sound; } - /* Add acceptable items (comma sep list)*/ + /* Add acceptable items (comma sep list) */ this.addItem = function(item) { ia = item.split(","); var x; @@ -287,6 +304,14 @@ } } + this.addItemAlias = function(item,alias) { + ia = item.split(","); + var x; + for (x = 0; x < ia.length; x++) { + this.items[this.index++] = ia[x] + ":::" + alias; + } + } + /* Add a regex */ this.addRegEx = function(item) { this.items[this.index++] = item; @@ -404,29 +429,41 @@ if (this.debug) { console_log("debug", "----Testing [" + y + "] [" + x + "] " + items[y] + " =~ [" + this.items[x] + "]\n"); } - var re = new RegExp(this.items[x]); + str = this.items[x]; + + ab = str.split(":::"); + + var re = new RegExp(ab[0], "i"); match = re.exec(items[y]); + if (match) { + for (i = 0; i < match.length; i++) { + if (ab.length == 1) { + rep = match[i]; + } else { + rep = ab[1]; + } + dup = false; for(z = 0; z < this.collected_items.length; z++) { - if (this.collected_items[z] == match[i]) { + if (this.collected_items[z] == rep) { dup = true; break; } } if (dup) { if (this.dup_sound) { - rv = this.react(this.dup_sound + " " + match[i], this.dup_sound + "," + match[i]); + rv = this.react(this.dup_sound + " " + rep, this.dup_sound + "," + rep); } } else { if (this.debug) { - console_log("debug", "----Adding " + match[i] + "\n"); + console_log("debug", "----Adding " + rep + "\n"); } - this.collected_items[this.collected_index++] = match[i]; + this.collected_items[this.collected_index++] = rep; hit = true; if (this.add_sound) { - rv = this.react(this.add_sound + " " + match[i], this.add_sound + "," + match[i]); + rv = this.react(this.add_sound + " " + rep, this.add_sound + "," + rep); } } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/scenario/phones.cfg ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/scenario/phones.cfg (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/scenario/phones.cfg Mon Aug 4 21:29:58 2008 @@ -1,4 +1,4 @@ -Snom_300,10.0.1.241,1000 +Snom_300,10.0.1.17,1000 Snom_320,10.0.1.242,1002 Snom_360,10.0.1.243,1006 Snom_370,10.0.1.244,1007 Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/FreeSWITCH/Client.pm ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/FreeSWITCH/Client.pm (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/FreeSWITCH/Client.pm Mon Aug 4 21:29:58 2008 @@ -4,7 +4,7 @@ use IO::Select; use Data::Dumper; - +$VERSION = "1.0"; sub init($;$) { my $proto = shift; Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/README ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/README (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/README Mon Aug 4 21:29:58 2008 @@ -1,3 +1,34 @@ -Socket library to interface w/ freeswitch mod_event_socket from Twisted python applications. +DESCRIPTION +=========== + +Socket library to interface w/ freeswitch mod_event_socket from Twisted python applications. Used by WikiPBX for all non-http communication w/ Freeswitch. + +Install +======= + +See INSTALL + +Debugging +========= + +Set FREEPY_DEBUG_ON = True in globals.py + +TODO: pull this from an environment variable or a config file + +Rebulding State Machines +======================== + +(you only need to do this if you changed an .sm file) + +for each .sm file: + +java -jar /usr/src/smc/bin/Smc.jar -python -g THE.sm + +and loginrequest.sm -> loginrequest_sm.py with the state machine. + +TODO: create a Makefile to do this stuff +TODO: use Miro Samek's HSM framework instead of SMC + + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/__init__.py ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/__init__.py (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/__init__.py Mon Aug 4 21:29:58 2008 @@ -54,20 +54,20 @@ self.active_request = None # the current active (de-queued) request def connectionMade(self): - print "Connection made" + self.log("Connection made") self.conncb(self) def connectionLost(self, reason): if self.discocb: self.discocb(reason) - print "connectionLost: %s" % reason + self.log("connectionLost: %s" % reason) def log(self, msg): """ print a message to stdout if debug enabled """ - if freepy.globals.DEBUG_ON: + if freepy.globals.FREEPY_DEBUG_ON: print msg def login(self, passwd): @@ -166,7 +166,6 @@ TODO: add this """ - print "confdtmf called" if bgapi == True: msg = "bgapi conference %s dtmf %s %s" % \ (conf_name, member_id, dtmf) @@ -296,7 +295,7 @@ msg = "api sofia status profile %s as xml" % (profile_name) req = request.ApiRequest() self.requestq.put(req) - print "sending to fs: %s" % msg + self.log("sending to fs: %s" % msg) self.transport.write("%s\n\n" % msg) return req.getDeferred() @@ -357,9 +356,15 @@ def lineReceived(self, line): self.log("<< %s" % line) if not self.active_request: + + # if no active request pending, we ignore + # blank lines + if not line.strip(): + return + # if no active request, dequeue a new one if self.requestq.empty(): - # we are receiving data from fs without an + # we are receiving non-empty data from fs without an # active request pending. that means that # there is a bug in the protocol handler # (or possibly in fs) Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/apirequest.sm ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/apirequest.sm (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/apirequest.sm Mon Aug 4 21:29:58 2008 @@ -61,35 +61,35 @@ nil { setRequestFinished(); - errbackDeferred("Protocol failure"); + errbackDeferred("Protocol failure - was not expecting blank line"); } ContentFinished nil { setRequestFinished(); - errbackDeferred("Protocol failure"); + errbackDeferred("Protocol failure - was not expecting content to be finished"); } ContentLength nil { setRequestFinished(); - errbackDeferred("Protocol failure"); + errbackDeferred("Protocol failure - was not expecting content-length header"); } ApiResponse nil { setRequestFinished(); - errbackDeferred("Protocol failure"); + errbackDeferred("Protocol failure - was not expecting api response"); } ProcessLine(line) nil { setRequestFinished(); - errbackDeferred("Protocol failure"); + errbackDeferred("Protocol failure - was not expecting needing to process a line"); } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/apirequest_sm.py ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/apirequest_sm.py (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/apirequest_sm.py Mon Aug 4 21:29:58 2008 @@ -1,8 +1,10 @@ - -# DO NOT MODIFY THIS CODE - AUTOMATICALLY GENERATED BY SMC +# DO NOT EDIT. +# generated by smc (http://smc.sourceforge.net/) +# from file : apirequest.sm import statemap + class ApiRequestState(statemap.State): def Entry(self, fsm): @@ -31,7 +33,7 @@ fsm.getDebugStream().write('TRANSITION : Default\n') msg = "\n\tState: %s\n\tTransition: %s" % ( fsm.getState().getName(), fsm.getTransition()) - raise TransitionUndefinedException, msg + raise statemap.TransitionUndefinedException, msg class MainMap_Default(ApiRequestState): @@ -44,7 +46,7 @@ fsm.clearState() try: ctxt.setRequestFinished() - ctxt.errbackDeferred("Protocol failure") + ctxt.errbackDeferred("Protocol failure - was not expecting blank line") finally: fsm.setState(endState) @@ -57,7 +59,7 @@ fsm.clearState() try: ctxt.setRequestFinished() - ctxt.errbackDeferred("Protocol failure") + ctxt.errbackDeferred("Protocol failure - was not expecting content to be finished") finally: fsm.setState(endState) @@ -70,7 +72,7 @@ fsm.clearState() try: ctxt.setRequestFinished() - ctxt.errbackDeferred("Protocol failure") + ctxt.errbackDeferred("Protocol failure - was not expecting content-length header") finally: fsm.setState(endState) @@ -83,7 +85,7 @@ fsm.clearState() try: ctxt.setRequestFinished() - ctxt.errbackDeferred("Protocol failure") + ctxt.errbackDeferred("Protocol failure - was not expecting api response") finally: fsm.setState(endState) @@ -96,7 +98,7 @@ fsm.clearState() try: ctxt.setRequestFinished() - ctxt.errbackDeferred("Protocol failure") + ctxt.errbackDeferred("Protocol failure - was not expecting needing to process a line") finally: fsm.setState(endState) Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/bgapirequest.sm ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/bgapirequest.sm (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/bgapirequest.sm Mon Aug 4 21:29:58 2008 @@ -25,11 +25,16 @@ GotReplyText { BlankLine - Startup + nil { - setRequestFinished(); callOrErrback(); + } + JobUuid + Startup + { + setRequestFinished(); callOrErrback(); + } } @@ -43,28 +48,27 @@ nil { setRequestFinished(); - errbackDeferred("Protocol failure"); - } + errbackDeferred("Protocol failure - was not expecting blank line"); } CommandReply nil { setRequestFinished(); - errbackDeferred("Protocol failure"); + errbackDeferred("Protocol failure - was not expecting command reply"); } ReplyText nil { setRequestFinished(); - errbackDeferred("Protocol failure"); + errbackDeferred("Protocol failure - was not expecting reply text"); } ProcessLine(line) nil { setRequestFinished(); - errbackDeferred("Protocol failure"); + errbackDeferred("Protocol failure handling bgapi response - was not expecting line needing to be processed"); } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/bgapirequest_sm.py ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/bgapirequest_sm.py (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/bgapirequest_sm.py Mon Aug 4 21:29:58 2008 @@ -1,8 +1,10 @@ - -# DO NOT MODIFY THIS CODE - AUTOMATICALLY GENERATED BY SMC +# DO NOT EDIT. +# generated by smc (http://smc.sourceforge.net/) +# from file : bgapirequest.sm import statemap + class BgApiRequestState(statemap.State): def Entry(self, fsm): @@ -17,6 +19,9 @@ def CommandReply(self, fsm): self.Default(fsm) + def JobUuid(self, fsm): + self.Default(fsm) + def ProcessLine(self, fsm, line): self.Default(fsm) @@ -28,7 +33,7 @@ fsm.getDebugStream().write('TRANSITION : Default\n') msg = "\n\tState: %s\n\tTransition: %s" % ( fsm.getState().getName(), fsm.getTransition()) - raise TransitionUndefinedException, msg + raise statemap.TransitionUndefinedException, msg class MainMap_Default(BgApiRequestState): @@ -41,7 +46,7 @@ fsm.clearState() try: ctxt.setRequestFinished() - ctxt.errbackDeferred("Protocol failure") + ctxt.errbackDeferred("Protocol failure - was not expecting blank line") finally: fsm.setState(endState) @@ -54,7 +59,7 @@ fsm.clearState() try: ctxt.setRequestFinished() - ctxt.errbackDeferred("Protocol failure") + ctxt.errbackDeferred("Protocol failure - was not expecting command reply") finally: fsm.setState(endState) @@ -67,7 +72,7 @@ fsm.clearState() try: ctxt.setRequestFinished() - ctxt.errbackDeferred("Protocol failure") + ctxt.errbackDeferred("Protocol failure - was not expecting reply text") finally: fsm.setState(endState) @@ -80,7 +85,7 @@ fsm.clearState() try: ctxt.setRequestFinished() - ctxt.errbackDeferred("Protocol failure") + ctxt.errbackDeferred("Protocol failure handling bgapi response - was not expecting line needing to be processed") finally: fsm.setState(endState) @@ -107,10 +112,15 @@ class MainMap_GotReplyText(MainMap_Default): def BlankLine(self, fsm): - ctxt = fsm.getOwner() if fsm.getDebugFlag() == True: fsm.getDebugStream().write("TRANSITION : MainMap.GotReplyText.BlankLine()\n") + + def JobUuid(self, fsm): + ctxt = fsm.getOwner() + if fsm.getDebugFlag() == True: + fsm.getDebugStream().write("TRANSITION : MainMap.GotReplyText.JobUuid()\n") + fsm.getState().Exit(fsm) fsm.clearState() try: @@ -145,6 +155,11 @@ self.getState().CommandReply(self) self._transition = None + def JobUuid(self): + self._transition = 'JobUuid' + self.getState().JobUuid(self) + self._transition = None + def ProcessLine(self, *arglist): self._transition = 'ProcessLine' self.getState().ProcessLine(self, *arglist) Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/globals.py ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/globals.py (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/globals.py Mon Aug 4 21:29:58 2008 @@ -1,2 +1,10 @@ -DEBUG_ON = True +import os + +if os.environ.has_key('FREEPY_DEBUG_ON'): + # pull from environment if avail + FREEPY_DEBUG_ON = os.environ['FREEPY_DEBUG_ON'] +else: + # fall back to hardcoded value + FREEPY_DEBUG_ON = False + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/loginrequest.sm ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/loginrequest.sm (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/loginrequest.sm Mon Aug 4 21:29:58 2008 @@ -57,35 +57,35 @@ nil { setRequestFinished(); - errbackDeferred("Protocol failure"); + errbackDeferred("Protocol failure - Was not expecting a blank line"); } AuthRequest nil { setRequestFinished(); - errbackDeferred("Protocol failure"); + errbackDeferred("Protocol failure - Was not expecting auth request"); } CommandReply nil { setRequestFinished(); - errbackDeferred("Protocol failure"); + errbackDeferred("Protocol failure - was not expecting a command reply"); } ReplyText nil { setRequestFinished(); - errbackDeferred("Protocol failure"); + errbackDeferred("Protocol failure - was not expecting reply text"); } ProcessLine(line) nil { setRequestFinished(); - errbackDeferred("Protocol failure"); + errbackDeferred("Protocol failure - was not expecting need to receive a line that needs to be processed"); } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/loginrequest_sm.py ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/loginrequest_sm.py (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/loginrequest_sm.py Mon Aug 4 21:29:58 2008 @@ -1,5 +1,6 @@ - -# DO NOT MODIFY THIS CODE - AUTOMATICALLY GENERATED BY SMC +# DO NOT EDIT. +# generated by smc (http://smc.sourceforge.net/) +# from file : loginrequest.sm import statemap @@ -32,7 +33,7 @@ fsm.getDebugStream().write('TRANSITION : Default\n') msg = "\n\tState: %s\n\tTransition: %s" % ( fsm.getState().getName(), fsm.getTransition()) - raise TransitionUndefinedException, msg + raise statemap.TransitionUndefinedException, msg class MainMap_Default(LoginRequestState): @@ -45,7 +46,7 @@ fsm.clearState() try: ctxt.setRequestFinished() - ctxt.errbackDeferred("Protocol failure") + ctxt.errbackDeferred("Protocol failure - Was not expecting a blank line") finally: fsm.setState(endState) @@ -58,7 +59,7 @@ fsm.clearState() try: ctxt.setRequestFinished() - ctxt.errbackDeferred("Protocol failure") + ctxt.errbackDeferred("Protocol failure - Was not expecting auth request") finally: fsm.setState(endState) @@ -71,7 +72,7 @@ fsm.clearState() try: ctxt.setRequestFinished() - ctxt.errbackDeferred("Protocol failure") + ctxt.errbackDeferred("Protocol failure - was not expecting a command reply") finally: fsm.setState(endState) @@ -84,7 +85,7 @@ fsm.clearState() try: ctxt.setRequestFinished() - ctxt.errbackDeferred("Protocol failure") + ctxt.errbackDeferred("Protocol failure - was not expecting reply text") finally: fsm.setState(endState) @@ -97,7 +98,7 @@ fsm.clearState() try: ctxt.setRequestFinished() - ctxt.errbackDeferred("Protocol failure") + ctxt.errbackDeferred("Protocol failure - was not expecting need to receive a line that needs to be processed") finally: fsm.setState(endState) Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/request.py ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/request.py (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/socket/freepy/request.py Mon Aug 4 21:29:58 2008 @@ -70,7 +70,7 @@ self.deferred.callback(cbval) def errbackDeferred(self, result): - self.deferred.errback(result) + self.deferred.errback(Exception(str(result))) def process(self, line): """ @@ -83,7 +83,7 @@ otherwise, if the fs response is incomplete, just buffer the data """ - if not line or len(line) == 0: + if not line.strip() or len(line.strip()) == 0: self._fsm.BlankLine() return self.isRequestFinished() @@ -110,6 +110,16 @@ self._fsm.ReplyText() return self.isRequestFinished() + matchstr = re.compile("Job-UUID", re.I) + result = matchstr.search(line) + if (result != None): + fields = line.split(":") # eg, ['Job-UUID','c9eee07e-508-..'] + endfields = fields[1:] + # ignore job uuid given on this line, take the one sent + # in Reply-Text response line + # self.response_content = "".join(endfields) + self._fsm.JobUuid() + return self.isRequestFinished() matchstr = re.compile("api/response", re.I) result = matchstr.search(line) @@ -125,7 +135,6 @@ self._fsm.ContentLength() return self.isRequestFinished() - self._fsm.ProcessLine(line) return self.isRequestFinished() @@ -194,37 +203,12 @@ linereceived: """ - def __init__(self): super(BgApiRequest, self).__init__() import bgapirequest_sm self._fsm = bgapirequest_sm.BgApiRequest_sm(self) - def processOLD(self, line): - - if not line or len(line) == 0: - self._fsm.BlankLine() - return self.isRequestFinished() - - matchstr = re.compile("command/reply", re.I) - result = matchstr.search(line) - if (result != None): - self._fsm.CommandReply() - return self.isRequestFinished() - - matchstr = re.compile("Reply-Text", re.I) - result = matchstr.search(line) - if (result != None): - self.response_content = line.split(":")[1] - self._fsm.ReplyText() - return self.isRequestFinished() - - self._fsm.ProcessLine(line) - return self.isRequestFinished() - - - def getResponse(self): # subclasses may want to parse this into a meaningful @@ -252,28 +236,6 @@ self._fsm = apirequest_sm.ApiRequest_sm(self) self.response_content = "" - def processOLD(self, line): - - if not line or len(line) == 0: - self._fsm.BlankLine() - return self.isRequestFinished() - - matchstr = re.compile("api/response", re.I) - result = matchstr.search(line) - if (result != None): - self._fsm.ApiResponse() - return self.isRequestFinished() - - matchstr = re.compile("Content-Length", re.I) - result = matchstr.search(line) - if (result != None): - # line: Content-Length: 34 - self.content_length = int(line.split(":")[1].strip()) - self._fsm.ContentLength() - return self.isRequestFinished() - - self._fsm.ProcessLine(line) - return self.isRequestFinished() def doNothing(self): # weird smc issue workaround attempt 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 Mon Aug 4 21:29:58 2008 @@ -60,6 +60,10 @@ #include #endif +#ifdef HAVE_NETDB_H +#include +#endif + #ifndef WIN32 /* setuid, setgid */ #include @@ -101,7 +105,9 @@ switch_io_event_hooks_t event_hooks; switch_codec_t *read_codec; + switch_codec_t *real_read_codec; switch_codec_t *write_codec; + switch_codec_t *real_write_codec; switch_codec_t *video_read_codec; switch_codec_t *video_write_codec; @@ -189,6 +195,7 @@ uint32_t default_dtmf_duration; switch_frame_t dummy_cng_frame; char dummy_data[5]; + switch_bool_t colorize_console; }; extern struct switch_runtime runtime; Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch.h Mon Aug 4 21:29:58 2008 @@ -218,5 +218,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_apr.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_apr.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_apr.h Mon Aug 4 21:29:58 2008 @@ -303,6 +303,13 @@ SWITCH_DECLARE(switch_status_t) switch_time_exp_lt(switch_time_exp_t *result, switch_time_t input); /** + * convert a time to its human readable components in a specific timezone with offset + * @param result the exploded time + * @param input the time to explode + */ +SWITCH_DECLARE(switch_status_t) switch_time_exp_tz(switch_time_exp_t *result, switch_time_t input, switch_int32_t offs); + +/** * Sleep for the specified number of micro-seconds. * @param t desired amount of time to sleep. * @warning May sleep for longer than the specified time. @@ -728,6 +735,12 @@ SWITCH_DECLARE(switch_status_t) switch_file_seek(switch_file_t *thefile, switch_seek_where_t where, int64_t *offset); + +SWITCH_DECLARE(switch_status_t) switch_file_copy(const char *from_path, + const char *to_path, + switch_fileperms_t perms, + switch_memory_pool_t *pool); + /** * Close the specified file. * @param thefile The file descriptor to close. @@ -1248,5 +1261,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_bitpack.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_bitpack.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_bitpack.h Mon Aug 4 21:29:58 2008 @@ -290,5 +290,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_buffer.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_buffer.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_buffer.h Mon Aug 4 21:29:58 2008 @@ -158,5 +158,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_caller.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_caller.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_caller.h Mon Aug 4 21:29:58 2008 @@ -226,5 +226,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -223,6 +223,7 @@ \return the value of the requested variable */ SWITCH_DECLARE(const char *) switch_channel_get_variable(switch_channel_t *channel, const char *varname); +SWITCH_DECLARE(switch_status_t) switch_channel_get_variables(switch_channel_t *channel, switch_event_t **event); /*! * Start iterating over the entries in the channel variable list. @@ -490,5 +491,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -115,5 +115,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_console.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_console.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_console.h Mon Aug 4 21:29:58 2008 @@ -84,5 +84,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -593,12 +593,17 @@ */ SWITCH_DECLARE(void) switch_core_set_variable(_In_z_ const char *varname, _In_opt_z_ const char *value); +SWITCH_DECLARE(void) switch_core_dump_variables(_In_ switch_stream_handle_t *stream); + /*! \brief Hangup All Sessions \param cause the hangup cause to apply to the hungup channels */ SWITCH_DECLARE(void) switch_core_session_hupall(_In_ switch_call_cause_t cause); +SWITCH_DECLARE(void) switch_core_session_hupall_matching_var(_In_ const char *var_name, _In_ const char *var_val, _In_ switch_call_cause_t cause); +SWITCH_DECLARE(void) switch_core_session_hupall_endpoint(const switch_endpoint_interface_t *endpoint_interface, switch_call_cause_t cause); + /*! \brief Send a message to another session using it's uuid \param uuid_str the unique id of the session you want to send a message to @@ -1119,6 +1124,8 @@ */ SWITCH_DECLARE(switch_status_t) switch_core_session_set_read_codec(_In_ switch_core_session_t *session, switch_codec_t *codec); +SWITCH_DECLARE(void) switch_core_session_unset_read_codec(_In_ switch_core_session_t *session); + /*! \brief Retrieve the read codec from a given session \param session session to retrieve from @@ -1127,6 +1134,13 @@ SWITCH_DECLARE(switch_codec_t *) switch_core_session_get_read_codec(_In_ switch_core_session_t *session); /*! + \brief Retrieve the effevtive read codec from a given session + \param session session to retrieve from + \return a pointer to the codec +*/ +SWITCH_DECLARE(switch_codec_t *) switch_core_session_get_effective_read_codec(_In_ switch_core_session_t *session); + +/*! \brief Assign the write codec to a given session \param session session to add the codec to \param codec the codec to add @@ -1142,6 +1156,13 @@ SWITCH_DECLARE(switch_codec_t *) switch_core_session_get_write_codec(_In_ switch_core_session_t *session); /*! + \brief Retrieve the effevtive write codec from a given session + \param session session to retrieve from + \return a pointer to the codec +*/ +SWITCH_DECLARE(switch_codec_t *) switch_core_session_get_effective_write_codec(_In_ switch_core_session_t *session); + +/*! \brief Assign the video_read codec to a given session \param session session to add the codec to \param codec the codec to add @@ -1623,7 +1644,8 @@ SWITCH_DECLARE(void) switch_time_sync(void); SWITCH_DECLARE(time_t) switch_timestamp(time_t *t); SWITCH_DECLARE(void) switch_load_network_lists(switch_bool_t reload); -SWITCH_DECLARE(switch_bool_t) switch_check_network_list_ip(const char *ip_str, const char *list_name); +SWITCH_DECLARE(switch_bool_t) switch_check_network_list_ip_token(const char *ip_str, const char *list_name, const char **token); +#define switch_check_network_list_ip(_ip_str, _list_name) switch_check_network_list_ip_token(_ip_str, _list_name, NULL) SWITCH_DECLARE(void) switch_time_set_monotonic(switch_bool_t enable); SWITCH_DECLARE(uint32_t) switch_core_max_dtmf_duration(uint32_t duration); SWITCH_DECLARE(uint32_t) switch_core_default_dtmf_duration(uint32_t duration); @@ -1646,5 +1668,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_core_db.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_core_db.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_core_db.h Mon Aug 4 21:29:58 2008 @@ -551,5 +551,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -249,5 +249,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -13,7 +13,31 @@ #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 { 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) +#define init_vars() allocated = 0; \ + session = NULL; \ + channel = NULL; \ + uuid = NULL; \ + tts_name = NULL; \ + voice_name = NULL; \ + xml_cdr_text = NULL; \ + memset(&caller_profile, 0, sizeof(caller_profile)); \ + 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; \ + fhp = NULL + //// C++ Interface: switch_to_cpp_mempool//// Description: This class allows for overloading the new operator to allocate from a switch_memory_pool_t//// Author: Yossi Neiman , (C) 2007//// Copyright: See COPYING file that comes with this distribution// #if 0 #ifndef SWITCHTOMEMPOOL @@ -101,6 +125,14 @@ S_RDLOCK = (1 << 2) } session_flag_t; + class DTMF { + public: + char digit; + uint32_t duration; + SWITCH_DECLARE_CONSTRUCTOR DTMF(char idigit, uint32_t iduration = SWITCH_DEFAULT_DTMF_DURATION); + virtual SWITCH_DECLARE_CONSTRUCTOR ~DTMF(); + }; + class Stream { protected: switch_stream_handle_t mystream; @@ -136,6 +168,20 @@ }; + class EventConsumer { + protected: + switch_memory_pool_t *pool; + public: + switch_queue_t *events; + switch_event_types_t e_event_id; + switch_event_node_t *node; + char *e_callback; + char *e_subclass_name; + char *e_cb_arg; + SWITCH_DECLARE_CONSTRUCTOR EventConsumer(const char *event_name, const char *subclass_name = ""); + SWITCH_DECLARE_CONSTRUCTOR ~ EventConsumer(); + SWITCH_DECLARE(Event *) pop(int block = 0); + }; class CoreSession { protected: @@ -145,9 +191,6 @@ switch_caller_profile_t caller_profile; // avoid passing so many args to originate, // instead set them here first char *xml_cdr_text; - char *uuid; - char *tts_name; - char *voice_name; void store_file_handle(switch_file_handle_t *fh); void *on_hangup; // language specific callback function, cast as void * switch_file_handle_t local_fh; @@ -156,9 +199,9 @@ public: SWITCH_DECLARE_CONSTRUCTOR CoreSession(); - SWITCH_DECLARE_CONSTRUCTOR CoreSession(char *uuid); + SWITCH_DECLARE_CONSTRUCTOR CoreSession(char *nuuid, CoreSession *a_leg = NULL); SWITCH_DECLARE_CONSTRUCTOR CoreSession(switch_core_session_t *new_session); - SWITCH_DECLARE_CONSTRUCTOR ~ CoreSession(); + virtual SWITCH_DECLARE_CONSTRUCTOR ~ CoreSession(); switch_core_session_t *session; switch_channel_t *channel; unsigned int flags; @@ -167,6 +210,10 @@ // field in this->args switch_channel_state_t hook_state; // store hookstate for on_hangup callback + char *uuid; + char *tts_name; + char *voice_name; + SWITCH_DECLARE(int) answer(); SWITCH_DECLARE(int) preAnswer(); SWITCH_DECLARE(void) hangup(char *cause = "normal_clearing"); @@ -234,7 +281,7 @@ * receiving dtmf digits. For that, use collectDigits. */ SWITCH_DECLARE(char *) getDigits(int maxdigits, char *terminators, int timeout); - + SWITCH_DECLARE(char *) getDigits(int maxdigits, char *terminators, int timeout, int interdigit); SWITCH_DECLARE(int) transfer(char *extensions, char *dialplan, char *context); @@ -262,6 +309,7 @@ * */ SWITCH_DECLARE(int) streamFile(char *file, int starting_sample_count = 0); + SWITCH_DECLARE(int) sleep(int ms); /** \brief flush any pending events */ @@ -279,6 +327,10 @@ SWITCH_DECLARE(void) setHangupHook(void *hangup_func); SWITCH_DECLARE(bool) ready(); + SWITCH_DECLARE(bool) answered(); + SWITCH_DECLARE(bool) mediaReady(); + + SWITCH_DECLARE(void) waitForAnswer(CoreSession *calling_session); SWITCH_DECLARE(void) execute(char *app, char *data = NULL); @@ -294,7 +346,7 @@ * \return the uuid of this session */ char *get_uuid() const { - return uuid; + return uuid ? uuid : (char *) "uninitialized"; }; /** \brief Get the callback function arguments associated with this session @@ -349,5 +401,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -70,14 +70,6 @@ struct switch_event_header *next; }; -/*! \brief A registered custom event subclass */ -struct switch_event_subclass { - /*! the owner of the subclass */ - char *owner; - /*! the subclass name */ - char *name; -}; - /*! \brief Representation of an event */ struct switch_event { /*! the event id (descriptor) */ @@ -87,7 +79,7 @@ /*! the owner of the event */ char *owner; /*! the subclass of the event */ - switch_event_subclass_t *subclass; + char *subclass_name; /*! the event headers */ switch_event_header_t *headers; /*! the event headers tail pointer */ @@ -103,20 +95,7 @@ struct switch_event *next; }; -/*! \brief A node to store binded events */ -struct switch_event_node { - /*! the id of the node */ - char *id; - /*! the event id enumeration to bind to */ - switch_event_types_t event_id; - /*! the event subclass to bind to for custom events */ - switch_event_subclass_t *subclass; - /*! a callback function to execute when the event is triggered */ - switch_event_callback_t callback; - /*! private data */ - void *user_data; - struct switch_event_node *next; -}; +struct switch_event_node; #define SWITCH_EVENT_SUBCLASS_ANY NULL @@ -156,7 +135,7 @@ \param header_name the name of the header to read \return the value of the requested header */ - _Ret_opt_z_ SWITCH_DECLARE(char *) switch_event_get_header(switch_event_t *event, char *header_name); + _Ret_opt_z_ SWITCH_DECLARE(char *) switch_event_get_header(switch_event_t *event, const char *header_name); #define switch_event_get_header_nil(e, h) switch_str_nil(switch_event_get_header(e,h)) @@ -229,6 +208,26 @@ void *user_data); /*! + \brief Bind an event callback to a specific event + \param id an identifier token of the binder + \param event the event enumeration to bind to + \param subclass_name the event subclass to bind to in the case if SWITCH_EVENT_CUSTOM + \param callback the callback functon to bind + \param user_data optional user specific data to pass whenever the callback is invoked + \param node bind handle to later remove the binding. + \return SWITCH_STATUS_SUCCESS if the event was binded +*/ +SWITCH_DECLARE(switch_status_t) switch_event_bind_removable(const char *id, switch_event_types_t event, const char *subclass_name, + switch_event_callback_t callback, void *user_data, switch_event_node_t **node); +/*! + \brief Unbind a bound event consumer + \param node node to unbind + \return SWITCH_STATUS_SUCCESS if the consumer was unbinded +*/ +SWITCH_DECLARE(switch_status_t) switch_event_unbind(switch_event_node_t **node); +SWITCH_DECLARE(switch_status_t) switch_event_unbind_callback(switch_event_callback_t callback); + +/*! \brief Render the name of an event id enumeration \param event the event id to render the name of \return the rendered name @@ -253,6 +252,8 @@ */ SWITCH_DECLARE(switch_status_t) switch_event_reserve_subclass_detailed(const char *owner, const char *subclass_name); +SWITCH_DECLARE(switch_status_t) switch_event_free_subclass_detailed(const char *owner, const char *subclass_name); + /*! \brief Render a string representation of an event sutable for printing or network transport \param event the event to render @@ -311,6 +312,7 @@ \note the body supplied by this function will supersede an existing body the event may have */ #define switch_event_reserve_subclass(subclass_name) switch_event_reserve_subclass_detailed(__FILE__, subclass_name) +#define switch_event_free_subclass(subclass_name) switch_event_free_subclass_detailed(__FILE__, subclass_name) /*! \brief Create a new event assuming it will not be custom event and therefore hiding the unused parameters @@ -358,5 +360,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_frame.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_frame.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_frame.h Mon Aug 4 21:29:58 2008 @@ -80,5 +80,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -107,9 +107,10 @@ \brief Wait for time to pass for a specified number of milliseconds \param session the session to wait for. \param ms the number of milliseconds + \param args arguements to pass for callbacks etc \return SWITCH_STATUS_SUCCESS if the channel is still up */ -SWITCH_DECLARE(switch_status_t) switch_ivr_sleep(switch_core_session_t *session, uint32_t ms); +SWITCH_DECLARE(switch_status_t) switch_ivr_sleep(switch_core_session_t *session, uint32_t ms, switch_input_args_t *args); SWITCH_DECLARE(switch_status_t) switch_ivr_park(switch_core_session_t *session, switch_input_args_t *args); @@ -313,6 +314,9 @@ 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_DECLARE(switch_status_t) switch_ivr_wait_for_silence(switch_core_session_t *session, uint32_t thresh, uint32_t silence_hits, + uint32_t listen_hits, uint32_t timeout_ms, const char *file); + SWITCH_DECLARE(switch_status_t) switch_ivr_gentones(switch_core_session_t *session, char *script, int32_t loops, switch_input_args_t *args); /*! @@ -779,7 +783,7 @@ SWITCH_DECLARE(switch_say_method_t) switch_ivr_get_say_method_by_name(const char *name); SWITCH_DECLARE(switch_say_type_t) switch_ivr_get_say_type_by_name(const char *name); - + SWITCH_DECLARE(switch_status_t) switch_ivr_set_user(switch_core_session_t *session, const char *data); /** @} */ SWITCH_END_EXTERN_C @@ -792,5 +796,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_loadable_module.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_loadable_module.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_loadable_module.h Mon Aug 4 21:29:58 2008 @@ -242,6 +242,13 @@ SWITCH_DECLARE(switch_status_t) switch_loadable_module_load_module(char *dir, char *fname, switch_bool_t runtime, const char **err); /*! + \brief Check if a module is loaded + \param mod the module name + \return the status +*/ +SWITCH_DECLARE(switch_status_t) switch_loadable_module_exists(const char *mod); + +/*! \brief Unoad a module \param dir the directory where the module resides \param fname the file name of the module @@ -397,5 +404,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_log.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_log.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_log.h Mon Aug 4 21:29:58 2008 @@ -74,7 +74,7 @@ \param pool the memory pool to use \note to be called at application startup by the core */ -SWITCH_DECLARE(switch_status_t) switch_log_init(_In_ switch_memory_pool_t *pool); +SWITCH_DECLARE(switch_status_t) switch_log_init(_In_ switch_memory_pool_t *pool, _In_ switch_bool_t colorize); /*! \brief Shut down the logging engine @@ -104,7 +104,8 @@ \brief Shut down the logging engine \note to be called at application termination by the core */ -SWITCH_DECLARE(switch_status_t) switch_log_bind_logger(_In_ switch_log_function_t function, _In_ switch_log_level_t level); +SWITCH_DECLARE(switch_status_t) switch_log_bind_logger(_In_ switch_log_function_t function, _In_ switch_log_level_t level, _In_ switch_bool_t is_console); +SWITCH_DECLARE(switch_status_t) switch_log_unbind_logger(_In_ switch_log_function_t function); /*! \brief Return the name of the specified log level @@ -134,5 +135,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -195,6 +195,8 @@ /*! private information */ void *private_info; + switch_thread_rwlock_t *rwlock; + /* to facilitate linking */ struct switch_endpoint_interface *next; }; @@ -245,6 +247,7 @@ switch_status_t (*timer_check) (switch_timer_t *, switch_bool_t); /*! function to deallocate the timer */ switch_status_t (*timer_destroy) (switch_timer_t *); + switch_thread_rwlock_t *rwlock; struct switch_timer_interface *next; }; @@ -254,6 +257,7 @@ const char *interface_name; /*! the function to read an extension and set a channels dialpan */ switch_dialplan_hunt_function_t hunt_function; + switch_thread_rwlock_t *rwlock; struct switch_dialplan_interface *next; }; @@ -277,6 +281,7 @@ switch_status_t (*file_get_string) (switch_file_handle_t *fh, switch_audio_col_t col, const char **string); /*! list of supported file extensions */ char **extens; + switch_thread_rwlock_t *rwlock; struct switch_file_interface *next; }; @@ -353,6 +358,7 @@ switch_status_t (*asr_check_results) (switch_asr_handle_t *ah, switch_asr_flag_t *flags); /*! function to read results from the ASR */ switch_status_t (*asr_get_results) (switch_asr_handle_t *ah, char **xmlstr, switch_asr_flag_t *flags); + switch_thread_rwlock_t *rwlock; struct switch_asr_interface *next; }; @@ -393,7 +399,7 @@ void (*speech_text_param_tts) (switch_speech_handle_t *sh, char *param, const char *val); void (*speech_numeric_param_tts) (switch_speech_handle_t *sh, char *param, int val); void (*speech_float_param_tts) (switch_speech_handle_t *sh, char *param, double val); - + switch_thread_rwlock_t *rwlock; struct switch_speech_interface *next; }; @@ -426,6 +432,7 @@ const char *interface_name; /*! function to pass down to the module */ switch_say_callback_t say_function; + switch_thread_rwlock_t *rwlock; struct switch_say_interface *next; }; @@ -435,6 +442,7 @@ const char *interface_name; /*! function to open the directory interface */ switch_status_t (*chat_send) (char *proto, char *from, char *to, char *subject, char *body, char *hint); + switch_thread_rwlock_t *rwlock; struct switch_chat_interface *next; }; @@ -444,6 +452,7 @@ const char *relative_oid; /*! function to open the directory interface */ switch_status_t (*management_function) (char *relative_oid, switch_management_action_t action, char *data, switch_size_t datalen); + switch_thread_rwlock_t *rwlock; struct switch_management_interface *next; }; @@ -461,7 +470,7 @@ switch_status_t (*directory_next) (switch_directory_handle_t *dh); /*! function to advance to the next name/value pair in the current record */ switch_status_t (*directory_next_pair) (switch_directory_handle_t *dh, char **var, char **val); - + switch_thread_rwlock_t *rwlock; struct switch_directory_interface *next; }; @@ -586,6 +595,7 @@ /*! a list of codec implementations related to the codec */ switch_codec_implementation_t *implementations; uint32_t codec_id; + switch_thread_rwlock_t *rwlock; struct switch_codec_interface *next; }; @@ -603,6 +613,7 @@ const char *syntax; /*! flags to control behaviour */ uint32_t flags; + switch_thread_rwlock_t *rwlock; struct switch_application_interface *next; }; @@ -616,6 +627,7 @@ switch_api_function_t function; /*! an example of the api syntax */ const char *syntax; + switch_thread_rwlock_t *rwlock; struct switch_api_interface *next; }; @@ -629,5 +641,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_odbc.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_odbc.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_odbc.h Mon Aug 4 21:29:58 2008 @@ -77,5 +77,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_platform.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_platform.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_platform.h Mon Aug 4 21:29:58 2008 @@ -160,6 +160,7 @@ #endif #define SWITCH_THREAD_FUNC __stdcall #else //not win32 +#define O_BINARY 0 #define SWITCH_DECLARE(type) type #define SWITCH_DECLARE_NONSTD(type) type #define SWITCH_MOD_DECLARE(type) type @@ -323,5 +324,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_regex.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_regex.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_regex.h Mon Aug 4 21:29:58 2008 @@ -78,5 +78,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_resample.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_resample.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_resample.h Mon Aug 4 21:29:58 2008 @@ -177,5 +177,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -53,8 +53,9 @@ typedef enum { NO_CRYPTO, - AES_CM_128_HMAC_SHA1_80, - AES_CM_128_HMAC_SHA1_32 + AES_CM_128_HMAC_SHA1_80, + AES_CM_128_HMAC_SHA1_32, + AES_CM_128_NULL_AUTH } switch_rtp_crypto_key_type_t; struct switch_rtp_crypto_key { @@ -417,6 +418,9 @@ */ SWITCH_DECLARE(void *) switch_rtp_get_private(switch_rtp_t *rtp_session); +SWITCH_DECLARE(switch_status_t) switch_rtp_activate_stun_ping(switch_rtp_t *rtp_session, const char *stun_ip, switch_port_t stun_port, + uint32_t packet_count, switch_bool_t funny); + /*! \} */ @@ -431,5 +435,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_scheduler.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_scheduler.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_scheduler.h Mon Aug 4 21:29:58 2008 @@ -101,5 +101,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_stun.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_stun.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_stun.h Mon Aug 4 21:29:58 2008 @@ -249,5 +249,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -38,6 +38,15 @@ #include SWITCH_BEGIN_EXTERN_C #define SWITCH_BLANK_STRING "" +#ifdef WIN32 +#define SWITCH_SEQ_FWHITE FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY +#define SWITCH_SEQ_FRED FOREGROUND_RED | FOREGROUND_INTENSITY +#define SWITCH_SEQ_FMAGEN FOREGROUND_BLUE | FOREGROUND_RED +#define SWITCH_SEQ_FCYAN FOREGROUND_GREEN | FOREGROUND_BLUE +#define SWITCH_SEQ_FGREEN FOREGROUND_GREEN +#define SWITCH_SEQ_FYELLOW FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY +#define SWITCH_SEQ_DEFAULT_COLOR SWITCH_SEQ_FWHITE +#else #define SWITCH_SEQ_ESC "\033[" /* Ansi Control character suffixes */ #define SWITCH_SEQ_HOME_CHAR 'H' @@ -91,6 +100,7 @@ #define SWITCH_SEQ_CLEARLINE SWITCH_SEQ_ESC SWITCH_SEQ_CLEARLINE_CHAR_STR #define SWITCH_SEQ_CLEARLINEEND SWITCH_SEQ_ESC SWITCH_SEQ_CLEARLINEEND_CHAR #define SWITCH_SEQ_CLEARSCR SWITCH_SEQ_ESC SWITCH_SEQ_CLEARSCR_CHAR SWITCH_SEQ_HOME +#endif #define SWITCH_DEFAULT_DTMF_DURATION 2000 #define SWITCH_MAX_DTMF_DURATION 192000 #define SWITCH_DEFAULT_DIR_PERMS SWITCH_FPROT_UREAD | SWITCH_FPROT_UWRITE | SWITCH_FPROT_UEXECUTE | SWITCH_FPROT_GREAD | SWITCH_FPROT_GEXECUTE @@ -100,8 +110,11 @@ #define SWITCH_PATH_SEPARATOR "/" #endif #define SWITCH_URL_SEPARATOR "://" +#define SWITCH_COPY_XML_CDR_VARIABLE "copy_xml_cdr" +#define SWITCH_CURRENT_APPLICATION_VARIABLE "current_application" #define SWITCH_PROTO_SPECIFIC_HANGUP_CAUSE_VARIABLE "proto_specific_hangup_cause" #define SWITCH_CHANNEL_EXECUTE_ON_ANSWER_VARIABLE "execute_on_answer" +#define SWITCH_CHANNEL_EXECUTE_ON_RING_VARIABLE "execute_on_ring" #define SWITCH_CALL_TIMEOUT_VARIABLE "call_timeout" #define SWITCH_HOLDING_UUID_VARIABLE "holding_uuid" #define SWITCH_API_BRIDGE_END_VARIABLE "api_after_bridge" @@ -156,7 +169,8 @@ SBF_EXEC_BLEG = (1 << 3), SBF_EXEC_OPPOSITE = (1 << 4), SBF_EXEC_SAME = (1 << 5) -} switch_bind_flag_t; +} switch_bind_flag_enum_t; +typedef uint32_t switch_bind_flag_t; typedef enum { SWITCH_DTMF_RECV = 0, @@ -167,19 +181,22 @@ SOF_NONE = 0, SOF_NOBLOCK = (1 << 0), SOF_FORKED_DIAL = (1 << 1) -} switch_originate_flag_t; +} switch_originate_flag_enum_t; +typedef uint32_t switch_originate_flag_t; typedef enum { SPF_NONE = 0, SPF_ODD = (1 << 0), SPF_EVEN = (1 << 1) -} switch_port_flag_t; +} switch_port_flag_enum_t; +typedef uint32_t switch_port_flag_t; typedef enum { ED_MUX_READ = (1 << 0), ED_MUX_WRITE = (1 << 1), ED_DTMF = (1 << 2) -} switch_eavesdrop_flag_t; +} switch_eavesdrop_flag_enum_t; +typedef uint32_t switch_eavesdrop_flag_t; typedef enum { SCF_NONE = 0, @@ -187,7 +204,8 @@ SCF_NO_NEW_SESSIONS = (1 << 1), SCF_SHUTTING_DOWN = (1 << 2), SCF_CRASH_PROT = (1 << 3) -} switch_core_flag_t; +} switch_core_flag_enum_t; +typedef uint32_t switch_core_flag_t; typedef enum { SWITCH_ENDPOINT_INTERFACE, @@ -210,7 +228,8 @@ SUF_THREAD_RUNNING = (1 << 0), SUF_READY = (1 << 1), SUF_NATIVE = (1 << 2) -} switch_unicast_flag_t; +} switch_unicast_flag_enum_t; +typedef uint32_t switch_unicast_flag_t; typedef enum { SWITCH_FALSE = 0, @@ -256,7 +275,8 @@ SSHF_OWN_THREAD = (1 << 0), SSHF_FREE_ARG = (1 << 1), SSHF_NO_DEL = (1 << 2) -} switch_scheduler_flag_t; +} switch_scheduler_flag_enum_t; +typedef uint32_t switch_scheduler_flag_t; typedef enum { SMF_NONE = 0, @@ -266,7 +286,8 @@ SMF_FORCE = (1 << 3), SMF_LOOP = (1 << 4), SMF_HOLD_BLEG = (1 << 5) -} switch_media_flag_t; +} switch_media_flag_enum_t; +typedef uint32_t switch_media_flag_t; typedef enum { SWITCH_BITPACK_MODE_RFC3551, @@ -323,7 +344,7 @@ #define SWITCH_MAX_SAMPLE_LEN 32 #define SWITCH_BYTES_PER_SAMPLE 2 /* slin is 2 bytes per sample */ #define SWITCH_RECOMMENDED_BUFFER_SIZE (SWITCH_BYTES_PER_SAMPLE * SWITCH_MAX_SAMPLE_LEN * (SWITCH_MAX_INTERVAL + SWITCH_INTERVAL_PAD)) -#define SWITCH_MAX_CODECS 30 +#define SWITCH_MAX_CODECS 50 #define SWITCH_MAX_STATE_HANDLERS 30 #define SWITCH_CORE_QUEUE_LEN 100000 #define SWITCH_MAX_MANAGEMENT_BUFFER_LEN 1024 * 8 @@ -334,7 +355,8 @@ SWITCH_CPF_SCREEN = (1 << 0), SWITCH_CPF_HIDE_NAME = (1 << 1), SWITCH_CPF_HIDE_NUMBER = (1 << 2) -} switch_caller_profile_flag_t; +} switch_caller_profile_flag_enum_t; +typedef uint32_t switch_caller_profile_flag_t; typedef enum { SWITCH_AUDIO_COL_STR_TITLE = 0x01, @@ -351,7 +373,8 @@ SWITCH_XML_SECTION_DIRECTORY = (1 << 1), SWITCH_XML_SECTION_DIALPLAN = (1 << 2), SWITCH_XML_SECTION_PHRASES = (1 << 3) -} switch_xml_section_t; +} switch_xml_section_enum_t; +typedef uint32_t switch_xml_section_t; /*! \enum switch_vad_flag_t @@ -368,7 +391,8 @@ SWITCH_VAD_FLAG_EVENTS_TALK = (1 << 1), SWITCH_VAD_FLAG_EVENTS_NOTALK = (1 << 2), SWITCH_VAD_FLAG_CNG = (1 << 3) -} switch_vad_flag_t; +} switch_vad_flag_enum_t; +typedef uint32_t switch_vad_flag_t; #define SWITCH_RTP_CNG_PAYLOAD 13 @@ -414,14 +438,15 @@ SWITCH_RTP_FLAG_SECURE_RECV_RESET = (1 << 17), SWITCH_RTP_FLAG_PROXY_MEDIA = (1 << 18), SWITCH_RTP_FLAG_SHUTDOWN = (1 << 19) -} switch_rtp_flag_t; +} switch_rtp_flag_enum_t; +typedef uint32_t switch_rtp_flag_t; #ifdef _MSC_VER #pragma pack(push, r1, 1) #endif -#if __BYTE_ORDER == __BIG_ENDIAN +#if SWITCH_BYTE_ORDER == __BIG_ENDIAN typedef struct { unsigned version:2; /* protocol version */ unsigned p:1; /* padding flag */ @@ -482,7 +507,8 @@ SWITCH_IVR_OPTION_NONE = 0, SWITCH_IVR_OPTION_ASYNC = (1 << 0), SWITCH_IVR_OPTION_FILE = (1 << 1) -} switch_ivr_option_t; +} switch_ivr_option_enum_t; +typedef uint32_t switch_ivr_option_t; /*! \enum switch_core_session_message_types_t @@ -634,7 +660,8 @@ typedef enum { SCSMF_DYNAMIC = (1 << 0) -} switch_core_session_message_flag_t; +} switch_core_session_message_flag_enum_t; +typedef uint32_t switch_core_session_message_flag_t; #define SWITCH_CHANNEL_LOG SWITCH_CHANNEL_ID_LOG, __FILE__, __SWITCH_FUNC__, __LINE__, NULL #define SWITCH_CHANNEL_LOG_CLEAN SWITCH_CHANNEL_ID_LOG_CLEAN, __FILE__, __SWITCH_FUNC__, __LINE__, NULL @@ -741,7 +768,8 @@ CF_PROXY_MEDIA = (1 << 27), CF_INNER_BRIDGE = (1 << 28), CF_REQ_MEDIA = (1 << 29) -} switch_channel_flag_t; +} switch_channel_flag_enum_t; +typedef uint32_t switch_channel_flag_t; /*! @@ -764,13 +792,15 @@ SFF_PLC = (1 << 3), SFF_RFC2833 = (1 << 4), SFF_PROXY_PACKET = (1 << 5) -} switch_frame_flag_t; +} switch_frame_flag_enum_t; +typedef uint32_t switch_frame_flag_t; typedef enum { SAF_NONE = 0, SAF_SUPPORT_NOMEDIA = (1 << 0) -} switch_application_flag_t; +} switch_application_flag_enum_t; +typedef uint32_t switch_application_flag_t; /*! \enum switch_signal_t @@ -811,7 +841,8 @@ SWITCH_CODEC_FLAG_FREE_POOL = (1 << 5), SWITCH_CODEC_FLAG_AAL2 = (1 << 6), SWITCH_CODEC_FLAG_PASSTHROUGH = (1 << 7) -} switch_codec_flag_t; +} switch_codec_flag_enum_t; +typedef uint32_t switch_codec_flag_t; /*! @@ -832,8 +863,8 @@ SWITCH_SPEECH_FLAG_FREE_POOL = (1 << 2), SWITCH_SPEECH_FLAG_BLOCKING = (1 << 3), SWITCH_SPEECH_FLAG_PAUSE = (1 << 4) - -} switch_speech_flag_t; +} switch_speech_flag_enum_t; +typedef uint32_t switch_speech_flag_t; /*! \enum switch_asr_flag_t @@ -853,7 +884,9 @@ SWITCH_ASR_FLAG_CLOSED = (1 << 2), SWITCH_ASR_FLAG_FIRE_EVENTS = (1 << 3), SWITCH_ASR_FLAG_AUTO_RESUME = (1 << 4) -} switch_asr_flag_t; + +} switch_asr_flag_enum_t; +typedef uint32_t switch_asr_flag_t; /*! \enum switch_directory_flag_t @@ -865,7 +898,8 @@ typedef enum { SWITCH_DIRECTORY_FLAG_FREE_POOL = (1 << 0) -} switch_directory_flag_t; +} switch_directory_flag_enum_t; +typedef uint32_t switch_directory_flag_t; /*! \enum switch_codec_type_t @@ -894,7 +928,8 @@ */ typedef enum { SWITCH_TIMER_FLAG_FREE_POOL = (1 << 0) -} switch_timer_flag_t; +} switch_timer_flag_enum_t; +typedef uint32_t switch_timer_flag_t; /*! @@ -920,7 +955,8 @@ SMBF_STEREO = (1 << 5), SMBF_RECORD_ANSWER_REQ = (1 << 6), SMBF_THREAD_LOCK = (1 << 7) -} switch_media_bug_flag_t; +} switch_media_bug_flag_enum_t; +typedef uint32_t switch_media_bug_flag_t; /*! \enum switch_file_flag_t @@ -954,12 +990,14 @@ SWITCH_FILE_SEEK = (1 << 10), SWITCH_FILE_OPEN = (1 << 11), SWITCH_FILE_CALLBACK = (1 << 12) -} switch_file_flag_t; +} switch_file_flag_enum_t; +typedef uint32_t switch_file_flag_t; typedef enum { SWITCH_IO_FLAG_NONE = 0, SWITCH_IO_FLAG_NOBLOCK = (1 << 0) -} switch_io_flag_t; +} switch_io_flag_enum_t; +typedef uint32_t switch_io_flag_t; /* make sure this is synced with the EVENT_NAMES array in switch_event.c also never put any new ones before EVENT_ALL @@ -1017,6 +1055,9 @@ SWITCH_EVENT_EXE_SCHEDULE - Something scheduled has been executed SWITCH_EVENT_RE_SCHEDULE - Something scheduled has been rescheduled SWITCH_EVENT_RELOADXML - XML registry has been reloaded + SWITCH_EVENT_NOTIFY - Notification + SWITCH_EVENT_SEND_MESSAGE - Message + SWITCH_EVENT_RECV_MESSAGE - Message SWITCH_EVENT_ALL - All events at once @@ -1071,6 +1112,9 @@ SWITCH_EVENT_EXE_SCHEDULE, SWITCH_EVENT_RE_SCHEDULE, SWITCH_EVENT_RELOADXML, + SWITCH_EVENT_NOTIFY, + SWITCH_EVENT_SEND_MESSAGE, + SWITCH_EVENT_RECV_MESSAGE, SWITCH_EVENT_ALL } switch_event_types_t; @@ -1080,8 +1124,8 @@ } switch_input_type_t; typedef enum { - SWITCH_CAUSE_UNALLOCATED = 0, - SWITCH_CAUSE_SUCCESS = 1, + SWITCH_CAUSE_NONE = 0, + SWITCH_CAUSE_UNALLOCATED_NUMBER = 1, SWITCH_CAUSE_NO_ROUTE_TRANSIT_NET = 2, SWITCH_CAUSE_NO_ROUTE_DESTINATION = 3, SWITCH_CAUSE_CHANNEL_UNACCEPTABLE = 6, @@ -1130,6 +1174,7 @@ SWITCH_CAUSE_MANDATORY_IE_LENGTH_ERROR = 103, SWITCH_CAUSE_PROTOCOL_ERROR = 111, SWITCH_CAUSE_INTERWORKING = 127, + SWITCH_CAUSE_SUCCESS = 142, SWITCH_CAUSE_ORIGINATOR_CANCEL = 487, SWITCH_CAUSE_CRASH = 500, SWITCH_CAUSE_SYSTEM_SHUTDOWN = 501, @@ -1205,7 +1250,7 @@ typedef struct switch_core_port_allocator switch_core_port_allocator_t; typedef struct switch_media_bug switch_media_bug_t; typedef switch_bool_t (*switch_media_bug_callback_t) (switch_media_bug_t *, void *, switch_abc_type_t); - +typedef struct switch_xml_binding switch_xml_binding_t; typedef switch_status_t (*switch_core_codec_encode_func_t) (switch_codec_t *codec, switch_codec_t *other_codec, @@ -1327,5 +1372,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -104,6 +104,22 @@ !strcasecmp(expr, "active") ||\ !strcasecmp(expr, "allow") ||\ atoi(expr))) ? SWITCH_TRUE : SWITCH_FALSE + +/*! + \brief Evaluate the falsefullness of a string expression + \param expr a string expression + \return true or false +*/ +#define switch_false(expr)\ +(expr && ( !strcasecmp(expr, "no") ||\ +!strcasecmp(expr, "off") ||\ +!strcasecmp(expr, "false") ||\ +!strcasecmp(expr, "disabled") ||\ +!strcasecmp(expr, "inactive") ||\ +!strcasecmp(expr, "disallow") ||\ +!atoi(expr))) ? SWITCH_TRUE : SWITCH_FALSE + + /*! \brief find local ip of the box \param buf the buffer to write the ip adress found into @@ -118,10 +134,44 @@ \brief find the char representation of an ip adress \param buf the buffer to write the ip adress found into \param len the length of the buf - \param in the struct in_addr * to get the adress from + \param sa the struct sockaddr * to get the adress from + \param salen the length of sa \return the ip adress string */ -SWITCH_DECLARE(char *) get_addr(char *buf, switch_size_t len, struct in_addr *in); +SWITCH_DECLARE(char *) get_addr(char *buf, switch_size_t len, struct sockaddr *sa, socklen_t salen); + +/*! + \brief get the port number of an ip address + \param sa the struct sockaddr * to get the port from + \return the ip adress string +*/ +SWITCH_DECLARE(unsigned short) get_port(struct sockaddr *sa); + +/*! + \brief flags to be used with switch_build_uri() + */ +enum switch_uri_flags { + SWITCH_URI_NUMERIC_HOST = 1, + SWITCH_URI_NUMERIC_PORT = 2, + SWITCH_URI_NO_SCOPE = 4, +}; + +/*! + \brief build a URI string from components + \param uri output string + \param size maximum size of output string (including trailing null) + \param scheme URI scheme + \param user user part or null if none + \param sa host address + \param flags logical OR-ed combination of flags from \ref switch_uri_flags + \return number of characters printed (not including the trailing null) + */ +SWITCH_DECLARE(int) switch_build_uri(char *uri, + switch_size_t size, + const char *scheme, + const char *user, + const switch_sockaddr_t *sa, + int flags); #define SWITCH_STATUS_IS_BREAK(x) (x == SWITCH_STATUS_BREAK || x == 730035 || x == 35) @@ -363,12 +413,17 @@ SWITCH_DECLARE(int) switch_parse_cidr(const char *string, uint32_t *ip, uint32_t *mask, uint32_t *bitp); SWITCH_DECLARE(switch_status_t) switch_network_list_create(switch_network_list_t **list, switch_bool_t default_type, switch_memory_pool_t *pool); -SWITCH_DECLARE(switch_status_t) switch_network_list_add_cidr(switch_network_list_t *list, const char *cidr_str, switch_bool_t ok); +SWITCH_DECLARE(switch_status_t) switch_network_list_add_cidr_token(switch_network_list_t *list, const char *cidr_str, switch_bool_t ok, const char *token); +#define switch_network_list_add_cidr(_list, _cidr_str, _ok) switch_network_list_add_cidr_token(_list, _cidr_str, _ok, NULL) + + SWITCH_DECLARE(switch_status_t) switch_network_list_add_host_mask(switch_network_list_t *list, const char *host, const char *mask_str, switch_bool_t ok); -SWITCH_DECLARE(switch_bool_t) switch_network_list_validate_ip(switch_network_list_t *list, uint32_t ip); +SWITCH_DECLARE(switch_bool_t) switch_network_list_validate_ip_token(switch_network_list_t *list, uint32_t ip, const char **token); +#define switch_network_list_validate_ip(_list, _ip) switch_network_list_validate_ip_token(_list, _ip, NULL); + #define switch_test_subnet(_ip, _net, _mask) (_mask ? ((_net & _mask) == (_ip & _mask)) : _net ? _net == _ip : 1) - int switch_inet_pton(int af, const char *src, void *dst); +int switch_inet_pton(int af, const char *src, void *dst); /* malloc or DIE macros */ #ifdef NDEBUG @@ -394,5 +449,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_xml.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_xml.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_xml.h Mon Aug 4 21:29:58 2008 @@ -58,6 +58,8 @@ #include +struct switch_xml_binding; + ///\defgroup xml1 XML Library Functions ///\ingroup core1 ///\{ @@ -349,6 +351,19 @@ ///\note gateway functions will be executed in the order they were binded until a success is found else the root registry will be used SWITCH_DECLARE(switch_status_t) switch_xml_bind_search_function(switch_xml_search_function_t function, switch_xml_section_t sections, void *user_data); +///\brief bind a search function to an external gateway +///\param function the search function to bind +///\param sections a bitmask of sections you wil service +///\param user_data a pointer to private data to be used during the callback +///\param binding a handle to use to later unbind. +///\return SWITCH_STATUS_SUCCESS if successful +///\note gateway functions will be executed in the order they were binded until a success is found else the root registry will be used +SWITCH_DECLARE(switch_status_t) switch_xml_bind_search_function_removable(switch_xml_search_function_t function, + switch_xml_section_t sections, void *user_data, switch_xml_binding_t **binding); + +SWITCH_DECLARE(switch_status_t) switch_xml_unbind_search_function(switch_xml_binding_t **binding); +SWITCH_DECLARE(switch_status_t) switch_xml_unbind_search_function_ptr(switch_xml_search_function_t function); + ///\brief parse a string for a list of sections ///\param str a | delimited list of section names ///\return the section mask @@ -365,5 +380,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -29,6 +29,7 @@ * Paul Tinsley * Marcel Barbulescu * Bret McDanel + * Cesar Cepeda * * * mod_commands.c -- Misc. Command Module @@ -178,6 +179,60 @@ return SWITCH_STATUS_SUCCESS; } +SWITCH_STANDARD_API(url_decode_function) +{ + char *reply = ""; + char *data = NULL; + + if (!switch_strlen_zero(cmd)) { + data = strdup(cmd); + switch_url_decode(data); + reply = data; + } + + stream->write_function(stream, "%s", reply); + + switch_safe_free(data); + return SWITCH_STATUS_SUCCESS; + +} + +SWITCH_STANDARD_API(module_exists_function) +{ + if (!switch_strlen_zero(cmd)) { + if(switch_loadable_module_exists(cmd) == SWITCH_STATUS_SUCCESS) { + stream->write_function(stream, "true"); + } else { + stream->write_function(stream, "false"); + + } + } + + return SWITCH_STATUS_SUCCESS; +} + + +SWITCH_STANDARD_API(url_encode_function) +{ + char *reply = ""; + char *data = NULL; + int len = 0 ; + + if (!switch_strlen_zero(cmd)) { + len = (strlen(cmd) * 3) + 1; + switch_zmalloc(data, len); + switch_url_encode(cmd, data, len); + reply = data; + } + + stream->write_function(stream, "%s", reply); + + switch_safe_free(data); + return SWITCH_STATUS_SUCCESS; + +} + + SWITCH_STANDARD_API(user_exists_function) { return _find_user(cmd, session, stream, SWITCH_TRUE); @@ -562,7 +617,7 @@ return SWITCH_STATUS_SUCCESS; } -#define CTL_SYNTAX "[hupall|pause|resume|shutdown|sync_clock|reclaim_mem|max_sessions|max_dtmf_duration [num]|loglevel [level]]" +#define CTL_SYNTAX "[hupall|pause|resume|shutdown|sps|sync_clock|reclaim_mem|max_sessions|max_dtmf_duration [num]|loglevel [level]]" SWITCH_STANDARD_API(ctl_function) { int argc; @@ -1028,7 +1083,7 @@ return SWITCH_STATUS_SUCCESS; } -#define MEDIA_SYNTAX "" +#define MEDIA_SYNTAX "[off] " SWITCH_STANDARD_API(uuid_media_function) { char *mycmd = NULL, *argv[4] = { 0 }; @@ -1578,7 +1633,7 @@ SWITCH_STANDARD_STREAM(stream); switch_api_execute(cmd, arg, NULL, &stream); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Command %s(%s):\n%s\n", cmd, arg, switch_str_nil((char *) stream.data)); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Command %s(%s):\n%s\n", cmd, switch_str_nil(arg), switch_str_nil((char *) stream.data)); switch_safe_free(stream.data); } @@ -1789,6 +1844,7 @@ int print_title; switch_xml_t xml; int rows; + int justcount; }; static int show_as_xml_callback(void *pArg, int argc, char **argv, char **columnNames) @@ -1803,7 +1859,12 @@ return -1; } } - + + if (holder->justcount) { + holder->count++; + return 0; + } + if (!(row = switch_xml_add_child_d(holder->xml, "row", holder->rows++))) { return -1; } @@ -1836,7 +1897,12 @@ { struct holder *holder = (struct holder *) pArg; int x; - + + if (holder->justcount) { + holder->count++; + return 0; + } + if (holder->print_title && holder->count == 0) { if (holder->http) { holder->stream->write_function(holder->stream, "\n"); @@ -1911,7 +1977,7 @@ return SWITCH_STATUS_SUCCESS; } -#define SHOW_SYNTAX "codec|application|api|dialplan|file|timer|calls|channels|aliases|complete" +#define SHOW_SYNTAX "codec|application|api|dialplan|file|timer|calls [count]|channels [count]|aliases|complete|chat|endpoint|management|say|interfaces|interface_types" SWITCH_STANDARD_API(show_function) { char sql[1024]; @@ -1929,13 +1995,16 @@ } db = switch_core_db_handle(); - + + holder.justcount = 0; + if (cmd && (mydata = strdup(cmd))) { argc = switch_separate_string(mydata, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); command = argv[0]; if (argv[2] && !strcasecmp(argv[1], "as")) { as = argv[2]; } + } if (stream->param_event) { @@ -1949,21 +2018,48 @@ return SWITCH_STATUS_SUCCESS; } + /* If you change the field qty or order of any of these select */ /* statmements, you must also change show_callback and friends to match! */ if (!command) { stream->write_function(stream, "-USAGE: %s\n", SHOW_SYNTAX); return SWITCH_STATUS_SUCCESS; - } else if (!strcasecmp(command, "codec") || !strcasecmp(command, "dialplan") || !strcasecmp(command, "file") || !strcasecmp(command, "timer")) { + } else if (!strncasecmp(command, "codec", 5) || + !strncasecmp(command, "dialplan", 8) || + !strncasecmp(command, "file", 4) || + !strncasecmp(command, "timer", 5) || + !strncasecmp(command, "chat", 4) || + !strncasecmp(command, "say", 3) || + !strncasecmp(command, "management", 10) || + !strncasecmp(command, "endpoint", 8)) { + if (end_of(command) == 's') { + end_of(command) = '\0'; + } sprintf(sql, "select type, name from interfaces where type = '%s' order by type,name", command); + } else if (!strcasecmp(command, "interfaces")) { + sprintf(sql, "select type, name from interfaces order by type,name"); + } else if (!strcasecmp(command, "interface_types")) { + sprintf(sql, "select type,count(type) as total from interfaces group by type order by type"); } else if (!strcasecmp(command, "tasks")) { sprintf(sql, "select * from %s", command); } else if (!strcasecmp(command, "application") || !strcasecmp(command, "api")) { sprintf(sql, "select name, description, syntax from interfaces where type = '%s' and description != '' order by type,name", command); } else if (!strcasecmp(command, "calls")) { sprintf(sql, "select * from calls order by created_epoch"); + if (argv[1] && !strcasecmp(argv[1],"count")) { + holder.justcount = 1; + if (argv[3] && !strcasecmp(argv[2], "as")) { + as = argv[3]; + } + } } else if (!strcasecmp(command, "channels")) { sprintf(sql, "select * from channels order by created_epoch"); + if (argv[1] && !strcasecmp(argv[1],"count")) { + holder.justcount = 1; + if (argv[3] && !strcasecmp(argv[2], "as")) { + as = argv[3]; + } + } } else if (!strcasecmp(command, "aliases")) { sprintf(sql, "select * from aliases order by alias"); } else if (!strcasecmp(command, "complete")) { @@ -2178,6 +2274,57 @@ return SWITCH_STATUS_SUCCESS; } +#define UUID_SEND_DTMF_SYNTAX " " +SWITCH_STANDARD_API(uuid_send_dtmf_function) +{ + switch_core_session_t *psession = NULL; + char *mycmd = NULL, *argv[2] = { 0 }; + char *uuid = NULL, *dtmf_data = NULL; + int argc = 0; + + if (session) { + return SWITCH_STATUS_FALSE; + } + + if (switch_strlen_zero(cmd)) { + goto usage; + } + + if (!(mycmd = strdup(cmd))) { + goto usage; + } + + if ((argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) < 2) { + goto usage; + } + + uuid = argv[0]; + dtmf_data = argv[1]; + if (switch_strlen_zero(uuid) || switch_strlen_zero(dtmf_data)) { + goto usage; + } + + if (!(psession = switch_core_session_locate(uuid))) { + stream->write_function(stream, "-ERR Cannot locate session!\n"); + return SWITCH_STATUS_SUCCESS; + } + + switch_core_session_send_dtmf_string(psession, (const char *) dtmf_data); + goto done; + +usage: + stream->write_function(stream, "-USAGE: %s\n", UUID_SEND_DTMF_SYNTAX); + switch_safe_free(mycmd); + +done: + if (psession) { + switch_core_session_rwunlock(psession); + } + + switch_safe_free(mycmd); + return SWITCH_STATUS_SUCCESS; +} + #define DUMP_SYNTAX " [format]" SWITCH_STANDARD_API(uuid_dump_function) { @@ -2246,7 +2393,7 @@ #define GLOBAL_SETVAR_SYNTAX " " SWITCH_STANDARD_API(global_setvar_function) { - char *mycmd = NULL, *argv[3] = { 0 }; + char *mycmd = NULL, *argv[2] = { 0 }; int argc = 0; if (!switch_strlen_zero(cmd) && (mycmd = strdup(cmd))) { @@ -2275,13 +2422,11 @@ SWITCH_STANDARD_API(global_getvar_function) { - if (!switch_strlen_zero(cmd)) { + if (switch_strlen_zero(cmd)) { + switch_core_dump_variables(stream); + } else { stream->write_function(stream, "%s", switch_str_nil(switch_core_get_variable(cmd))); - goto done; } - - stream->write_function(stream, "-USAGE: %s\n", GLOBAL_GETVAR_SYNTAX); - done: return SWITCH_STATUS_SUCCESS; } @@ -2295,6 +2440,7 @@ SWITCH_ADD_API(commands_api_interface, "uuid_kill", "Kill Channel", kill_function, KILL_SYNTAX); SWITCH_ADD_API(commands_api_interface, "uuid_park", "Park Channel", park_function, PARK_SYNTAX); SWITCH_ADD_API(commands_api_interface, "reloadacl", "Reload ACL", reload_acl_function, "[reloadxml]"); + switch_console_set_complete("add reloadacl reloadxml"); SWITCH_ADD_API(commands_api_interface, "reloadxml", "Reload XML", reload_function, ""); SWITCH_ADD_API(commands_api_interface, "unload", "Unload Module", unload_function, LOAD_SYNTAX); SWITCH_ADD_API(commands_api_interface, "load", "Load Module", load_function, LOAD_SYNTAX); @@ -2302,8 +2448,23 @@ SWITCH_ADD_API(commands_api_interface, "pause", "Pause", pause_function, PAUSE_SYNTAX); SWITCH_ADD_API(commands_api_interface, "break", "Break", break_function, BREAK_SYNTAX); SWITCH_ADD_API(commands_api_interface, "show", "Show", show_function, SHOW_SYNTAX); + switch_console_set_complete("add show channels"); + switch_console_set_complete("add show codec"); + switch_console_set_complete("add show application"); + switch_console_set_complete("add show api"); + switch_console_set_complete("add show dialplan"); + switch_console_set_complete("add show file"); + switch_console_set_complete("add show timer"); + switch_console_set_complete("add show calls"); + switch_console_set_complete("add show channels"); + switch_console_set_complete("add show aliases"); + switch_console_set_complete("add show complete"); SWITCH_ADD_API(commands_api_interface, "complete", "Complete", complete_function, COMPLETE_SYNTAX); + switch_console_set_complete("add complete add"); + switch_console_set_complete("add complete del"); SWITCH_ADD_API(commands_api_interface, "alias", "Alias", alias_function, ALIAS_SYNTAX); + switch_console_set_complete("add alias add"); + switch_console_set_complete("add alias del"); SWITCH_ADD_API(commands_api_interface, "status", "status", status_function, ""); SWITCH_ADD_API(commands_api_interface, "uuid_bridge", "uuid_bridge", uuid_bridge_function, ""); SWITCH_ADD_API(commands_api_interface, "uuid_setvar", "uuid_setvar", uuid_setvar_function, SETVAR_SYNTAX); @@ -2318,6 +2479,15 @@ SWITCH_ADD_API(commands_api_interface, "uuid_display", "change display", uuid_display_function, DISPLAY_SYNTAX); SWITCH_ADD_API(commands_api_interface, "uuid_media", "media", uuid_media_function, MEDIA_SYNTAX); SWITCH_ADD_API(commands_api_interface, "fsctl", "control messages", ctl_function, CTL_SYNTAX); + switch_console_set_complete("add fsctl hupall"); + switch_console_set_complete("add fsctl pause"); + switch_console_set_complete("add fsctl resume"); + switch_console_set_complete("add fsctl shutdown"); + switch_console_set_complete("add fsctl sps"); + switch_console_set_complete("add fsctl sync_clock"); + switch_console_set_complete("add fsctl reclaim_mem"); + switch_console_set_complete("add fsctl max_sessions"); + switch_console_set_complete("add fsctl max_dtmf_duration"); SWITCH_ADD_API(commands_api_interface, "help", "Show help for all the api commands", help_function, ""); SWITCH_ADD_API(commands_api_interface, "version", "Show version of the switch", version_function, ""); SWITCH_ADD_API(commands_api_interface, "sched_hangup", "Schedule a running call to hangup", sched_hangup_function, SCHED_HANGUP_SYNTAX); @@ -2339,6 +2509,10 @@ SWITCH_ADD_API(commands_api_interface, "user_exists", "find a user", user_exists_function, " "); SWITCH_ADD_API(commands_api_interface, "xml_locate", "find some xml", xml_locate_function, "[root |
]"); SWITCH_ADD_API(commands_api_interface, "user_data", "find user data", user_data_function, "@ [var|param] "); + SWITCH_ADD_API(commands_api_interface, "url_encode", "url encode a string", url_encode_function, ""); + SWITCH_ADD_API(commands_api_interface, "url_decode", "url decode a string", url_decode_function, ""); + SWITCH_ADD_API(commands_api_interface, "module_exists", "check if module exists", module_exists_function, ""); + SWITCH_ADD_API(commands_api_interface, "uuid_send_dtmf", "send dtmf digits", uuid_send_dtmf_function, UUID_SEND_DTMF_SYNTAX); /* indicate that the module should continue to be loaded */ return SWITCH_STATUS_NOUNLOAD; @@ -2352,5 +2526,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -27,7 +27,7 @@ * Neal Horman * Bret McDanel * Dale Thatcher - * + * Chris Danielson * * mod_conference.c -- Software Conference Bridge * @@ -75,6 +75,7 @@ uint32_t id_pool; int32_t running; uint32_t threads; + switch_event_node_t *node; } globals; typedef enum { @@ -229,6 +230,7 @@ char *caller_id_number; char *sound_prefix; char *special_announce; + char *auto_record; uint32_t max_members; char *maxmember_sound; uint32_t anounce_count; @@ -362,7 +364,7 @@ static void launch_conference_thread(conference_obj_t *conference); static void launch_conference_video_thread(conference_obj_t *conference); static void *SWITCH_THREAD_FUNC conference_loop_input(switch_thread_t *thread, void *obj); -static switch_status_t conference_local_play_file(conference_obj_t *conference, switch_core_session_t *session, char *path, uint32_t leadin); +static switch_status_t conference_local_play_file(conference_obj_t *conference, switch_core_session_t *session, char *path, uint32_t leadin, void *buf, uint32_t buflen); static switch_status_t conference_member_play_file(conference_member_t *member, char *file, uint32_t leadin); static switch_status_t conference_member_say(conference_member_t *member, char *text, uint32_t leadin); static uint32_t conference_member_stop_file(conference_member_t *member, file_stop_t stop); @@ -879,6 +881,21 @@ switch_mutex_lock(globals.hash_mutex); globals.threads++; switch_mutex_unlock(globals.hash_mutex); + + if (conference->auto_record) { + imember = conference->members; + if (imember) { + switch_channel_t *channel = switch_core_session_get_channel(imember->session); + char *rfile = switch_channel_expand_variables(channel, conference->auto_record); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Auto recording file: %s\n", rfile); + launch_conference_record_thread(conference, rfile); + if (rfile != conference->auto_record) { + switch_safe_free(rfile); + } + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Auto Record Failed. No members in conference.\n"); + } + } while (globals.running && !switch_test_flag(conference, CFLAG_DESTRUCT)) { switch_size_t file_sample_len = samples; @@ -1065,16 +1082,21 @@ #endif } } - /* Go back and write each member his dedicated copy of the audio frame that does not contain his own audio. */ - for (imember = conference->members; imember; imember = imember->next) { - if (switch_test_flag(imember, MFLAG_RUNNING)) { - switch_mutex_lock(imember->audio_out_mutex); - switch_buffer_write(imember->mux_buffer, imember->mux_frame, bytes); - switch_mutex_unlock(imember->audio_out_mutex); + if (bytes) { + /* Go back and write each member his dedicated copy of the audio frame that does not contain his own audio. */ + for (imember = conference->members; imember; imember = imember->next) { + if (switch_test_flag(imember, MFLAG_RUNNING)) { + switch_size_t ok = 1; + switch_mutex_lock(imember->audio_out_mutex); + ok = switch_buffer_write(imember->mux_buffer, imember->mux_frame, bytes); + switch_mutex_unlock(imember->audio_out_mutex); + if (!ok) { + goto end; + } + } } } } - if (conference->async_fnode && conference->async_fnode->done) { switch_memory_pool_t *pool; switch_core_file_close(&conference->async_fnode->fh); @@ -1100,7 +1122,9 @@ } switch_mutex_unlock(conference->mutex); - } /* Rinse ... Repeat */ + } + /* Rinse ... Repeat */ + end: if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) { switch_event_add_header(event, SWITCH_STACK_BOTTOM, "proto", CONF_CHAT_PROTO); @@ -1629,7 +1653,7 @@ switch_audio_resampler_t *read_resampler = member->read_resampler; void *data; uint32_t datalen; - + if (read_resampler) { int16_t *bptr = (int16_t *) read_frame->data; int len = (int) read_frame->datalen; @@ -1653,10 +1677,17 @@ switch_change_sln_volume(data, datalen / 2, member->volume_in_level); } - /* Write the audio into the input buffer */ - switch_mutex_lock(member->audio_in_mutex); - switch_buffer_write(member->audio_buffer, data, datalen); - switch_mutex_unlock(member->audio_in_mutex); + if (datalen) { + switch_size_t ok = 1; + + /* Write the audio into the input buffer */ + switch_mutex_lock(member->audio_in_mutex); + ok = switch_buffer_write(member->audio_buffer, data, datalen); + switch_mutex_unlock(member->audio_in_mutex); + if (!ok) { + break; + } + } } } @@ -3952,12 +3983,19 @@ } /* Play a file */ -static switch_status_t conference_local_play_file(conference_obj_t *conference, switch_core_session_t *session, char *path, uint32_t leadin) +static switch_status_t conference_local_play_file(conference_obj_t *conference, switch_core_session_t *session, char *path, uint32_t leadin, void *buf, uint32_t buflen) { uint32_t x = 0; switch_status_t status = SWITCH_STATUS_SUCCESS; switch_channel_t *channel; char *expanded = NULL; + switch_input_args_t args = { 0 }, *ap = NULL; + + if (buf) { + args.buf = buf; + args.buflen = buflen; + ap = &args; + } /* generate some space infront of the file to be played */ for (x = 0; x < leadin; x++) { @@ -3984,7 +4022,7 @@ if (!(conference->tts_engine && conference->tts_voice)) { status = SWITCH_STATUS_FALSE; } else { - status = switch_ivr_speak_text(session, conference->tts_engine, conference->tts_voice, path + 4, NULL); + status = switch_ivr_speak_text(session, conference->tts_engine, conference->tts_voice, path + 4, ap); } goto done; } @@ -3997,7 +4035,7 @@ path = dpath; } - status = switch_ivr_play_file(session, NULL, path, NULL); + status = switch_ivr_play_file(session, NULL, path, ap); switch_safe_free(dpath); } @@ -4250,6 +4288,8 @@ goto done; } + switch_channel_set_variable(channel, "conference_name", conference->name); + /* Set the minimum number of members (once you go above it you cannot go below it) */ conference->min = 2; @@ -4279,6 +4319,8 @@ if (dpin) { conference->pin = switch_core_strdup(conference->pool, dpin); } + + switch_channel_set_variable(channel, "conference_name", conference->name); /* Set the minimum number of members (once you go above it you cannot go below it) */ conference->min = 1; @@ -4288,6 +4330,8 @@ /* Start the conference thread for this conference */ launch_conference_thread(conference); + } else { /* setup user variable */ + switch_channel_set_variable(channel, "conference_name", conference->name); } /* acquire a read lock on the thread so it can't leave without us */ @@ -4311,7 +4355,7 @@ /* be friendly */ if (conference->pin_sound) { - conference_local_play_file(conference, session, conference->pin_sound, 20); + conference_local_play_file(conference, session, conference->pin_sound, 20, pin_buf, sizeof(pin_buf)); } /* wait for them if neccessary */ if (strlen(pin_buf) < strlen(conference->pin)) { @@ -4331,7 +4375,7 @@ /* more friendliness */ if (conference->bad_pin_sound) { - conference_local_play_file(conference, session, conference->bad_pin_sound, 20); + conference_local_play_file(conference, session, conference->bad_pin_sound, 20, pin_buf, sizeof(pin_buf)); } } pin_retries--; @@ -4343,7 +4387,7 @@ } if (conference->special_announce) { - conference_local_play_file(conference, session, conference->special_announce, CONF_DEFAULT_LEADIN); + conference_local_play_file(conference, session, conference->special_announce, CONF_DEFAULT_LEADIN, NULL, 0); } /* don't allow more callers if the conference is locked, unless we invited them */ @@ -4352,7 +4396,7 @@ if (conference->locked_sound) { /* Answer the channel */ switch_channel_answer(channel); - conference_local_play_file(conference, session, conference->locked_sound, 20); + conference_local_play_file(conference, session, conference->locked_sound, 20, NULL, 0); } goto done; } @@ -4366,7 +4410,7 @@ if (conference->maxmember_sound) { /* Answer the channel */ switch_channel_answer(channel); - conference_local_play_file(conference, session, conference->maxmember_sound, 20); + conference_local_play_file(conference, session, conference->maxmember_sound, 20, NULL, 0); } goto done; } @@ -4798,6 +4842,7 @@ switch_status_t status; int comfort_noise_level = 0; char *suppress_events = NULL; + char *auto_record = NULL; /* Validate the conference name */ if (switch_strlen_zero(name)) { @@ -4915,6 +4960,8 @@ } } else if (!strcasecmp(var, "suppress-events") && !switch_strlen_zero(val)) { suppress_events = val; + } else if (!strcasecmp(var, "auto-record") && !switch_strlen_zero(val)) { + auto_record = val; } } @@ -5070,6 +5117,10 @@ clear_eflags(suppress_events, &conference->eflags); } + if (!switch_strlen_zero(auto_record)) { + conference->auto_record = switch_core_strdup(conference->pool, auto_record); + } + /* caller control configuration chores */ if (switch_ivr_digit_stream_parser_new(conference->pool, &conference->dtmf_parser) == SWITCH_STATUS_SUCCESS) { @@ -5258,7 +5309,7 @@ switch_mutex_init(&globals.hash_mutex, SWITCH_MUTEX_NESTED, globals.conference_pool); /* Subscribe to presence request events */ - if (switch_event_bind((char *) modname, SWITCH_EVENT_PRESENCE_PROBE, SWITCH_EVENT_SUBCLASS_ANY, pres_event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_PRESENCE_PROBE, SWITCH_EVENT_SUBCLASS_ANY, pres_event_handler, NULL, &globals.node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't subscribe to presence request events!\n"); return SWITCH_STATUS_GENERR; } @@ -5283,6 +5334,9 @@ switch_yield(100000); } + switch_event_unbind(&globals.node); + switch_event_free_subclass(CONF_EVENT_MAINT); + /* free api interface help ".syntax" field string */ switch_safe_free(api_syntax); } @@ -5299,5 +5353,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -175,9 +175,11 @@ 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"); @@ -185,6 +187,7 @@ 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"); @@ -193,6 +196,14 @@ } } + 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], '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"); @@ -304,7 +315,9 @@ } if (e_data.total) { for (x = 0; x < e_data.total && switch_channel_ready(channel); x++) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Spy: %s\n", e_data.uuid_list[x]); + /* If we have a group and 1000 concurrent calls, we will flood the logs. This check avoids this */ + if ( !require_group ) + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Spy: %s\n", e_data.uuid_list[x]); if ((file = switch_channel_get_variable(channel, "eavesdrop_indicate_new"))) { switch_ivr_play_file(session, NULL, file, NULL); } @@ -352,54 +365,7 @@ #define SET_USER_SYNTAX "@" SWITCH_STANDARD_APP(set_user_function) { - switch_xml_t x_domain, xml = NULL, x_user, x_param, x_params; - char *user, *mailbox, *domain; - switch_channel_t *channel = switch_core_session_get_channel(session); - - if (switch_strlen_zero(data)) { - goto error; - } - - user = switch_core_session_strdup(session, data); - - if (!(domain = strchr(user, '@'))) { - goto error; - } - - *domain++ = '\0'; - - if (switch_xml_locate_user("id", user, domain, NULL, &xml, &x_domain, &x_user, NULL) != SWITCH_STATUS_SUCCESS) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "can't find user [%s@%s]\n", user, domain); - goto done; - } - - if ((mailbox = (char *) switch_xml_attr(x_user, "mailbox"))) { - switch_channel_set_variable(channel, "mailbox", mailbox); - } - - if ((x_params = switch_xml_child(x_user, "variables"))) { - for (x_param = switch_xml_child(x_params, "variable"); x_param; x_param = x_param->next) { - const char *var = switch_xml_attr(x_param, "name"); - const char *val = switch_xml_attr(x_param, "value"); - - if (var && val) { - switch_channel_set_variable(channel, var, val); - } - } - } - - switch_channel_set_variable(channel, "user_name", user); - switch_channel_set_variable(channel, "domain_name", domain); - - goto done; - - error: - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No user at domain specified.\n"); - - done: - if (xml) { - switch_xml_free(xml); - } + switch_ivr_set_user(session, data); } SWITCH_STANDARD_APP(ring_ready_function) @@ -573,16 +539,6 @@ } } -SWITCH_STANDARD_APP(sleep_function) -{ - if (switch_strlen_zero(data)) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No timeout specified.\n"); - } else { - uint32_t ms = atoi(data); - switch_ivr_sleep(session, ms); - } -} - SWITCH_STANDARD_APP(delay_function) { uint32_t len = 0; @@ -698,10 +654,13 @@ SWITCH_STANDARD_APP(set_function) { char *var, *val = NULL; - + if (switch_strlen_zero(data)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No variable name specified.\n"); } else { + switch_channel_t *channel = switch_core_session_get_channel(session); + char *expanded = NULL; + var = switch_core_session_strdup(session, data); val = strchr(var, '='); @@ -712,8 +671,16 @@ } } - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "SET [%s]=[%s]\n", var, val ? val : "UNDEF"); - switch_channel_set_variable(switch_core_session_get_channel(session), var, val); + if (val) { + expanded = switch_channel_expand_variables(channel, val); + } + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "SET [%s]=[%s]\n", var, expanded ? expanded : "UNDEF"); + switch_channel_set_variable(channel, var, expanded); + + if (expanded && expanded != val) { + switch_safe_free(expanded); + } } } @@ -1080,8 +1047,11 @@ switch_chat_interface_t *ci; if ((ci = switch_loadable_module_get_chat_interface(argv[0]))) { - ci->chat_send("dp", argv[1], argv[2], "", argv[3], ""); - stream->write_function(stream, "Sent"); + if (ci->chat_send("dp", argv[1], argv[2], "", argv[3], "") == SWITCH_STATUS_SUCCESS) { + stream->write_function(stream, "Sent"); + } else { + stream->write_function(stream, "Error! Message Not Sent"); + } } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid Chat Interface [%s]!\n", argv[0]); } @@ -1222,7 +1192,9 @@ } } else { if ((to = atol(argv[3])) < switch_timestamp(NULL)) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "INVALID Timeout!\n"); + if (to >= 1) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "INVALID Timeout!\n"); + } to = 0; } } @@ -1307,6 +1279,26 @@ return SWITCH_STATUS_SUCCESS; } + +SWITCH_STANDARD_APP(sleep_function) +{ + if (switch_strlen_zero(data)) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No timeout specified.\n"); + } else { + uint32_t ms = atoi(data); + char buf[10]; + switch_input_args_t args = { 0 }; + + args.input_callback = on_dtmf; + args.buf = buf; + args.buflen = sizeof(buf); + + switch_ivr_sleep(session, ms, &args); + } +} + + + SWITCH_STANDARD_APP(clear_speech_cache_function) { switch_ivr_clear_speech_cache(session); @@ -1797,7 +1789,7 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Originate Failed. Cause: %s\n", switch_channel_cause2str(cause)); /* no answer is *always* a reason to continue */ - if (cause == SWITCH_CAUSE_NO_ANSWER || cause == SWITCH_CAUSE_NO_USER_RESPONSE) { + if (cause == SWITCH_CAUSE_NO_ANSWER || cause == SWITCH_CAUSE_NO_USER_RESPONSE || cause == SWITCH_CAUSE_ORIGINATOR_CANCEL) { return; } @@ -1903,7 +1895,7 @@ switch_xml_t x_domain = NULL, xml = NULL, x_user = NULL, x_param, x_params; char *user = NULL, *domain = NULL; const char *dest = NULL; - static switch_call_cause_t cause = SWITCH_CAUSE_UNALLOCATED; + static switch_call_cause_t cause = SWITCH_CAUSE_NONE; unsigned int timelimit = 60; switch_channel_t *new_channel = NULL; switch_event_t *params = NULL; @@ -1961,6 +1953,13 @@ char *d_dest = NULL; switch_channel_t *channel; switch_originate_flag_t myflags = SOF_NONE; + char *cid_name_override = NULL; + char *cid_num_override = NULL; + + if (var_event) { + cid_name_override = switch_event_get_header(var_event, "origination_caller_id_name"); + cid_num_override = switch_event_get_header(var_event, "origination_caller_id_number"); + } if (session) { channel = switch_core_session_get_channel(session); @@ -1992,7 +1991,8 @@ myflags |= SOF_NOBLOCK; } - if (switch_ivr_originate(session, new_session, &cause, d_dest, timelimit, NULL, NULL, NULL, NULL, myflags) == SWITCH_STATUS_SUCCESS) { + if (switch_ivr_originate(session, new_session, &cause, d_dest, timelimit, NULL, + cid_name_override, cid_num_override, NULL, myflags) == SWITCH_STATUS_SUCCESS) { const char *context; switch_caller_profile_t *cp; @@ -2057,6 +2057,105 @@ switch_ivr_unhold_uuid(switch_core_session_get_uuid(session)); } +#define WAIT_FOR_SILENCE_SYNTAX " []" +SWITCH_STANDARD_APP(wait_for_silence_function) +{ + char *argv[5] = { 0 }; + uint32_t thresh, silence_hits, listen_hits, timeout_ms = 0; + int argc; + char *lbuf = NULL; + + if (!switch_strlen_zero(data) && (lbuf = switch_core_session_strdup(session, data)) + && (argc = switch_separate_string(lbuf, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) >= 3) { + thresh = atoi(argv[0]); + silence_hits = atoi(argv[1]); + listen_hits = atoi(argv[2]); + + if (argv[3]) { + if ((timeout_ms = atoi(argv[3])) < 0) { + timeout_ms = 0; + } + } + + if (thresh > 0 && silence_hits > 0 && listen_hits > 0) { + switch_ivr_wait_for_silence(session, thresh, silence_hits, listen_hits, timeout_ms, argv[4]); + return; + } + + } + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Usage: %s\n", WAIT_FOR_SILENCE_SYNTAX); + +} + +static switch_status_t event_chat_send(char *proto, char *from, char *to, char *subject, char *body, char *hint) +{ + switch_event_t *event; + + if (switch_event_create(&event, SWITCH_EVENT_RECV_MESSAGE) == SWITCH_STATUS_SUCCESS) { + if (proto) switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Proto", "%s", proto); + if (from) switch_event_add_header(event, SWITCH_STACK_BOTTOM, "From", "%s", from); + if (subject) switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Subject", "%s", subject); + if (hint) switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Hint", "%s", hint); + if (body) switch_event_add_body(event, "%s", body); + if (to) { + const char *v; + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "To", "%s", to); + if ((v = switch_core_get_variable(to))) { + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Command", "%s", v); + } + } + + if (switch_event_fire(&event) == SWITCH_STATUS_SUCCESS) { + return SWITCH_STATUS_SUCCESS; + } + + switch_event_destroy(&event); + } + + return SWITCH_STATUS_MEMERR; +} + + +static switch_status_t api_chat_send(char *proto, char *from, char *to, char *subject, char *body, char *hint) +{ + + if (to) { + const char *v; + switch_stream_handle_t stream = { 0 }; + char *cmd, *arg; + switch_chat_interface_t *ci; + + if (!(v = switch_core_get_variable(to))) { + v = to; + } + + cmd = strdup(v); + switch_assert(cmd); + + switch_url_decode(cmd); + + if ((arg = strchr(cmd, ' '))) { + *arg++ = '\0'; + } + + SWITCH_STANDARD_STREAM(stream); + switch_api_execute(cmd, arg, NULL, &stream); + + if (proto && (ci = switch_loadable_module_get_chat_interface(proto))) { + ci->chat_send("api", to, hint && strchr(hint, '/') ? hint : from, "text/plain", (char *) stream.data, NULL); + } + + switch_safe_free(stream.data); + + free(cmd); + + } + + return SWITCH_STATUS_SUCCESS; +} + + #define SPEAK_DESC "Speak text to a channel via the tts interface" #define DISPLACE_DESC "Displace audio from a file to the channels input" #define SESS_REC_DESC "Starts a background recording of the entire session" @@ -2077,6 +2176,7 @@ switch_api_interface_t *api_interface; switch_application_interface_t *app_interface; switch_dialplan_interface_t *dp_interface; + switch_chat_interface_t *chat_interface; /* connect my internal structure to the blank pointer passed to me */ *module_interface = switch_loadable_module_create_module_interface(pool, modname); @@ -2085,6 +2185,10 @@ user_endpoint_interface->interface_name = "USER"; user_endpoint_interface->io_routines = &user_io_routines; + + SWITCH_ADD_CHAT(chat_interface, "event", event_chat_send); + SWITCH_ADD_CHAT(chat_interface, "api", api_chat_send); + SWITCH_ADD_API(api_interface, "strepoch", "Convert a date string into epoch time", strepoch_api_function, ""); SWITCH_ADD_API(api_interface, "chat", "chat", chat_api_function, "|||"); SWITCH_ADD_API(api_interface, "strftime", "strftime", strftime_api_function, ""); @@ -2100,14 +2204,14 @@ " []", SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "sleep", "Pause a channel", SLEEP_LONG_DESC, sleep_function, "", SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "delay_echo", "echo audio at a specified delay", "Delay n ms", delay_function, "", SAF_NONE); - SWITCH_ADD_APP(app_interface, "strftime", NULL, NULL, strftime_function, NULL, SAF_SUPPORT_NOMEDIA); + SWITCH_ADD_APP(app_interface, "strftime", "strftime", "strftime", strftime_function, "[|]", SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "phrase", "Say a Phrase", "Say a Phrase", phrase_function, ",", SAF_NONE); SWITCH_ADD_APP(app_interface, "eval", "Do Nothing", "Do Nothing", eval_function, "", SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "pre_answer", "Pre-Answer the call", "Pre-Answer the call for a channel.", pre_answer_function, "", SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "answer", "Answer the call", "Answer the call for a channel.", answer_function, "", SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "hangup", "Hangup the call", "Hangup the call for a channel.", hangup_function, "[]", SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "set_name", "Name the channel", "Name the channel", set_name_function, "", SAF_SUPPORT_NOMEDIA); - SWITCH_ADD_APP(app_interface, "log", "Logs a channel variable", LOG_LONG_DESC, log_function, "", SAF_SUPPORT_NOMEDIA); + SWITCH_ADD_APP(app_interface, "log", "Logs to the logger", LOG_LONG_DESC, log_function, " ", SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "info", "Display Call Info", "Display Call Info", info_function, "", SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "event", "Fire an event", "Fire an event", event_function, "", SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "export", "Export a channel variable across a bridge", EXPORT_LONG_DESC, export_function, "=", @@ -2170,7 +2274,7 @@ " [] [] []", SAF_NONE); SWITCH_ADD_APP(app_interface, "stop_displace_session", "Stop Displace File", "Stop Displacing to a file", stop_displace_session_function, "", SAF_NONE); - SWITCH_ADD_APP(app_interface, "displace_session", "Displace File", DISPLACE_DESC, displace_session_function, " [+time_limit_ms] [mux]", + SWITCH_ADD_APP(app_interface, "displace_session", "Displace File", DISPLACE_DESC, displace_session_function, " [] [+time_limit_ms]", SAF_NONE); SWITCH_ADD_APP(app_interface, "speak", "Speak text", SPEAK_DESC, speak_function, "||", SAF_NONE); SWITCH_ADD_APP(app_interface, "clear_speech_cache", "Clear Speech Handle Cache", "Clear Speech Handle Cache", clear_speech_cache_function, "", @@ -2181,6 +2285,8 @@ SAF_SUPPORT_NOMEDIA); SWITCH_ADD_APP(app_interface, "say", "say", "say", say_function, SAY_SYNTAX, SAF_NONE); + SWITCH_ADD_APP(app_interface, "wait_for_silence", "wait_for_silence", "wait_for_silence", wait_for_silence_function, WAIT_FOR_SILENCE_SYNTAX, SAF_NONE); + SWITCH_ADD_DIALPLAN(dp_interface, "inline", inline_dialplan_hunt); /* indicate that the module should continue to be loaded */ @@ -2196,5 +2302,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_enum/mod_enum.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_enum/mod_enum.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_enum/mod_enum.c Mon Aug 4 21:29:58 2008 @@ -76,6 +76,8 @@ static enum dns_class qcls = DNS_C_IN; +static switch_event_node_t *NODE = NULL; + static struct { char *root; char *isn_root; @@ -747,7 +749,6 @@ globals.timeout = 10; load_config(); switch_mutex_unlock(MUTEX); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "ENUM Reloaded\n"); } @@ -816,11 +817,11 @@ return SWITCH_STATUS_SUCCESS; } - static void event_handler(switch_event_t *event) { if (globals.auto_reload) { do_load(); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "ENUM Reloaded\n"); } } @@ -833,15 +834,18 @@ switch_mutex_init(&MUTEX, SWITCH_MUTEX_NESTED, pool); - memset(&globals, 0, sizeof(globals)); - do_load(); - - - if (switch_event_bind(modname, SWITCH_EVENT_RELOADXML, NULL, event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if ((switch_event_bind_removable(modname, SWITCH_EVENT_RELOADXML, NULL, event_handler, NULL, &NODE) != SWITCH_STATUS_SUCCESS)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_TERM; } + if (dns_init(0) < 0) { + return SWITCH_STATUS_FALSE; + } + + memset(&globals, 0, sizeof(globals)); + do_load(); + /* connect my internal structure to the blank pointer passed to me */ *module_interface = switch_loadable_module_create_module_interface(pool, modname); SWITCH_ADD_API(api_interface, "enum", "ENUM", enum_function, ""); @@ -858,11 +862,13 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_enum_shutdown) { + switch_event_unbind(&NODE); + if (globals.pool) { switch_core_destroy_memory_pool(&globals.pool); } - return SWITCH_STATUS_SUCCESS; + return SWITCH_STATUS_UNLOAD; } /* For Emacs: @@ -873,5 +879,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -280,5 +280,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_expr/mod_expr.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_expr/mod_expr.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_expr/mod_expr.c Mon Aug 4 21:29:58 2008 @@ -200,5 +200,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -65,8 +65,15 @@ switch_dtmf_t *dtmf = (switch_dtmf_t *) input; switch_channel_t *bchan = switch_core_session_get_channel(bleg); switch_channel_t *channel = switch_core_session_get_channel(session); + + const char *consumer_exit_key = switch_channel_get_variable(channel, "fifo_consumer_exit_key"); + if (switch_channel_test_flag(switch_core_session_get_channel(session), CF_ORIGINATOR)) { - if (dtmf->digit == '*') { + if ( consumer_exit_key && dtmf->digit == *consumer_exit_key ) { + switch_channel_hangup(bchan, SWITCH_CAUSE_NORMAL_CLEARING); + return SWITCH_STATUS_BREAK; + } + else if ( !consumer_exit_key && dtmf->digit == '*' ) { switch_channel_hangup(bchan, SWITCH_CAUSE_NORMAL_CLEARING); return SWITCH_STATUS_BREAK; } else if (dtmf->digit == '0') { @@ -220,8 +227,8 @@ { fifo_node_t *node, **node_list = (fifo_node_t **) user_data; int x = 0, total = 0, i = 0; - - for (i = 0;; i++) { + + for (i = 0 ;; i++) { if (!(node = node_list[i])) { break; } @@ -242,6 +249,7 @@ switch_mutex_t *mutex; switch_memory_pool_t *pool; int running; + switch_event_node_t *node; } globals; @@ -341,7 +349,7 @@ #define MAX_NODES_PER_CONSUMER 25 #define FIFO_DESC "Fifo for stacking parked calls." -#define FIFO_USAGE " [in [|undef] [|undef] | out [wait|nowait] [|undef] [|undef]]" +#define FIFO_USAGE "[!] [in [|undef] [|undef] | out [wait|nowait] [|undef] [|undef]]" SWITCH_STANDARD_APP(fifo_function) { int argc; @@ -448,8 +456,9 @@ check_string(announce); check_string(moh); + switch_assert(node); - if (!consumer && node) { + if (!consumer) { switch_core_session_t *other_session; switch_channel_t *other_channel; const char *uuid = switch_core_session_get_uuid(session); @@ -734,17 +743,17 @@ while (switch_channel_ready(channel)) { int x = 0, winner = -1; - switch_time_t longest = 0xFFFFFFFFFFFFFFFF / 2; + switch_time_t longest = (0xFFFFFFFFFFFFFFFFULL / 2); uint32_t importance = 0, waiting = 0, most_waiting = 0; pop = NULL; if (moh && do_wait) { - switch_status_t moh_status = switch_ivr_play_file(session, NULL, moh, &args); + switch_status_t moh_status; 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); + moh_status = switch_ivr_play_file(session, NULL, moh, &args); if (!SWITCH_READ_ACCEPTABLE(moh_status)) { break; @@ -853,7 +862,7 @@ if (announce) { switch_ivr_play_file(session, NULL, announce, NULL); } else { - switch_ivr_sleep(session, 500); + switch_ivr_sleep(session, 500, NULL); } @@ -1125,7 +1134,7 @@ switch_safe_free(xml_text); } else if (!strcasecmp(argv[0], "importance")) { - if ((node = switch_core_hash_find(globals.fifo_hash, argv[1]))) { + if (argv[1] && (node = switch_core_hash_find(globals.fifo_hash, argv[1]))) { int importance = 0; if (argc > 2) { importance = atoi(argv[2]); @@ -1181,7 +1190,8 @@ } /* Subscribe to presence request events */ - if (switch_event_bind((char *) modname, SWITCH_EVENT_PRESENCE_PROBE, SWITCH_EVENT_SUBCLASS_ANY, pres_event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_PRESENCE_PROBE, SWITCH_EVENT_SUBCLASS_ANY, + pres_event_handler, NULL, &globals.node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't subscribe to presence request events!\n"); return SWITCH_STATUS_GENERR; } @@ -1194,6 +1204,11 @@ *module_interface = switch_loadable_module_create_module_interface(pool, modname); SWITCH_ADD_APP(app_interface, "fifo", "Park with FIFO", FIFO_DESC, fifo_function, FIFO_USAGE, SAF_NONE); SWITCH_ADD_API(commands_api_interface, "fifo", "Return data about a fifo", fifo_api_function, FIFO_API_SYNTAX); + switch_console_set_complete("add fifo list"); + switch_console_set_complete("add fifo list_verbose"); + switch_console_set_complete("add fifo count"); + switch_console_set_complete("add fifo importance"); + globals.running = 1; return SWITCH_STATUS_SUCCESS; @@ -1209,7 +1224,10 @@ fifo_node_t *node; switch_memory_pool_t *pool = globals.pool; switch_mutex_t *mutex = globals.mutex; - + + switch_event_unbind(&globals.node); + switch_event_free_subclass(FIFO_EVENT); + switch_mutex_lock(mutex); globals.running = 0; @@ -1223,6 +1241,7 @@ free(pop); } } + switch_core_hash_destroy(&node->caller_hash); switch_core_hash_destroy(&node->consumer_hash); } @@ -1242,5 +1261,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_fsv/mod_fsv.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_fsv/mod_fsv.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_fsv/mod_fsv.c Mon Aug 4 21:29:58 2008 @@ -231,7 +231,7 @@ aud_buffer = switch_core_session_alloc(session, SWITCH_RECOMMENDED_BUFFER_SIZE); vid_buffer = switch_core_session_alloc(session, SWITCH_RECOMMENDED_BUFFER_SIZE); - if ((fd = open((char *) data, O_RDONLY)) < 0) { + if ((fd = open((char *) data, O_RDONLY | O_BINARY)) < 0) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Error opening file %s\n", (char *) data); return; } @@ -381,5 +381,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_limit/mod_limit.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_limit/mod_limit.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_limit/mod_limit.c Mon Aug 4 21:29:58 2008 @@ -623,7 +623,13 @@ SWITCH_ADD_APP(app_interface, "group", "Manage a group", GROUP_DESC, group_function, GROUP_USAGE, SAF_SUPPORT_NOMEDIA); SWITCH_ADD_API(commands_api_interface, "db", "db get/set", db_api_function, "[insert|delete|select]///"); + switch_console_set_complete("add db insert"); + switch_console_set_complete("add db delete"); + switch_console_set_complete("add db select"); SWITCH_ADD_API(commands_api_interface, "group", "group [insert|delete|call]", group_api_function, "[insert|delete|call]::"); + switch_console_set_complete("add group insert"); + switch_console_set_complete("add group delete"); + switch_console_set_complete("add group call"); /* indicate that the module should continue to be loaded */ return SWITCH_STATUS_SUCCESS; @@ -639,5 +645,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_rss/mod_rss.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_rss/mod_rss.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_rss/mod_rss.c Mon Aug 4 21:29:58 2008 @@ -170,7 +170,6 @@ switch_speech_handle_t sh; switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_NONE; switch_core_thread_session_t thread_session; - uint32_t rate, interval = 20; switch_timer_t timer = { 0 }, *timerp = NULL; uint32_t last; char *mydata = NULL; @@ -186,6 +185,8 @@ switch_input_args_t args = { 0 }; const char *vcf = NULL; char *chanvars = switch_channel_build_param_string(channel, NULL, NULL); + switch_codec_t *read_codec = switch_core_session_get_read_codec(session); + uint32_t rate, interval = read_codec->implementation->microseconds_per_frame / 1000; if ((vcf = switch_channel_get_variable(channel, "rss_alt_config"))) { cf = vcf; @@ -367,7 +368,7 @@ x = atoi(cmd) - 1; if (x > -1 && x < feed_index) { - filename = feed_list[i]; + filename = feed_list[x]; } else if (matches > 1) { } else { @@ -643,5 +644,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -46,6 +46,7 @@ #define VM_MAX_GREETINGS 9 + static struct { switch_hash_t *profile_hash; int debug; @@ -94,6 +95,8 @@ char *callback_context; char *email_body; char *email_headers; + char *notify_email_body; + char *notify_email_headers; char *web_head; char *web_tail; char *email_from; @@ -272,6 +275,8 @@ char *callback_context = "default"; char *email_body = NULL; char *email_headers = NULL; + char *notify_email_body = NULL; + char *notify_email_headers = NULL; char *email_from = ""; char *date_fmt = "%A, %B %d %Y, %I %M %p"; char *web_head = NULL; @@ -338,6 +343,36 @@ } } switch_safe_free(dpath); + } else if (!strcasecmp(var, "notify-template-file") && !switch_strlen_zero(val)) { + switch_stream_handle_t stream = { 0 }; + int fd; + char *dpath = NULL; + char *path; + + if (switch_is_file_path(val)) { + path = val; + } else { + dpath = switch_mprintf("%s%s%s", SWITCH_GLOBAL_dirs.conf_dir, SWITCH_PATH_SEPARATOR, val); + path = dpath; + } + + if ((fd = open(path, O_RDONLY)) > -1) { + char buf[2048]; + SWITCH_STANDARD_STREAM(stream); + while (switch_fd_read_line(fd, buf, sizeof(buf))) { + stream.write_function(&stream, "%s", buf); + } + close(fd); + notify_email_headers = stream.data; + if ((notify_email_body = strstr(notify_email_headers, "\n\n"))) { + *notify_email_body = '\0'; + notify_email_body += 2; + } else if ((notify_email_body = strstr(notify_email_headers, "\r\n\r\n"))) { + *notify_email_body = '\0'; + notify_email_body += 4; + } + } + switch_safe_free(dpath); } } } @@ -614,6 +649,13 @@ profile->email_body = email_body; profile->email_headers = email_headers; + if (notify_email_headers) { + profile->notify_email_body = notify_email_body; + profile->notify_email_headers = notify_email_headers; + } else { + profile->notify_email_body = email_body; + profile->notify_email_headers = email_headers; + } profile->email_from = switch_core_strdup(globals.pool, email_from); profile->date_fmt = switch_core_strdup(globals.pool, date_fmt); @@ -892,6 +934,30 @@ } msg_type_t; +switch_status_t measure_file_len(const char *path, switch_size_t *message_len) +{ + + switch_file_handle_t fh = { 0 }; + uint32_t pos = 0; + switch_status_t status = SWITCH_STATUS_FALSE; + + if (switch_core_file_open(&fh, + path, + 0, + 0, + SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT, NULL) == SWITCH_STATUS_SUCCESS) { + + if (switch_core_file_seek(&fh, &pos, 0, SEEK_END) == SWITCH_STATUS_SUCCESS) { + *message_len = pos; + status = SWITCH_STATUS_SUCCESS; + } + switch_core_file_close(&fh); + } + + return status; + +} + static switch_status_t create_file(switch_core_session_t *session, vm_profile_t *profile, char *macro_name, char *file_path, switch_size_t *message_len, switch_bool_t limit) { @@ -1231,7 +1297,7 @@ { vm_check_state_t vm_check_state = VM_CHECK_START; switch_channel_t *channel = switch_core_session_get_channel(session); - switch_caller_profile_t *caller_profile; + switch_caller_profile_t *caller_profile = switch_channel_get_caller_profile(channel); vm_profile_t *profile; switch_xml_t x_domain = NULL, x_domain_root = NULL, x_user = NULL, x_params, x_param; switch_status_t status; @@ -1247,9 +1313,19 @@ int total_new_urgent_messages = 0; int total_saved_urgent_messages = 0; int heard_auto_saved = 0, heard_auto_new = 0; - char *email_vm = NULL; + char *vm_email = NULL; char foo[2] = ""; switch_input_args_t args = { 0 }; + const char *caller_id_name = NULL; + const char *caller_id_number = NULL; + + if (!(caller_id_name = switch_channel_get_variable(channel, "effective_caller_id_name"))) { + caller_id_name = caller_profile->caller_id_name; + } + + if (!(caller_id_number = switch_channel_get_variable(channel, "effective_caller_id_number"))) { + caller_id_number = caller_profile->caller_id_number; + } if (!(profile = switch_core_hash_find(globals.profile_hash, profile_name))) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error invalid profile %s\n", profile_name); @@ -1263,7 +1339,7 @@ status = switch_ivr_phrase_macro(session, VM_HELLO_MACRO, NULL, NULL, &args); while (switch_channel_ready(channel)) { - switch_ivr_sleep(session, 100); + switch_ivr_sleep(session, 100, NULL); switch (vm_check_state) { case VM_CHECK_START: @@ -1351,7 +1427,7 @@ message_count(profile, myid, domain_name, myfolder, &total_new_messages, &total_saved_messages, &total_new_urgent_messages, &total_saved_urgent_messages); memset(&cbt, 0, sizeof(cbt)); - cbt.email = email_vm; + cbt.email = vm_email; switch (play_msg_type) { case MSG_NEW: { @@ -1566,13 +1642,13 @@ if (!x_user) { switch_event_t *params; int ok = 1; - caller_profile = switch_channel_get_caller_profile(channel); + switch_event_create(¶ms, SWITCH_EVENT_MESSAGE); switch_assert(params); switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "mailbox", myid); switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "destination_number", caller_profile->destination_number); - switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "caller_id_number", caller_profile->caller_id_number); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "caller_id_number", caller_id_number); if (switch_xml_locate_user("id", myid, domain_name, switch_channel_get_variable(channel, "network_addr"), @@ -1620,7 +1696,7 @@ } else if (!strcasecmp(var, "vm-password")) { thepass = val; } else if (!strcasecmp(var, "vm-mailto")) { - email_vm = switch_core_session_strdup(session, val); + vm_email = switch_core_session_strdup(session, val); } } switch_xml_free(x_domain_root); @@ -1677,10 +1753,431 @@ } +static void deliver_vm(vm_profile_t *profile, + switch_xml_t x_user, + const char *domain_name, + const char *path, + uint32_t message_len, + const char *read_flags, + switch_event_t *params, + switch_memory_pool_t *pool, + const char *caller_id_name, + const char *caller_id_number, + switch_bool_t copy) +{ + char *file_path = NULL, *dir_path = NULL; + const char *myid = switch_xml_attr(x_user, "id"); + switch_uuid_t uuid; + char uuid_str[SWITCH_UUID_FORMATTED_LENGTH + 1]; + const char *filename; + switch_xml_t x_param, x_params; + char *vm_email = NULL; + char *vm_notify_email = NULL; + char *email_addr = NULL; + int send_mail = 0; + int send_main = 0; + int send_notify = 0; + int insert_db = 1; + int email_attach = 0; + char *myfolder = "inbox"; + int priority = 3; + const char *tmp; + switch_event_t *local_event = NULL; + + if (params) { + switch_event_create(&local_event, SWITCH_EVENT_MESSAGE); + params = local_event; + } + + if ((tmp = switch_event_get_header(params, "effective_caller_id_name"))) { + caller_id_name = tmp; + } + + if ((tmp = switch_event_get_header(params, "effective_caller_id_number"))) { + caller_id_number = tmp; + } + + switch_uuid_get(&uuid); + switch_uuid_format(uuid_str, &uuid); + + if ((filename = strrchr(path, *SWITCH_PATH_SEPARATOR))) { + filename++; + } else { + filename = path; + } + + if (!(x_params = switch_xml_child(x_user, "params"))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "can't find params for user [%s@%s]\n", myid, domain_name); + goto failed; + } + + for (x_param = switch_xml_child(x_params, "param"); x_param; x_param = x_param->next) { + const char *var = switch_xml_attr_soft(x_param, "name"); + const char *val = switch_xml_attr_soft(x_param, "value"); + + if (!strcasecmp(var, "vm-mailto")) { + vm_email = switch_core_strdup(pool, val); + } else if (!strcasecmp(var, "vm-notify-mailto")) { + vm_notify_email = switch_core_strdup(pool, val); + } else if (!strcasecmp(var, "email-addr")) { + email_addr = switch_core_strdup(pool, val); + } else if (!strcasecmp(var, "vm-email-all-messages")) { + send_main = send_mail = switch_true(val); + } else if (!strcasecmp(var, "vm-notify-email-all-messages")) { + send_notify = send_mail = switch_true(val); + } else if (!strcasecmp(var, "vm-keep-local-after-email")) { + insert_db = switch_true(val); + } else if (!strcasecmp(var, "vm-attach-file")) { + email_attach = switch_true(val); + } + } + + + if (switch_strlen_zero(profile->storage_dir)) { + dir_path = switch_mprintf("%s%svoicemail%s%s%s%s%s%s", SWITCH_GLOBAL_dirs.storage_dir, + SWITCH_PATH_SEPARATOR, + SWITCH_PATH_SEPARATOR, profile->name, SWITCH_PATH_SEPARATOR, domain_name, SWITCH_PATH_SEPARATOR, myid); + } else { + dir_path = switch_mprintf("%s%s%s", profile->storage_dir, SWITCH_PATH_SEPARATOR, myid); + } + + if (switch_dir_make_recursive(dir_path, SWITCH_DEFAULT_DIR_PERMS, pool) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error creating %s\n", dir_path); + goto failed; + } + + file_path = switch_mprintf("%s%smsg_%s_broadcast_%s", dir_path, SWITCH_PATH_SEPARATOR, uuid_str, filename); + + if (copy) { + switch_file_copy(path, file_path, SWITCH_FPROT_FILE_SOURCE_PERMS, pool); + } else { + file_path = (char *)path; + } + + if (!message_len) { + size_t len = 0; + if (measure_file_len(file_path, &len) == SWITCH_STATUS_SUCCESS) { + message_len = len; + } + } + + + if (insert_db && switch_file_exists(file_path, pool) == SWITCH_STATUS_SUCCESS) { + char *usql; + switch_event_t *event; + char *mwi_id = NULL; + int total_new_messages = 0; + int total_saved_messages = 0; + int total_new_urgent_messages = 0; + int total_saved_urgent_messages = 0; + + usql = switch_mprintf("insert into voicemail_msgs values(%ld,0,'%q','%q','%q','%q','%q','%q','%q','%u','','%q')", (long) switch_timestamp(NULL), + myid, domain_name, uuid_str, caller_id_name, caller_id_number, + myfolder, file_path, message_len, read_flags); + vm_execute_sql(profile, usql, profile->mutex); + switch_safe_free(usql); + + message_count(profile, myid, domain_name, myfolder, &total_new_messages, &total_saved_messages, + &total_new_urgent_messages, &total_saved_urgent_messages); + + if (switch_event_create(&event, SWITCH_EVENT_MESSAGE_WAITING) == SWITCH_STATUS_SUCCESS) { + const char *yn = "no"; + if (total_new_messages || total_new_urgent_messages) { + yn = "yes"; + } + mwi_id = switch_mprintf("%s@%s", myid, domain_name); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "MWI-Messages-Waiting", "%s", yn); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "MWI-Message-Account", mwi_id); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "MWI-Voice-Message", "%d/%d (%d/%d)", + total_new_messages, total_saved_messages, total_new_urgent_messages, total_saved_urgent_messages); + switch_event_fire(&event); + switch_safe_free(mwi_id); + } + } + + if (send_mail && !switch_strlen_zero(vm_email) && switch_file_exists(file_path, pool) == SWITCH_STATUS_SUCCESS) { + switch_event_t *event; + char *from; + char *body; + char *headers; + char *header_string; + char tmpvar[50] = ""; + int total_new_messages = 0; + int total_saved_messages = 0; + int total_new_urgent_messages = 0; + int total_saved_urgent_messages = 0; + char *p; + long l_duration = 0; + switch_core_time_duration_t duration; + char duration_str[80]; + switch_time_exp_t tm; + char date[80] = ""; + switch_size_t retsize; + + message_count(profile, myid, domain_name, myfolder, &total_new_messages, &total_saved_messages, + &total_new_urgent_messages, &total_saved_urgent_messages); + + switch_time_exp_lt(&tm, switch_timestamp_now()); + switch_strftime(date, &retsize, sizeof(date), profile->date_fmt, &tm); + + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_current_folder", myfolder); + switch_snprintf(tmpvar, sizeof(tmpvar), "%d", total_new_messages); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_total_new_messages", tmpvar); + switch_snprintf(tmpvar, sizeof(tmpvar), "%d", total_saved_messages); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_total_saved_messages", tmpvar); + switch_snprintf(tmpvar, sizeof(tmpvar), "%d", total_new_urgent_messages); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_urgent_new_messages", tmpvar); + switch_snprintf(tmpvar, sizeof(tmpvar), "%d", total_saved_urgent_messages); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_urgent_saved_messages", tmpvar); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_account", myid); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_domain", domain_name); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_caller_id_number", caller_id_number); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_caller_id_name", caller_id_name); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_file_path", file_path); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_read_flags", read_flags); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_time", date); + switch_snprintf(tmpvar, sizeof(tmpvar), "%d", priority); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_priority", tmpvar); + if (vm_email) { + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_email", vm_email); + } + if (vm_notify_email) { + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_notify_email", vm_notify_email); + } + l_duration = (long) message_len *1000000; + switch_core_measure_time(l_duration, &duration); + duration.day += duration.yr * 365; + duration.hr += duration.day * 24; + switch_snprintf(duration_str, sizeof(duration_str), "%.2u:%.2u:%.2u", duration.hr, duration.min, duration.sec); + + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "voicemail_message_len", duration_str); + + if (switch_strlen_zero(profile->email_from)) { + from = switch_core_sprintf(pool, "%s@%s", myid, domain_name); + } else { + from = switch_event_expand_headers(params, profile->email_headers); + } + + + if (send_main) { + if (switch_strlen_zero(profile->email_headers)) { + headers = switch_mprintf( + "From: FreeSWITCH mod_voicemail <%s@%s>\n" + "Subject: Voicemail from %s %s\nX-Priority: %d", + myid, domain_name, caller_id_name, caller_id_number, priority); + } else { + headers = switch_event_expand_headers(params, profile->email_headers); + } + + p = headers + (strlen(headers) - 1); + + if (*p == '\n') { + if (*(p - 1) == '\r') { + p--; + } + *p = '\0'; + } + + header_string = switch_core_sprintf(pool, "%s\nX-Voicemail-Length: %u", headers, message_len); + + switch_event_dup(&event, params); + + if (event) { + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Message-Type", "voicemail"); + switch_event_fire(&event); + } + + if (profile->email_body) { + body = switch_event_expand_headers(params, profile->email_body); + } else { + body = switch_mprintf("%u second Voicemail from %s %s", message_len, caller_id_name, caller_id_number); + } + + if (email_attach) { + switch_simple_email(vm_email, from, header_string, body, file_path); + } else { + switch_simple_email(vm_email, from, header_string, body, NULL); + } + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Sending message to %s\n", vm_email); + switch_safe_free(body); + + if (headers != profile->email_headers) { + switch_safe_free(headers); + } + } + + + if (send_notify) { + if (switch_strlen_zero(profile->notify_email_headers)) { + headers = switch_mprintf( + "From: FreeSWITCH mod_voicemail <%s@%s>\n" + "Subject: Voicemail from %s %s\nX-Priority: %d", + myid, domain_name, caller_id_name, caller_id_number, priority); + } else { + headers = switch_event_expand_headers(params, profile->notify_email_headers); + } + + p = headers + (strlen(headers) - 1); + + if (*p == '\n') { + if (*(p - 1) == '\r') { + p--; + } + *p = '\0'; + } + + header_string = switch_core_sprintf(pool, "%s\nX-Voicemail-Length: %u", headers, message_len); + + switch_event_dup(&event, params); + + if (event) { + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Message-Type", "voicemail-notify"); + switch_event_fire(&event); + } + + if (profile->notify_email_body) { + body = switch_event_expand_headers(params, profile->notify_email_body); + } else { + body = switch_mprintf("%u second Voicemail from %s %s", message_len, caller_id_name, caller_id_number); + } + + switch_simple_email(vm_notify_email, from, header_string, body, NULL); + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Sending notify message to %s\n", vm_notify_email); + switch_safe_free(body); + + if (headers != profile->notify_email_headers) { + switch_safe_free(headers); + } + } + + if (!insert_db) { + if (unlink(file_path) != 0) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "failed to delete file [%s]\n", file_path); + } + } + } + + failed: + + switch_event_destroy(&local_event); + + switch_safe_free(dir_path); + + if (file_path != path) { + switch_safe_free(file_path); + } + + return; + +} + +static switch_status_t voicemail_inject(const char *data) +{ + vm_profile_t *profile; + char *dup, *user = NULL, *domain = NULL; + switch_status_t status = SWITCH_STATUS_FALSE; + int istag = 0, isall = 0; + int argc = 0; + char *argv[4]; + char *box, *path, *cid_num, *cid_name; + switch_memory_pool_t *pool = NULL; + + dup = strdup(data); + switch_assert(dup); + + if ((argc = switch_separate_string(dup, ' ', argv, (sizeof(argv) / sizeof(argv[0])))) < 2) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "not enough args [%s]\n", data); + goto end; + } + + box = argv[0]; + path = argv[1]; + cid_num = argv[2] ? argv[2] : "anonymous"; + cid_name = argv[3] ? argv[3] : "anonymous"; + + user = box; + + if ((domain = strchr(user, '@'))) { + *domain++ = '\0'; + } else { + domain = user; + } + + if (switch_stristr("tag=", user)) { + user += 4; + istag++; + } else if (user == domain) { + isall++; + } + + if (!(user && domain)) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "invalid syntax [%s][%s]\n", switch_str_nil(user), switch_str_nil(domain)); + goto end; + } + + if (!(profile = switch_core_hash_find(globals.profile_hash, domain))) { + profile = switch_core_hash_find(globals.profile_hash, "default"); + } + + if (!profile) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't find profile\n"); + } else { + switch_xml_t x_domain, xml_root; + switch_event_t *my_params = NULL; + switch_xml_t ut; + + switch_event_create(&my_params, SWITCH_EVENT_MESSAGE); + switch_assert(my_params); + switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "domain", domain); + switch_event_add_header_string(my_params, SWITCH_STACK_BOTTOM, "purpose", "publish-vm"); + + if (switch_xml_locate_domain(domain, my_params, &xml_root, &x_domain) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Cannot locate domain %s\n", domain); + switch_event_destroy(&my_params); + goto end; + } + + switch_event_destroy(&my_params); + + switch_core_new_memory_pool(&pool); + + if (!isall && !istag) { + ut = switch_xml_find_child(x_domain, "user", "id", user); + switch_event_create(&my_params, SWITCH_EVENT_MESSAGE); + deliver_vm(profile, ut, domain, path, 0, "B", my_params, pool, cid_name, cid_num, SWITCH_TRUE); + switch_event_destroy(&my_params); + } else { + for (ut = switch_xml_child(x_domain, "user"); ut; ut = ut->next) { + const char *tag; + + if (isall || (istag && (tag=switch_xml_attr(ut, "vm-tag")) && !strcasecmp(tag, user))) { + switch_event_create(&my_params, SWITCH_EVENT_MESSAGE); + deliver_vm(profile, ut, domain, path, 0, "B", my_params, pool, cid_name, cid_num, SWITCH_TRUE); + switch_event_destroy(&my_params); + } + } + } + + switch_core_destroy_memory_pool(&pool); + + switch_xml_free(xml_root); + + } + + + end: + + switch_safe_free(dup); + + return status; + +} + static switch_status_t voicemail_leave_main(switch_core_session_t *session, const char *profile_name, const char *domain_name, const char *id) { switch_channel_t *channel = switch_core_session_get_channel(session); - char *myfolder = "inbox"; char sql[256]; prefs_callback_t cbt; vm_profile_t *profile; @@ -1691,15 +2188,13 @@ switch_caller_profile_t *caller_profile = switch_channel_get_caller_profile(channel); switch_file_handle_t fh = { 0 }; switch_input_args_t args = { 0 }; - char *email_vm = NULL; - char *email_vm_notify = NULL; + char *vm_email = NULL; + char *vm_notify_email = NULL; int send_mail = 0; - int send_mail_only = 0; cc_t cc = { 0 }; char *read_flags = NORMAL_FLAG_STRING; int priority = 3; int email_attach = 1; - int email_delete = 1; char buf[2]; char *greet_path = NULL; const char *voicemail_greeting_number = NULL; @@ -1709,6 +2204,22 @@ switch_size_t retsize; switch_time_t ts = switch_timestamp_now(); char *dbuf = NULL; + int send_main = 0; + int send_notify = 0; + int insert_db = 1; + const char *caller_id_name = NULL; + const char *caller_id_number = NULL; + switch_xml_t x_domain = NULL, x_domain_root = NULL, x_user = NULL, x_params = NULL, x_param = NULL; + switch_event_t *vars = NULL; + const char *vm_cc = NULL, *vtmp, *vm_ext = NULL; + + if (!(caller_id_name = switch_channel_get_variable(channel, "effective_caller_id_name"))) { + caller_id_name = caller_profile->caller_id_name; + } + + if (!(caller_id_number = switch_channel_get_variable(channel, "effective_caller_id_number"))) { + caller_id_number = caller_profile->caller_id_number; + } memset(&cbt, 0, sizeof(cbt)); if (!(profile = switch_core_hash_find(globals.profile_hash, profile_name))) { @@ -1732,14 +2243,12 @@ if (id) { int ok = 1; switch_event_t *params = NULL; - switch_xml_t x_domain, x_domain_root, x_user, x_params, x_param; const char *email_addr = NULL; switch_event_create(¶ms, SWITCH_EVENT_MESSAGE); switch_assert(params); switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "mailbox", id); - x_user = x_domain = x_domain_root = NULL; if (switch_xml_locate_user("id", id, domain_name, switch_channel_get_variable(channel, "network_addr"), &x_domain_root, &x_domain, &x_user, params) == SWITCH_STATUS_SUCCESS) { if ((x_params = switch_xml_child(x_user, "params"))) { @@ -1748,34 +2257,56 @@ const char *val = switch_xml_attr_soft(x_param, "value"); if (!strcasecmp(var, "vm-mailto")) { - email_vm = switch_core_session_strdup(session, val); - } else if (!strcasecmp(var, "vm-mailto-notify")) { - email_vm_notify = switch_core_session_strdup(session, val); + vm_email = switch_core_session_strdup(session, val); + } else if (!strcasecmp(var, "vm-notify-mailto")) { + vm_notify_email = switch_core_session_strdup(session, val); } else if (!strcasecmp(var, "email-addr")) { - email_addr = val; - } else if (!strcasecmp(var, "vm-email-only")) { - send_mail_only = switch_true(val); + email_addr = switch_core_session_strdup(session, val); } else if (!strcasecmp(var, "vm-email-all-messages")) { - send_mail = switch_true(val); - } else if (!strcasecmp(var, "vm-delete-file")) { - email_delete = switch_true(val); + send_main = send_mail = switch_true(val); + } else if (!strcasecmp(var, "vm-notify-email-all-messages")) { + send_notify = send_mail = switch_true(val); + } else if (!strcasecmp(var, "vm-keep-local-after-email")) { + insert_db = switch_true(val); } else if (!strcasecmp(var, "vm-attach-file")) { email_attach = switch_true(val); } } } - if (send_mail && switch_strlen_zero(email_vm) && !switch_strlen_zero(email_addr)) { - email_vm = switch_core_session_strdup(session, email_addr); + if (send_main && switch_strlen_zero(vm_email) && !switch_strlen_zero(email_addr)) { + vm_email = switch_core_session_strdup(session, email_addr); + if (switch_strlen_zero(vm_email)) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "No email address, not going to send email.\n"); + send_main = 0; + } + } + + if (send_notify && switch_strlen_zero(vm_notify_email)) { + vm_notify_email = vm_email; + if (switch_strlen_zero(vm_notify_email)) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "No notify email address, not going to notify.\n"); + send_notify = 0; + } + } + + if (send_mail && (!(send_main || send_notify))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Falling back to leaving message locally due to too many misconfigurations.\n"); + send_mail = 0; + insert_db = 1; } + if (send_notify && !send_main) { + insert_db = 1; + } + } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "can't find user [%s@%s]\n", id, domain_name); ok = 0; } switch_event_destroy(¶ms); - switch_xml_free(x_domain_root); + if (!ok) { goto end; } @@ -1784,7 +2315,12 @@ switch_snprintf(sql, sizeof(sql), "select * from voicemail_prefs where username='%s' and domain='%s'", id, domain_name); vm_execute_sql_callback(profile, profile->mutex, sql, prefs_callback, &cbt); - file_path = switch_mprintf("%s%smsg_%s.%s", dir_path, SWITCH_PATH_SEPARATOR, uuid, profile->file_ext); + vm_ext = profile->file_ext; + if ((vtmp = switch_channel_get_variable(channel, "vm_message_ext"))) { + vm_ext = vtmp; + } + + file_path = switch_mprintf("%s%smsg_%s.%s", dir_path, SWITCH_PATH_SEPARATOR, uuid, vm_ext); if ((voicemail_greeting_number = switch_channel_get_variable(channel, "voicemail_greeting_number"))) { int num = atoi(voicemail_greeting_number); @@ -1859,7 +2395,7 @@ cc.noexit = 1; args.buf = &cc; - dbuf = switch_mprintf("%s (%s)", caller_profile->caller_id_name, caller_profile->caller_id_number); + dbuf = switch_mprintf("%s (%s)", caller_id_name, caller_id_number); switch_channel_set_variable(channel, "RECORD_ARTIST", dbuf); free(dbuf); @@ -1887,146 +2423,22 @@ TRY_CODE(switch_ivr_phrase_macro(session, VM_ACK_MACRO, "saved", NULL, NULL)); } } - - if (!send_mail_only && switch_file_exists(file_path, switch_core_session_get_pool(session)) == SWITCH_STATUS_SUCCESS) { - char *usql; - switch_event_t *event; - char *mwi_id = NULL; - int total_new_messages = 0; - int total_saved_messages = 0; - int total_new_urgent_messages = 0; - int total_saved_urgent_messages = 0; - - usql = switch_mprintf("insert into voicemail_msgs values(%ld,0,'%q','%q','%q','%q','%q','%q','%q','%u','','%q')", (long) switch_timestamp(NULL), - id, domain_name, uuid, caller_profile->caller_id_name, caller_profile->caller_id_number, - myfolder, file_path, message_len, read_flags); - vm_execute_sql(profile, usql, profile->mutex); - switch_safe_free(usql); - - message_count(profile, id, domain_name, myfolder, &total_new_messages, &total_saved_messages, - &total_new_urgent_messages, &total_saved_urgent_messages); - - if (switch_event_create(&event, SWITCH_EVENT_MESSAGE_WAITING) == SWITCH_STATUS_SUCCESS) { - const char *yn = "no"; - if (total_new_messages || total_new_urgent_messages) { - yn = "yes"; - } - mwi_id = switch_mprintf("%s@%s", id, domain_name); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "MWI-Messages-Waiting", "%s", yn); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "MWI-Message-Account", mwi_id); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "MWI-Voice-Message", "%d/%d (%d/%d)", - total_new_messages, total_saved_messages, total_new_urgent_messages, total_saved_urgent_messages); - switch_event_fire(&event); - switch_safe_free(mwi_id); - } + + switch_channel_get_variables(channel, &vars); + deliver_vm(profile, x_user, domain_name, file_path, message_len, read_flags, vars, + switch_core_session_get_pool(session), caller_id_name, caller_id_number, SWITCH_FALSE); + switch_event_destroy(&vars); + + if ((vm_cc = switch_channel_get_variable(channel, "vm_cc"))) { + char *cmd = switch_core_session_sprintf(session, "%s %s %s %s", vm_cc, file_path, caller_id_number, caller_id_name); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Sent Carbon Copy to %s\n", vm_cc); + voicemail_inject(cmd); } - end: - - if (send_mail && !switch_strlen_zero(email_vm) && switch_file_exists(file_path, switch_core_session_get_pool(session)) == SWITCH_STATUS_SUCCESS) { - switch_event_t *event; - char *from; - char *body; - char *headers; - char *header_string; - char tmp[50] = ""; - int total_new_messages = 0; - int total_saved_messages = 0; - int total_new_urgent_messages = 0; - int total_saved_urgent_messages = 0; - char *p; - long l_duration = 0; - switch_core_time_duration_t duration; - char duration_str[80]; - - message_count(profile, id, domain_name, myfolder, &total_new_messages, &total_saved_messages, - &total_new_urgent_messages, &total_saved_urgent_messages); - - switch_time_exp_lt(&tm, switch_timestamp_now()); - switch_strftime(date, &retsize, sizeof(date), profile->date_fmt, &tm); - - switch_channel_set_variable(channel, "voicemail_current_folder", myfolder); - switch_snprintf(tmp, sizeof(tmp), "%d", total_new_messages); - switch_channel_set_variable(channel, "voicemail_total_new_messages", tmp); - switch_snprintf(tmp, sizeof(tmp), "%d", total_saved_messages); - switch_channel_set_variable(channel, "voicemail_total_saved_messages", tmp); - switch_snprintf(tmp, sizeof(tmp), "%d", total_new_urgent_messages); - switch_channel_set_variable(channel, "voicemail_urgent_new_messages", tmp); - switch_snprintf(tmp, sizeof(tmp), "%d", total_saved_urgent_messages); - switch_channel_set_variable(channel, "voicemail_urgent_saved_messages", tmp); - switch_channel_set_variable(channel, "voicemail_account", id); - switch_channel_set_variable(channel, "voicemail_domain", domain_name); - switch_channel_set_variable(channel, "voicemail_caller_id_number", caller_profile->caller_id_number); - switch_channel_set_variable(channel, "voicemail_caller_id_name", caller_profile->caller_id_name); - switch_channel_set_variable(channel, "voicemail_file_path", file_path); - switch_channel_set_variable(channel, "voicemail_read_flags", read_flags); - switch_channel_set_variable(channel, "voicemail_time", date); - switch_snprintf(tmp, sizeof(tmp), "%d", priority); - switch_channel_set_variable(channel, "voicemail_priority", tmp); - switch_channel_set_variable(channel, "voicemail_email", email_vm); - - l_duration = (long) message_len *1000000; - switch_core_measure_time(l_duration, &duration); - duration.day += duration.yr * 365; - duration.hr += duration.day * 24; - switch_snprintf(duration_str, sizeof(duration_str), "%.2u:%.2u:%.2u", duration.hr, duration.min, duration.sec); - - switch_channel_set_variable(channel, "voicemail_message_len", duration_str); - - if (switch_strlen_zero(profile->email_from)) { - from = switch_core_session_sprintf(session, "%s@%s", id, domain_name); - } else { - from = switch_channel_expand_variables(channel, profile->email_headers); - } - - if (switch_strlen_zero(profile->email_headers)) { - headers = switch_core_session_sprintf(session, - "From: FreeSWITCH mod_voicemail <%s@%s>\n" - "Subject: Voicemail from %s %s\nX-Priority: %d", - id, domain_name, caller_profile->caller_id_name, caller_profile->caller_id_number, priority); - } else { - headers = switch_channel_expand_variables(channel, profile->email_headers); - } - - p = headers + (strlen(headers) - 1); - - if (*p == '\n') { - if (*(p - 1) == '\r') { - p--; - } - *p = '\0'; - } - - header_string = switch_core_session_sprintf(session, "%s\nX-Voicemail-Length: %u", headers, message_len); - - if (switch_event_create(&event, SWITCH_EVENT_MESSAGE) == SWITCH_STATUS_SUCCESS) { - switch_channel_event_set_data(channel, event); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Message-Type", "voicemail"); - switch_event_fire(&event); - } + end: - if (profile->email_body) { - body = switch_channel_expand_variables(channel, profile->email_body); - } else { - body = switch_mprintf("%u second Voicemail from %s %s", message_len, caller_profile->caller_id_name, caller_profile->caller_id_number); - } - - if (email_attach) { - switch_simple_email(email_vm, from, header_string, body, file_path); - } else { - switch_simple_email(email_vm, from, header_string, body, NULL); - } - if (!switch_strlen_zero(email_vm_notify)) { - switch_simple_email(email_vm_notify, from, header_string, body, NULL); - } - - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Sending message to %s\n", email_vm); - switch_safe_free(body); - if (email_delete && send_mail_only) { - if (unlink(file_path) != 0) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "failed to delete file [%s]\n", file_path); - } - } + if (x_domain_root) { + switch_xml_free(x_domain_root); } switch_safe_free(file_path); @@ -2678,6 +3090,16 @@ } } + + +SWITCH_STANDARD_API(voicemail_inject_api_function) +{ + voicemail_inject(cmd); + + stream->write_function(stream, "%s", "+OK\n"); + return SWITCH_STATUS_SUCCESS; +} + SWITCH_STANDARD_API(voicemail_api_function) { int argc = 0; @@ -2797,13 +3219,14 @@ *module_interface = switch_loadable_module_create_module_interface(pool, modname); SWITCH_ADD_APP(app_interface, "voicemail", "Voicemail", VM_DESC, voicemail_function, VM_USAGE, SAF_NONE); - if (switch_event_bind((char *) modname, SWITCH_EVENT_MESSAGE_QUERY, SWITCH_EVENT_SUBCLASS_ANY, message_query_handler, NULL) + if (switch_event_bind(modname, SWITCH_EVENT_MESSAGE_QUERY, SWITCH_EVENT_SUBCLASS_ANY, message_query_handler, NULL) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } SWITCH_ADD_API(commands_api_interface, "voicemail", "voicemail", voicemail_api_function, VOICEMAIL_SYNTAX); + SWITCH_ADD_API(commands_api_interface, "voicemail_inject", "voicemail", voicemail_inject_api_function, ""); SWITCH_ADD_API(commands_api_interface, "vm_boxcount", "vm_boxcount", boxcount_api_function, BOXCOUNT_SYNTAX); /* indicate that the module should continue to be loaded */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_cepstral/Makefile ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_cepstral/Makefile (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_cepstral/Makefile Mon Aug 4 21:29:58 2008 @@ -1,4 +1,4 @@ -LOCAL_INSERT_LDFLAGS=if test $$osarch = "Darwin" ; then echo "-framework swift" ; else echo "-L$(SWIFT_HOME)/lib -L/opt/swift/lib -lswift -lceplex_us -lceplang_en -lm" ; fi ; +LOCAL_INSERT_LDFLAGS=if test $$osarch = "Darwin" ; then echo "-framework swift" ; else echo "-L$(SWIFT_HOME)/lib -L/opt/swift/lib -lswift -lm" ; fi ; LOCAL_INSERT_CFLAGS=test $$osarch = "Darwin" || echo "-I$(SWIFT_HOME)/include -I/opt/swift/include"; LOCAL_CFLAGS=-w Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_cepstral/mod_cepstral.2008.vcproj ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_cepstral/mod_cepstral.2008.vcproj (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_cepstral/mod_cepstral.2008.vcproj Mon Aug 4 21:29:58 2008 @@ -54,7 +54,7 @@ @@ -118,7 +118,7 @@ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_cepstral/mod_cepstral.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_cepstral/mod_cepstral.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_cepstral/mod_cepstral.c Mon Aug 4 21:29:58 2008 @@ -114,7 +114,7 @@ return rv; } -static switch_status_t cepstral_speech_open(switch_speech_handle_t *sh, char *voice_name, int rate, switch_speech_flag_t *flags) +static switch_status_t cepstral_speech_open(switch_speech_handle_t *sh, const char *voice_name, int rate, switch_speech_flag_t *flags) { cepstral_t *cepstral = switch_core_alloc(sh->memory_pool, sizeof(*cepstral)); char srate[25]; @@ -325,7 +325,7 @@ return status; } -static void cepstral_text_param_tts(switch_speech_handle_t *sh, char *param, char *val) +static void cepstral_text_param_tts(switch_speech_handle_t *sh, char *param, const char *val) { cepstral_t *cepstral; @@ -333,14 +333,14 @@ assert(cepstral != NULL); if (!strcasecmp(param, "voice")) { - char *voice_name = val; + const char *voice_name = val; if (!strcasecmp(voice_name, "next")) { if ((cepstral->voice = swift_port_find_next_voice(cepstral->port))) { if (SWIFT_FAILED(swift_port_set_voice(cepstral->port, cepstral->voice))) { cepstral->done = cepstral->done_gen = 1; return; } - voice_name = (char *) swift_voice_get_attribute(cepstral->voice, "name"); + voice_name = swift_voice_get_attribute(cepstral->voice, "name"); } else { voice_name = NULL; } @@ -366,7 +366,7 @@ return; } - voice_name = (char *) swift_voice_get_attribute(cepstral->voice, "name"); + voice_name = swift_voice_get_attribute(cepstral->voice, "name"); } if (voice_name) { @@ -437,5 +437,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_cepstral/mod_cepstral.vcproj ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_cepstral/mod_cepstral.vcproj (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_cepstral/mod_cepstral.vcproj Mon Aug 4 21:29:58 2008 @@ -23,7 +23,7 @@ > private_info; @@ -312,7 +312,7 @@ /*! function to unload a grammar to the asr interface */ -static switch_status_t lumenvox_asr_unload_grammar(switch_asr_handle_t *ah, char *grammar) +static switch_status_t lumenvox_asr_unload_grammar(switch_asr_handle_t *ah, const char *grammar) { lumenvox_t *lv = (lumenvox_t *) ah->private_info; Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_openmrcp/mod_openmrcp.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_openmrcp/mod_openmrcp.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/asr_tts/mod_openmrcp/mod_openmrcp.c Mon Aug 4 21:29:58 2008 @@ -241,6 +241,7 @@ apr_finfo_t finfo; char *buf1; apr_size_t bytes2read = 0; + mrcp_recognizer_header_t *recognizer_header; mrcp_message_t *mrcp_message = mrcp_client_context_message_get(context, asr_session->client_session, asr_session->control_channel, RECOGNIZER_RECOGNIZE); @@ -263,14 +264,25 @@ rv = apr_file_read(fp, buf1, &bytes2read); buf1[bytes2read] = '\0'; + recognizer_header = mrcp_resource_header_prepare(mrcp_message); + + if(!recognizer_header) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not prepare resource_header\n"); + return MRCP_STATUS_FAILURE; + } + recognizer_header->cancel_if_queue = FALSE; + mrcp_resource_header_property_add(mrcp_message,RECOGNIZER_HEADER_CANCEL_IF_QUEUE); + generic_header = mrcp_generic_header_prepare(mrcp_message); if (!generic_header) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not prepare generic_header\n"); return MRCP_STATUS_FAILURE; } - generic_header->content_type = "application/srgs+xml"; + generic_header->content_type = " application/srgs+xml"; mrcp_generic_header_property_add(mrcp_message, GENERIC_HEADER_CONTENT_TYPE); + generic_header->content_id = " "; + mrcp_generic_header_property_add(mrcp_message,GENERIC_HEADER_CONTENT_ID); mrcp_message->body = buf1; /* send the MRCP RECOGNIZE message to MRCP server */ @@ -973,5 +985,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_amr/mod_amr.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_amr/mod_amr.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_amr/mod_amr.c Mon Aug 4 21:29:58 2008 @@ -24,7 +24,7 @@ * Contributor(s): * * Anthony Minessale II - * Brian K. West + * Brian K. West * * The amr codec itself is not distributed with this module. * @@ -334,5 +334,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_g723_1/mod_g723_1.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_g723_1/mod_g723_1.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_g723_1/mod_g723_1.c Mon Aug 4 21:29:58 2008 @@ -24,7 +24,7 @@ * Contributor(s): * * Anthony Minessale II - * Brian K. West + * Brian K. West * * The g723.1 codec itself is not distributed with this module. * @@ -192,5 +192,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_g729/mod_g729.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_g729/mod_g729.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_g729/mod_g729.c Mon Aug 4 21:29:58 2008 @@ -233,5 +233,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_h26x/mod_h26x.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_h26x/mod_h26x.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_h26x/mod_h26x.c Mon Aug 4 21:29:58 2008 @@ -114,5 +114,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -225,5 +225,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_speex/mod_speex.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_speex/mod_speex.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_speex/mod_speex.c Mon Aug 4 21:29:58 2008 @@ -298,5 +298,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_voipcodecs/mod_voipcodecs.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_voipcodecs/mod_voipcodecs.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/codecs/mod_voipcodecs/mod_voipcodecs.c Mon Aug 4 21:29:58 2008 @@ -17,12 +17,12 @@ * The Original Code is FreeSWITCH Modular Media Switching Software Library / G722 codec module * * The Initial Developer of the Original Code is - * Brian K. West + * Brian K. West * Portions created by the Initial Developer are Copyright (C) * the Initial Developer. All Rights Reserved. * * Contributor(s): - * Brian K. West + * Brian K. West * Anthony Minessale II * Michael Jerris * @@ -706,5 +706,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -82,7 +82,9 @@ SWITCH_STANDARD_APP(avoid_function) { +#if 0 void *y = NULL; +#endif int x = 0; switch_channel_t *channel = switch_core_session_get_channel(session); @@ -92,7 +94,9 @@ } switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "I should never be called!.\n"); +#if 0 memset((void *) y, 0, 1000); +#endif } SWITCH_STANDARD_APP(goto_function) @@ -391,5 +395,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/dialplans/mod_dialplan_directory/mod_dialplan_directory.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/dialplans/mod_dialplan_directory/mod_dialplan_directory.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/dialplans/mod_dialplan_directory/mod_dialplan_directory.c Mon Aug 4 21:29:58 2008 @@ -163,5 +163,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/dialplans/mod_dialplan_xml/mod_dialplan_xml.c Mon Aug 4 21:29:58 2008 @@ -147,7 +147,7 @@ } if (field && strchr(expression, '(')) { - len = (uint32_t) (strlen(data) + strlen(field_data) + 10); + len = (uint32_t) (strlen(data) + strlen(field_data) + 10) * proceed; if (!(substituted = malloc(len))) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "memory error!\n"); proceed = 0; @@ -299,5 +299,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/directories/mod_ldap/mod_ldap.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/directories/mod_ldap/mod_ldap.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/directories/mod_ldap/mod_ldap.c Mon Aug 4 21:29:58 2008 @@ -229,5 +229,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -103,6 +103,11 @@ int running; int handles; char guess_ip[80]; + switch_event_node_t *in_node; + switch_event_node_t *probe_node; + switch_event_node_t *out_node; + switch_event_node_t *roster_node; + } globals; struct mdl_profile { @@ -1755,22 +1760,22 @@ return SWITCH_STATUS_GENERR; } - if (switch_event_bind((char *) modname, SWITCH_EVENT_PRESENCE_IN, SWITCH_EVENT_SUBCLASS_ANY, pres_event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_PRESENCE_IN, SWITCH_EVENT_SUBCLASS_ANY, pres_event_handler, NULL, &globals.in_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } - if (switch_event_bind((char *) modname, SWITCH_EVENT_PRESENCE_PROBE, SWITCH_EVENT_SUBCLASS_ANY, pres_event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_PRESENCE_PROBE, SWITCH_EVENT_SUBCLASS_ANY, pres_event_handler, NULL, &globals.probe_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } - if (switch_event_bind((char *) modname, SWITCH_EVENT_PRESENCE_OUT, SWITCH_EVENT_SUBCLASS_ANY, pres_event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_PRESENCE_OUT, SWITCH_EVENT_SUBCLASS_ANY, pres_event_handler, NULL, &globals.out_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } - if (switch_event_bind((char *) modname, SWITCH_EVENT_ROSTER, SWITCH_EVENT_SUBCLASS_ANY, roster_event_handler, NULL) + if (switch_event_bind_removable(modname, SWITCH_EVENT_ROSTER, SWITCH_EVENT_SUBCLASS_ANY, roster_event_handler, NULL, &globals.roster_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; @@ -1867,6 +1872,16 @@ ldl_global_destroy(); } } + + switch_event_free_subclass(DL_EVENT_LOGIN_SUCCESS); + switch_event_free_subclass(DL_EVENT_LOGIN_FAILURE); + switch_event_free_subclass(DL_EVENT_CONNECTED); + switch_event_unbind(&globals.in_node); + switch_event_unbind(&globals.probe_node); + switch_event_unbind(&globals.out_node); + switch_event_unbind(&globals.roster_node); + + switch_core_hash_destroy(&globals.profile_hash); return SWITCH_STATUS_SUCCESS; } @@ -2962,5 +2977,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -574,6 +574,7 @@ { private_t *tech_pvt = switch_core_session_get_private(session); switch_byte_t *data; + int ms_count = 0; switch_assert(tech_pvt != NULL); tech_pvt->read_frame.flags = SFF_NONE; @@ -615,6 +616,9 @@ } switch_yield(1000); + if (++ms_count >= 30000) { + break; + } } return SWITCH_STATUS_FALSE; @@ -1159,5 +1163,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_portaudio/mod_PortAudio.2008.vcproj ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_portaudio/mod_PortAudio.2008.vcproj (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_portaudio/mod_PortAudio.2008.vcproj Mon Aug 4 21:29:58 2008 @@ -56,6 +56,7 @@ @@ -49,6 +50,7 @@ /> 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 Mon Aug 4 21:29:58 2008 @@ -107,6 +107,7 @@ switch_mutex_t *device_lock; switch_mutex_t *pvt_lock; switch_mutex_t *flag_mutex; + switch_mutex_t *pa_mutex; int sample_rate; int codec_ms; PABLIO_Stream *audio_stream; @@ -121,6 +122,7 @@ int ring_interval; GFLAGS flags; switch_timer_t timer; + switch_timer_t hold_timer; } globals; @@ -152,7 +154,7 @@ static switch_status_t engage_device(int samplerate, int codec_ms); static switch_status_t engage_ring_device(int sample_rate, int channels); static void deactivate_ring_device(void); -static int dump_info(void); +static int dump_info(int verbose); static switch_status_t load_config(void); static int get_dev_by_name(char *name, int in); static int get_dev_by_number(int number, int in); @@ -315,10 +317,10 @@ static void deactivate_ring_device(void) { switch_mutex_lock(globals.device_lock); - if (globals.ring_stream) { + if (globals.ringdev != globals.outdev && globals.ring_stream) { CloseAudioStream(globals.ring_stream); - globals.ring_stream = NULL; } + globals.ring_stream = NULL; switch_mutex_unlock(globals.device_lock); } @@ -332,10 +334,12 @@ switch_mutex_lock(globals.pvt_lock); if (*tech_pvt->call_id == '\0') { + switch_mutex_lock(globals.pa_mutex); switch_snprintf(tech_pvt->call_id, sizeof(tech_pvt->call_id), "%d", ++globals.call_id); switch_core_hash_insert(globals.call_hash, tech_pvt->call_id, tech_pvt); switch_core_session_set_read_codec(tech_pvt->session, &globals.read_codec); switch_core_session_set_write_codec(tech_pvt->session, &globals.write_codec); + switch_mutex_unlock(globals.pa_mutex); } for (tp = globals.call_list; tp; tp = tp->next) { @@ -394,22 +398,29 @@ switch_mutex_unlock(globals.pvt_lock); } +static void tech_close_file(private_t *tech_pvt) +{ + if (tech_pvt->hfh) { + tech_pvt->hfh = NULL; + switch_core_file_close(&tech_pvt->fh); + } +} + static switch_status_t channel_on_hangup(switch_core_session_t *session) { private_t *tech_pvt = switch_core_session_get_private(session); switch_assert(tech_pvt != NULL); - - remove_pvt(tech_pvt); + + switch_mutex_lock(globals.pa_mutex); + switch_core_hash_delete(globals.call_hash, tech_pvt->call_id); + switch_mutex_unlock(globals.pa_mutex); switch_clear_flag_locked(tech_pvt, TFLAG_IO); switch_set_flag_locked(tech_pvt, TFLAG_HUP); - switch_core_hash_delete(globals.call_hash, tech_pvt->call_id); + remove_pvt(tech_pvt); - if (tech_pvt->hfh) { - tech_pvt->hfh = NULL; - switch_core_file_close(&tech_pvt->fh); - } + tech_close_file(tech_pvt); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s CHANNEL HANGUP\n", switch_channel_get_name(switch_core_session_get_channel(session))); @@ -466,19 +477,21 @@ switch_assert(tech_pvt != NULL); if (!globals.audio_stream) { - return SWITCH_STATUS_FALSE; + goto normal_return; } if (switch_test_flag(tech_pvt, TFLAG_HUP)) { - return SWITCH_STATUS_FALSE; + goto normal_return; } if (!switch_test_flag(tech_pvt, TFLAG_IO)) { - goto cng; + goto cng_wait; } - + if (!is_master(tech_pvt)) { if (tech_pvt->hold_file) { + switch_size_t olen = globals.read_codec.implementation->samples_per_frame; + if (!tech_pvt->hfh) { int sample_rate = tech_pvt->sample_rate ? tech_pvt->sample_rate : globals.sample_rate; if (switch_core_file_open(&tech_pvt->fh, @@ -487,7 +500,7 @@ globals.read_codec.implementation->actual_samples_per_second, SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT, NULL) != SWITCH_STATUS_SUCCESS) { tech_pvt->hold_file = NULL; - goto cng; + goto cng_wait; } tech_pvt->hfh = &tech_pvt->fh; @@ -497,46 +510,39 @@ tech_pvt->hold_frame.codec = &globals.write_codec; } - goto hold; - } - cng: - switch_yield(globals.read_codec.implementation->microseconds_per_frame); - *frame = &globals.cng_frame; - return SWITCH_STATUS_SUCCESS; - - hold: - { - switch_size_t olen = globals.read_codec.implementation->samples_per_frame; - if (switch_core_timer_next(&globals.timer) != SWITCH_STATUS_SUCCESS) { + if (switch_core_timer_next(&globals.hold_timer) != SWITCH_STATUS_SUCCESS) { switch_core_file_close(&tech_pvt->fh); - goto cng; + goto cng_nowait; } switch_core_file_read(tech_pvt->hfh, tech_pvt->hold_frame.data, &olen); if (olen == 0) { unsigned int pos = 0; switch_core_file_seek(tech_pvt->hfh, &pos, 0, SEEK_SET); - goto cng; + goto cng_nowait; } tech_pvt->hold_frame.datalen = (uint32_t) (olen * sizeof(int16_t)); tech_pvt->hold_frame.samples = (uint32_t) olen; *frame = &tech_pvt->hold_frame; + status = SWITCH_STATUS_SUCCESS; + goto normal_return; } - return SWITCH_STATUS_SUCCESS; + goto cng_wait; } + if (tech_pvt->hfh) { + tech_close_file(tech_pvt); + } + switch_mutex_lock(globals.device_lock); - - get_samples: - - if ((samples = ReadAudioStream(globals.audio_stream, globals.read_frame.data, - globals.read_codec.implementation->samples_per_frame, &globals.timer)) == 0) { - switch_yield(1000); - goto get_samples; - } else { + samples = ReadAudioStream(globals.audio_stream, globals.read_frame.data, + globals.read_codec.implementation->samples_per_frame, &globals.timer); + switch_mutex_unlock(globals.device_lock); + + if (samples) { globals.read_frame.datalen = samples * 2; globals.read_frame.samples = samples; @@ -546,12 +552,23 @@ if (!switch_test_flag((&globals), GFLAG_MOUTH)) { memset(globals.read_frame.data, 255, globals.read_frame.datalen); } - status = SWITCH_STATUS_SUCCESS; + } else { + goto cng_nowait; } - switch_mutex_unlock(globals.device_lock); - + + normal_return: return status; + + cng_nowait: + *frame = &globals.cng_frame; + return SWITCH_STATUS_SUCCESS; + + cng_wait: + switch_core_timer_next(&globals.hold_timer); + *frame = &globals.cng_frame; + return SWITCH_STATUS_SUCCESS; + } static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id) @@ -690,11 +707,13 @@ Pa_Initialize(); - if (dump_info()) { + if (dump_info(0)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't find any audio devices!\n"); return SWITCH_STATUS_TERM; } + memset(&globals, 0, sizeof(globals)); + if ((status = load_config()) != SWITCH_STATUS_SUCCESS) { return status; } @@ -708,6 +727,7 @@ switch_mutex_init(&globals.device_lock, SWITCH_MUTEX_NESTED, module_pool); switch_mutex_init(&globals.pvt_lock, SWITCH_MUTEX_NESTED, module_pool); switch_mutex_init(&globals.flag_mutex, SWITCH_MUTEX_NESTED, module_pool); + switch_mutex_init(&globals.pa_mutex, SWITCH_MUTEX_NESTED, module_pool); if (switch_event_reserve_subclass(MY_EVENT_RINGING) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't register subclass!\n"); @@ -729,7 +749,19 @@ portaudio_endpoint_interface->state_handler = &portaudio_event_handlers; SWITCH_ADD_API(api_interface, "pa", "PortAudio", pa_cmd, " []"); - + switch_console_set_complete("add pa help"); + switch_console_set_complete("add pa dump"); + switch_console_set_complete("add pa call"); + switch_console_set_complete("add pa answer"); + switch_console_set_complete("add pa hangup"); + switch_console_set_complete("add pa list"); + switch_console_set_complete("add pa switch"); + switch_console_set_complete("add pa dtmf"); + switch_console_set_complete("add pa flags"); + switch_console_set_complete("add pa devlist"); + switch_console_set_complete("add pa indev"); + switch_console_set_complete("add pa outdev"); + switch_console_set_complete("add pa ringdev"); /* indicate that the module should continue to be loaded */ return SWITCH_STATUS_SUCCESS; } @@ -746,7 +778,6 @@ return SWITCH_STATUS_TERM; } - memset(&globals, 0, sizeof(globals)); globals.indev = globals.outdev = globals.ringdev = -1; if ((settings = switch_xml_child(cfg, "settings"))) { @@ -865,6 +896,7 @@ } switch_core_timer_destroy(&globals.timer); + switch_core_timer_destroy(&globals.hold_timer); Pa_Terminate(); switch_core_hash_destroy(&globals.call_hash); @@ -975,7 +1007,7 @@ return SWITCH_STATUS_SUCCESS; } -static int dump_info(void) +static int dump_info(int verbose) { int i, numDevices, defaultDisplayed; const PaDeviceInfo *deviceInfo; @@ -990,6 +1022,14 @@ return 0; } + if (verbose < 0) { + Pa_Terminate(); + Pa_Initialize(); + load_config(); + verbose = 0; + } + + numDevices = Pa_GetDeviceCount(); if (numDevices < 0) { switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_INFO, "ERROR: Pa_CountDevices returned 0x%x\n", numDevices); @@ -998,6 +1038,11 @@ } switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_INFO, "Number of devices = %d\n", numDevices); + + if (!verbose) { + return 0; + } + for (i = 0; i < numDevices; i++) { switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_INFO, "%s", line); deviceInfo = Pa_GetDeviceInfo(i); @@ -1070,7 +1115,7 @@ PrintSupportedStandardSampleRates(&inputParameters, &outputParameters); } } - + switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_INFO, "%s", line); return 0; @@ -1122,6 +1167,16 @@ return SWITCH_STATUS_FALSE; } + if (switch_core_timer_init(&globals.hold_timer, + globals.timer_name, codec_ms, globals.read_codec.implementation->samples_per_frame, + module_pool) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "setup hold timer failed!\n"); + switch_core_codec_destroy(&globals.read_codec); + switch_core_codec_destroy(&globals.write_codec); + switch_core_timer_destroy(&globals.timer); + return SWITCH_STATUS_FALSE; + } + globals.read_frame.rate = sample_rate; globals.read_frame.codec = &globals.read_codec; @@ -1157,28 +1212,33 @@ static switch_status_t engage_ring_device(int sample_rate, int channels) { - PaStreamParameters outputParameters; + PaStreamParameters outputParameters = {0}; PaError err; if (!globals.ring_stream) { - if (!sample_rate) { - sample_rate = globals.sample_rate; - } + if (globals.ringdev == globals.outdev) { + globals.ring_stream = globals.audio_stream; + } else { + if (!sample_rate) { + sample_rate = globals.sample_rate; + } - switch_mutex_lock(globals.device_lock); - /* LOCKED ************************************************************************************************** */ - outputParameters.device = globals.ringdev; - outputParameters.channelCount = channels; - outputParameters.sampleFormat = SAMPLE_TYPE; - outputParameters.suggestedLatency = Pa_GetDeviceInfo(outputParameters.device)->defaultLowOutputLatency; - outputParameters.hostApiSpecificStreamInfo = NULL; - err = OpenAudioStream(&globals.ring_stream, NULL, &outputParameters, sample_rate, paClipOff, globals.read_codec.implementation->samples_per_frame); - /* UNLOCKED ************************************************************************************************* */ - switch_mutex_unlock(globals.device_lock); + switch_mutex_lock(globals.device_lock); + /* LOCKED ************************************************************************************************** */ + outputParameters.device = globals.ringdev; + outputParameters.channelCount = channels; + outputParameters.sampleFormat = SAMPLE_TYPE; + outputParameters.suggestedLatency = Pa_GetDeviceInfo(outputParameters.device)->defaultLowOutputLatency; + outputParameters.hostApiSpecificStreamInfo = NULL; + err = OpenAudioStream(&globals.ring_stream, NULL, &outputParameters, sample_rate, paClipOff, globals.read_codec.implementation->samples_per_frame); - if (err != paNoError) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't open ring device!\n"); - return SWITCH_STATUS_FALSE; + /* UNLOCKED ************************************************************************************************* */ + switch_mutex_unlock(globals.device_lock); + + if (err != paNoError) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't open ring device!\n"); + return SWITCH_STATUS_FALSE; + } } } @@ -1525,6 +1585,7 @@ "--------------------------------------------------------------------------------\n" "pa help\n" "pa dump\n" + "pa rescan\n" "pa call [ ]\n" "pa answer []\n" "pa hangup []\n" @@ -1537,6 +1598,7 @@ "pa outdev #|\n" "pa ringdev #|\n" "--------------------------------------------------------------------------------\n"; + if (stream->param_event) { http = switch_event_get_header(stream->param_event, "http-host"); } @@ -1602,8 +1664,12 @@ goto done; } else if (!strcasecmp(argv[0], "devlist")) { func = devlist; + } else if (!strcasecmp(argv[0], "rescan")) { + switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_INFO, "Looking for new devices.\n"); + dump_info(-1); + goto done; } else if (!strcasecmp(argv[0], "dump")) { - dump_info(); + dump_info(1); goto done; } else if (!strcasecmp(argv[0], "list")) { func = list_calls; @@ -1653,7 +1719,11 @@ if (http) { stream->write_function(stream, "
");
 		}
+
+		switch_mutex_lock(globals.pa_mutex);
 		status = func(&argv[lead], argc - lead, stream);
+		switch_mutex_unlock(globals.pa_mutex);
+
 		if (http) {
 			stream->write_function(stream, "\n\n
"); } @@ -1713,5 +1783,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_portaudio/pablio.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_portaudio/pablio.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_portaudio/pablio.c Mon Aug 4 21:29:58 2008 @@ -149,7 +149,7 @@ for (;;) { avail = PaUtil_GetRingBufferReadAvailable(&aStream->inFIFO); - + if (switch_core_timer_check(timer, SWITCH_TRUE) == SWITCH_STATUS_SUCCESS) { break; } 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 Mon Aug 4 21:29:58 2008 @@ -224,8 +224,8 @@ int sip_cause = hangup_cause_to_sip(cause); const char *ps_cause = switch_channel_get_variable(channel, SWITCH_PROTO_SPECIFIC_HANGUP_CAUSE_VARIABLE); - if (!switch_strlen_zero(ps_cause) && !strncasecmp(ps_cause, "sip:", 4)) { - int new_cause = atoi(ps_cause + 4); + if (!switch_strlen_zero(ps_cause) && (!strncasecmp(ps_cause, "sip:", 4) || !strncasecmp(ps_cause, "sips:", 5))) { + int new_cause = atoi(sofia_glue_strip_proto(ps_cause)); if (new_cause) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s Overriding SIP cause %d with %d from the other leg\n", switch_channel_get_name(channel), sip_cause, new_cause); @@ -284,7 +284,29 @@ if (tech_pvt->nh && !switch_test_flag(tech_pvt, TFLAG_BYE)) { char reason[128] = ""; - if (cause > 1 && cause < 128) { + switch_stream_handle_t stream = { 0 }; + switch_event_header_t *hi; + char *bye_headers = NULL; + + SWITCH_STANDARD_STREAM(stream); + if ((hi = switch_channel_variable_first(channel))) { + for (; hi; hi = hi->next) { + const char *name = (char *) hi->name; + char *value = (char *) hi->value; + + if (!strncasecmp(name, SOFIA_SIP_BYE_HEADER_PREFIX, strlen(SOFIA_SIP_BYE_HEADER_PREFIX))) { + const char *hname = name + strlen(SOFIA_SIP_BYE_HEADER_PREFIX); + stream.write_function(&stream, "%s: %s\r\n", hname, value); + } + } + switch_channel_variable_last(channel); + } + + if (stream.data) { + bye_headers = stream.data; + } + + if (cause > 0 && cause < 128) { switch_snprintf(reason, sizeof(reason), "Q.850;cause=%d;text=\"%s\"", cause, switch_channel_cause2str(cause)); } else if (cause == SWITCH_CAUSE_PICKED_OFF) { switch_snprintf(reason, sizeof(reason), "SIP;cause=200;text=\"Call completed elsewhere\""); @@ -294,17 +316,28 @@ if (switch_test_flag(tech_pvt, TFLAG_ANS)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Sending BYE to %s\n", switch_channel_get_name(channel)); - nua_bye(tech_pvt->nh, SIPTAG_REASON_STR(reason), TAG_END()); + nua_bye(tech_pvt->nh, + SIPTAG_REASON_STR(reason), + TAG_IF(!switch_strlen_zero(bye_headers), SIPTAG_HEADER_STR(bye_headers)), + TAG_END()); } else { if (switch_test_flag(tech_pvt, TFLAG_OUTBOUND)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Sending CANCEL to %s\n", switch_channel_get_name(channel)); - nua_cancel(tech_pvt->nh, SIPTAG_REASON_STR(reason), TAG_END()); + nua_cancel(tech_pvt->nh, + SIPTAG_REASON_STR(reason), + TAG_IF(!switch_strlen_zero(bye_headers), SIPTAG_HEADER_STR(bye_headers)), + TAG_IF(!switch_strlen_zero(bye_headers), SIPTAG_HEADER_STR(bye_headers)), + TAG_END()); } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Responding to INVITE with: %d\n", sip_cause); - nua_respond(tech_pvt->nh, sip_cause, sip_status_phrase(sip_cause), SIPTAG_REASON_STR(reason), TAG_END()); + nua_respond(tech_pvt->nh, sip_cause, sip_status_phrase(sip_cause), + SIPTAG_REASON_STR(reason), + TAG_IF(!switch_strlen_zero(bye_headers), SIPTAG_HEADER_STR(bye_headers)), + TAG_END()); } } switch_set_flag(tech_pvt, TFLAG_BYE); + switch_safe_free(stream.data); } switch_clear_flag(tech_pvt, TFLAG_IO); @@ -926,7 +959,8 @@ char ref_to[128] = ""; if (!strstr(msg->string_arg, "sip:")) { - switch_snprintf(ref_to, sizeof(ref_to), "sip:%s@%s", msg->string_arg, tech_pvt->profile->sipip); + const char *format = strchr(tech_pvt->profile->sipip, ':') ? "sip:%s@[%s]" : "sip:%s@%s"; + switch_snprintf(ref_to, sizeof(ref_to), format, msg->string_arg, tech_pvt->profile->sipip); } else { switch_set_string(ref_to, msg->string_arg); } @@ -988,7 +1022,7 @@ } switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Overlap Dial with %d %s\n", code, reason); - nua_respond(tech_pvt->nh, code, reason, TAG_IF(to_uri, SIPTAG_CONTACT_STR(to_uri)), + nua_respond(tech_pvt->nh, code, su_strdup(tech_pvt->nh->nh_home, reason), TAG_IF(to_uri, SIPTAG_CONTACT_STR(to_uri)), SIPTAG_SUPPORTED_STR(NULL), SIPTAG_ACCEPT_STR(NULL), TAG_IF(!switch_strlen_zero(max_forwards), SIPTAG_MAX_FORWARDS_STR(max_forwards)), TAG_END()); if (!switch_channel_test_flag(channel, CF_ANSWERED)) { @@ -1003,12 +1037,12 @@ sofia_glue_tech_patch_sdp(tech_pvt); sofia_glue_tech_proxy_remote_addr(tech_pvt); } - nua_respond(tech_pvt->nh, code, reason, SIPTAG_CONTACT_STR(tech_pvt->reply_contact), + nua_respond(tech_pvt->nh, code, su_strdup(tech_pvt->nh->nh_home, reason), SIPTAG_CONTACT_STR(tech_pvt->reply_contact), SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str), SOATAG_REUSE_REJECTED(1), SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), NUTAG_INCLUDE_EXTRA_SDP(1), TAG_END()); } else { - nua_respond(tech_pvt->nh, code, reason, SIPTAG_CONTACT_STR(tech_pvt->reply_contact), TAG_END()); + nua_respond(tech_pvt->nh, code, su_strdup(tech_pvt->nh->nh_home, reason), SIPTAG_CONTACT_STR(tech_pvt->reply_contact), TAG_END()); } if (!switch_channel_test_flag(channel, CF_ANSWERED) && code >= 300) { switch_set_flag_locked(tech_pvt, TFLAG_BYE); @@ -1200,22 +1234,22 @@ switch_assert(gp->state < REG_STATE_LAST); stream->write_function(stream, "%s\n", line); - stream->write_function(stream, "Name \t%s\n", switch_str_nil(gp->name)); - stream->write_function(stream, "Scheme \t%s\n", switch_str_nil(gp->register_scheme)); - stream->write_function(stream, "Realm \t%s\n", switch_str_nil(gp->register_realm)); - stream->write_function(stream, "Username\t%s\n", switch_str_nil(gp->register_username)); - stream->write_function(stream, "Password\t%s\n", switch_strlen_zero(gp->register_password) ? "no" : "yes"); - stream->write_function(stream, "From \t%s\n", switch_str_nil(gp->register_from)); - stream->write_function(stream, "Contact \t%s\n", switch_str_nil(gp->register_contact)); - stream->write_function(stream, "To \t%s\n", switch_str_nil(gp->register_to)); - stream->write_function(stream, "Proxy \t%s\n", switch_str_nil(gp->register_proxy)); - stream->write_function(stream, "Context \t%s\n", switch_str_nil(gp->register_context)); - stream->write_function(stream, "Expires \t%s\n", switch_str_nil(gp->expires_str)); - stream->write_function(stream, "Freq \t%d\n", gp->freq); - stream->write_function(stream, "Ping \t%d\n", gp->ping); - stream->write_function(stream, "PingFreq\t%d\n", gp->ping_freq); - stream->write_function(stream, "State \t%s\n", sofia_state_names[gp->state]); - stream->write_function(stream, "Status \t%s%s\n", status_names[gp->status], gp->pinging ? " (ping)" : ""); + stream->write_function(stream, "Name \t\t%s\n", switch_str_nil(gp->name)); + stream->write_function(stream, "Scheme \t\t%s\n", switch_str_nil(gp->register_scheme)); + stream->write_function(stream, "Realm \t\t%s\n", switch_str_nil(gp->register_realm)); + stream->write_function(stream, "Username\t\t%s\n", switch_str_nil(gp->register_username)); + stream->write_function(stream, "Password\t\t%s\n", switch_strlen_zero(gp->register_password) ? "no" : "yes"); + stream->write_function(stream, "From \t\t%s\n", switch_str_nil(gp->register_from)); + stream->write_function(stream, "Contact \t\t%s\n", switch_str_nil(gp->register_contact)); + stream->write_function(stream, "To \t\t%s\n", switch_str_nil(gp->register_to)); + stream->write_function(stream, "Proxy \t\t%s\n", switch_str_nil(gp->register_proxy)); + stream->write_function(stream, "Context \t\t%s\n", switch_str_nil(gp->register_context)); + stream->write_function(stream, "Expires \t\t%s\n", switch_str_nil(gp->expires_str)); + stream->write_function(stream, "Freq \t\t%d\n", gp->freq); + stream->write_function(stream, "Ping \t\t%d\n", gp->ping); + stream->write_function(stream, "PingFreq\t\t%d\n", gp->ping_freq); + stream->write_function(stream, "State \t\t%s\n", sofia_state_names[gp->state]); + stream->write_function(stream, "Status \t\t%s%s\n", status_names[gp->status], gp->pinging ? " (ping)" : ""); stream->write_function(stream, "%s\n", line); sofia_reg_release_gateway(gp); } else { @@ -1224,36 +1258,50 @@ } else if (!strcasecmp(argv[0], "profile")) { struct cb_helper cb; - if ((profile = sofia_glue_find_profile(argv[1]))) { + if ((argv[1]) && (profile = sofia_glue_find_profile(argv[1]))) { stream->write_function(stream, "%s\n", line); - stream->write_function(stream, "Name \t%s\n", switch_str_nil(argv[1])); - stream->write_function(stream, "Domain Name\t%s\n", switch_str_nil(profile->domain_name)); + stream->write_function(stream, "Name \t\t%s\n", switch_str_nil(argv[1])); + stream->write_function(stream, "Domain Name \t\t%s\n", switch_str_nil(profile->domain_name)); if (strcasecmp(argv[1], profile->name)) { - stream->write_function(stream, "Alias Of \t%s\n", switch_str_nil(profile->name)); + stream->write_function(stream, "Alias Of \t\t%s\n", switch_str_nil(profile->name)); } - stream->write_function(stream, "DBName \t%s\n", switch_str_nil(profile->dbname)); - stream->write_function(stream, "Dialplan \t%s\n", switch_str_nil(profile->dialplan)); - stream->write_function(stream, "RTP-IP \t%s\n", switch_str_nil(profile->rtpip)); + stream->write_function(stream, "DBName \t\t%s\n", switch_str_nil(profile->dbname)); + stream->write_function(stream, "Dialplan \t\t%s\n", switch_str_nil(profile->dialplan)); + stream->write_function(stream, "Context \t\t%s\n", switch_str_nil(profile->context)); + stream->write_function(stream, "RTP-IP \t\t%s\n", switch_str_nil(profile->rtpip)); if (profile->extrtpip) { - stream->write_function(stream, "Ext-RTP-IP \t%s\n", profile->extrtpip); + stream->write_function(stream, "Ext-RTP-IP \t\t%s\n", profile->extrtpip); } - stream->write_function(stream, "SIP-IP \t%s\n", switch_str_nil(profile->sipip)); + stream->write_function(stream, "SIP-IP \t\t%s\n", switch_str_nil(profile->sipip)); if (profile->extsipip) { - stream->write_function(stream, "Ext-SIP-IP \t%s\n", profile->extsipip); + stream->write_function(stream, "Ext-SIP-IP \t\t%s\n", profile->extsipip); } - stream->write_function(stream, "URL \t%s\n", switch_str_nil(profile->url)); - stream->write_function(stream, "BIND-URL \t%s\n", switch_str_nil(profile->bindurl)); + stream->write_function(stream, "URL \t\t%s\n", switch_str_nil(profile->url)); + stream->write_function(stream, "BIND-URL \t\t%s\n", switch_str_nil(profile->bindurl)); if (sofia_test_pflag(profile, PFLAG_TLS)) { - stream->write_function(stream, "TLS-URL \t%s\n", switch_str_nil(profile->tls_url)); - stream->write_function(stream, "TLS-BIND-URL \t%s\n", switch_str_nil(profile->tls_bindurl)); + stream->write_function(stream, "TLS-URL \t\t%s\n", switch_str_nil(profile->tls_url)); + stream->write_function(stream, "TLS-BIND-URL \t%s\n", switch_str_nil(profile->tls_bindurl)); } - stream->write_function(stream, "HOLD-MUSIC \t%s\n", switch_str_nil(profile->hold_music)); - stream->write_function(stream, "CODECS \t%s\n", switch_str_nil(profile->codec_string)); - stream->write_function(stream, "TEL-EVENT \t%d\n", profile->te); - stream->write_function(stream, "CNG \t%d\n", profile->cng_pt); - stream->write_function(stream, "SESSION-TO \t%d\n", profile->session_timeout); - stream->write_function(stream, "MAX-DIALOG \t%d\n", profile->max_proceeding); + stream->write_function(stream, "HOLD-MUSIC \t\t%s\n", switch_strlen_zero(profile->hold_music) ? "NONE" : profile->hold_music); + stream->write_function(stream, "CODECS \t\t%s\n", switch_str_nil(profile->codec_string)); + stream->write_function(stream, "TEL-EVENT \t\t%d\n", profile->te); + if (profile->dtmf_type == DTMF_2833) { + stream->write_function(stream, "DTMF-MODE \t\trfc2833\n"); + } else if (profile->dtmf_type == DTMF_INFO) { + stream->write_function(stream, "DTMF-MODE \t\tinfo\n"); + } else { + stream->write_function(stream, "DTMF-MODE \t\tnone\n"); + } + stream->write_function(stream, "CNG \t\t%d\n", profile->cng_pt); + stream->write_function(stream, "SESSION-TO \t\t%d\n", profile->session_timeout); + stream->write_function(stream, "MAX-DIALOG \t\t%d\n", profile->max_proceeding); + stream->write_function(stream, "NOMEDIA \t\t%s\n", switch_test_flag(profile, TFLAG_INB_NOMEDIA) ? "true" : "false"); + stream->write_function(stream, "LATE-NEG \t\t%s\n", switch_test_flag(profile, TFLAG_LATE_NEGOTIATION) ? "true" : "false"); + stream->write_function(stream, "PROXY-MEDIA \t\t%s\n", switch_test_flag(profile, TFLAG_PROXY_MEDIA) ? "true" : "false"); + stream->write_function(stream, "AGGRESSIVENAT \t\t%s\n", sofia_test_pflag(profile, PFLAG_AGGRESSIVE_NAT_DETECTION) ? "true" : "false"); + stream->write_function(stream, "STUN_ENABLED \t\t%s\n", sofia_test_pflag(profile, PFLAG_STUN_ENABLED) ? "true" : "false"); + stream->write_function(stream, "STUN_AUTO_DISABLE \t%s\n", sofia_test_pflag(profile, PFLAG_STUN_AUTO_DISABLE) ? "true" : "false"); stream->write_function(stream, "\nRegistrations:\n%s\n", line); cb.profile = profile; @@ -1340,18 +1388,102 @@ return SWITCH_STATUS_SUCCESS; } + if (argv[1] && !strcasecmp(argv[0], "restart") && !strcasecmp(argv[1], "all")) { + sofia_glue_restart_all_profiles(); + return SWITCH_STATUS_SUCCESS; + } + if (switch_strlen_zero(profile_name) || !(profile = sofia_glue_find_profile(profile_name))) { stream->write_function(stream, "Invalid Profile [%s]", switch_str_nil(profile_name)); return SWITCH_STATUS_SUCCESS; } + if (!strcasecmp(argv[1], "killgw")) { + sofia_gateway_t *gateway_ptr; + if (argc < 2) { + stream->write_function(stream, "-ERR missing gw name\n"); + goto done; + } + + if ((gateway_ptr = sofia_reg_find_gateway(argv[2]))) { + sofia_glue_del_gateway(gateway_ptr); + sofia_reg_release_gateway(gateway_ptr); + stream->write_function(stream, "+OK gateway marked for deletion.\n"); + } else { + stream->write_function(stream, "-ERR no such gateway.\n"); + } + + goto done; + } + + if (!strcasecmp(argv[1], "stun-auto-disable")) { + if (argv[2]) { + int is_true = switch_true(argv[2]); + if (is_true) { + profile->pflags |= PFLAG_STUN_AUTO_DISABLE; + } else { + profile->pflags &= ~PFLAG_STUN_AUTO_DISABLE; + } + } + + stream->write_function(stream, "+OK stun-auto-disable=%s", (profile->pflags & PFLAG_STUN_AUTO_DISABLE) ? "true" : "false"); + + goto done; + } + + if (!strcasecmp(argv[1], "stun-enabled")) { + if (argv[2]) { + int is_true = switch_true(argv[2]); + if (is_true) { + profile->pflags |= PFLAG_STUN_ENABLED; + } else { + profile->pflags &= ~PFLAG_STUN_ENABLED; + } + } + + stream->write_function(stream, "+OK stun-enabled=%s", (profile->pflags & PFLAG_STUN_ENABLED) ? "true" : "false"); + + goto done; + } + + + if (!strcasecmp(argv[1], "rescan")) { + + if (argc > 2 && !strcasecmp(argv[2], "reloadxml")) { + if ((xml_root = switch_xml_open_root(1, &err))) { + switch_xml_free(xml_root); + } + stream->write_function(stream, "Reload XML [%s]\n", err); + } + + if (reconfig_sofia(profile) == SWITCH_STATUS_SUCCESS) { + stream->write_function(stream, "+OK scan complete\n"); + } else { + stream->write_function(stream, "-ERR cannot find config for profile %s\n", profile->name); + } + goto done; + } + if (!strcasecmp(argv[1], "flush_inbound_reg")) { + int reboot = 0; + if (argc > 2) { - sofia_reg_expire_call_id(profile, argv[2]); - stream->write_function(stream, "+OK flushing all registrations matching specified call_id\n"); + if (!strcasecmp(argv[2], "reboot")) { + reboot = 1; + argc = 2; + } + } + + if (argc > 2) { + if (argc > 3 && !strcasecmp(argv[3], "reboot")) { + reboot = 1; + } + + sofia_reg_expire_call_id(profile, argv[2], reboot); + stream->write_function(stream, "+OK %s all registrations matching specified call_id\n", reboot ? "rebooting" : "flushing"); } else { - sofia_reg_check_expire(profile, 0); - stream->write_function(stream, "+OK flushing all registrations\n"); + sofia_reg_check_expire(profile, 0, reboot); + stream->write_function(stream, "+OK %s all registrations\n", reboot ? "rebooting" : "flushing"); } goto done; @@ -1453,8 +1585,8 @@ struct cb_helper *cb = (struct cb_helper *) pArg; char *contact; - if (!switch_strlen_zero(argv[0]) && (contact = sofia_glue_get_url_from_contact(argv[0], 1))) { - cb->stream->write_function(cb->stream, "sofia/%s/%s,", cb->profile->name, contact + 4); + if (!switch_strlen_zero(argv[0]) && (contact = sofia_glue_get_url_from_contact(argv[0], 1)) ) { + cb->stream->write_function(cb->stream, "%ssofia/%s/%s,", argv[1], cb->profile->name, sofia_glue_strip_proto(contact)); free(contact); } @@ -1466,6 +1598,7 @@ char *data; char *user = NULL; char *domain = NULL; + char *concat = NULL; char *profile_name = NULL; char *p; sofia_profile_t *profile = NULL; @@ -1496,6 +1629,14 @@ if ((domain = strchr(user, '@'))) { *domain++ = '\0'; + if ( (concat = strchr( domain, '/')) ) { + *concat++ = '\0'; + } + } + else { + if ( (concat = strchr( user, '/')) ) { + *concat++ = '\0'; + } } if (!profile_name && domain) { @@ -1528,10 +1669,11 @@ cb.stream = &mystream; if (exclude_contact) { - sql = switch_mprintf("select contact from sip_registrations where sip_user='%q' and sip_host='%q' and contact not like '%%%s%%'", - user, domain, exclude_contact); + sql = switch_mprintf("select contact, '%q' from sip_registrations where sip_user='%q' and sip_host='%q' and contact not like '%%%s%%'", + ( concat != NULL ) ? concat : "", user, domain, exclude_contact); } else { - sql = switch_mprintf("select contact from sip_registrations where sip_user='%q' and sip_host='%q'", user, domain); + sql = switch_mprintf("select contact, '%q' from sip_registrations where sip_user='%q' and sip_host='%q'", + ( concat != NULL ) ? concat : "", user, domain); } switch_assert(sql); @@ -1571,7 +1713,7 @@ const char *usage_string = "USAGE:\n" "--------------------------------------------------------------------------------\n" "sofia help\n" - "sofia profile [start|stop|restart|flush_inbound_reg []|[register|unregister] [|all]] [reloadxml]\n" + "sofia profile [start|stop|restart|rescan|flush_inbound_reg []|[register|unregister|killgw] [|all]] [reloadxml]\n" "sofia status [[profile | gateway] ]\n" "sofia loglevel [0-9]\n" "--------------------------------------------------------------------------------\n"; @@ -1763,7 +1905,7 @@ } if (!strchr(dest, '@')) { - tech_pvt->dest = switch_core_session_sprintf(nsession, "sip:%s@%s", dest, gateway_ptr->register_proxy + 4); + tech_pvt->dest = switch_core_session_sprintf(nsession, "sip:%s@%s", dest, sofia_glue_strip_proto(gateway_ptr->register_proxy)); } else { tech_pvt->dest = switch_core_session_sprintf(nsession, "sip:%s", dest); } @@ -1913,6 +2055,132 @@ return cause; } +static void general_event_handler(switch_event_t *event) +{ + switch (event->event_id) { + case SWITCH_EVENT_NOTIFY: + { + const char *profile_name = switch_event_get_header(event, "profile"); + const char *ct = switch_event_get_header(event, "content-type"); + const char *es = switch_event_get_header(event, "event-string"); + const char *user = switch_event_get_header(event, "user"); + const char *host = switch_event_get_header(event, "host"); + const char *body = switch_event_get_body(event); + sofia_profile_t *profile; + nua_handle_t *nh; + + if (profile_name && ct && es && body && user && host && (profile = sofia_glue_find_profile(profile_name))) { + char *id = NULL; + char *contact, *p; + char buf[512] = ""; + + if (!sofia_reg_find_reg_url(profile, user, host, buf, sizeof(buf))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't find user %s@%s\n", user, host); + return; + } + + id = switch_mprintf("sip:%s@%s", user, host); + + switch_assert(id); + contact = sofia_glue_get_url_from_contact(buf, 0); + + if ((p = strstr(contact, ";fs_"))) { + *p = '\0'; + } + + nh = nua_handle(profile->nua, + NULL, + NUTAG_URL(contact), + SIPTAG_FROM_STR(id), + SIPTAG_TO_STR(id), + SIPTAG_CONTACT_STR(profile->url), + TAG_END()); + + nua_notify(nh, + NUTAG_NEWSUB(1), + SIPTAG_EVENT_STR(es), + SIPTAG_CONTENT_TYPE_STR(ct), + SIPTAG_PAYLOAD_STR(body), + TAG_END()); + + + free(id); + sofia_glue_release_profile(profile); + } + + } + break; + case SWITCH_EVENT_SEND_MESSAGE: + { + const char *profile_name = switch_event_get_header(event, "profile"); + const char *ct = switch_event_get_header(event, "content-type"); + const char *user = switch_event_get_header(event, "user"); + const char *host = switch_event_get_header(event, "host"); + const char *body = switch_event_get_body(event); + sofia_profile_t *profile; + nua_handle_t *nh; + + if (profile_name && ct && body && user && host) { + char *id = NULL; + char *contact, *p; + char buf[512] = ""; + + if (!(profile = sofia_glue_find_profile(profile_name))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't find profile %s\n", profile_name); + return; + } + + + if (!sofia_reg_find_reg_url(profile, user, host, buf, sizeof(buf))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't find user %s@%s\n", user, host); + return; + } + + id = switch_mprintf("sip:%s@%s", user, host); + + switch_assert(id); + contact = sofia_glue_get_url_from_contact(buf, 0); + + if ((p = strstr(contact, ";fs_"))) { + *p = '\0'; + } + + nh = nua_handle(profile->nua, + NULL, + NUTAG_URL(contact), + SIPTAG_FROM_STR(id), + SIPTAG_TO_STR(id), + SIPTAG_CONTACT_STR(profile->url), + TAG_END()); + + nua_message(nh, + NUTAG_NEWSUB(1), + SIPTAG_CONTENT_TYPE_STR(ct), + SIPTAG_PAYLOAD_STR(body), + TAG_END()); + + + free(id); + sofia_glue_release_profile(profile); + } + + } + break; + case SWITCH_EVENT_TRAP: + { + const char *cond = switch_event_get_header(event, "condition"); + + if (cond && !strcmp(cond, "network-address-change")) { + sofia_glue_restart_all_profiles(); + } + + } + break; + default: + break; + } +} + SWITCH_MODULE_LOAD_FUNCTION(mod_sofia_load) { switch_chat_interface_t *chat_interface; @@ -1950,37 +2218,53 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Waiting for profiles to start\n"); switch_yield(1500000); - if (switch_event_bind(modname, SWITCH_EVENT_CUSTOM, MULTICAST_EVENT, event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_CUSTOM, MULTICAST_EVENT, event_handler, NULL, + &mod_sofia_globals.custom_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_TERM; } - if (switch_event_bind(modname, SWITCH_EVENT_PRESENCE_IN, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL) - != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_PRESENCE_IN, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL, + &mod_sofia_globals.in_node) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); + return SWITCH_STATUS_GENERR; + } + + if (switch_event_bind_removable(modname, SWITCH_EVENT_PRESENCE_OUT, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL, + &mod_sofia_globals.out_node) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); + return SWITCH_STATUS_GENERR; + } + + if (switch_event_bind_removable(modname, SWITCH_EVENT_PRESENCE_PROBE, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL, + &mod_sofia_globals.probe_node) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); + return SWITCH_STATUS_GENERR; + } + + if (switch_event_bind_removable(modname, SWITCH_EVENT_ROSTER, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL, + &mod_sofia_globals.roster_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } - if (switch_event_bind(modname, SWITCH_EVENT_PRESENCE_OUT, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL) - != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_MESSAGE_WAITING, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_mwi_event_handler, NULL, + &mod_sofia_globals.mwi_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } - if (switch_event_bind(modname, SWITCH_EVENT_PRESENCE_PROBE, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL) - != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind(modname, SWITCH_EVENT_TRAP, SWITCH_EVENT_SUBCLASS_ANY, general_event_handler, NULL) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } - if (switch_event_bind(modname, SWITCH_EVENT_ROSTER, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_event_handler, NULL) - != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind(modname, SWITCH_EVENT_NOTIFY, SWITCH_EVENT_SUBCLASS_ANY, general_event_handler, NULL) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } - if (switch_event_bind(modname, SWITCH_EVENT_MESSAGE_WAITING, SWITCH_EVENT_SUBCLASS_ANY, sofia_presence_mwi_event_handler, NULL) - != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind(modname, SWITCH_EVENT_SEND_MESSAGE, SWITCH_EVENT_SUBCLASS_ANY, general_event_handler, NULL) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } @@ -1997,6 +2281,12 @@ management_interface->management_function = sofia_manage; SWITCH_ADD_API(api_interface, "sofia", "Sofia Controls", sofia_function, " "); + switch_console_set_complete("add sofia help"); + switch_console_set_complete("add sofia status"); + switch_console_set_complete("add sofia loglevel"); + switch_console_set_complete("add sofia profile"); + switch_console_set_complete("add sofia profile restart all"); + SWITCH_ADD_API(api_interface, "sofia_contact", "Sofia Contacts", sofia_contact_function, "[profile/]@"); SWITCH_ADD_CHAT(chat_interface, SOFIA_CHAT_PROTO, sofia_presence_chat_send); @@ -2014,6 +2304,14 @@ } switch_mutex_unlock(mod_sofia_globals.mutex); + switch_event_unbind(&mod_sofia_globals.in_node); + switch_event_unbind(&mod_sofia_globals.probe_node); + switch_event_unbind(&mod_sofia_globals.out_node); + switch_event_unbind(&mod_sofia_globals.roster_node); + switch_event_unbind(&mod_sofia_globals.custom_node); + switch_event_unbind(&mod_sofia_globals.mwi_node); + switch_event_unbind_callback(general_event_handler); + while (mod_sofia_globals.threads) { switch_yield(1000); if (++sanity >= 10000) { @@ -2039,5 +2337,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -47,6 +47,11 @@ #endif #define SOFIA_NAT_SESSION_TIMEOUT 20 #define SOFIA_MAX_ACL 100 +#ifdef _MSC_VER +#define HAVE_FUNCTION 1 +#else +#define HAVE_FUNC 1 +#endif #define MODNAME "mod_sofia" static const switch_state_handler_table_t noop_state_handler = { 0 }; @@ -73,6 +78,7 @@ #define SOFIA_USER_AGENT "FreeSWITCH-mod_sofia/" SWITCH_VERSION_MAJOR "." SWITCH_VERSION_MINOR "." SWITCH_VERSION_MICRO "-" SWITCH_VERSION_REVISION #define SOFIA_CHAT_PROTO "sip" #define SOFIA_SIP_HEADER_PREFIX "sip_h_" +#define SOFIA_SIP_BYE_HEADER_PREFIX "sip_bye_h_" #define SOFIA_SIP_HEADER_PREFIX_T "~sip_h_" #define SOFIA_DEFAULT_PORT "5060" #define SOFIA_DEFAULT_TLS_PORT "5061" @@ -91,6 +97,7 @@ #include #include #include +#include "nua_stack.h" typedef enum { DTMF_2833, @@ -147,7 +154,13 @@ PFLAG_DISABLE_TIMER = (1 << 19), PFLAG_DISABLE_100REL = (1 << 20), PFLAG_AGGRESSIVE_NAT_DETECTION = (1 << 21), - PFLAG_RECIEVED_IN_NAT_REG_CONTACT = (1 << 22) + PFLAG_RECIEVED_IN_NAT_REG_CONTACT = (1 << 22), + PFLAG_3PCC = (1 << 23), + PFLAG_DISABLE_RTP_AUTOADJ = (1 << 24), + PFLAG_DISABLE_SRTP_AUTH = (1 << 25), + PFLAG_FUNNY_STUN = (1 << 26), + PFLAG_STUN_ENABLED = (1 << 27), + PFLAG_STUN_AUTO_DISABLE = (1 << 28) } PFLAGS; typedef enum { @@ -156,6 +169,12 @@ } sofia_NDLB_t; typedef enum { + STUN_FLAG_SET = (1 << 0), + STUN_FLAG_PING = (1 << 1), + STUN_FLAG_FUNNY = (1 << 2) +} STUNFLAGS; + +typedef enum { TFLAG_IO = (1 << 0), TFLAG_CHANGE_MEDIA = (1 << 1), TFLAG_OUTBOUND = (1 << 2), @@ -202,6 +221,12 @@ switch_queue_t *mwi_queue; struct sofia_private destroy_private; struct sofia_private keep_private; + switch_event_node_t *in_node; + switch_event_node_t *probe_node; + switch_event_node_t *out_node; + switch_event_node_t *roster_node; + switch_event_node_t *custom_node; + switch_event_node_t *mwi_node; }; extern struct mod_sofia_globals mod_sofia_globals; @@ -263,6 +288,7 @@ int32_t retry_seconds; reg_state_t state; switch_memory_pool_t *pool; + int deleted; struct sofia_gateway *next; }; @@ -336,7 +362,7 @@ uint32_t reg_acl_count; char *nat_acl[SOFIA_MAX_ACL]; uint32_t nat_acl_count; - + int rport_level; }; struct private_object { @@ -401,6 +427,10 @@ char *local_crypto_key; char *remote_crypto_key; char *record_route; + char *extrtpip; + char *stun_ip; + switch_port_t stun_port; + uint32_t stun_flags; int crypto_tag; unsigned char local_raw_key[SWITCH_RTP_MAX_CRYPTO_LEN]; unsigned char remote_raw_key[SWITCH_RTP_MAX_CRYPTO_LEN]; @@ -547,10 +577,10 @@ void sofia_glue_execute_sql(sofia_profile_t *profile, char **sqlp, switch_bool_t sql_already_dynamic); void sofia_glue_actually_execute_sql(sofia_profile_t *profile, switch_bool_t master, char *sql, switch_mutex_t *mutex); -void sofia_reg_check_expire(sofia_profile_t *profile, time_t now); +void sofia_reg_check_expire(sofia_profile_t *profile, time_t now, int reboot); void sofia_reg_check_gateway(sofia_profile_t *profile, time_t now); void sofia_reg_unregister(sofia_profile_t *profile); -switch_status_t sofia_glue_ext_address_lookup(char **ip, switch_port_t *port, char *sourceip, switch_memory_pool_t *pool); +switch_status_t sofia_glue_ext_address_lookup(sofia_profile_t *profile, private_object_t *tech_pvt, char **ip, switch_port_t *port, char *sourceip, switch_memory_pool_t *pool); void sofia_glue_pass_sdp(private_object_t *tech_pvt, char *sdp); int sofia_glue_get_user_host(char *in, char **user, char **host); @@ -580,11 +610,11 @@ void sofia_glue_release_profile__(const char *file, const char *func, int line, sofia_profile_t *profile); #define sofia_glue_release_profile(x) sofia_glue_release_profile__(__FILE__, __SWITCH_FUNC__, __LINE__, x) -sofia_profile_t *sofia_glue_find_profile__(const char *file, const char *func, int line, char *key); +sofia_profile_t *sofia_glue_find_profile__(const char *file, const char *func, int line, const char *key); #define sofia_glue_find_profile(x) sofia_glue_find_profile__(__FILE__, __SWITCH_FUNC__, __LINE__, x) switch_status_t sofia_reg_add_gateway(char *key, sofia_gateway_t *gateway); -sofia_gateway_t *sofia_reg_find_gateway__(const char *file, const char *func, int line, char *key); +sofia_gateway_t *sofia_reg_find_gateway__(const char *file, const char *func, int line, const char *key); #define sofia_reg_find_gateway(x) sofia_reg_find_gateway__(__FILE__, __SWITCH_FUNC__, __LINE__, x) void sofia_reg_release_gateway__(const char *file, const char *func, int line, sofia_gateway_t *gateway); @@ -635,7 +665,11 @@ void sofia_glue_tech_patch_sdp(private_object_t *tech_pvt); 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); +void sofia_reg_expire_call_id(sofia_profile_t *profile, const char *call_id, int reboot); switch_status_t sofia_glue_tech_choose_video_port(private_object_t *tech_pvt, int force); switch_status_t sofia_glue_tech_set_video_codec(private_object_t *tech_pvt, int force); - +const char *sofia_glue_strip_proto(const char *uri); +switch_status_t reconfig_sofia(sofia_profile_t *profile); +void sofia_glue_del_gateway(sofia_gateway_t *gp); +void sofia_reg_send_reboot(sofia_profile_t *profile, const char *user, const char *host, const char *contact, const char *user_agent); +void sofia_glue_restart_all_profiles(void); 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 Mon Aug 4 21:29:58 2008 @@ -142,13 +142,20 @@ if (sip->sip_user_agent && !switch_strlen_zero(sip->sip_user_agent->g_string)) { switch_channel_set_variable(channel, "sip_user_agent", sip->sip_user_agent->g_string); + } else if (sip->sip_server && !switch_strlen_zero(sip->sip_server->g_string)) { + switch_channel_set_variable(channel, "sip_user_agent", sip->sip_server->g_string); } + if ((tmp = sofia_glue_get_unknown_header(sip, "rtp-txstat"))) { switch_channel_set_variable(channel, "sip_rtp_txstat", tmp); } if ((tmp = sofia_glue_get_unknown_header(sip, "rtp-rxstat"))) { switch_channel_set_variable(channel, "sip_rtp_rxstat", tmp); } + if ((tmp = sofia_glue_get_unknown_header(sip, "P-RTP-Stat"))) { + switch_channel_set_variable(channel, "sip_p_rtp_stat", tmp); + } + return; } @@ -216,7 +223,8 @@ if (authorization) { char network_ip[80]; - get_addr(network_ip, sizeof(network_ip), &((struct sockaddr_in *) msg_addrinfo(nua_current_request(nua))->ai_addr)->sin_addr); + su_addrinfo_t *addrinfo = msg_addrinfo(nua_current_request(nua)); + get_addr(network_ip, sizeof(network_ip), addrinfo->ai_addr, addrinfo->ai_addrlen); auth_res = sofia_reg_parse_auth(profile, authorization, sip, (char *) sip->sip_request->rq_method_name, tech_pvt->key, strlen(tech_pvt->key), network_ip, NULL, 0, REG_INVITE, NULL); @@ -378,6 +386,8 @@ char *user_agent = switch_event_get_header(event, "user-agent"); long expires = (long) switch_timestamp(NULL); char *profile_name = switch_event_get_header(event, "orig-profile-name"); + char *to_user = switch_event_get_header(event, "orig-to-user"); + char *to_host = switch_event_get_header(event, "orig-to-host"); sofia_profile_t *profile = NULL; if (exp_str) { @@ -401,8 +411,8 @@ switch_mutex_lock(profile->ireg_mutex); sofia_glue_execute_sql(profile, &sql, SWITCH_TRUE); - sql = switch_mprintf("insert into sip_registrations values ('%q', '%q','%q','%q','Registered', '%q', %ld, '%q')", - call_id, from_user, from_host, contact_str, rpid, expires, user_agent); + sql = switch_mprintf("insert into sip_registrations values ('%q', '%q','%q','%q','Registered', '%q', %ld, '%q', '%q', '%q')", + call_id, from_user, from_host, contact_str, rpid, expires, user_agent, to_user, to_host); if (sql) { sofia_glue_execute_sql(profile, &sql, SWITCH_TRUE); @@ -447,7 +457,7 @@ if (++loops >= 100) { if (++ireg_loops >= IREG_SECONDS) { - sofia_reg_check_expire(profile, switch_timestamp(NULL)); + sofia_reg_check_expire(profile, switch_timestamp(NULL), 0); ireg_loops = 0; } @@ -518,20 +528,22 @@ tportlog = 1; } - if (use_100rel && use_timer) { - supported = "100rel, precondition, timer"; - } else if (use_100rel) { - supported = "100rel, precondition"; - } else if (use_timer) { - supported = "timer, precondition"; - } else { - supported = "precondition"; - } + supported = switch_core_sprintf(profile->pool, "%s%sprecondition, path, replaces", + use_100rel ? "100rel, " : "", + use_timer ? "timer, " : "" + ); profile->nua = nua_create(profile->s_root, /* Event loop */ sofia_event_callback, /* Callback for processing events */ profile, /* Additional data to pass to callback */ - NUTAG_URL(profile->bindurl), TAG_IF(sofia_test_pflag(profile, PFLAG_TLS), NUTAG_SIPS_URL(profile->tls_bindurl)), TAG_IF(sofia_test_pflag(profile, PFLAG_TLS), NUTAG_CERTIFICATE_DIR(profile->tls_cert_dir)), TAG_IF(sofia_test_pflag(profile, PFLAG_TLS), TPTAG_TLS_VERSION(profile->tls_version)), NTATAG_UDP_MTU(65536), NTATAG_SERVER_RPORT(2), TAG_IF(tportlog, TPTAG_LOG(1)), TAG_END()); /* Last tag should always finish the sequence */ + NUTAG_URL(profile->bindurl), + TAG_IF(sofia_test_pflag(profile, PFLAG_TLS), NUTAG_SIPS_URL(profile->tls_bindurl)), + TAG_IF(sofia_test_pflag(profile, PFLAG_TLS), NUTAG_CERTIFICATE_DIR(profile->tls_cert_dir)), + TAG_IF(sofia_test_pflag(profile, PFLAG_TLS), TPTAG_TLS_VERSION(profile->tls_version)), + NTATAG_UDP_MTU(65536), + NTATAG_SERVER_RPORT(profile->rport_level), + TAG_IF(tportlog, TPTAG_LOG(1)), + TAG_END()); /* Last tag should always finish the sequence */ if (!profile->nua) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error Creating SIP UA for profile: %s\n", profile->name); @@ -547,6 +559,7 @@ NUTAG_APPL_METHOD("INFO"), NUTAG_AUTOANSWER(0), NUTAG_AUTOALERT(0), + NUTAG_ENABLEMESSENGER(1), TAG_IF((profile->mflags & MFLAG_REGISTER), NUTAG_ALLOW("REGISTER")), TAG_IF((profile->mflags & MFLAG_REFER), NUTAG_ALLOW("REFER")), NUTAG_ALLOW("INFO"), @@ -572,7 +585,7 @@ node->nua = nua_create(profile->s_root, /* Event loop */ sofia_event_callback, /* Callback for processing events */ profile, /* Additional data to pass to callback */ - NTATAG_SERVER_RPORT(2), NUTAG_URL(node->url), TAG_END()); /* Last tag should always finish the sequence */ + NTATAG_SERVER_RPORT(profile->rport_level), NUTAG_URL(node->url), TAG_END()); /* Last tag should always finish the sequence */ nua_set_params(node->nua, NUTAG_APPL_METHOD("OPTIONS"), @@ -755,6 +768,7 @@ switch_mutex_unlock(mod_sofia_globals.hash_mutex); if ((gateway = switch_core_alloc(profile->pool, sizeof(*gateway)))) { + const char *sipip, *format; char *register_str = "true", *scheme = "Digest", *realm = NULL, *username = NULL, @@ -899,8 +913,11 @@ gateway->register_url = switch_core_sprintf(gateway->pool, "sip:%s;transport=%s", register_proxy, register_transport); gateway->register_from = switch_core_sprintf(gateway->pool, "", from_user, from_domain, register_transport); - gateway->register_contact = switch_core_sprintf(gateway->pool, "", extension, - profile->extsipip ? profile->extsipip : profile->sipip, + + sipip = profile->extsipip ? profile->extsipip : profile->sipip; + format = strchr(sipip, ':') ? "" : ""; + gateway->register_contact = switch_core_sprintf(gateway->pool, format, extension, + sipip, sofia_glue_transport_has_tls(gateway->register_transport) ? profile->tls_sip_port : profile-> sip_port, params); @@ -953,6 +970,318 @@ } +switch_status_t reconfig_sofia(sofia_profile_t *profile) +{ + switch_xml_t cfg, xml = NULL, xprofile, profiles, gateways_tag, domain_tag, domains_tag, aliases_tag, alias_tag, settings, param; + char *cf = "sofia.conf"; + switch_event_t *params = NULL; + switch_status_t status = SWITCH_STATUS_FALSE; + + switch_event_create(¶ms, SWITCH_EVENT_MESSAGE); + switch_assert(params); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "profile", profile->name); + switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "reconfig", "true"); + + if (!(xml = switch_xml_open_cfg(cf, &cfg, params))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", cf); + status = SWITCH_STATUS_FALSE; + goto done; + } + + if ((profiles = switch_xml_child(cfg, "profiles"))) { + for (xprofile = switch_xml_child(profiles, "profile"); xprofile; xprofile = xprofile->next) { + char *xprofilename = (char *) switch_xml_attr_soft(xprofile, "name"); + + if (strcasecmp(profile->name, xprofilename)) { + continue; + } + + /* you could change profile->foo here if it was a minor change like context or dialplan ... */ + profile->rport_level = 1; /* default setting */ + profile->acl_count = 0; + profile->pflags |= PFLAG_STUN_ENABLED; + + if ((settings = switch_xml_child(xprofile, "settings"))) { + for (param = switch_xml_child(settings, "param"); param; param = param->next) { + char *var = (char *) switch_xml_attr_soft(param, "name"); + char *val = (char *) switch_xml_attr_soft(param, "value"); + if (!strcasecmp(var, "debug")) { + profile->debug = atoi(val); + } else if (!strcasecmp(var, "user-agent-string")) { + profile->user_agent = switch_core_strdup(profile->pool, val); + } else if (!strcasecmp(var, "dtmf-type")) { + if (!strcasecmp(val, "rfc2833")) { + profile->dtmf_type = DTMF_2833; + } else if (!strcasecmp(val, "info")) { + profile->dtmf_type = DTMF_INFO; + } else { + profile->dtmf_type = DTMF_NONE; + } + } else if (!strcasecmp(var, "NDLB-force-rport")) { + if (switch_true(val)) { + profile->rport_level = 2; + } + } else if (!strcasecmp(var, "record-template")) { + profile->record_template = switch_core_strdup(profile->pool, val);; + } else if ((!strcasecmp(var, "inbound-no-media") || !strcasecmp(var, "inbound-bypass-media"))) { + if (switch_true(val)) { + switch_set_flag(profile, TFLAG_INB_NOMEDIA); + } else { + switch_clear_flag(profile, TFLAG_INB_NOMEDIA); + } + } else if (!strcasecmp(var, "inbound-late-negotiation")) { + if (switch_true(val)) { + switch_set_flag(profile, TFLAG_LATE_NEGOTIATION); + } else { + switch_clear_flag(profile, TFLAG_LATE_NEGOTIATION); + } + } else if (!strcasecmp(var, "inbound-proxy-media")) { + if (switch_true(val)) { + switch_set_flag(profile, TFLAG_PROXY_MEDIA); + } else { + switch_clear_flag(profile, TFLAG_PROXY_MEDIA); + } + } else if (!strcasecmp(var, "NDLB-received-in-nat-reg-contact")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_RECIEVED_IN_NAT_REG_CONTACT; + } else { + profile->pflags &= ~PFLAG_RECIEVED_IN_NAT_REG_CONTACT; + } + } else if (!strcasecmp(var, "aggressive-nat-detection")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_AGGRESSIVE_NAT_DETECTION; + } else { + profile->pflags &= ~PFLAG_AGGRESSIVE_NAT_DETECTION; + } + } else if (!strcasecmp(var, "disable-rtp-auto-adjust")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_DISABLE_RTP_AUTOADJ; + } else { + profile->pflags &= ~PFLAG_DISABLE_RTP_AUTOADJ; + } + } else if (!strcasecmp(var, "NDLB-support-asterisk-missing-srtp-auth")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_DISABLE_SRTP_AUTH; + } else { + profile->pflags &= ~PFLAG_DISABLE_SRTP_AUTH; + } + } else if (!strcasecmp(var, "NDLB-funny-stun")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_FUNNY_STUN; + } else { + profile->pflags &= ~PFLAG_FUNNY_STUN; + } + } else if (!strcasecmp(var, "stun-enabled")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_STUN_ENABLED; + } else { + profile->pflags &= ~PFLAG_STUN_ENABLED; + } + } else if (!strcasecmp(var, "stun-auto-disable")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_STUN_AUTO_DISABLE; + } else { + profile->pflags &= ~PFLAG_STUN_AUTO_DISABLE; + } + } 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); + } 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-register-acl")) { + if (profile->reg_acl_count < SOFIA_MAX_ACL) { + profile->reg_acl[profile->reg_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, "rfc2833-pt")) { + profile->te = (switch_payload_t) atoi(val); + } else if (!strcasecmp(var, "cng-pt")) { + profile->cng_pt = (switch_payload_t) atoi(val); + } else if (!strcasecmp(var, "vad")) { + if (!strcasecmp(val, "in")) { + switch_set_flag(profile, TFLAG_VAD_IN); + } else if (!strcasecmp(val, "out")) { + switch_set_flag(profile, TFLAG_VAD_OUT); + } else if (!strcasecmp(val, "both")) { + switch_set_flag(profile, TFLAG_VAD_IN); + switch_set_flag(profile, TFLAG_VAD_OUT); + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invald option %s for VAD\n", val); + } + } else if (!strcasecmp(var, "unregister-on-options-fail")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_UNREG_OPTIONS_FAIL; + } else { + profile->pflags &= ~PFLAG_UNREG_OPTIONS_FAIL; + } + } else if (!strcasecmp(var, "require-secure-rtp")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_SECURE; + } else { + profile->pflags &= ~PFLAG_SECURE; + } + } else if (!strcasecmp(var, "multiple-registrations")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_MULTIREG; + } else { + profile->pflags &= ~PFLAG_MULTIREG; + } + } else if (!strcasecmp(var, "supress-cng")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_SUPRESS_CNG; + } else { + profile->pflags &= ~PFLAG_SUPRESS_CNG; + } + } else if (!strcasecmp(var, "NDLB-to-in-200-contact")) { + if (switch_true(val)) { + profile->ndlb |= PFLAG_NDLB_TO_IN_200_CONTACT; + } else { + profile->ndlb &= ~PFLAG_NDLB_TO_IN_200_CONTACT; + } + } else if (!strcasecmp(var, "NDLB-broken-auth-hash")) { + if (switch_true(val)) { + profile->ndlb |= PFLAG_NDLB_BROKEN_AUTH_HASH; + } else { + profile->ndlb &= ~PFLAG_NDLB_BROKEN_AUTH_HASH; + } + } else if (!strcasecmp(var, "pass-rfc2833")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_PASS_RFC2833; + } else { + profile->pflags &= ~PFLAG_PASS_RFC2833; + } + } else if (!strcasecmp(var, "inbound-codec-negotiation")) { + if (!strcasecmp(val, "greedy")) { + profile->pflags |= PFLAG_GREEDY; + } else { + profile->pflags &= ~PFLAG_GREEDY; + } + } else if (!strcasecmp(var, "disable-transcoding")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_DISABLE_TRANSCODING; + } else { + profile->pflags &= ~PFLAG_DISABLE_TRANSCODING; + } + } else if (!strcasecmp(var, "rtp-rewrite-timestamps")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_REWRITE_TIMESTAMPS; + } else { + profile->pflags &= ~PFLAG_REWRITE_TIMESTAMPS; + } + } else if (!strcasecmp(var, "auth-calls")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_AUTH_CALLS; + } else { + profile->pflags &= ~PFLAG_AUTH_CALLS; + } + } else if (!strcasecmp(var, "force-register-domain")) { + profile->reg_domain = switch_core_strdup(profile->pool, val); + } else if (!strcasecmp(var, "hold-music")) { + profile->hold_music = switch_core_strdup(profile->pool, val); + } else if (!strcasecmp(var, "session-timeout")) { + int v_session_timeout = atoi(val); + if (v_session_timeout >= 0) { + profile->session_timeout = v_session_timeout; + } + } else if (!strcasecmp(var, "rtp-timeout-sec")) { + int v = atoi(val); + if (v >= 0) { + profile->rtp_timeout_sec = v; + } + } else if (!strcasecmp(var, "rtp-hold-timeout-sec")) { + int v = atoi(val); + if (v >= 0) { + profile->rtp_hold_timeout_sec = v; + } + } else if (!strcasecmp(var, "nonce-ttl")) { + profile->nonce_ttl = atoi(val); + } else if (!strcasecmp(var, "dialplan")) { + profile->dialplan = switch_core_strdup(profile->pool, val); + } else if (!strcasecmp(var, "max-calls")) { + profile->max_calls = atoi(val); + } else if (!strcasecmp(var, "codec-prefs")) { + profile->codec_string = switch_core_strdup(profile->pool, val); + } else if (!strcasecmp(var, "dtmf-duration")) { + int dur = atoi(val); + if (dur > 10 && dur < 8000) { + profile->dtmf_duration = dur; + } else { + profile->dtmf_duration = SWITCH_DEFAULT_DTMF_DURATION; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Duration out of bounds, using default of %d!\n", SWITCH_DEFAULT_DTMF_DURATION); + } + } + } + } + + + if ((gateways_tag = switch_xml_child(xprofile, "gateways"))) { + parse_gateways(profile, gateways_tag); + } + + status = SWITCH_STATUS_SUCCESS; + + if ((domains_tag = switch_xml_child(xprofile, "domains"))) { + for (domain_tag = switch_xml_child(domains_tag, "domain"); domain_tag; domain_tag = domain_tag->next) { + switch_xml_t droot, x_domain_tag; + const char *dname = switch_xml_attr_soft(domain_tag, "name"); + const char *parse = switch_xml_attr_soft(domain_tag, "parse"); + const char *alias = switch_xml_attr_soft(domain_tag, "alias"); + + if (!switch_strlen_zero(dname)) { + if (!strcasecmp(dname, "all")) { + switch_xml_t xml_root, x_domains; + if (switch_xml_locate("directory", NULL, NULL, NULL, &xml_root, &x_domains, NULL) == SWITCH_STATUS_SUCCESS) { + for (x_domain_tag = switch_xml_child(x_domains, "domain"); x_domain_tag; x_domain_tag = x_domain_tag->next) { + dname = switch_xml_attr_soft(x_domain_tag, "name"); + parse_domain_tag(profile, x_domain_tag, dname, parse, alias); + } + switch_xml_free(xml_root); + } + } else if (switch_xml_locate_domain(dname, NULL, &droot, &x_domain_tag) == SWITCH_STATUS_SUCCESS) { + parse_domain_tag(profile, x_domain_tag, dname, parse, alias); + switch_xml_free(droot); + } + } + } + } + + if ((aliases_tag = switch_xml_child(xprofile, "aliases"))) { + for (alias_tag = switch_xml_child(aliases_tag, "alias"); alias_tag; alias_tag = alias_tag->next) { + char *aname = (char *) switch_xml_attr_soft(alias_tag, "name"); + if (!switch_strlen_zero(aname)) { + + if (sofia_glue_add_profile(switch_core_strdup(profile->pool, aname), profile) == SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding Alias [%s] for profile [%s]\n", aname, profile->name); + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Alias [%s] for profile [%s] (already exists)\n", + aname, profile->name); + } + } + } + } + } + } + + done: + + if (xml) { + switch_xml_free(xml); + } + + switch_event_destroy(¶ms); + + return status; + +} + switch_status_t config_sofia(int reload, char *profile_name) { char *cf = "sofia.conf"; @@ -1052,7 +1381,9 @@ profile->dtmf_duration = 100; profile->tls_version = 0; profile->mflags = MFLAG_REFER | MFLAG_REGISTER; - + profile->rport_level = 1; + profile->pflags |= PFLAG_STUN_ENABLED; + for (param = switch_xml_child(settings, "param"); param; param = param->next) { char *var = (char *) switch_xml_attr_soft(param, "name"); char *val = (char *) switch_xml_attr_soft(param, "value"); @@ -1076,7 +1407,7 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "ODBC IS NOT AVAILABLE!\n"); #endif } else if (!strcasecmp(var, "user-agent-string")) { - profile->user_agent = switch_core_strdup(profile->pool, val);; + profile->user_agent = switch_core_strdup(profile->pool, val); } else if (!strcasecmp(var, "dtmf-type")) { if (!strcasecmp(val, "rfc2833")) { profile->dtmf_type = DTMF_2833; @@ -1085,11 +1416,13 @@ } else { profile->dtmf_type = DTMF_NONE; } + } else if (!strcasecmp(var, "NDLB-force-rport")) { + if (switch_true(val)) { + profile->rport_level = 2; + } } else if (!strcasecmp(var, "record-template")) { profile->record_template = switch_core_strdup(profile->pool, val);; - } else if (!strcasecmp(var, "inbound-no-media") && switch_true(val)) { - switch_set_flag(profile, TFLAG_INB_NOMEDIA); - } else if (!strcasecmp(var, "inbound-bypass-media") && switch_true(val)) { + } else if ((!strcasecmp(var, "inbound-no-media") || !strcasecmp(var, "inbound-bypass-media")) && switch_true(val)) { switch_set_flag(profile, TFLAG_INB_NOMEDIA); } else if (!strcasecmp(var, "inbound-late-negotiation") && switch_true(val)) { switch_set_flag(profile, TFLAG_LATE_NEGOTIATION); @@ -1099,6 +1432,28 @@ profile->pflags |= PFLAG_RECIEVED_IN_NAT_REG_CONTACT; } else if (!strcasecmp(var, "aggressive-nat-detection") && switch_true(val)) { profile->pflags |= PFLAG_AGGRESSIVE_NAT_DETECTION; + } else if (!strcasecmp(var, "disable-rtp-auto-adjust") && switch_true(val)) { + profile->pflags |= PFLAG_DISABLE_RTP_AUTOADJ; + } else if (!strcasecmp(var, "NDLB-support-asterisk-missing-srtp-auth") && switch_true(val)) { + profile->pflags |= PFLAG_DISABLE_SRTP_AUTH; + } else if (!strcasecmp(var, "NDLB-funny-stun")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_FUNNY_STUN; + } else { + profile->pflags &= ~PFLAG_FUNNY_STUN; + } + } else if (!strcasecmp(var, "stun-enabled")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_STUN_ENABLED; + } else { + profile->pflags &= ~PFLAG_STUN_ENABLED; + } + } else if (!strcasecmp(var, "stun-auto-disable")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_STUN_AUTO_DISABLE; + } else { + profile->pflags &= ~PFLAG_STUN_AUTO_DISABLE; + } } else if (!strcasecmp(var, "rfc2833-pt")) { profile->te = (switch_payload_t) atoi(val); } else if (!strcasecmp(var, "cng-pt")) { @@ -1154,7 +1509,7 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Invald IP 0.0.0.0 replaced with %s\n", mod_sofia_globals.guess_ip); } else if (strcasecmp(val, "auto")) { switch_port_t port = 0; - if (sofia_glue_ext_address_lookup(&myip, &port, val, profile->pool) == SWITCH_STATUS_SUCCESS) { + if (sofia_glue_ext_address_lookup(profile, NULL, &myip, &port, val, profile->pool) == SWITCH_STATUS_SUCCESS) { ip = myip; } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to get external ip.\n"); @@ -1249,6 +1604,10 @@ if (switch_true(val)) { profile->pflags |= PFLAG_BLIND_REG; } + } else if (!strcasecmp(var, "enable-3pcc")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_3PCC; + } } else if (!strcasecmp(var, "accept-blind-auth")) { if (switch_true(val)) { profile->pflags |= PFLAG_BLIND_AUTH; @@ -1318,7 +1677,8 @@ if (dur > 10 && dur < 8000) { profile->dtmf_duration = dur; } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Duration out of bounds!\n"); + profile->dtmf_duration = SWITCH_DEFAULT_DTMF_DURATION; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Duration out of bounds, using default of %d!\n", SWITCH_DEFAULT_DTMF_DURATION); } /* @@ -1344,7 +1704,7 @@ } } - if (!profile->cng_pt) { + if ((!profile->cng_pt) && (!sofia_test_pflag(profile, PFLAG_SUPRESS_CNG))) { profile->cng_pt = SWITCH_RTP_CNG_PAYLOAD; } @@ -1382,14 +1742,30 @@ profile->dialplan = switch_core_strdup(profile->pool, "XML"); } + if (!profile->context) { + profile->context = switch_core_strdup(profile->pool, "default"); + } + if (!profile->sipdomain) { profile->sipdomain = switch_core_strdup(profile->pool, profile->sipip); } if (profile->extsipip) { - profile->url = switch_core_sprintf(profile->pool, "sip:mod_sofia@%s:%d", profile->extsipip, profile->sip_port); + char *ipv6 = strchr(profile->extsipip, ':'); + profile->url = switch_core_sprintf(profile->pool, + "sip:mod_sofia@%s%s%s:%d", + ipv6 ? "[" : "", + profile->extsipip, + ipv6 ? "]" : "", + profile->sip_port); profile->bindurl = switch_core_sprintf(profile->pool, "%s;maddr=%s", profile->url, profile->sipip); } else { - profile->url = switch_core_sprintf(profile->pool, "sip:mod_sofia@%s:%d", profile->sipip, profile->sip_port); + char *ipv6 = strchr(profile->sipip, ':'); + profile->url = switch_core_sprintf(profile->pool, + "sip:mod_sofia@%s%s%s:%d", + ipv6 ? "[" : "", + profile->sipip, + ipv6 ? "]" : "", + profile->sip_port); profile->bindurl = profile->url; } @@ -1407,12 +1783,37 @@ } if (profile->extsipip) { - profile->tls_url = switch_core_sprintf(profile->pool, "sip:mod_sofia@%s:%d", profile->extsipip, profile->tls_sip_port); + char *ipv6 = strchr(profile->extsipip, ':'); + profile->tls_url = + switch_core_sprintf(profile->pool, + "sip:mod_sofia@%s%s%s:%d", + ipv6 ? "[" : "", + profile->extsipip, ipv6 ? "]" : "", + profile->tls_sip_port); profile->tls_bindurl = - switch_core_sprintf(profile->pool, "sips:mod_sofia@%s:%d;maddr=%s", profile->extsipip, profile->tls_sip_port, profile->sipip); + switch_core_sprintf(profile->pool, + "sips:mod_sofia@%s%s%s:%d;maddr=%s", + ipv6 ? "[" : "", + profile->extsipip, + ipv6 ? "]" : "", + profile->tls_sip_port, + profile->sipip); } else { - profile->tls_url = switch_core_sprintf(profile->pool, "sip:mod_sofia@%s:%d", profile->sipip, profile->tls_sip_port); - profile->tls_bindurl = switch_core_sprintf(profile->pool, "sips:mod_sofia@%s:%d", profile->sipip, profile->tls_sip_port); + char *ipv6 = strchr(profile->sipip, ':'); + profile->tls_url = + switch_core_sprintf(profile->pool, + "sip:mod_sofia@%s%s%s:%d", + ipv6 ? "[" : "", + profile->sipip, + ipv6 ? "]" : "", + profile->tls_sip_port); + profile->tls_bindurl = + switch_core_sprintf(profile->pool, + "sips:mod_sofia@%s%s%s:%d", + ipv6 ? "[" : "", + profile->sipip, + ipv6 ? "]" : "", + profile->tls_sip_port); } if (profile->tls_bind_params) { @@ -1518,9 +1919,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->retry = 0; } gateway->status = SOFIA_GATEWAY_UP; } else { @@ -1528,7 +1929,7 @@ gateway->status = SOFIA_GATEWAY_DOWN; if (gateway->state == REG_STATE_REGED) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "unregister %s\n", gateway->name); - gateway->state = REG_STATE_UNREGISTER; + gateway->state = REG_STATE_FAILED; } } gateway->ping = switch_timestamp(NULL) + gateway->ping_freq; @@ -1560,6 +1961,14 @@ switch_channel_clear_flag(channel, CF_REQ_MEDIA); + if ((status == 180 || status == 183 || status == 200)) { + if (sip->sip_user_agent && sip->sip_user_agent->g_string) { + switch_channel_set_variable(channel, "sip_user_agent", sip->sip_user_agent->g_string); + } else if (sip->sip_server && sip->sip_server->g_string) { + switch_channel_set_variable(channel, "sip_user_agent", sip->sip_server->g_string); + } + } + if (switch_channel_test_flag(channel, CF_PROXY_MODE) || switch_channel_test_flag(channel, CF_PROXY_MEDIA)) { if (!switch_test_flag(tech_pvt, TFLAG_SENT_UPDATE)) { @@ -1596,6 +2005,7 @@ return; } + if ((status == 180 || status == 183 || status == 200)) { const char *astate = "early"; url_t *from = NULL, *to = NULL, *contact = NULL; @@ -1660,6 +2070,28 @@ sofia_glue_execute_sql(profile, &sql, SWITCH_TRUE); } } + + if (channel && sip && (status >= 300 || status < 399) && switch_channel_test_flag(channel, CF_OUTBOUND)) { + sip_contact_t * p_contact = sip->sip_contact; + int i = 0; + char var_name[80]; + + while (p_contact) { + if (p_contact->m_url) { + if (p_contact->m_url->url_user) { + switch_snprintf(var_name, sizeof(var_name), "sip_redirect_contact_user_%d", i); + switch_channel_set_variable_partner(channel, var_name, p_contact->m_url->url_user); + } + if (p_contact->m_url->url_host) { + switch_snprintf(var_name, sizeof(var_name), "sip_redirect_contact_host_%d", i); + switch_channel_set_variable_partner(channel, var_name, p_contact->m_url->url_host); + } + p_contact = p_contact->m_next; + i++; + } + } + } + } } @@ -1686,6 +2118,12 @@ NUTAG_OFFER_SENT_REF(offer_sent), NUTAG_ANSWER_SENT_REF(answer_sent), SIPTAG_REPLACES_STR_REF(replaces_str), SOATAG_LOCAL_SDP_STR_REF(l_sdp), SOATAG_REMOTE_SDP_STR_REF(r_sdp), TAG_END()); + + if (ss_state == nua_callstate_terminated) { + if (sofia_private) { + sofia_private->destroy_me = 1; + } + } if (session) { channel = switch_core_session_get_channel(session); @@ -1695,7 +2133,7 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Channel %s entering state [%s]\n", switch_channel_get_name(channel), nua_callstate_name(ss_state)); - + if (r_sdp) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Remote SDP:\n%s\n", r_sdp); tech_pvt->remote_sdp_str = switch_core_session_strdup(session, r_sdp); @@ -1882,15 +2320,20 @@ if (switch_channel_test_flag(channel, CF_PROXY_MODE) || switch_channel_test_flag(channel, CF_PROXY_MEDIA)) { goto done; } else { - switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "RECEIVED_NOSDP"); - sofia_glue_tech_choose_port(tech_pvt, 0); - sofia_glue_set_local_sdp(tech_pvt, NULL, 0, NULL, 0); - switch_channel_set_state(channel, CS_HIBERNATE); - nua_respond(tech_pvt->nh, SIP_200_OK, - SIPTAG_CONTACT_STR(tech_pvt->profile->url), - SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str), - SOATAG_REUSE_REJECTED(1), - SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), NUTAG_INCLUDE_EXTRA_SDP(1), TAG_END()); + if (profile->pflags & PFLAG_3PCC) { + switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "RECEIVED_NOSDP"); + sofia_glue_tech_choose_port(tech_pvt, 0); + sofia_glue_set_local_sdp(tech_pvt, NULL, 0, NULL, 0); + switch_channel_set_state(channel, CS_HIBERNATE); + nua_respond(tech_pvt->nh, SIP_200_OK, + SIPTAG_CONTACT_STR(tech_pvt->profile->url), + SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str), + SOATAG_REUSE_REJECTED(1), + SOATAG_ORDERED_USER(1), SOATAG_AUDIO_AUX("cn telephone-event"), NUTAG_INCLUDE_EXTRA_SDP(1), TAG_END()); + } else { + switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "3PCC DISABLED"); + switch_channel_hangup(channel, SWITCH_CAUSE_MANDATORY_IE_MISSING); + } goto done; } } @@ -1919,6 +2362,18 @@ msg.from = __FILE__; msg.string_arg = (char *) r_sdp; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Passing SDP to other leg.\n%s\n", r_sdp); + + if (switch_test_flag(tech_pvt, TFLAG_SIP_HOLD)) { + if (!switch_stristr("sendonly", r_sdp)) { + switch_clear_flag_locked(tech_pvt, TFLAG_SIP_HOLD); + switch_channel_presence(tech_pvt->channel, "unknown", "unhold"); + } + } else if (switch_stristr("sendonly", r_sdp)) { + switch_set_flag_locked(tech_pvt, TFLAG_SIP_HOLD); + switch_channel_presence(tech_pvt->channel, "unknown", "hold"); + } + + if (switch_core_session_receive_message(other_session, &msg) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Other leg is not available\n"); nua_respond(tech_pvt->nh, 403, "Hangup in progress", TAG_END()); @@ -2061,7 +2516,9 @@ break; case nua_callstate_terminating: if (session) { - if (!switch_test_flag(tech_pvt, TFLAG_BYE)) { + if (status == 488 || switch_channel_get_state(channel) == CS_HIBERNATE) { + tech_pvt->q850_cause = SWITCH_CAUSE_MANDATORY_IE_MISSING; + } else if (!switch_test_flag(tech_pvt, TFLAG_BYE)) { switch_set_flag_locked(tech_pvt, TFLAG_BYE); } } @@ -2084,6 +2541,9 @@ switch_channel_set_variable(channel, "sip_term_status", st); switch_snprintf(st, sizeof(st), "sip:%d", status); switch_channel_set_variable_partner(channel, SWITCH_PROTO_SPECIFIC_HANGUP_CAUSE_VARIABLE, st); + if (phrase) { + switch_channel_set_variable_partner(channel, "sip_hangup_phrase", phrase); + } } switch_snprintf(st, sizeof(st), "%d", cause); switch_channel_set_variable(channel, "sip_term_cause", st); @@ -2092,16 +2552,10 @@ } if (tech_pvt->sofia_private) { - sofia_private = tech_pvt->sofia_private; tech_pvt->sofia_private = NULL; - sofia_private->destroy_me = 1; } tech_pvt->nh = NULL; - - - } else if (sofia_private) { - sofia_private->destroy_me = 1; } if (nh) { @@ -2599,6 +3053,7 @@ su_addrinfo_t *my_addrinfo = msg_addrinfo(nua_current_request(nua)); int network_port = 0; char *is_nat = NULL; + char *acl_token = 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()); @@ -2611,7 +3066,7 @@ return; } - get_addr(network_ip, sizeof(network_ip), &((struct sockaddr_in *) my_addrinfo->ai_addr)->sin_addr); + get_addr(network_ip, sizeof(network_ip), my_addrinfo->ai_addr, my_addrinfo->ai_addrlen); network_port = ntohs(((struct sockaddr_in *) msg_addrinfo(nua_current_request(nua))->ai_addr)->sin_port); if ((profile->pflags & PFLAG_AGGRESSIVE_NAT_DETECTION)) { @@ -2652,23 +3107,27 @@ } } } - + if (profile->acl_count) { uint32_t x = 0; int ok = 1; char *last_acl = NULL; + const char *token = NULL; for (x = 0; x < profile->acl_count; x++) { last_acl = profile->acl[x]; - if (!(ok = switch_check_network_list_ip(network_ip, last_acl))) { + if (!(ok = switch_check_network_list_ip_token(network_ip, last_acl, &token))) { break; } } if (ok) { + if (token) { + acl_token = strdup(token); + } 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)); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "IP %s Approved by acl %s[%s]. Access Granted.\n", + network_ip, switch_str_nil(last_acl), switch_str_nil(acl_token)); is_auth = 1; } } else { @@ -2724,10 +3183,35 @@ channel = tech_pvt->channel = switch_core_session_get_channel(session); + if (acl_token) { + switch_channel_set_variable(channel, "acl_token", acl_token); + if (strchr(acl_token, '@')) { + if (switch_ivr_set_user(session, acl_token) == SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Authenticating user %s\n", acl_token); + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Error Authenticating user %s\n", acl_token); + } + } + free(acl_token); + acl_token = NULL; + } + 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); + + sofia_transport_t transport = sofia_glue_url2transport(sip->sip_contact->m_url); + + const char *ipv6 = strchr(tech_pvt->remote_ip, ':'); + tech_pvt->record_route = + switch_core_session_sprintf(session, + "sip:%s@%s%s%s:%d;transport=%s", + sip->sip_contact->m_url->url_user, + ipv6 ? "[" : "", + tech_pvt->remote_ip, + ipv6 ? "]" : "", + tech_pvt->remote_port, + sofia_glue_transport2str(transport)); + 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); @@ -2842,6 +3326,7 @@ url_set_chanvars(session, sip->sip_to->a_url, sip_to); if (switch_channel_get_variable(channel, "sip_to_uri")) { + const char *ipv6; host = switch_channel_get_variable(channel, "sip_to_host"); user = switch_channel_get_variable(channel, "sip_to_user"); @@ -2858,7 +3343,14 @@ port = sofia_glue_transport_has_tls(transport) ? profile->tls_sip_port : profile->sip_port; } - tech_pvt->to_uri = switch_core_session_sprintf(session, "sip:%s@%s:%d;transport=%s", user, host, port, sofia_glue_transport2str(transport)); + ipv6 = strchr(host, ':'); + tech_pvt->to_uri = + switch_core_session_sprintf(session, + "sip:%s@%s%s%s:%d;transport=%s", + user, ipv6 ? "[" : "", + host, ipv6 ? "]" : "", + port, + sofia_glue_transport2str(transport)); if (profile->ndlb & PFLAG_NDLB_TO_IN_200_CONTACT) { if (strchr(tech_pvt->to_uri, '>')) { @@ -3064,13 +3556,14 @@ } } } - + switch_channel_set_caller_profile(channel, tech_pvt->caller_profile); } if (!(sofia_private = malloc(sizeof(*sofia_private)))) { abort(); } + memset(sofia_private, 0, sizeof(*sofia_private)); tech_pvt->sofia_private = sofia_private; @@ -3148,7 +3641,7 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "LUKE'S VOICE: Artoo, see what you can do with it. Hang on back there....\n" "Green laserfire moves past the beeping little robot as his head turns. " "After a few beeps and a twist of his mechanical arm,\n" - "Artoo reduces the max sessions to %d thus, saving the switch from certian doom.\n", sess_count - 10); + "Artoo reduces the max sessions to %d thus, saving the switch from certain doom.\n", sess_count - 10); switch_mutex_unlock(profile->flag_mutex); } @@ -3158,7 +3651,7 @@ } nua_handle_bind(nh, NULL); - free(tech_pvt->sofia_private); + free(sofia_private); switch_core_session_destroy(&session); nua_respond(nh, 503, "Maximum Calls In Progress", SIPTAG_RETRY_AFTER_STR("300"), TAG_END()); } @@ -3176,6 +3669,14 @@ char message[256] = ""; if (aleg && bleg && switch_core_session_compare(aleg, bleg)) { + switch_channel_t *channel = switch_core_session_get_channel(bleg); + const char *ua = switch_channel_get_variable(channel, "sip_user_agent"); + + if (ua && switch_stristr("cisco", ua)) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "If you were using some other phone besides a Cisco, we would have updated the caller id display on your phone for you!\n"); + return; + } + a_tech_pvt = (private_object_t *) switch_core_session_get_private(aleg); b_tech_pvt = (private_object_t *) switch_core_session_get_private(bleg); @@ -3191,7 +3692,6 @@ } } } - /* * This subroutine will take the a_params of a sip_addr_s structure and spin through them. * Each param will be used to create a channel variable. @@ -3278,5 +3778,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -44,6 +44,7 @@ uint32_t v_port; int use_cng = 1; const char *val; + const char *family; const char *pass_fmtp = switch_channel_get_variable(tech_pvt->channel, "sip_video_fmtp"); const char *ov_fmtp = switch_channel_get_variable(tech_pvt->channel, "sip_force_video_fmtp"); @@ -82,13 +83,14 @@ tech_pvt->session_id++; + family = strchr(ip, ':') ? "IP6" : "IP4"; switch_snprintf(buf, sizeof(buf), "v=0\n" - "o=FreeSWITCH %010u %010u IN IP4 %s\n" + "o=FreeSWITCH %010u %010u IN %s %s\n" "s=FreeSWITCH\n" - "c=IN IP4 %s\n" "t=0 0\n" + "c=IN %s %s\n" "t=0 0\n" "a=%s\n" - "m=audio %d RTP/%sAVP", tech_pvt->owner_id, tech_pvt->session_id, ip, ip, sr, port, + "m=audio %d RTP/%sAVP", tech_pvt->owner_id, tech_pvt->session_id, family, ip, family, ip, sr, port, (!switch_strlen_zero(tech_pvt->local_crypto_key) && switch_test_flag(tech_pvt, TFLAG_SECURE)) ? "S" : ""); @@ -132,9 +134,9 @@ if (tech_pvt->rm_encoding) { rate = tech_pvt->rm_rate; - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=rtpmap:%d %s/%d\n", tech_pvt->pt, tech_pvt->rm_encoding, rate); + switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=rtpmap:%d %s/%d\n", tech_pvt->agreed_pt, tech_pvt->rm_encoding, rate); if (tech_pvt->fmtp_out) { - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=fmtp:%d %s\n", tech_pvt->pt, tech_pvt->fmtp_out); + switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "a=fmtp:%d %s\n", tech_pvt->agreed_pt, tech_pvt->fmtp_out); } if (tech_pvt->read_codec.implementation && !ptime) { ptime = tech_pvt->read_codec.implementation->microseconds_per_frame / 1000; @@ -225,11 +227,11 @@ if ((v_port = tech_pvt->adv_sdp_video_port)) { switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), "m=video %d RTP/AVP", v_port); - + /*****************************/ if (tech_pvt->video_rm_encoding) { sofia_glue_tech_set_video_codec(tech_pvt, 0); - switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), " %d", tech_pvt->video_pt); + switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), " %d", tech_pvt->video_agreed_pt); } else if (tech_pvt->num_codecs) { int i; int already_did[128] = { 0 }; @@ -423,42 +425,93 @@ switch_channel_set_name(tech_pvt->channel, name); } -switch_status_t sofia_glue_ext_address_lookup(char **ip, switch_port_t *port, char *sourceip, switch_memory_pool_t *pool) +switch_status_t sofia_glue_ext_address_lookup(sofia_profile_t *profile, private_object_t *tech_pvt, char **ip, switch_port_t *port, char *sourceip, switch_memory_pool_t *pool) { char *error = ""; switch_status_t status = SWITCH_STATUS_FALSE; int x; + switch_port_t myport = *port; + const char *var; + int funny = 0; + switch_port_t stun_port = SWITCH_STUN_DEFAULT_PORT; + char *stun_ip = NULL; if (!sourceip) { return status; } if (!strncasecmp(sourceip, "stun:", 5)) { - char *stun_ip = sourceip + 5; - if (!stun_ip) { + char *p; + + if (!(profile->pflags & PFLAG_STUN_ENABLED)) { + *ip = switch_core_strdup(pool, tech_pvt->profile->rtpip); + return SWITCH_STATUS_SUCCESS; + } + + stun_ip = strdup(sourceip + 5); + + if ((p = strchr(stun_ip, ':'))) { + int iport; + *p++ = '\0'; + iport = atoi(p); + if (iport > 0 && iport < 0xFFFF) { + stun_port = (switch_port_t) iport; + } + } + + if (switch_strlen_zero(stun_ip)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Stun Failed! NO STUN SERVER\n"); - return status; + goto out; } + for (x = 0; x < 5; x++) { - if ((status = switch_stun_lookup(ip, port, stun_ip, SWITCH_STUN_DEFAULT_PORT, &error, pool)) != SWITCH_STATUS_SUCCESS) { + if ((profile->pflags & PFLAG_FUNNY_STUN) || + (tech_pvt && (var = switch_channel_get_variable(tech_pvt->channel, "funny_stun")) && switch_true(var))) { + error = "funny"; + funny++; + } + if ((status = switch_stun_lookup(ip, port, stun_ip, stun_port, &error, pool)) != SWITCH_STATUS_SUCCESS) { switch_yield(100000); } else { break; } } if (status != SWITCH_STATUS_SUCCESS) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Stun Failed! %s:%d [%s]\n", stun_ip, SWITCH_STUN_DEFAULT_PORT, error); - return status; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Stun Failed! %s:%d [%s]\n", stun_ip, stun_port, error); + goto out; } if (!*ip) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Stun Failed! No IP returned\n"); - return SWITCH_STATUS_FALSE; + goto out; } switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Stun Success [%s]:[%d]\n", *ip, *port); + status = SWITCH_STATUS_SUCCESS; + if (tech_pvt) { + if (myport == *port && !strcmp(*ip, tech_pvt->profile->rtpip)) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Stun Not Required ip and port match. [%s]:[%d]\n", *ip, *port); + if (profile->pflags & PFLAG_STUN_AUTO_DISABLE) { + profile->pflags &= ~PFLAG_STUN_ENABLED; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Stun completely disabled.\n"); + } + } else { + tech_pvt->stun_ip = switch_core_session_strdup(tech_pvt->session, stun_ip); + tech_pvt->stun_port = stun_port; + tech_pvt->stun_flags |= STUN_FLAG_SET; + if (funny) { + tech_pvt->stun_flags |= STUN_FLAG_FUNNY; + } + } + } } else { *ip = sourceip; + status = SWITCH_STATUS_SUCCESS; } - return SWITCH_STATUS_SUCCESS; + + out: + + switch_safe_free(stun_ip); + + return status; } @@ -480,6 +533,7 @@ char *ip = tech_pvt->profile->rtpip; switch_port_t sdp_port; char tmp[50]; + const char *use_ip = NULL; if (!force) { if (switch_channel_test_flag(tech_pvt->channel, CF_PROXY_MODE) || @@ -500,12 +554,20 @@ } sdp_port = tech_pvt->local_sdp_audio_port; - if (tech_pvt->profile->extrtpip) { - if (sofia_glue_ext_address_lookup(&ip, &sdp_port, tech_pvt->profile->extrtpip, switch_core_session_get_pool(tech_pvt->session)) != - SWITCH_STATUS_SUCCESS) { + if (!(use_ip = switch_channel_get_variable(tech_pvt->channel, "rtp_adv_audio_ip"))) { + if (tech_pvt->profile->extrtpip) { + use_ip = tech_pvt->profile->extrtpip; + } + } + + if (use_ip) { + tech_pvt->extrtpip = switch_core_session_strdup(tech_pvt->session, use_ip); + if (sofia_glue_ext_address_lookup(tech_pvt->profile, tech_pvt, &ip, &sdp_port, + tech_pvt->extrtpip, switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) { return SWITCH_STATUS_FALSE; } } + tech_pvt->adv_sdp_audio_ip = switch_core_session_strdup(tech_pvt->session, ip); tech_pvt->adv_sdp_audio_port = sdp_port; @@ -542,7 +604,7 @@ if (tech_pvt->profile->extrtpip) { - if (sofia_glue_ext_address_lookup(&ip, &sdp_port, tech_pvt->profile->extrtpip, switch_core_session_get_pool(tech_pvt->session)) != + if (sofia_glue_ext_address_lookup(tech_pvt->profile, tech_pvt, &ip, &sdp_port, tech_pvt->profile->extrtpip, switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) { return SWITCH_STATUS_FALSE; } @@ -669,8 +731,15 @@ { char *stripped = switch_core_session_strdup(session, uri); char *new_uri = NULL; + char *p; stripped = sofia_glue_get_url_from_contact(stripped, 0); + + /* remove our params so we don't make any whiny moronic device piss it's pants and forget who it is for a half-hour */ + if ((p = (char *)switch_stristr(";fs_", stripped))) { + *p = '\0'; + } + if (transport && transport != SOFIA_TRANSPORT_UDP) { if (switch_stristr("port=", stripped)) { @@ -697,9 +766,13 @@ } } else { if (params) { - new_uri = switch_core_session_sprintf(session, "%s;%s", stripped, params); + new_uri = switch_core_session_sprintf(session, "%s%s;%s%s", uri_only ? "" : "<", stripped, params, uri_only ? "" : ">"); } else { - new_uri = stripped; + if (uri_only) { + new_uri = stripped; + } else { + new_uri = switch_core_session_sprintf(session, "<%s>", stripped); + } } } @@ -714,12 +787,14 @@ char rvp[128] = ""; char *p, *ip_ptr = NULL, *port_ptr = NULL, *vid_port_ptr = NULL; int x; + const char *val; if (switch_strlen_zero(tech_pvt->remote_sdp_str)) { return SWITCH_STATUS_FALSE; } - if ((p = (char *) switch_stristr("c=IN IP4 ", tech_pvt->remote_sdp_str))) { + if ((p = (char *) switch_stristr("c=IN IP4 ", tech_pvt->remote_sdp_str)) || + (p = (char *) switch_stristr("c=IN IP6 ", tech_pvt->remote_sdp_str))) { ip_ptr = p + 9; } @@ -737,7 +812,7 @@ p = ip_ptr; x = 0; - while (x < sizeof(rip) && p && *p && ((*p >= '0' && *p <= '9') || *p == '.')) { + while (x < sizeof(rip) && p && *p && ((*p >= '0' && *p <= '9') || *p == '.' || *p == ':' || (*p >= 'a' && *p <= 'f') || (*p >= 'A' && *p <= 'F'))) { rip[x++] = *p; p++; } @@ -781,8 +856,11 @@ } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "VIDEO RTP CHANGING DEST TO: [%s:%d]\n", tech_pvt->remote_sdp_video_ip, tech_pvt->remote_sdp_video_port); - /* Reactivate the NAT buster flag. */ - switch_rtp_set_flag(tech_pvt->video_rtp_session, SWITCH_RTP_FLAG_AUTOADJ); + if (!sofia_test_pflag(tech_pvt->profile, PFLAG_DISABLE_RTP_AUTOADJ) && + !((val = switch_channel_get_variable(tech_pvt->channel, "disable_rtp_auto_adjust")) && switch_true(val))) { + /* Reactivate the NAT buster flag. */ + switch_rtp_set_flag(tech_pvt->video_rtp_session, SWITCH_RTP_FLAG_AUTOADJ); + } } } } @@ -801,8 +879,11 @@ } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "AUDIO RTP CHANGING DEST TO: [%s:%d]\n", tech_pvt->remote_sdp_audio_ip, tech_pvt->remote_sdp_audio_port); - /* Reactivate the NAT buster flag. */ - switch_rtp_set_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_AUTOADJ); + if (!sofia_test_pflag(tech_pvt->profile, PFLAG_DISABLE_RTP_AUTOADJ) && + !((val = switch_channel_get_variable(tech_pvt->channel, "disable_rtp_auto_adjust")) && switch_true(val))) { + /* Reactivate the NAT buster flag. */ + switch_rtp_set_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_AUTOADJ); + } } } @@ -813,8 +894,10 @@ void sofia_glue_tech_patch_sdp(private_object_t *tech_pvt) { switch_size_t len; - char *p, *q, *ip_ptr = NULL, *port_ptr = NULL, *vport_ptr = NULL; - int x; + char *p, *q; + int has_video=0,has_audio=0,has_ip=0; + char port_buf[25] = ""; + char vport_buf[25] = ""; if (switch_strlen_zero(tech_pvt->local_sdp_str)) { return; @@ -822,38 +905,13 @@ len = strlen(tech_pvt->local_sdp_str) + 384; - if ((p = (char *) switch_stristr("c=IN IP4 ", tech_pvt->local_sdp_str))) { - ip_ptr = p + 9; - } - - if ((ip_ptr && !strncmp(ip_ptr, "0.0.0.0", 7)) || switch_stristr("sendonly", tech_pvt->local_sdp_str)) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Skip patch on hold SDP\n"); - return; - } - - if ((p = (char *) switch_stristr("m=audio ", tech_pvt->local_sdp_str))) { - port_ptr = p + 8; - } - - if ((p = (char *) switch_stristr("m=video ", tech_pvt->local_sdp_str))) { - vport_ptr = p + 8; - } - - if (!(ip_ptr && port_ptr)) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s SDP has no audio in it.\n%s\n", - switch_channel_get_name(tech_pvt->channel), tech_pvt->local_sdp_str); - return; - } - - if (vport_ptr) { - sofia_glue_tech_choose_video_port(tech_pvt, 1); - tech_pvt->video_rm_encoding = "PROXY-VID"; - tech_pvt->video_rm_rate = 90000; - tech_pvt->video_codec_ms = 0; + if (switch_stristr("sendonly", tech_pvt->local_sdp_str) || switch_stristr("0.0.0.0", tech_pvt->local_sdp_str)) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Skip patch on hold SDP\n"); + return; } - + if (switch_strlen_zero(tech_pvt->adv_sdp_audio_ip) || !tech_pvt->adv_sdp_audio_port) { - if (sofia_glue_tech_choose_port(tech_pvt, 1) != SWITCH_STATUS_SUCCESS) { + if (sofia_glue_tech_choose_port(tech_pvt, 1) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%s I/O Error\n", switch_channel_get_name(tech_pvt->channel)); return; } @@ -861,47 +919,77 @@ tech_pvt->rm_rate = 8000; tech_pvt->codec_ms = 20; } - + + switch_snprintf(port_buf, sizeof(port_buf), "%u", tech_pvt->adv_sdp_audio_port); tech_pvt->orig_local_sdp_str = tech_pvt->local_sdp_str; tech_pvt->local_sdp_str = switch_core_session_alloc(tech_pvt->session, len); - q = tech_pvt->local_sdp_str; p = tech_pvt->orig_local_sdp_str; + q = tech_pvt->local_sdp_str; - while (p && *p) { - if (p == ip_ptr) { + while(p && *p) { + if (tech_pvt->adv_sdp_audio_ip && !strncmp("c=IN IP", p, 7)) { + strncpy(q, p, 9); + p += 9; + q += 9; strncpy(q, tech_pvt->adv_sdp_audio_ip, strlen(tech_pvt->adv_sdp_audio_ip)); q += strlen(tech_pvt->adv_sdp_audio_ip); - x = 0; - while (p && *p && ((*p >= '0' && *p <= '9') || *p == '.')) { + + while(p && *p && ((*p >= '0' && *p <= '9') || *p == '.' || *p == ':' || (*p >= 'A' && *p <= 'F') || (*p >= 'a' && *p <= 'f'))) { p++; } - } else if (p == port_ptr) { - char port_buf[25] = ""; + has_ip++; - switch_snprintf(port_buf, sizeof(port_buf), "%u", tech_pvt->adv_sdp_audio_port); + } else if (!strncmp("m=audio ", p, 8)) { + strncpy(q,p,8); + p += 8; + q += 8; strncpy(q, port_buf, strlen(port_buf)); q += strlen(port_buf); - x = 0; + while (p && *p && (*p >= '0' && *p <= '9')) { p++; } - } else if (vport_ptr && tech_pvt->adv_sdp_video_port && p == vport_ptr) { - char port_buf[25] = ""; - switch_snprintf(port_buf, sizeof(port_buf), "%u", tech_pvt->adv_sdp_video_port); - strncpy(q, port_buf, strlen(port_buf)); - q += strlen(port_buf); - x = 0; + has_audio++; + + } else if (!strncmp("m=video ", p, 8)) { + if (!has_video) { + sofia_glue_tech_choose_video_port(tech_pvt, 1); + tech_pvt->video_rm_encoding = "PROXY-VID"; + tech_pvt->video_rm_rate = 90000; + tech_pvt->video_codec_ms = 0; + switch_snprintf(vport_buf, sizeof(vport_buf), "%u", tech_pvt->adv_sdp_video_port); + } + + strncpy(q, p, 8); + p += 8; + q += 8; + strncpy(q, vport_buf, strlen(vport_buf)); + q += strlen(vport_buf); + while (p && *p && (*p >= '0' && *p <= '9')) { p++; } - } - *q++ = *p++; + has_video++; + } + + while (p && *p && *p != '\n') { + *q++ = *p++; + } + + *q++ = *p++; } + if (!has_ip && !has_audio) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s SDP has no audio in it.\n%s\n", + switch_channel_get_name(tech_pvt->channel), tech_pvt->local_sdp_str); + tech_pvt->local_sdp_str = tech_pvt->orig_local_sdp_str; + return; + } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s Patched SDP\n---\n%s\n+++\n%s\n", switch_channel_get_name(tech_pvt->channel), tech_pvt->orig_local_sdp_str, tech_pvt->local_sdp_str); } @@ -925,7 +1013,9 @@ uint32_t session_timeout = 0; const char *val; const char *rep; - char *sticky = NULL; + const char *call_id = NULL; + char *route = NULL; + char *route_uri = NULL; rep = switch_channel_get_variable(channel, SOFIA_REPLACES_HEADER); @@ -943,11 +1033,21 @@ check_decode(cid_num, session); if (!tech_pvt->from_str) { - tech_pvt->from_str = switch_core_session_sprintf(tech_pvt->session, "\"%s\" ", - cid_name, - cid_num, - !switch_strlen_zero(cid_num) ? "@" : "", - tech_pvt->profile->extsipip ? tech_pvt->profile->extsipip : tech_pvt->profile->sipip); + const char* sipip = tech_pvt->profile->extsipip ? tech_pvt->profile->extsipip : tech_pvt->profile->sipip; + const char* format = strchr(sipip, ':') ? "\"%s\" " : "\"%s\" "; + const char *alt = NULL; + + if ((alt = switch_channel_get_variable(channel, "sip_invite_domain"))) { + sipip = alt; + } + + tech_pvt->from_str = + switch_core_session_sprintf(tech_pvt->session, + format, + cid_name, + cid_num, + !switch_strlen_zero(cid_num) ? "@" : "", + sipip); } if ((alertbuf = switch_channel_get_variable(channel, "alert_info"))) { @@ -1040,7 +1140,7 @@ url_str = sofia_overcome_sip_uri_weakness(session, url, tech_pvt->transport, SWITCH_TRUE, invite_params); invite_contact = sofia_overcome_sip_uri_weakness(session, tech_pvt->invite_contact, tech_pvt->transport, SWITCH_FALSE, NULL); - from_str = sofia_overcome_sip_uri_weakness(session, use_from_str, 0, SWITCH_FALSE, NULL); + from_str = sofia_overcome_sip_uri_weakness(session, use_from_str, 0, SWITCH_TRUE, NULL); to_str = sofia_overcome_sip_uri_weakness(session, tech_pvt->dest_to, 0, SWITCH_FALSE, invite_params); @@ -1050,15 +1150,21 @@ */ use_from_str = from_str; from_str = switch_core_session_sprintf(session, "\"%s\" <%s>", tech_pvt->caller_profile->caller_id_name, use_from_str); + tech_pvt->nh = nua_handle(tech_pvt->profile->nua, NULL, - NUTAG_URL(url_str), SIPTAG_TO_STR(to_str), SIPTAG_FROM_STR(from_str), SIPTAG_CONTACT_STR(invite_contact), TAG_END()); - + NUTAG_URL(url_str), + SIPTAG_TO_STR(to_str), + SIPTAG_FROM_STR(from_str), + SIPTAG_CONTACT_STR(invite_contact), + TAG_END()); + - if (strstr(tech_pvt->dest, ";nat") || ((val = switch_channel_get_variable(channel, "sip_sticky_contact")) && switch_true(val))) { + if (tech_pvt->dest && (strstr(tech_pvt->dest, ";fs_nat") || strstr(tech_pvt->dest, ";received") + || ((val = switch_channel_get_variable(channel, "sip_sticky_contact")) && switch_true(val)))) { switch_set_flag(tech_pvt, TFLAG_NAT); tech_pvt->record_route = switch_core_session_strdup(tech_pvt->session, url_str); - sticky = tech_pvt->record_route; + route_uri = tech_pvt->record_route; session_timeout = SOFIA_NAT_SESSION_TIMEOUT; switch_channel_set_variable(channel, "sip_nat_detected", "true"); } @@ -1151,6 +1257,34 @@ sofia_glue_tech_patch_sdp(tech_pvt); } + call_id = switch_channel_get_variable(channel, "sip_outgoing_call_id"); + + if (tech_pvt->dest && (route = strstr(tech_pvt->dest, ";fs_path="))) { + char *p; + + route = switch_core_session_strdup(tech_pvt->session, route + 9); + switch_assert(route); + + for (p = route; p && *p ; p++) { + if (*p == '>' || *p == ';') { + *p = '\0'; + break; + } + } + switch_url_decode(route); + route_uri = switch_core_session_strdup(tech_pvt->session, route); + if ((p = strchr(route_uri, ','))) { + while (*(p-1) == ' ') { + p--; + } + if (*p) { + *p = '\0'; + } + } + + route_uri = sofia_overcome_sip_uri_weakness(tech_pvt->session, route_uri, 0, SWITCH_TRUE, NULL); + } + nua_invite(tech_pvt->nh, NUTAG_AUTOANSWER(0), NUTAG_SESSION_TIMER(session_timeout), @@ -1158,7 +1292,9 @@ TAG_IF(!switch_strlen_zero(alert_info), SIPTAG_HEADER_STR(alert_info)), TAG_IF(!switch_strlen_zero(extra_headers), SIPTAG_HEADER_STR(extra_headers)), TAG_IF(!switch_strlen_zero(max_forwards), SIPTAG_MAX_FORWARDS_STR(max_forwards)), - TAG_IF(sticky, NUTAG_PROXY(tech_pvt->record_route)), + TAG_IF(call_id, SIPTAG_CALL_ID_STR(call_id)), + TAG_IF(route_uri, NUTAG_PROXY(route_uri)), + TAG_IF(route, SIPTAG_ROUTE_STR(route)), SOATAG_USER_SDP_STR(tech_pvt->local_sdp_str), SOATAG_REUSE_REJECTED(1), SOATAG_ORDERED_USER(1), @@ -1175,15 +1311,17 @@ private_object_t *tech_pvt = switch_core_session_get_private(session); switch_channel_t *channel = switch_core_session_get_channel(session); switch_caller_profile_t *caller_profile; + const char *sipip, *format; switch_assert(tech_pvt != NULL); caller_profile = switch_channel_get_caller_profile(channel); - if ((tech_pvt->from_str = switch_core_session_sprintf(session, "\"%s\" ", - caller_profile->caller_id_name, - caller_profile->caller_id_number, - tech_pvt->profile->extsipip ? tech_pvt->profile->extsipip : tech_pvt->profile->sipip))) { + sipip = tech_pvt->profile->extsipip ? tech_pvt->profile->extsipip : tech_pvt->profile->sipip; + format = strchr(sipip, ':') ? "\"%s\" " : "\"%s\" "; + if ((tech_pvt->from_str = switch_core_session_sprintf(session, format, + caller_profile->caller_id_name, + caller_profile->caller_id_number, sipip))) { const char *rep = switch_channel_get_variable(channel, SOFIA_REPLACES_HEADER); @@ -1414,6 +1552,7 @@ unsigned char b64_key[512] = ""; const char *type_str; unsigned char *key; + const char *val; char *p; @@ -1440,8 +1579,13 @@ tech_pvt->local_crypto_key = switch_core_session_sprintf(tech_pvt->session, "%d %s inline:%s", index, type_str, b64_key); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Set Local Key [%s]\n", tech_pvt->local_crypto_key); - tech_pvt->crypto_type = type; + if (!sofia_test_pflag(tech_pvt->profile, PFLAG_DISABLE_SRTP_AUTH) && + !((val = switch_channel_get_variable(tech_pvt->channel, "NDLB_support_asterisk_missing_srtp_auth")) && switch_true(val))) { + tech_pvt->crypto_type = type; + } else { + tech_pvt->crypto_type = AES_CM_128_NULL_AUTH; + } return SWITCH_STATUS_SUCCESS; } @@ -1546,8 +1690,11 @@ if (myflags) { flags = myflags; - } else { + } else if (!sofia_test_pflag(tech_pvt->profile, PFLAG_DISABLE_RTP_AUTOADJ) && + !((val = switch_channel_get_variable(tech_pvt->channel, "disable_rtp_auto_adjust")) && switch_true(val))) { flags = (switch_rtp_flag_t) (SWITCH_RTP_FLAG_AUTOADJ | SWITCH_RTP_FLAG_DATAWAIT); + } else { + flags = (switch_rtp_flag_t) (SWITCH_RTP_FLAG_DATAWAIT); } if (switch_test_flag(tech_pvt, TFLAG_BUGGY_2833)) { @@ -1589,7 +1736,7 @@ } if (!switch_channel_test_flag(tech_pvt->channel, CF_PROXY_MEDIA)) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "AUDIO RTP [%s] %s:%d->%s:%d codec: %u ms: %d\n", + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "AUDIO RTP [%s] %s port %d -> %s port %d codec: %u ms: %d\n", switch_channel_get_name(tech_pvt->channel), tech_pvt->local_sdp_audio_ip, tech_pvt->local_sdp_audio_port, @@ -1610,8 +1757,11 @@ } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "AUDIO RTP CHANGING DEST TO: [%s:%d]\n", tech_pvt->remote_sdp_audio_ip, tech_pvt->remote_sdp_audio_port); - /* Reactivate the NAT buster flag. */ - switch_rtp_set_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_AUTOADJ); + if (!sofia_test_pflag(tech_pvt->profile, PFLAG_DISABLE_RTP_AUTOADJ) && + !((val = switch_channel_get_variable(tech_pvt->channel, "disable_rtp_auto_adjust")) && switch_true(val))) { + /* Reactivate the NAT buster flag. */ + switch_rtp_set_flag(tech_pvt->rtp_session, SWITCH_RTP_FLAG_AUTOADJ); + } } goto video; } @@ -1620,7 +1770,12 @@ if ((status = sofia_glue_tech_proxy_remote_addr(tech_pvt)) != SWITCH_STATUS_SUCCESS) { goto end; } - flags = (switch_rtp_flag_t) (SWITCH_RTP_FLAG_PROXY_MEDIA | SWITCH_RTP_FLAG_AUTOADJ | SWITCH_RTP_FLAG_DATAWAIT); + if (!sofia_test_pflag(tech_pvt->profile, PFLAG_DISABLE_RTP_AUTOADJ) && + !((val = switch_channel_get_variable(tech_pvt->channel, "disable_rtp_auto_adjust")) && switch_true(val))) { + flags = (switch_rtp_flag_t) (SWITCH_RTP_FLAG_PROXY_MEDIA | SWITCH_RTP_FLAG_AUTOADJ | SWITCH_RTP_FLAG_DATAWAIT); + } else { + flags = (switch_rtp_flag_t) (SWITCH_RTP_FLAG_PROXY_MEDIA | SWITCH_RTP_FLAG_DATAWAIT); + } timer_name = NULL; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "PROXY AUDIO RTP [%s] %s:%d->%s:%d codec: %u ms: %d\n", @@ -1647,7 +1802,8 @@ uint8_t vad_in = switch_test_flag(tech_pvt, TFLAG_VAD_IN) ? 1 : 0; uint8_t vad_out = switch_test_flag(tech_pvt, TFLAG_VAD_OUT) ? 1 : 0; uint8_t inb = switch_test_flag(tech_pvt, TFLAG_OUTBOUND) ? 0 : 1; - + uint32_t stun_ping = 0; + if ((val = switch_channel_get_variable(tech_pvt->channel, "rtp_enable_vad_in")) && switch_true(val)) { vad_in = 1; } @@ -1662,6 +1818,18 @@ vad_out = 0; } + if ((tech_pvt->stun_flags & STUN_FLAG_SET) && (val = switch_channel_get_variable(tech_pvt->channel, "rtp_stun_ping"))) { + int ival = atoi(val); + + if (ival <= 0) { + if (switch_true(val)) { + ival = 6; + } + } + + stun_ping = (ival * tech_pvt->read_codec.implementation->samples_per_second) / tech_pvt->read_codec.implementation->samples_per_frame; + } + tech_pvt->ssrc = switch_rtp_get_ssrc(tech_pvt->rtp_session); switch_set_flag(tech_pvt, TFLAG_RTP); switch_set_flag(tech_pvt, TFLAG_IO); @@ -1673,6 +1841,12 @@ switch_channel_get_name(switch_core_session_get_channel(tech_pvt->session)), vad_in ? "in" : "", vad_out ? "out" : ""); } + if (stun_ping) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Setting stun ping to %s:%d\n", tech_pvt->stun_ip, stun_ping); + switch_rtp_activate_stun_ping(tech_pvt->rtp_session, tech_pvt->stun_ip, tech_pvt->stun_port, + stun_ping, (tech_pvt->stun_flags & STUN_FLAG_FUNNY) ? 1 : 0); + } + if ((val = switch_channel_get_variable(tech_pvt->channel, "jitterbuffer_msec"))) { int len = atoi(val); @@ -1742,8 +1916,13 @@ sofia_glue_tech_choose_video_port(tech_pvt, 1); } - flags = (switch_rtp_flag_t) (SWITCH_RTP_FLAG_USE_TIMER | SWITCH_RTP_FLAG_AUTOADJ | - SWITCH_RTP_FLAG_DATAWAIT | SWITCH_RTP_FLAG_NOBLOCK | SWITCH_RTP_FLAG_RAW_WRITE); + if (!sofia_test_pflag(tech_pvt->profile, PFLAG_DISABLE_RTP_AUTOADJ) && + !((val = switch_channel_get_variable(tech_pvt->channel, "disable_rtp_auto_adjust")) && switch_true(val))) { + flags = (switch_rtp_flag_t) (SWITCH_RTP_FLAG_USE_TIMER | SWITCH_RTP_FLAG_AUTOADJ | + SWITCH_RTP_FLAG_DATAWAIT | SWITCH_RTP_FLAG_NOBLOCK | SWITCH_RTP_FLAG_RAW_WRITE); + } else { + flags = (switch_rtp_flag_t) (SWITCH_RTP_FLAG_USE_TIMER | SWITCH_RTP_FLAG_DATAWAIT | SWITCH_RTP_FLAG_NOBLOCK | SWITCH_RTP_FLAG_RAW_WRITE); + } if (switch_channel_test_flag(tech_pvt->channel, CF_PROXY_MEDIA)) { flags |= SWITCH_RTP_FLAG_PROXY_MEDIA; @@ -1868,7 +2047,7 @@ } } - if (((m = sdp->sdp_media)) && m->m_mode == sdp_sendonly) { + if ((m = sdp->sdp_media) && (m->m_mode == sdp_sendonly || m->m_mode == sdp_inactive)) { sendonly = 2; /* global sendonly always wins */ } @@ -1877,7 +2056,7 @@ continue; } - if ((!strcasecmp(attr->a_name, "sendonly")) || (!strcasecmp(attr->a_name, "inactive"))) { + if (!strcasecmp(attr->a_name, "sendonly") || !strcasecmp(attr->a_name, "inactive")) { sendonly = 1; } else if (sendonly < 2 && !strcasecmp(attr->a_name, "sendrecv")) { sendonly = 0; @@ -1886,7 +2065,7 @@ } } - if (sendonly) { + if (sendonly && switch_channel_test_flag(channel, CF_ANSWERED)) { if (!switch_test_flag(tech_pvt, TFLAG_SIP_HOLD)) { const char *stream; @@ -1908,6 +2087,7 @@ switch_ivr_hold_uuid(switch_channel_get_variable(tech_pvt->channel, SWITCH_SIGNAL_BOND_VARIABLE), NULL, 0); } else { switch_ivr_broadcast(switch_channel_get_variable(tech_pvt->channel, SWITCH_SIGNAL_BOND_VARIABLE), stream, SMF_ECHO_ALEG | SMF_LOOP); + switch_yield(250000); } } } @@ -1916,6 +2096,8 @@ const char *uuid; switch_core_session_t *b_session; + switch_yield(250000); + if (tech_pvt->max_missed_packets) { switch_rtp_set_max_missed_packets(tech_pvt->rtp_session, tech_pvt->max_missed_packets); } @@ -2367,7 +2549,7 @@ return url; } -sofia_profile_t *sofia_glue_find_profile__(const char *file, const char *func, int line, char *key) +sofia_profile_t *sofia_glue_find_profile__(const char *file, const char *func, int line, const char *key) { sofia_profile_t *profile; @@ -2426,6 +2608,46 @@ return status; } +void sofia_glue_del_gateway(sofia_gateway_t *gp) +{ + if (!gp->deleted) { + if (gp->state != REG_STATE_NOREG) { + gp->retry = 0; + gp->state = REG_STATE_UNREGISTER; + } + + gp->deleted = 1; + } +} + +void sofia_glue_restart_all_profiles(void) +{ + switch_hash_index_t *hi; + const void *var; + void *val; + sofia_profile_t *pptr; + switch_xml_t xml_root; + const char *err; + + if ((xml_root = switch_xml_open_root(1, &err))) { + switch_xml_free(xml_root); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Reload XML [%s]\n", err); + } + + switch_mutex_lock(mod_sofia_globals.hash_mutex); + if (mod_sofia_globals.profile_hash) { + for (hi = switch_hash_first(NULL, mod_sofia_globals.profile_hash); hi; hi = switch_hash_next(hi)) { + switch_hash_this(hi, &var, NULL, &val); + if ((pptr = (sofia_profile_t *) val)) { + sofia_set_pflag_locked(pptr, PFLAG_RESPAWN); + sofia_clear_pflag_locked(pptr, PFLAG_RUNNING); + } + } + } + switch_mutex_unlock(mod_sofia_globals.hash_mutex); + +} + void sofia_glue_del_profile(sofia_profile_t *profile) { sofia_gateway_t *gp; @@ -2457,6 +2679,8 @@ switch_core_hash_delete(mod_sofia_globals.gateway_hash, gp->name); switch_core_hash_delete(mod_sofia_globals.gateway_hash, gp->register_from); switch_core_hash_delete(mod_sofia_globals.gateway_hash, gp->register_contact); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "deleted gateway %s\n", gp->name); + profile->gateways = NULL; } } switch_mutex_unlock(mod_sofia_globals.hash_mutex); @@ -2471,7 +2695,11 @@ " sip_host VARCHAR(255),\n" " contact VARCHAR(1024),\n" " status VARCHAR(255),\n" - " rpid VARCHAR(255),\n" " expires INTEGER,\n" " user_agent VARCHAR(255)\n" ");\n"; + " rpid VARCHAR(255),\n" + " expires INTEGER,\n" + " user_agent VARCHAR(255),\n" + " server_user VARCHAR(255),\n" + " server_host VARCHAR(255)\n" ");\n"; char dialog_sql[] = "CREATE TABLE sip_dialogs (\n" @@ -2483,7 +2711,10 @@ " sip_from_host VARCHAR(255),\n" " contact_user VARCHAR(255),\n" " contact_host VARCHAR(255),\n" - " state VARCHAR(255),\n" " direction VARCHAR(255),\n" " user_agent VARCHAR(255)\n" ");\n"; + " state VARCHAR(255),\n" + " direction VARCHAR(255),\n" + " user_agent VARCHAR(255)\n" + ");\n"; char sub_sql[] = "CREATE TABLE sip_subscriptions (\n" @@ -2497,10 +2728,15 @@ " call_id VARCHAR(255),\n" " full_from VARCHAR(255),\n" " full_via VARCHAR(255),\n" - " expires INTEGER,\n" " user_agent VARCHAR(255),\n" " accept VARCHAR(255)\n" ");\n"; - - - char auth_sql[] = "CREATE TABLE sip_authentication (\n" " nonce VARCHAR(255),\n" " expires INTEGER" ");\n"; + " expires INTEGER,\n" + " user_agent VARCHAR(255),\n" + " accept VARCHAR(255)\n" + ");\n"; + + char auth_sql[] = + "CREATE TABLE sip_authentication (\n" + " nonce VARCHAR(255),\n" + " expires INTEGER" ");\n"; if (profile->odbc_dsn) { #ifdef SWITCH_HAVE_ODBC @@ -2514,7 +2750,7 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Connected ODBC DSN: %s\n", profile->odbc_dsn); - if (switch_odbc_handle_exec(profile->master_odbc, "select sip_user,user_agent from sip_registrations", NULL) != SWITCH_ODBC_SUCCESS) { + if (switch_odbc_handle_exec(profile->master_odbc, "select sip_user,user_agent,server_host from sip_registrations", NULL) != SWITCH_ODBC_SUCCESS) { switch_odbc_handle_exec(profile->master_odbc, "DROP TABLE sip_registrations", NULL); switch_odbc_handle_exec(profile->master_odbc, reg_sql, NULL); } @@ -2542,7 +2778,7 @@ return 0; } - switch_core_db_test_reactive(profile->master_db, "select sip_user,user_agent from sip_registrations", "DROP TABLE sip_registrations", reg_sql); + switch_core_db_test_reactive(profile->master_db, "select sip_user,user_agent,server_host from sip_registrations", "DROP TABLE sip_registrations", reg_sql); switch_core_db_test_reactive(profile->master_db, "delete from sip_subscriptions where sip_user != '' or accept != ''", "DROP TABLE sip_subscriptions", sub_sql); switch_core_db_test_reactive(profile->master_db, "delete from sip_dialogs", "DROP TABLE sip_dialogs", dialog_sql); @@ -2819,6 +3055,18 @@ return 1; } +const char *sofia_glue_strip_proto(const char *uri) +{ + char *p; + + if ((p = strchr(uri, ':'))) { + return p+1; + } + + return uri; +} + + /* For Emacs: * Local Variables: * mode:c @@ -2827,5 +3075,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -52,14 +52,21 @@ switch_status_t sofia_presence_chat_send(char *proto, char *from, char *to, char *subject, char *body, char *hint) { char buf[256]; - char *user, *host; + char *user = NULL, *host = NULL; sofia_profile_t *profile = NULL; char *ffrom = NULL; nua_handle_t *msg_nh; char *contact; + switch_status_t status = SWITCH_STATUS_FALSE; + const char *ct = "text/html"; + + if (subject && strchr(subject, '/')) { + ct = subject; + } if (!to) { - return SWITCH_STATUS_SUCCESS; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Missing To: header.\n"); + goto end; } user = strdup(to); @@ -73,21 +80,22 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Chat proto [%s]\nfrom [%s]\nto [%s]\n%s\nInvalid Profile %s\n", proto, from, to, body ? body : "[no body]", host ? host : "NULL"); - return SWITCH_STATUS_FALSE; + goto end; } if (!sofia_reg_find_reg_url(profile, user, host, buf, sizeof(buf))) { - return SWITCH_STATUS_FALSE; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot find user. [%s][%s]\n", user, host); + goto end; } - if (!strcmp(proto, SOFIA_CHAT_PROTO)) { + if (!strcasecmp(proto, SOFIA_CHAT_PROTO)) { from = hint; } else { char *fp, *p, *fu = NULL; fp = strdup(from); if (!fp) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error!\n"); - return SWITCH_STATUS_FALSE; + goto end; } if ((p = strchr(fp, '@'))) { @@ -96,27 +104,33 @@ *p = '+'; } - ffrom = switch_mprintf("\"%s\" ", fu, proto, fp, profile->name); + ffrom = switch_mprintf("\"%s\" ", fu, proto, fp, profile->domain_name); from = ffrom; switch_safe_free(fu); switch_safe_free(fp); } + status = SWITCH_STATUS_SUCCESS; contact = sofia_glue_get_url_from_contact(buf, 1); - msg_nh = nua_handle(profile->nua, NULL, SIPTAG_FROM_STR(from), NUTAG_URL(contact), SIPTAG_TO_STR(buf), // if this cries, add contact here too, change the 1 to 0 and omit the safe_free + // if this cries, add contact here too, change the 1 to 0 and omit the safe_free + msg_nh = nua_handle(profile->nua, NULL, SIPTAG_FROM_STR(from), NUTAG_URL(contact), SIPTAG_TO_STR(buf), SIPTAG_CONTACT_STR(profile->url), TAG_END()); switch_safe_free(contact); - nua_message(msg_nh, SIPTAG_CONTENT_TYPE_STR("text/html"), SIPTAG_PAYLOAD_STR(body), TAG_END()); + nua_message(msg_nh, SIPTAG_CONTENT_TYPE_STR(ct), SIPTAG_PAYLOAD_STR(body), TAG_END()); + + + end: switch_safe_free(ffrom); - free(user); + switch_safe_free(user); + if (profile) { switch_thread_rwlock_unlock(profile->rwlock); } - return SWITCH_STATUS_SUCCESS; + return status; } void sofia_presence_cancel(void) @@ -413,7 +427,8 @@ if (probe_euser && probe_host && (profile = sofia_glue_find_profile(probe_host))) { sql = switch_mprintf("select sip_registrations.sip_user, sip_registrations.sip_host, sip_registrations.status, " - "sip_registrations.rpid,'', sip_dialogs.uuid, sip_dialogs.state, sip_dialogs.direction " + "sip_registrations.rpid,'', sip_dialogs.uuid, sip_dialogs.state, sip_dialogs.direction, " + "sip_dialogs.sip_to_user, sip_dialogs.sip_to_host " "from sip_registrations left join sip_dialogs on " "(sip_dialogs.sip_from_user = sip_registrations.sip_user) " "and sip_dialogs.sip_from_host = sip_registrations.sip_host " @@ -426,6 +441,7 @@ } switch_safe_free(user); + switch_safe_free(probe_user); } return; case SWITCH_EVENT_PRESENCE_IN: @@ -668,15 +684,22 @@ char *status = argv[2]; char *rpid = argv[3]; char *proto = argv[4]; + char *to_user = NULL; char *uuid = NULL; char *state = NULL; char *direction = NULL; switch_event_t *event; + char to_buf[128] = ""; if (argc > 5) { uuid = switch_str_nil(argv[5]); state = switch_str_nil(argv[6]); direction = switch_str_nil(argv[7]); + if (argc > 8) { + switch_set_string(to_buf, argv[8]); + switch_url_decode(to_buf); + to_user = to_buf; + } } if (switch_strlen_zero(proto)) { @@ -693,6 +716,10 @@ switch_event_add_header(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog"); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", 0); + if (!switch_strlen_zero(to_user)) { + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "to-user", "%s", to_user); + } + if (switch_strlen_zero(state)) { switch_event_add_header(event, SWITCH_STACK_BOTTOM, "unique-id", "%s", SOFIA_CHAT_PROTO); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "channel-state", "%s", "CS_HANGUP"); @@ -743,12 +770,57 @@ } +static char *gen_pidf(char *user_agent, char *id, char *url, char *open, char *rpid, char *prpid, char *status, const char **ct) +{ + if (switch_stristr("polycom", user_agent)) { + *ct = "application/xpidf+xml"; + return switch_mprintf( + "\n" + "\n" + "\n" + " \n" + " %s\n" + " \n" + " \n" + " \n" + "
\n" + " \n" + " \n" + "
\n" + "
\n" + "
\n", status, id, id, url, open, prpid + ); + } else { + *ct = "application/pidf+xml"; + return switch_mprintf( + " \n" + "\n" + + " \n" + " \r\n" + " %s\n" + " \n" + " \n" + " \n" + " \r\n" + " \n" + " \n" + " %s" + " \n" + "", id, prpid, rpid, status); + } +} + + static int sofia_presence_sub_callback(void *pArg, int argc, char **argv, char **columnNames) { struct presence_helper *helper = (struct presence_helper *) pArg; sofia_profile_t *profile = helper->profile; char *pl = NULL; - char *clean_id = NULL, *id = NULL, *note = NULL; + char *clean_id = NULL, *id = NULL; uint32_t in = atoi(argv[13]); char *status = argv[14]; char *rpid = argv[15]; @@ -761,6 +833,7 @@ char *event = argv[5]; char *call_id = argv[7]; char *expires = argv[10]; + char *user_agent = argv[11]; //char *accept = argv[12]; nua_handle_t *nh; char *to = NULL; @@ -829,7 +902,14 @@ const char *from_user = switch_str_nil(switch_event_get_header(helper->event, "variable_sip_from_user")); const char *clean_to_user = NULL; const char *clean_from_user = NULL; - + const char *p_to_user = switch_str_nil(switch_event_get_header(helper->event, "to-user")); +#if 0 + char *buf; + switch_event_serialize(helper->event, &buf, SWITCH_FALSE); + switch_assert(buf); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "CHANNEL_DATA:\n%s\n", buf); + free(buf); +#endif if (is_dialog) { SWITCH_STANDARD_STREAM(stream); @@ -867,7 +947,11 @@ } else if (switch_strlen_zero(astate)) { astate = switch_str_nil(switch_event_get_header(helper->event, "answer-state")); if (switch_strlen_zero(astate)) { - astate = dft_state; + if (is_dialog) { + astate = dft_state; + } else { + astate = "terminated"; + } } } @@ -944,11 +1028,10 @@ if (!is_dialog) { + char status_line[256] = ""; if (in) { - char status_line[256] = ""; - if (!strcmp(astate, "early")) { - switch_snprintf(status_line, sizeof(status_line), "R %s", switch_str_nil(from_id)); + switch_snprintf(status_line, sizeof(status_line), "Ring %s", switch_str_nil(from_id)); rpid = "on-the-phone"; } else if (!strcmp(astate, "confirmed")) { char *dest = switch_event_get_header(helper->event, "Caller-Destination-Number"); @@ -957,93 +1040,56 @@ } if (switch_strlen_zero(from_id)) { - switch_snprintf(status_line, sizeof(status_line), "Available"); + from_id = p_to_user; + } + + if (switch_strlen_zero(from_id)) { + switch_snprintf(status_line, sizeof(status_line), "On The Phone"); } else { - switch_snprintf(status_line, sizeof(status_line), "T %s", switch_str_nil(from_id)); - rpid = "on-the-phone"; + switch_snprintf(status_line, sizeof(status_line), "Talk %s", switch_str_nil(from_id)); } + rpid = "on-the-phone"; } else if (!strcmp(astate, "terminated")) { - switch_snprintf(status_line, sizeof(status_line), "Available"); + if (!strcasecmp(rpid, "on-the-phone")) { + switch_snprintf(status_line, sizeof(status_line), "Dialing"); + } else { + switch_snprintf(status_line, sizeof(status_line), "Available"); + } + } else { + switch_set_string(status_line, status); } - note = switch_mprintf("%s", status_line); open = "open"; } else { - note = NULL; open = "closed"; } + + if (!strncasecmp(status_line, "registered", 10)) { + switch_snprintf(status_line, sizeof(status_line), "Available"); + } prpid = translate_rpid(rpid); - pl = switch_mprintf("\r\n" - "\r\n" - "\r\n" - "\r\n" - "
\r\n" - "\r\n" - "%s\r\n" - "\r\n" - "\r\n" - "
\r\n" - "
\r\n" - "\r\n" - "\r\n" - "%s\r\n" - "\r\n" - "\r\n" - "\r\n" - "\r\n" "\r\n" - "%s\r\n" "
", id, id, profile->url, open, status, prpid, open, rpid, note); - ct = "application/pidf+xml"; + pl = gen_pidf(user_agent, clean_id, profile->url, open, rpid, prpid, status_line, &ct); } } else { if (in) { - note = switch_mprintf("%s", status); open = "open"; } else { - note = NULL; open = "closed"; } - - pl = switch_mprintf("\r\n" - "\r\n" - "\r\n" - "\r\n" - "
\r\n" - "\r\n" - "%s\r\n" - "\r\n" - "\r\n" - "
\r\n" - "
\r\n" - "\r\n" - "\r\n" - "%s\r\n" - "\r\n" - "\r\n" - "\r\n" - "\r\n" "\r\n" - "%s\r\n" "
", id, id, profile->url, open, status, prpid, open, rpid, note); - ct = "application/pidf+xml"; + prpid = translate_rpid(rpid); + pl = gen_pidf(user_agent, clean_id, profile->url, open, rpid, prpid, status, &ct); } - + switch_snprintf(exp, sizeof(exp), "active;expires=%ld", (long) exptime); nua_handle_bind(nh, &mod_sofia_globals.keep_private); nua_notify(nh, SIPTAG_SUBSCRIPTION_STATE_STR(exp), SIPTAG_EVENT_STR(event), SIPTAG_CONTENT_TYPE_STR(ct), SIPTAG_PAYLOAD_STR(pl), TAG_END()); - + end: switch_safe_free(id); switch_safe_free(clean_id); - switch_safe_free(note); switch_safe_free(pl); switch_safe_free(to); @@ -1119,7 +1165,7 @@ nua_notify(nh, NUTAG_NEWSUB(1), - TAG_IF(strstr(o_contact, ";nat"), NUTAG_PROXY(contact)), + TAG_IF(strstr(o_contact, ";fs_nat"), NUTAG_PROXY(contact)), SIPTAG_EVENT_STR(event), SIPTAG_CONTENT_TYPE_STR("application/simple-message-summary"), SIPTAG_PAYLOAD_STR(body), TAG_END()); switch_safe_free(contact); @@ -1162,13 +1208,14 @@ char *port; char new_port[25] = ""; char *is_nat = NULL; + const char *ipv6; if (!(contact && sip->sip_contact->m_url)) { nua_respond(nh, 481, "INVALID SUBSCRIPTION", TAG_END()); return; } - get_addr(network_ip, sizeof(network_ip), &((struct sockaddr_in *) my_addrinfo->ai_addr)->sin_addr); + get_addr(network_ip, sizeof(network_ip), my_addrinfo->ai_addr, my_addrinfo->ai_addrlen); network_port = ntohs(((struct sockaddr_in *) msg_addrinfo(nua_current_request(nua))->ai_addr)->sin_port); tl_gets(tags, NUTAG_SUBSTATE_REF(sub_state), TAG_END()); @@ -1238,11 +1285,25 @@ switch_snprintf(new_port, sizeof(new_port), ":%s", port); } + ipv6 = strchr(contact_host, ':'); if (contact->m_url->url_params) { - contact_str = switch_mprintf("%s %s", - display, contact->m_url->url_user, contact_host, new_port, contact->m_url->url_params, is_nat ? ";nat" : ""); + contact_str = switch_mprintf("%s %s", + display, contact->m_url->url_user, + ipv6 ? "[" : "", + contact_host, + ipv6 ? "]" : "", + new_port, + contact->m_url->url_params, + is_nat ? ";nat" : ""); } else { - contact_str = switch_mprintf("%s %s", display, contact->m_url->url_user, contact_host, new_port, is_nat ? ";nat" : ""); + contact_str = switch_mprintf("%s %s", + display, + contact->m_url->url_user, + ipv6 ? "[" : "", + contact_host, + ipv6 ? "]" : "", + new_port, + is_nat ? ";nat" : ""); } @@ -1357,7 +1418,13 @@ char *sticky = NULL; if (is_nat) { - sticky = switch_mprintf("sip:%s@%s:%d", contact_user, network_ip, network_port); + ipv6 = strchr(network_ip, ':'); + sticky = switch_mprintf("sip:%s@%s%s%s:%d", + contact_user, + ipv6 ? "[" : "", + network_ip, + ipv6 ? "]" : "", + network_port); } nua_respond(nh, SIP_202_ACCEPTED, NUTAG_WITH_THIS(nua), SIPTAG_SUBSCRIPTION_STATE_STR(sstr), TAG_IF(sticky, NUTAG_PROXY(sticky)), @@ -1639,7 +1706,8 @@ char buf[512]; su_home_t *home = NULL; - if (tech_pvt->hash_key || !sip || !sip->sip_from || !sip->sip_from->a_url || !sip->sip_from->a_url->url_user || !sip->sip_from->a_url->url_host) { + if (!tech_pvt || tech_pvt->hash_key || !sip || !sip->sip_from || !sip->sip_from->a_url || + !sip->sip_from->a_url->url_user || !sip->sip_from->a_url->url_host) { return; } @@ -1668,5 +1736,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -70,7 +70,25 @@ void sofia_reg_check_gateway(sofia_profile_t *profile, time_t now) { - sofia_gateway_t *gateway_ptr; + sofia_gateway_t *gateway_ptr, *last = NULL; + + for (gateway_ptr = profile->gateways; gateway_ptr; gateway_ptr = gateway_ptr->next) { + if (gateway_ptr->deleted && gateway_ptr->state == REG_STATE_NOREG) { + if (last) { + last->next = gateway_ptr->next; + } else { + profile->gateways = gateway_ptr->next; + } + + switch_core_hash_delete(mod_sofia_globals.gateway_hash, gateway_ptr->name); + switch_core_hash_delete(mod_sofia_globals.gateway_hash, gateway_ptr->register_from); + switch_core_hash_delete(mod_sofia_globals.gateway_hash, gateway_ptr->register_contact); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "deleted gateway %s\n", gateway_ptr->name); + } else { + last = gateway_ptr; + } + } + for (gateway_ptr = profile->gateways; gateway_ptr; gateway_ptr = gateway_ptr->next) { int ss_state = nua_callstate_authenticating; reg_state_t ostate = gateway_ptr->state; @@ -112,7 +130,7 @@ break; case REG_STATE_UNREGED: gateway_ptr->status = SOFIA_GATEWAY_DOWN; - sofia_reg_kill_reg(gateway_ptr, 1); + sofia_reg_kill_reg(gateway_ptr, 0); if ((gateway_ptr->nh = nua_handle(gateway_ptr->profile->nua, NULL, NUTAG_URL(gateway_ptr->register_proxy), @@ -219,40 +237,106 @@ return 0; } +void sofia_reg_send_reboot(sofia_profile_t *profile, const char *user, const char *host, const char *contact, const char *user_agent) +{ + const char *event = "check-sync"; + nua_handle_t *nh; + char *contact_url = NULL; + char *id = NULL; + + if (switch_stristr("snom", user_agent)) { + event = "check-sync;reboot=true"; + } else if (switch_stristr("linksys", user_agent)) { + event = "reboot_now"; + } + + if ((contact_url = sofia_glue_get_url_from_contact((char *)contact, 1))) { + char *p; + id = switch_mprintf("sip:%s@%s", user, host); + + if ((p = strstr(contact_url, ";fs_"))) { + *p = '\0'; + } + + nh = nua_handle(profile->nua, NULL, + NUTAG_URL(contact_url), + SIPTAG_FROM_STR(id), + SIPTAG_TO_STR(id), + SIPTAG_CONTACT_STR(profile->url), + TAG_END()); + + nua_notify(nh, + NUTAG_NEWSUB(1), + SIPTAG_EVENT_STR(event), + SIPTAG_CONTENT_TYPE_STR("application/simple-message-summary"), + SIPTAG_PAYLOAD_STR(""), + TAG_END()); + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Sending reboot command to %s\n", contact_url); + free(contact_url); + } + + switch_safe_free(id); +} + + int sofia_reg_del_callback(void *pArg, int argc, char **argv, char **columnNames) { switch_event_t *s_event; + sofia_profile_t *profile = (sofia_profile_t *) pArg; + + if (argc > 10 && atoi(argv[10]) == 1) { + sofia_reg_send_reboot(profile, argv[1], argv[2], argv[3], argv[7]); + } if (argc >= 3) { if (switch_event_create_subclass(&s_event, SWITCH_EVENT_CUSTOM, MY_EVENT_EXPIRE) == SWITCH_STATUS_SUCCESS) { - switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "profile-name", "%s", argv[6]); + switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "profile-name", "%s", argv[8]); switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "call-id", "%s", argv[0]); switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "user", "%s", argv[1]); switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "host", "%s", argv[2]); switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "contact", "%s", argv[3]); - switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "expires", "%s", argv[4]); - switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "user-agent", "%s", argv[5]); + switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "expires", "%s", argv[6]); + switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "user-agent", "%s", argv[7]); switch_event_fire(&s_event); } } return 0; } -void sofia_reg_expire_call_id(sofia_profile_t *profile, const char *call_id) +void sofia_reg_expire_call_id(sofia_profile_t *profile, const char *call_id, int reboot) { char sql[1024]; char *psql = sql; + char *user = strdup(call_id); + char *host = NULL; - switch_snprintf(sql, sizeof(sql), "select *,'%s' from sip_registrations where call_id='%s'", profile->name, call_id); + switch_assert(user); + + if ((host = strchr(user, '@'))) { + *host++ = '\0'; + } + + if (!host) { + host = "none"; + } + + switch_snprintf(sql, sizeof(sql), "select *,%d from sip_registrations where call_id='%s' or (sip_user='%s' and sip_host='%s')", + reboot, call_id, user, host); + switch_mutex_lock(profile->ireg_mutex); - sofia_glue_execute_sql_callback(profile, SWITCH_TRUE, NULL, sql, sofia_reg_del_callback, NULL); + sofia_glue_execute_sql_callback(profile, SWITCH_TRUE, NULL, sql, sofia_reg_del_callback, profile); switch_mutex_unlock(profile->ireg_mutex); - switch_snprintf(sql, sizeof(sql), "delete from sip_registrations where call_id='%s'", call_id); + switch_snprintf(sql, sizeof(sql), "delete from sip_registrations where call_id='%s' or (sip_user='%s' and sip_host='%s')", + call_id, user, host); sofia_glue_execute_sql(profile, &psql, SWITCH_FALSE); + + switch_safe_free(user); + } -void sofia_reg_check_expire(sofia_profile_t *profile, time_t now) +void sofia_reg_check_expire(sofia_profile_t *profile, time_t now, int reboot) { char sql[1024]; @@ -276,12 +360,12 @@ switch_mutex_lock(profile->ireg_mutex); if (now) { - switch_snprintf(sql, sizeof(sql), "select *,'%s' from sip_registrations where expires > 0 and expires <= %ld", profile->name, (long) now); + switch_snprintf(sql, sizeof(sql), "select *,%d from sip_registrations where expires > 0 and expires <= %ld", reboot, (long) now); } else { - switch_snprintf(sql, sizeof(sql), "select *,'%s' from sip_registrations where expires > 0", profile->name); + switch_snprintf(sql, sizeof(sql), "select *,%d from sip_registrations where expires > 0", reboot); } - sofia_glue_execute_sql_callback(profile, SWITCH_TRUE, NULL, sql, sofia_reg_del_callback, NULL); + sofia_glue_execute_sql_callback(profile, SWITCH_TRUE, NULL, sql, sofia_reg_del_callback, profile); if (now) { switch_snprintf(sql, sizeof(sql), "delete from sip_registrations where expires > 0 and expires <= %ld", (long) now); } else { @@ -318,7 +402,7 @@ if (now) { - switch_snprintf(sql, sizeof(sql), "select * from sip_registrations where status like '%%AUTO-NAT%%'"); + switch_snprintf(sql, sizeof(sql), "select * from sip_registrations where status like '%%AUTO-NAT%%' or status like '%%UDP-NAT%%'"); sofia_glue_execute_sql_callback(profile, SWITCH_TRUE, NULL, sql, sofia_reg_nat_callback, profile); } @@ -386,6 +470,7 @@ uint32_t keylen, switch_event_t **v_event, const char *is_nat) { sip_to_t const *to = NULL; + sip_from_t const *from = NULL; sip_expires_t const *expires = NULL; sip_authorization_t const *authorization = NULL; sip_contact_t const *contact = NULL; @@ -393,8 +478,11 @@ switch_event_t *s_event; const char *to_user = NULL; const char *to_host = NULL; + const char *from_user = NULL; + const char *from_host = NULL; char contact_str[1024] = ""; int nat_hack = 0; + uint8_t multi_reg = 0, avoid_multi_reg = 0; //char buf[512]; uint8_t stale = 0, forbidden = 0; auth_res_t auth_res; @@ -403,18 +491,23 @@ const char *rpid = "unknown"; const char *display = "\"user\""; char network_ip[80]; + char url_ip[80]; char *register_gateway = NULL; int network_port; const char *reg_desc = "Registered"; const char *call_id = NULL; char *force_user; char received_data[128] = ""; + char *path_val = NULL; + su_addrinfo_t *my_addrinfo = msg_addrinfo(nua_current_request(nua)); /* all callers must confirm that sip, sip->sip_request and sip->sip_contact are not NULL */ switch_assert(sip != NULL && sip->sip_contact != NULL && sip->sip_request != NULL); - get_addr(network_ip, sizeof(network_ip), &((struct sockaddr_in *) msg_addrinfo(nua_current_request(nua))->ai_addr)->sin_addr); - network_port = ntohs(((struct sockaddr_in *) msg_addrinfo(nua_current_request(nua))->ai_addr)->sin_port); + get_addr(network_ip, sizeof(network_ip), my_addrinfo->ai_addr,my_addrinfo->ai_addrlen); + network_port = get_port(my_addrinfo->ai_addr); + + snprintf(url_ip, sizeof(url_ip), my_addrinfo->ai_addr->sa_family == AF_INET6 ? "[%s]" : "%s", network_ip); expires = sip->sip_expires; authorization = sip->sip_authorization; @@ -432,17 +525,57 @@ return 1; } + from = sip->sip_from; + + if (from) { + from_user = from->a_url->url_user; + from_host = from->a_url->url_host; + } + if (contact->m_url) { const char *port = contact->m_url->url_port; char new_port[25] = ""; const char *contact_host = contact->m_url->url_host; + char *path_encoded = NULL; + int path_encoded_len = 0; + const char *proto = "sip"; + int is_tls = 0, is_tcp = 0; + + + if (switch_stristr("transport=tls", sip->sip_contact->m_url->url_params)) { + is_tls += 1; + } + + if (sip->sip_contact->m_url->url_type == url_sips) { + proto = "sips"; + is_tls += 2; + } + + if (switch_stristr("transport=tcp", sip->sip_contact->m_url->url_params)) { + is_tcp = 1; + } + display = contact->m_display; if (is_nat) { - reg_desc = "Registered(AUTO-NAT)"; - contact_host = network_ip; + if (is_tls) { + reg_desc = "Registered(TLS-NAT)"; + } else if (is_tcp) { + reg_desc = "Registered(TCP-NAT)"; + } else { + reg_desc = "Registered(UDP-NAT)"; + } + contact_host = url_ip; switch_snprintf(new_port, sizeof(new_port), ":%d", network_port); port = NULL; + } else { + if (is_tls) { + reg_desc = "Registered(TLS)"; + } else if (is_tcp) { + reg_desc = "Registered(TCP)"; + } else { + reg_desc = "Registered(UDP)"; + } } if (switch_strlen_zero(display)) { @@ -454,21 +587,32 @@ } } + if (sip->sip_path) { + path_val = sip_header_as_string(nh->nh_home, (void *) sip->sip_path); + path_encoded_len = (strlen(path_val) * 3) + 1; + switch_zmalloc(path_encoded, path_encoded_len); + switch_copy_string(path_encoded, ";fs_path=", 10); + switch_url_encode(path_val, path_encoded + 9, path_encoded_len - 9); + } + if (port) { switch_snprintf(new_port, sizeof(new_port), ":%s", port); } if (is_nat && (profile->pflags & PFLAG_RECIEVED_IN_NAT_REG_CONTACT)) { - switch_snprintf(received_data, sizeof(received_data), ";received=\"%s:%d\"", network_ip, network_port); + switch_snprintf(received_data, sizeof(received_data), ";received=\"%s:%d\"", url_ip, network_port); } if (contact->m_url->url_params) { - switch_snprintf(contact_str, sizeof(contact_str), "%s %s%s", - display, contact->m_url->url_user, contact_host, new_port, contact->m_url->url_params, received_data, is_nat ? ";nat" : ""); + switch_snprintf(contact_str, sizeof(contact_str), "%s <%s:%s@%s%s;%s%s%s%s>", + display, proto, contact->m_url->url_user, contact_host, new_port, + contact->m_url->url_params, received_data, is_nat ? ";fs_nat=yes" : "", path_encoded ? path_encoded : ""); } else { - switch_snprintf(contact_str, sizeof(contact_str), "%s %s%s", display, contact->m_url->url_user, contact_host, new_port, - received_data, is_nat ? ";nat" : ""); + switch_snprintf(contact_str, sizeof(contact_str), "%s <%s:%s@%s%s%s%s%s>", display, proto, contact->m_url->url_user, contact_host, new_port, + received_data, is_nat ? ";fs_nat=yes" : "", path_encoded ? path_encoded : ""); } + + switch_safe_free(path_encoded); } if (expires) { @@ -497,6 +641,12 @@ if (exptime && v_event && *v_event) { char *exp_var; + char *allow_multireg = NULL; + + allow_multireg = switch_event_get_header(*v_event, "sip-allow-multiple-registrations"); + if ( allow_multireg && switch_false(allow_multireg) ) { + avoid_multi_reg = 1; + } register_gateway = switch_event_get_header(*v_event, "sip-register-gateway"); @@ -511,16 +661,16 @@ if ((v_contact_str = switch_event_get_header(*v_event, "sip-force-contact"))) { if (*received_data && (profile->pflags & PFLAG_RECIEVED_IN_NAT_REG_CONTACT)) { - switch_snprintf(received_data, sizeof(received_data), ";received=\"%s:%d\"", network_ip, network_port); + switch_snprintf(received_data, sizeof(received_data), ";received=\"%s:%d\"", url_ip, network_port); } if (!strcasecmp(v_contact_str, "nat-connectile-dysfunction") || !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 %s;nat", - display, contact->m_url->url_user, network_ip, network_port, contact->m_url->url_params, received_data); + switch_snprintf(contact_str, sizeof(contact_str), "%s ", + display, contact->m_url->url_user, url_ip, network_port, contact->m_url->url_params, received_data); } else { - switch_snprintf(contact_str, sizeof(contact_str), "%s %s;nat", display, contact->m_url->url_user, network_ip, + switch_snprintf(contact_str, sizeof(contact_str), "%s ", display, contact->m_url->url_user, url_ip, network_port, received_data); } if (strstr(v_contact_str, "tls")) { @@ -576,6 +726,16 @@ call_id = sip->sip_call_id->i_id; //sip_header_as_string(profile->home, (void *) sip->sip_call_id); switch_assert(call_id); + /* Does this profile supports multiple registrations ? */ + multi_reg = ( sofia_test_pflag(profile, PFLAG_MULTIREG) ) ? 1 : 0; + + if ( multi_reg && avoid_multi_reg ) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, + "Disabling multiple registrations on a per-user basis for %s@%s\n", + switch_str_nil(to_user), switch_str_nil(to_host) ); + multi_reg = 0; + } + if (exptime) { const char *agent = "dunno"; @@ -583,7 +743,7 @@ agent = sip->sip_user_agent->g_string; } - if (sofia_test_pflag(profile, PFLAG_MULTIREG)) { + if (multi_reg) { sql = switch_mprintf("delete from sip_registrations where call_id='%q'", call_id); } else { sql = switch_mprintf("delete from sip_registrations where sip_user='%q' and sip_host='%q'", to_user, to_host); @@ -591,8 +751,8 @@ switch_mutex_lock(profile->ireg_mutex); sofia_glue_execute_sql(profile, &sql, SWITCH_TRUE); - sql = switch_mprintf("insert into sip_registrations values ('%q', '%q','%q','%q','%q', '%q', %ld, '%q')", call_id, - to_user, to_host, contact_str, reg_desc, rpid, (long) switch_timestamp(NULL) + (long) exptime * 2, agent); + sql = switch_mprintf("insert into sip_registrations values ('%q', '%q','%q','%q','%q', '%q', %ld, '%q', '%q', '%q')", call_id, + to_user, to_host, contact_str, reg_desc, rpid, (long) switch_timestamp(NULL) + (long) exptime * 2, agent, from_user, from_host); if (sql) { sofia_glue_execute_sql(profile, &sql, SWITCH_TRUE); } @@ -606,6 +766,8 @@ 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_add_header(s_event, SWITCH_STACK_BOTTOM, "to-user", "%s", from_user); + switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "to-host", "%s", from_host); switch_event_fire(&s_event); } @@ -616,17 +778,19 @@ "Register:\nFrom: [%s@%s]\nContact: [%s]\nExpires: [%ld]\n", to_user, to_host, contact_str, (long) exptime); } - if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_IN) == SWITCH_STATUS_SUCCESS) { + if (switch_event_create(&event, SWITCH_EVENT_PRESENCE_PROBE) == SWITCH_STATUS_SUCCESS) { switch_event_add_header(event, SWITCH_STACK_BOTTOM, "proto", "sip"); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "login", "%s", profile->url); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "rpid", "%s", rpid); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", to_user, to_host); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "to", "%s@%s", to_user, to_host); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "status", "Registered"); + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_subtype", "probe"); switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_type", "presence"); switch_event_fire(&event); } } else { - if (sofia_test_pflag(profile, PFLAG_MULTIREG)) { + if (multi_reg) { char *icontact, *p; icontact = sofia_glue_get_url_from_contact(contact_str, 1); if ((p = strchr(icontact, ';'))) { @@ -665,62 +829,35 @@ } - if (switch_event_create(&event, SWITCH_EVENT_ROSTER) == SWITCH_STATUS_SUCCESS) { - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "proto", "sip"); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "from", "%s@%s", to_user, to_host); - switch_event_fire(&event); - } - - - /* - if (call_id) { - su_free(profile->home, call_id); - } - */ - if (regtype == REG_REGISTER) { - char *new_contact = NULL; - char new_port[30] = ""; char exp_param[128] = ""; + s_event = NULL; if (exptime) { - switch_snprintf(exp_param, sizeof(exp_param), ";expires=%ld", exptime); - } - + switch_snprintf(exp_param, sizeof(exp_param), "expires=%ld", exptime); + sip_contact_add_param(nh->nh_home, sip->sip_contact, exp_param); - if (contact->m_url->url_port) { - switch_snprintf(new_port, sizeof(new_port), ":%s", contact->m_url->url_port); - } - - if (contact->m_url->url_params) { - new_contact = switch_mprintf("%s %s", - display, contact->m_url->url_user, contact->m_url->url_host, new_port, contact->m_url->url_params, exp_param); + if (switch_event_create(&s_event, SWITCH_EVENT_MESSAGE_QUERY) == SWITCH_STATUS_SUCCESS) { + switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "Message-Account", "sip:%s@%s", to_user, to_host); + switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "VM-Sofia-Profile", "%s", profile->name); + } } else { - new_contact = switch_mprintf("%s %s", display, contact->m_url->url_user, contact->m_url->url_host, new_port, exp_param); - } - - nua_respond(nh, SIP_200_OK, SIPTAG_CONTACT_STR(new_contact), NUTAG_WITH_THIS(nua), TAG_END()); - switch_safe_free(new_contact); - - if (exptime) { - 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); - switch_event_add_header(event, SWITCH_STACK_BOTTOM, "VM-Sofia-Profile", "%s", profile->name); - switch_event_fire(&event); - } else { - 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); - } + 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); } } + + nua_respond(nh, SIP_200_OK, SIPTAG_CONTACT(sip->sip_contact), TAG_IF(path_val, SIPTAG_PATH_STR(path_val)), NUTAG_WITH_THIS(nua), TAG_END()); + if (s_event) { + switch_event_fire(&s_event); + } return 1; } @@ -741,8 +878,9 @@ int network_port = 0; char *is_nat = NULL; - 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); + + get_addr(network_ip, sizeof(network_ip), my_addrinfo->ai_addr, my_addrinfo->ai_addrlen); + network_port = get_port(msg_addrinfo(nua_current_request(nua))->ai_addr); if (!(sip->sip_contact && sip->sip_contact->m_url)) { @@ -760,7 +898,7 @@ if (sip && sip->sip_via) { const char *port = sip->sip_via->v_port; const char *host = sip->sip_via->v_host; - + if (host && sip->sip_via->v_received) { is_nat = "via received"; } else if (host && strcmp(network_ip, host)) { @@ -788,13 +926,13 @@ break; } } - + if (ok) { is_nat = last_acl; } } } - + if (profile->reg_acl_count) { uint32_t x = 0; int ok = 1; @@ -810,8 +948,8 @@ 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()); + 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; } } @@ -823,7 +961,7 @@ } sofia_reg_handle_register(nua, profile, nh, sip, type, key, sizeof(key), &v_event, is_nat); - + if (v_event) { switch_event_fire(&v_event); } @@ -878,13 +1016,19 @@ char *cur; char authentication[256] = ""; int ss_state; + sofia_gateway_t *var_gateway = NULL; + const char *gw_name = NULL; if (session) { private_object_t *tech_pvt; + switch_channel_t *channel = switch_core_session_get_channel(session); + if ((tech_pvt = switch_core_session_get_private(session)) && switch_test_flag(tech_pvt, TFLAG_REFER)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "received reply from refer\n"); - return; + goto end; } + + gw_name = switch_channel_get_variable(channel, "sip_use_gateway"); } @@ -894,7 +1038,7 @@ authenticate = sip->sip_proxy_authenticate; } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Missing Authenticate Header!\n"); - return; + goto end; } scheme = (char const *) authenticate->au_scheme; if (authenticate->au_params) { @@ -906,9 +1050,39 @@ } } + if (!gateway) { + if (gw_name) { + var_gateway = sofia_reg_find_gateway((char *)gw_name); + } + + + if (!var_gateway && realm) { + char rb[512] = ""; + char *p = (char *) realm; + while((*p == '"')) { + p++; + } + switch_set_string(rb, p); + if ((p = strchr(rb, '"'))) { + *p = '\0'; + } + var_gateway = sofia_reg_find_gateway(rb); + } + + if (!var_gateway && sip && sip->sip_to) { + var_gateway = sofia_reg_find_gateway(sip->sip_to->a_url->url_host); + } + + if (var_gateway) { + gateway = var_gateway; + } + } + + + if (!(scheme && realm)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No scheme and realm!\n"); - return; + goto end; } if (!gateway) { @@ -927,7 +1101,7 @@ nua_authenticate(nh, SIPTAG_EXPIRES_STR(gateway->expires_str), NUTAG_AUTH(authentication), TAG_END()); - return; + goto end; cancel: @@ -937,6 +1111,16 @@ nua_cancel(nh, TAG_END()); } + end: + + if (var_gateway) { + sofia_reg_release_gateway(var_gateway); + } + + return; + + + } auth_res_t sofia_reg_parse_auth(sofia_profile_t *profile, sip_authorization_t const *authorization, sip_t const *sip, const char *regstr, @@ -958,6 +1142,7 @@ char hexdigest[2 * SU_MD5_DIGEST_SIZE + 1] = ""; char *domain_name = NULL; switch_event_t *params = NULL; + const char *auth_acl = NULL; username = realm = nonce = uri = qop = cnonce = nc = response = NULL; @@ -1057,14 +1242,19 @@ domain_name = realm; } - if (switch_xml_locate_user("id", username, domain_name, ip, &xml, &domain, &user, params) != SWITCH_STATUS_SUCCESS) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "can't find user [%s@%s]\n", username, domain_name); + if (switch_xml_locate_user("id", switch_strlen_zero(username) ? "nobody" : username, + domain_name, ip, &xml, &domain, &user, params) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "can't find user [%s@%s]\n" + "You must define a domain called '%s' in your directory and add a user with the id=\"%s\" attribute\n" + "and you must configure your device to use the proper domain in it's authentication credentials.\n" + , username, domain_name, domain_name, username); + ret = AUTH_FORBIDDEN; goto end; } - + if (!(mailbox = (char *) switch_xml_attr(user, "mailbox"))) { - mailbox = username; + mailbox = switch_strlen_zero(username) ? "nobody" : username; } dparams = switch_xml_child(domain, "params"); @@ -1084,6 +1274,10 @@ passwd = val; } + if (!strcasecmp(var, "auth-acl")) { + auth_acl = val; + } + if (!strcasecmp(var, "a1-hash")) { a1_hash = val; } @@ -1099,12 +1293,24 @@ passwd = val; } + if (!strcasecmp(var, "auth-acl")) { + auth_acl = val; + } + if (!strcasecmp(var, "a1-hash")) { a1_hash = val; } } } + if (auth_acl) { + if (!switch_check_network_list_ip(ip, auth_acl)) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "IP %s Rejected by user acl %s\n", ip, auth_acl); + ret = AUTH_FORBIDDEN; + goto end; + } + } + if (switch_strlen_zero(passwd) && switch_strlen_zero(a1_hash)) { ret = AUTH_OK; goto skip_auth; @@ -1276,13 +1482,13 @@ } -sofia_gateway_t *sofia_reg_find_gateway__(const char *file, const char *func, int line, char *key) +sofia_gateway_t *sofia_reg_find_gateway__(const char *file, const char *func, int line, const char *key) { sofia_gateway_t *gateway = NULL; switch_mutex_lock(mod_sofia_globals.hash_mutex); if ((gateway = (sofia_gateway_t *) switch_core_hash_find(mod_sofia_globals.gateway_hash, key))) { - if (!(gateway->profile->pflags & PFLAG_RUNNING)) { + if (!(gateway->profile->pflags & PFLAG_RUNNING) || gateway->deleted) { gateway = NULL; goto done; } @@ -1320,6 +1526,10 @@ } switch_mutex_unlock(mod_sofia_globals.hash_mutex); + if (status == SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Added gateway '%s' to profile '%s'\n", gateway->name, gateway->profile->name); + } + return status; } @@ -1331,5 +1541,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -1260,5 +1260,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_cdr_csv/mod_cdr_csv.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_cdr_csv/mod_cdr_csv.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_cdr_csv/mod_cdr_csv.c Mon Aug 4 21:29:58 2008 @@ -29,6 +29,11 @@ #include #include +typedef enum { + CDR_LEG_A = (1 << 0), + CDR_LEG_B = (1 << 1) +} cdr_leg_t; + struct cdr_fd { int fd; char *path; @@ -50,6 +55,7 @@ int shutdown; int rotate; int debug; + cdr_leg_t legs; } globals; SWITCH_MODULE_LOAD_FUNCTION(mod_cdr_csv_load); @@ -166,8 +172,16 @@ const char *log_dir = NULL, *accountcode = NULL, *a_template_str = NULL, *g_template_str = NULL; char *log_line, *path = NULL; - if (switch_channel_get_originator_caller_profile(channel)) { - return SWITCH_STATUS_SUCCESS; + if (!((globals.legs & CDR_LEG_A) && (globals.legs & CDR_LEG_B))) { + if ((globals.legs & CDR_LEG_A)) { + if (switch_channel_get_originator_caller_profile(channel)) { + return SWITCH_STATUS_SUCCESS; + } + } else { + if (switch_channel_get_originatee_caller_profile(channel)) { + return SWITCH_STATUS_SUCCESS; + } + } } if (!(log_dir = switch_channel_get_variable(channel, "cdr_csv_base"))) { @@ -212,13 +226,16 @@ } if (g_template_str != a_template_str) { - if (log_line && log_line != a_template_str) { + if (log_line != a_template_str) { switch_safe_free(log_line); } log_line = switch_channel_expand_variables(channel, g_template_str); } - + if (!log_line) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error creating cdr\n"); + return SWITCH_STATUS_FALSE; + } path = switch_mprintf("%s%sMaster.csv", log_dir, SWITCH_PATH_SEPARATOR); assert(path); @@ -226,7 +243,7 @@ free(path); - if (log_line && log_line != g_template_str) { + if (log_line != g_template_str) { free(log_line); } @@ -275,10 +292,11 @@ switch_core_hash_init(&globals.template_hash, pool); globals.pool = pool; - + switch_core_hash_insert(globals.template_hash, "default", default_template); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Adding default template.\n"); - + globals.legs = CDR_LEG_A; + if ((xml = switch_xml_open_cfg(cf, &cfg, NULL))) { if ((settings = switch_xml_child(cfg, "settings"))) { @@ -287,6 +305,16 @@ char *val = (char *) switch_xml_attr_soft(param, "value"); if (!strcasecmp(var, "debug")) { globals.debug = switch_true(val); + } else if (!strcasecmp(var, "legs")) { + globals.legs = 0; + + if (strchr(val, 'a')) { + globals.legs |= CDR_LEG_A; + } + + if (strchr(val, 'b')) { + globals.legs |= CDR_LEG_B; + } } else if (!strcasecmp(var, "log-base")) { globals.log_dir = switch_core_sprintf(pool, "%s%scdr-csv", val, SWITCH_PATH_SEPARATOR); } else if (!strcasecmp(var, "rotate-on-hup")) { @@ -335,7 +363,7 @@ { switch_status_t status = SWITCH_STATUS_SUCCESS; - if (switch_event_bind((char *) modname, SWITCH_EVENT_TRAP, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind(modname, SWITCH_EVENT_TRAP, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } @@ -370,5 +398,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_event_multicast/mod_event_multicast.c Mon Aug 4 21:29:58 2008 @@ -54,6 +54,7 @@ switch_hash_t *event_hash; uint8_t event_list[SWITCH_EVENT_ALL + 1]; int running; + switch_event_node_t *node; } globals; SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_address, globals.address); @@ -147,7 +148,7 @@ return; } - if (event->subclass && !strcmp(event->subclass->name, MULTICAST_EVENT)) { + if (event->subclass_name && !strcmp(event->subclass_name, MULTICAST_EVENT)) { /* ignore our own events to avoid ping pong */ return; } @@ -155,7 +156,7 @@ if (globals.event_list[(uint8_t) SWITCH_EVENT_ALL]) { send = 1; } else if ((globals.event_list[(uint8_t) event->event_id])) { - if (event->event_id != SWITCH_EVENT_CUSTOM || (event->subclass && switch_core_hash_find(globals.event_hash, event->subclass->name))) { + if (event->event_id != SWITCH_EVENT_CUSTOM || (event->subclass_name && switch_core_hash_find(globals.event_hash, event->subclass_name))) { send = 1; } } @@ -231,7 +232,7 @@ *module_interface = switch_loadable_module_create_module_interface(pool, modname); - if (switch_event_bind((char *) modname, SWITCH_EVENT_ALL, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind(modname, SWITCH_EVENT_ALL, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); switch_socket_close(globals.udp_socket); return SWITCH_STATUS_GENERR; @@ -261,6 +262,9 @@ globals.udp_socket = NULL; } + switch_event_unbind(&globals.node); + switch_event_free_subclass(MULTICAST_EVENT); + switch_core_hash_destroy(&globals.event_hash); return SWITCH_STATUS_SUCCESS; @@ -350,5 +354,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_event_socket/mod_event_socket.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_event_socket/mod_event_socket.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_event_socket/mod_event_socket.c Mon Aug 4 21:29:58 2008 @@ -106,6 +106,11 @@ static void *SWITCH_THREAD_FUNC listener_run(switch_thread_t *thread, void *obj); static void launch_listener_thread(listener_t *listener); +static struct { + switch_event_node_t *node; +} globals; + + static switch_status_t socket_logger(const switch_log_node_t *node, switch_log_level_t level) { listener_t *l; @@ -162,7 +167,7 @@ if (l->event_list[SWITCH_EVENT_ALL]) { send = 1; } else if ((l->event_list[event->event_id])) { - if (event->event_id != SWITCH_EVENT_CUSTOM || !event->subclass || (switch_core_hash_find(l->event_hash, event->subclass->name))) { + if (event->event_id != SWITCH_EVENT_CUSTOM || !event->subclass_name || (switch_core_hash_find(l->event_hash, event->subclass_name))) { send = 1; } } @@ -318,6 +323,8 @@ prefs.done = 1; + switch_log_unbind_logger(socket_logger); + close_socket(&listen_list.sock); while (prefs.threads) { @@ -326,6 +333,7 @@ break; } } + switch_event_unbind(&globals.node); switch_mutex_lock(listen_list.mutex); for (l = listen_list.listeners; l; l = l->next) { @@ -400,6 +408,8 @@ uint8_t crcount = 0; uint32_t max_len = sizeof(mbuf); switch_channel_t *channel = NULL; + int clen = 0; + *event = NULL; start = switch_timestamp(NULL); ptr = mbuf; @@ -472,16 +482,51 @@ } if (var && val) { switch_event_add_header(*event, SWITCH_STACK_BOTTOM, var, "%s", val); + if (!strcasecmp(var, "content-length")) { + clen = atoi(val); + + if (clen > 0) { + char *body; + char *p; + + switch_zmalloc(body, clen + 1); + + p = body; + while(clen > 0) { + mlen = clen; + + status = switch_socket_recv(listener->sock, p, &mlen); + + if (!SWITCH_STATUS_IS_BREAK(status) && status != SWITCH_STATUS_SUCCESS) { + return SWITCH_STATUS_FALSE; + } + + if (channel && !switch_channel_ready(channel)) { + status = SWITCH_STATUS_FALSE; + break; + } + + clen -= (int) mlen; + p += mlen; + } + + switch_event_add_body(*event, "%s", body); + free(body); + } + + + + } } } } - + cur = next; } break; } } - + if (timeout) { elapsed = (uint32_t) (switch_timestamp(NULL) - start); if (elapsed >= timeout) { @@ -532,6 +577,11 @@ } } + if (!listener->ebuf) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No event data (allocation error?)\n"); + goto endloop; + } + len = strlen(listener->ebuf); switch_snprintf(hbuf, sizeof(hbuf), "Content-Length: %" SWITCH_SSIZE_T_FMT "\n" "Content-Type: text/event-%s\n" "\n", len, etype); @@ -577,6 +627,11 @@ char *reply, *freply = NULL; switch_status_t status; + if (!acs) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Internal error.\n"); + return NULL; + } + if (!acs->listener || !acs->listener->rwlock || switch_thread_rwlock_tryrdlock(acs->listener->rwlock) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error! cannot get read lock.\n"); goto done; @@ -631,7 +686,7 @@ } done: - if (acs && acs->bg) { + if (acs->bg) { switch_memory_pool_t *pool = acs->pool; acs = NULL; switch_core_destroy_memory_pool(&pool); @@ -863,8 +918,7 @@ switch_uuid_get(&uuid); switch_uuid_format(acs->uuid_str, &uuid); } - switch_snprintf(reply, reply_len, "+OK Job-UUID: %s", acs->uuid_str); - + switch_snprintf(reply, reply_len, "~Reply-Text: +OK Job-UUID: %s\nJob-UUID: %s\n\n", acs->uuid_str, acs->uuid_str); switch_thread_create(&thread, thd_attr, api_exec, acs, acs->pool); return SWITCH_STATUS_SUCCESS; @@ -1133,7 +1187,7 @@ switch_caller_profile_event_set_data(switch_channel_get_caller_profile(channel), "Channel", call_event); switch_channel_event_set_data(channel, call_event); switch_event_add_header(call_event, SWITCH_STACK_BOTTOM, "Content-Type", "command/reply"); - + switch_event_add_header(call_event, SWITCH_STACK_BOTTOM, "Reply-Text", "+OK\n"); switch_event_add_header(call_event, SWITCH_STACK_BOTTOM, "Socket-Mode", switch_test_flag(listener, LFLAG_ASYNC) ? "async" : "static"); switch_event_add_header(call_event, SWITCH_STACK_BOTTOM, "Control", switch_test_flag(listener, LFLAG_FULL) ? "full" : "single-channel"); @@ -1167,7 +1221,11 @@ goto done; } if (*reply != '\0') { - switch_snprintf(buf, sizeof(buf), "Content-Type: command/reply\nReply-Text: %s\n\n", reply); + if (*reply == '~') { + switch_snprintf(buf, sizeof(buf), "Content-Type: command/reply\n%s", reply + 1); + } else { + switch_snprintf(buf, sizeof(buf), "Content-Type: command/reply\nReply-Text: %s\n\n", reply); + } len = strlen(buf); switch_socket_send(listener->sock, buf, &len); } @@ -1196,7 +1254,11 @@ } if (*reply != '\0') { - switch_snprintf(buf, sizeof(buf), "Content-Type: command/reply\nReply-Text: %s\n\n", reply); + if (*reply == '~') { + switch_snprintf(buf, sizeof(buf), "Content-Type: command/reply\n%s", reply + 1); + } else { + switch_snprintf(buf, sizeof(buf), "Content-Type: command/reply\nReply-Text: %s\n\n", reply); + } len = strlen(buf); switch_socket_send(listener->sock, buf, &len); } @@ -1340,12 +1402,12 @@ listen_list.ready = 1; - if (switch_event_bind((char *) modname, SWITCH_EVENT_ALL, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_ALL, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL, &globals.node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } - switch_log_bind_logger(socket_logger, SWITCH_LOG_DEBUG); + switch_log_bind_logger(socket_logger, SWITCH_LOG_DEBUG, SWITCH_FALSE); for (;;) { @@ -1412,5 +1474,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.c Mon Aug 4 21:29:58 2008 @@ -48,6 +48,7 @@ static rc_handle *my_radius_init(void) { + int i = 0; rc_handle *rad_config; rad_config = rc_new(); @@ -81,7 +82,7 @@ /* Add the module configs to initialize rad_config */ - for (int i = 0; i < SERVER_MAX && my_servers[i][0] != '\0'; i++) { + for (i = 0; i < SERVER_MAX && my_servers[i][0] != '\0'; i++) { if (rc_add_config(rad_config, "acctserver", my_servers[i], cf, 0) != 0) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "setting acctserver = %s failed\n", my_servers[i]); rc_destroy(rad_config); @@ -604,6 +605,7 @@ switch_xml_t cfg, xml, settings, param; int num_servers = 0; + int i = 0; my_timeout = "5"; my_retries = "3"; @@ -611,7 +613,7 @@ strncpy(my_seqfile, "/var/run/radius.seq", PATH_MAX - 1); strncpy(my_dictionary, "/usr/local/freeswitch/conf/radius/dictionary", PATH_MAX - 1); - for (int i = 0; i < SERVER_MAX; i++) { + for (i = 0; i < SERVER_MAX; i++) { my_servers[i][0] = '\0'; } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_zeroconf/mod_zeroconf.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_zeroconf/mod_zeroconf.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_zeroconf/mod_zeroconf.c Mon Aug 4 21:29:58 2008 @@ -46,6 +46,8 @@ sw_discovery discovery; sw_discovery_publish_id disc_id; switch_mutex_t *zc_lock; + switch_event_node_t *publish_node; + switch_event_node_t *unpublish_node; } globals; @@ -218,12 +220,12 @@ return SWITCH_STATUS_MEMERR; } } else if (!strcasecmp(var, "publish") && !strcasecmp(val, "yes")) { - if (switch_event_bind((char *) modname, SWITCH_EVENT_PUBLISH, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_PUBLISH, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL, &globals.publish_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } - if (switch_event_bind((char *) modname, SWITCH_EVENT_UNPUBLISH, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_event_bind_removable(modname, SWITCH_EVENT_UNPUBLISH, SWITCH_EVENT_SUBCLASS_ANY, event_handler, NULL, &globals.unpublish_node) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); return SWITCH_STATUS_GENERR; } @@ -248,6 +250,12 @@ RUNNING = -1; switch_yield(100000); } + + switch_event_unbind(&globals.publish_node); + switch_event_unbind(&globals.unpublish_node); + switch_event_free_subclass(MY_EVENT_PUBLISH); + switch_event_free_subclass(MY_EVENT_UNPUBLISH); + return SWITCH_STATUS_SUCCESS; } @@ -265,10 +273,6 @@ return SWITCH_STATUS_TERM; } - if (load_config() != SWITCH_STATUS_SUCCESS) { - return SWITCH_STATUS_TERM; - } - if (switch_event_reserve_subclass(MY_EVENT_PUBLISH) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't register subclass!\n"); return SWITCH_STATUS_GENERR; @@ -279,6 +283,10 @@ return SWITCH_STATUS_GENERR; } + if (load_config() != SWITCH_STATUS_SUCCESS) { + return SWITCH_STATUS_TERM; + } + /* connect my internal structure to the blank pointer passed to me */ *module_interface = switch_loadable_module_create_module_interface(pool, modname); @@ -309,5 +317,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -75,6 +75,8 @@ switch_mutex_t *mutex; switch_memory_pool_t *pool; int shuffle; + switch_thread_rwlock_t *rwlock; + int ready; }; typedef struct local_stream_source local_stream_source_t; @@ -115,9 +117,18 @@ skip = do_rand(); } + switch_thread_rwlock_create(&source->rwlock, source->pool); + + if (RUNNING) { + switch_mutex_lock(globals.mutex); + switch_core_hash_insert(globals.source_hash, source->name, source); + switch_mutex_unlock(globals.mutex); + source->ready = 1; + } + while (RUNNING) { const char *fname; - + if (switch_dir_open(&source->dir_handle, source->location, source->pool) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Can't open directory: %s\n", source->location); goto done; @@ -229,6 +240,14 @@ } done: + source->ready = 0; + switch_mutex_lock(globals.mutex); + switch_core_hash_delete(globals.source_hash, source->name); + switch_mutex_unlock(globals.mutex); + + switch_thread_rwlock_wrlock(source->rwlock); + switch_thread_rwlock_unlock(source->rwlock); + switch_buffer_destroy(&audio_buffer); if (fd > -1) { @@ -260,6 +279,11 @@ } else { source = switch_core_hash_find(globals.source_hash, path); } + if (source) { + if (switch_thread_rwlock_tryrdlock(source->rwlock) != SWITCH_STATUS_SUCCESS) { + source = NULL; + } + } switch_mutex_unlock(globals.mutex); if (!source) { @@ -326,7 +350,8 @@ context->source->total--; switch_mutex_unlock(context->source->mutex); switch_buffer_destroy(&context->audio_buffer); - + switch_thread_rwlock_unlock(context->source->rwlock); + return SWITCH_STATUS_SUCCESS; } @@ -336,6 +361,11 @@ switch_size_t bytes = 0; size_t need = *len * 2; + if (!context->source->ready) { + *len = 0; + return SWITCH_STATUS_FALSE; + } + switch_mutex_lock(context->audio_mutex); if ((bytes = switch_buffer_read(context->audio_buffer, data, need))) { *len = bytes / 2; @@ -431,8 +461,6 @@ source->samples = switch_samples_per_frame(source->rate, source->interval); - switch_core_hash_insert(globals.source_hash, source->name, source); - switch_mutex_init(&source->mutex, SWITCH_MUTEX_NESTED, source->pool); switch_threadattr_create(&thd_attr, source->pool); @@ -482,5 +510,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_native_file/mod_native_file.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_native_file/mod_native_file.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_native_file/mod_native_file.c Mon Aug 4 21:29:58 2008 @@ -132,7 +132,7 @@ /* Registration */ -static char *supported_formats[SWITCH_MAX_CODECS] = { 0 }; +static char *supported_formats[SWITCH_MAX_CODECS + 1] = { 0 }; SWITCH_MODULE_LOAD_FUNCTION(mod_native_file_load) { @@ -170,5 +170,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/decode_i386.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/decode_i386.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/decode_i386.c Mon Aug 4 21:29:58 2008 @@ -81,7 +81,7 @@ { register int j; - real *window = decwin + 16 - bo1; + real *window = (mp->decwin) + 16 - bo1; for (j = 16; j; j--, b0 += 0x10, window += 0x20, samples += step) { real sum; Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/interface.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/interface.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/interface.c Mon Aug 4 21:29:58 2008 @@ -13,7 +13,7 @@ } -BOOL InitMP3(struct mpstr *mp, long outscale, int samplerate) +MPGLIB_BOOL InitMP3(struct mpstr *mp, long outscale, int samplerate) { /* quiet 4096 med 8192 */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/layer3.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/layer3.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/layer3.c Mon Aug 4 21:29:58 2008 @@ -32,8 +32,11 @@ short shortDiff[13]; }; - +#ifndef _WIN32 static inline real find_pow(int i) +#else +static real find_pow(int i) +#endif { return (i > 0 && i < 8207) ? __ispow[i] : 1; Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/mod_shout.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/mod_shout.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/mod_shout.c Mon Aug 4 21:29:58 2008 @@ -85,8 +85,15 @@ } if (context->fp) { - unsigned char mp3buffer[1024]; + unsigned char mp3buffer[8192]; int len; + int16_t blank[2048] = {0}, *r = NULL; + + len = lame_encode_buffer(context->gfp, blank, r, sizeof(blank) / 2, mp3buffer, sizeof(mp3buffer)); + + if (len) { + ret = fwrite(mp3buffer, 1, len, context->fp); + } while ((len = lame_encode_flush(context->gfp, mp3buffer, sizeof(mp3buffer))) > 0) { ret = fwrite(mp3buffer, 1, len, context->fp); @@ -94,7 +101,7 @@ break; } } - + lame_mp3_tags_fid(context->gfp, context->fp); fclose(context->fp); @@ -241,6 +248,7 @@ x = 0; if (inlen < bytes) { + bytes = inlen; done = 1; } @@ -471,6 +479,12 @@ { shout_context_t *context = (shout_context_t *) obj; + if (!context->lame_ready) { + lame_init_params(context->gfp); + lame_print_config(context->gfp); + context->lame_ready = 1; + } + while (!context->err && context->thread_running) { unsigned char mp3buf[8192] = ""; unsigned char audio[8192] = ""; Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/mpg123.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/mpg123.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/mpg123.h Mon Aug 4 21:29:58 2008 @@ -1,3 +1,6 @@ +#ifndef MPG123_DEFINED +#define MPG123_DEFINED + #include #include #include @@ -127,3 +130,5 @@ extern long freqs[9]; extern struct parameter param; extern real *pnts[5]; + +#endif Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/mpglib.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/mpglib.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_shout/mpglib.h Mon Aug 4 21:29:58 2008 @@ -5,6 +5,10 @@ #endif #define NTOM_MUL (32768) +#ifdef _WIN32 +#include "mpg123.h" +#endif + struct buf { unsigned char *pnt; long size; @@ -44,7 +48,7 @@ unsigned long ntom_step; }; -#define BOOL int +#define MPGLIB_BOOL int #define MP3_ERR -1 #define MP3_OK 0 @@ -52,7 +56,7 @@ #define MP3_TOOSMALL 2 void InitMP3Constants(void); -BOOL InitMP3(struct mpstr *mp, long outscale, int samplerate); +MPGLIB_BOOL InitMP3(struct mpstr *mp, long outscale, int samplerate); int decodeMP3(struct mpstr *mp, char *inmemory, int inmemsize, char *outmemory, int outmemsize, int *done); void ExitMP3(struct mpstr *mp); 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 Mon Aug 4 21:29:58 2008 @@ -420,5 +420,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_tone_stream/mod_tone_stream.c ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_tone_stream/mod_tone_stream.c (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/formats/mod_tone_stream/mod_tone_stream.c Mon Aug 4 21:29:58 2008 @@ -35,6 +35,72 @@ SWITCH_MODULE_DEFINITION(mod_tone_stream, mod_tone_stream_load, NULL, NULL); SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_tone_stream_shutdown); +struct silence_handle { + int32_t samples; + int silence; +}; + +static switch_status_t silence_stream_file_open(switch_file_handle_t *handle, const char *path) +{ + + struct silence_handle *sh; + int ms; + + sh = switch_core_alloc(handle->memory_pool, sizeof(*sh)); + + ms = atoi(path); + + if (ms > 0) { + char *p; + + sh->samples = (handle->samplerate / 1000) * ms; + + if ((p = strchr(path, ','))) { + p++; + ms = atoi(p); + if (ms > 0) { + sh->silence = ms; + } + } + + handle->private_info = sh; + return SWITCH_STATUS_SUCCESS; + } + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "invalid format!\n"); + + return SWITCH_STATUS_GENERR; +} + +static switch_status_t silence_stream_file_close(switch_file_handle_t *handle) +{ + return SWITCH_STATUS_SUCCESS; +} + +static switch_status_t silence_stream_file_read(switch_file_handle_t *handle, void *data, size_t *len) +{ + struct silence_handle *sh = handle->private_info; + + if (sh->samples <= 0) { + return SWITCH_STATUS_FALSE; + } + + if (*len > (size_t)sh->samples) { + *len = sh->samples; + } + + sh->samples -= *len; + + if (sh->silence) { + switch_generate_sln_silence((int16_t *) data, *len, sh->silence); + } else { + memset(data, 0, *len); + } + + return SWITCH_STATUS_SUCCESS; +} + + static int teletone_handler(teletone_generation_session_t *ts, teletone_tone_map_t *map) { switch_buffer_t *audio_buffer = ts->user_data; @@ -130,11 +196,13 @@ /* Registration */ static char *supported_formats[SWITCH_MAX_CODECS] = { 0 }; +static char *silence_supported_formats[SWITCH_MAX_CODECS] = { 0 }; SWITCH_MODULE_LOAD_FUNCTION(mod_tone_stream_load) { switch_file_interface_t *file_interface; supported_formats[0] = "tone_stream"; + silence_supported_formats[0] = "silence_stream"; *module_interface = switch_loadable_module_create_module_interface(pool, modname); file_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_FILE_INTERFACE); @@ -144,6 +212,13 @@ file_interface->file_close = tone_stream_file_close; file_interface->file_read = tone_stream_file_read; + file_interface = switch_loadable_module_create_interface(*module_interface, SWITCH_FILE_INTERFACE); + file_interface->interface_name = modname; + file_interface->extens = silence_supported_formats; + file_interface->file_open = silence_stream_file_open; + file_interface->file_close = silence_stream_file_close; + file_interface->file_read = silence_stream_file_read; + /* indicate that the module should continue to be loaded */ return SWITCH_STATUS_SUCCESS; } @@ -161,5 +236,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -84,6 +84,30 @@ return new SWIGTYPE_p_switch_channel_state_t(freeswitchJNI.CoreSession_hook_state_get(swigCPtr, this), true); } + public void setUuid(String value) { + freeswitchJNI.CoreSession_uuid_set(swigCPtr, this, value); + } + + public String getUuid() { + return freeswitchJNI.CoreSession_uuid_get(swigCPtr, this); + } + + public void setTts_name(String value) { + freeswitchJNI.CoreSession_tts_name_set(swigCPtr, this, value); + } + + public String getTts_name() { + return freeswitchJNI.CoreSession_tts_name_get(swigCPtr, this); + } + + public void setVoice_name(String value) { + freeswitchJNI.CoreSession_voice_name_set(swigCPtr, this, value); + } + + public String getVoice_name() { + return freeswitchJNI.CoreSession_voice_name_get(swigCPtr, this); + } + public int answer() { return freeswitchJNI.CoreSession_answer(swigCPtr, this); } @@ -182,7 +206,11 @@ } public String getDigits(int maxdigits, String terminators, int timeout) { - return freeswitchJNI.CoreSession_getDigits(swigCPtr, this, maxdigits, terminators, timeout); + return freeswitchJNI.CoreSession_getDigits__SWIG_0(swigCPtr, this, maxdigits, terminators, timeout); + } + + public String getDigits(int maxdigits, String terminators, int timeout, int interdigit) { + return freeswitchJNI.CoreSession_getDigits__SWIG_1(swigCPtr, this, maxdigits, terminators, timeout, interdigit); } public int transfer(String extensions, String dialplan, String context) { @@ -205,6 +233,10 @@ return freeswitchJNI.CoreSession_streamFile__SWIG_1(swigCPtr, this, file); } + public int sleep(int ms) { + return freeswitchJNI.CoreSession_sleep(swigCPtr, this, ms); + } + public int flushEvents() { return freeswitchJNI.CoreSession_flushEvents(swigCPtr, this); } @@ -225,6 +257,18 @@ return freeswitchJNI.CoreSession_ready(swigCPtr, this); } + public boolean answered() { + return freeswitchJNI.CoreSession_answered(swigCPtr, this); + } + + public boolean mediaReady() { + return freeswitchJNI.CoreSession_mediaReady(swigCPtr, this); + } + + public void waitForAnswer(CoreSession calling_session) { + freeswitchJNI.CoreSession_waitForAnswer(swigCPtr, this, CoreSession.getCPtr(calling_session), calling_session); + } + public void execute(String app, String data) { freeswitchJNI.CoreSession_execute__SWIG_0(swigCPtr, this, app, data); } 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 Mon Aug 4 21:29:58 2008 @@ -32,6 +32,13 @@ public final static native int S_HUP_get(); public final static native int S_FREE_get(); public final static native int S_RDLOCK_get(); + public final static native void DTMF_digit_set(long jarg1, DTMF jarg1_, char jarg2); + public final static native char DTMF_digit_get(long jarg1, DTMF jarg1_); + public final static native void DTMF_duration_set(long jarg1, DTMF jarg1_, long jarg2); + public final static native long DTMF_duration_get(long jarg1, DTMF jarg1_); + public final static native long new_DTMF__SWIG_0(char jarg1, long jarg2); + public final static native long new_DTMF__SWIG_1(char jarg1); + public final static native void delete_DTMF(long jarg1); public final static native long new_Stream__SWIG_0(); public final static native long new_Stream__SWIG_1(long jarg1); public final static native void delete_Stream(long jarg1); @@ -59,6 +66,23 @@ public final static native boolean Event_addHeader(long jarg1, Event jarg1_, String jarg2, String jarg3); public final static native boolean Event_delHeader(long jarg1, Event jarg1_, String jarg2); public final static native boolean Event_fire(long jarg1, Event jarg1_); + public final static native void EventConsumer_events_set(long jarg1, EventConsumer jarg1_, long jarg2); + public final static native long EventConsumer_events_get(long jarg1, EventConsumer jarg1_); + public final static native void EventConsumer_e_event_id_set(long jarg1, EventConsumer jarg1_, long jarg2); + public final static native long EventConsumer_e_event_id_get(long jarg1, EventConsumer jarg1_); + public final static native void EventConsumer_node_set(long jarg1, EventConsumer jarg1_, long jarg2); + public final static native long EventConsumer_node_get(long jarg1, EventConsumer jarg1_); + public final static native void EventConsumer_e_callback_set(long jarg1, EventConsumer jarg1_, String jarg2); + public final static native String EventConsumer_e_callback_get(long jarg1, EventConsumer jarg1_); + public final static native void EventConsumer_e_subclass_name_set(long jarg1, EventConsumer jarg1_, String jarg2); + public final static native String EventConsumer_e_subclass_name_get(long jarg1, EventConsumer jarg1_); + public final static native void EventConsumer_e_cb_arg_set(long jarg1, EventConsumer jarg1_, String jarg2); + public final static native String EventConsumer_e_cb_arg_get(long jarg1, EventConsumer jarg1_); + public final static native long new_EventConsumer__SWIG_0(String jarg1, String jarg2); + public final static native long new_EventConsumer__SWIG_1(String jarg1); + public final static native void delete_EventConsumer(long jarg1); + public final static native long EventConsumer_pop__SWIG_0(long jarg1, EventConsumer jarg1_, int jarg2); + public final static native long EventConsumer_pop__SWIG_1(long jarg1, EventConsumer jarg1_); public final static native void delete_CoreSession(long jarg1); public final static native void CoreSession_session_set(long jarg1, CoreSession jarg1_, long jarg2); public final static native long CoreSession_session_get(long jarg1, CoreSession jarg1_); @@ -72,6 +96,12 @@ public final static native long CoreSession_cb_state_get(long jarg1, CoreSession jarg1_); public final static native void CoreSession_hook_state_set(long jarg1, CoreSession jarg1_, long jarg2); public final static native long CoreSession_hook_state_get(long jarg1, CoreSession jarg1_); + public final static native void CoreSession_uuid_set(long jarg1, CoreSession jarg1_, String jarg2); + public final static native String CoreSession_uuid_get(long jarg1, CoreSession jarg1_); + public final static native void CoreSession_tts_name_set(long jarg1, CoreSession jarg1_, String jarg2); + public final static native String CoreSession_tts_name_get(long jarg1, CoreSession jarg1_); + public final static native void CoreSession_voice_name_set(long jarg1, CoreSession jarg1_, String jarg2); + public final static native String CoreSession_voice_name_get(long jarg1, CoreSession jarg1_); public final static native int CoreSession_answer(long jarg1, CoreSession jarg1_); public final static native int CoreSession_preAnswer(long jarg1, CoreSession jarg1_); public final static native void CoreSession_hangup__SWIG_0(long jarg1, CoreSession jarg1_, String jarg2); @@ -96,17 +126,22 @@ public final static native int CoreSession_speak(long jarg1, CoreSession jarg1_, String jarg2); public final static native void CoreSession_set_tts_parms(long jarg1, CoreSession jarg1_, String jarg2, String jarg3); public final static native int CoreSession_collectDigits(long jarg1, CoreSession jarg1_, int jarg2); - public final static native String CoreSession_getDigits(long jarg1, CoreSession jarg1_, int jarg2, String jarg3, int jarg4); + public final static native String CoreSession_getDigits__SWIG_0(long jarg1, CoreSession jarg1_, int jarg2, String jarg3, int jarg4); + public final static native String CoreSession_getDigits__SWIG_1(long jarg1, CoreSession jarg1_, int jarg2, String jarg3, int jarg4, int jarg5); public final static native int CoreSession_transfer(long jarg1, CoreSession jarg1_, String jarg2, String jarg3, String jarg4); public final static native String CoreSession_read(long jarg1, CoreSession jarg1_, int jarg2, int jarg3, String jarg4, int jarg5, String jarg6); public final static native String CoreSession_playAndGetDigits(long jarg1, CoreSession jarg1_, int jarg2, int jarg3, int jarg4, int jarg5, String jarg6, String jarg7, String jarg8, String jarg9); public final static native int CoreSession_streamFile__SWIG_0(long jarg1, CoreSession jarg1_, String jarg2, int jarg3); public final static native int CoreSession_streamFile__SWIG_1(long jarg1, CoreSession jarg1_, String jarg2); + public final static native int CoreSession_sleep(long jarg1, CoreSession jarg1_, int jarg2); public final static native int CoreSession_flushEvents(long jarg1, CoreSession jarg1_); public final static native int CoreSession_flushDigits(long jarg1, CoreSession jarg1_); 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 boolean CoreSession_answered(long jarg1, CoreSession jarg1_); + public final static native boolean CoreSession_mediaReady(long jarg1, CoreSession jarg1_); + public final static native void CoreSession_waitForAnswer(long jarg1, CoreSession jarg1_, long jarg2, CoreSession jarg2_); 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_); 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 Mon Aug 4 21:29:58 2008 @@ -643,6 +643,117 @@ } +SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_DTMF_1digit_1set(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jchar jarg2) { + DTMF *arg1 = (DTMF *) 0 ; + char arg2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(DTMF **)&jarg1; + arg2 = (char)jarg2; + if (arg1) (arg1)->digit = arg2; + +} + + +SWIGEXPORT jchar JNICALL Java_org_freeswitch_swig_freeswitchJNI_DTMF_1digit_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jchar jresult = 0 ; + DTMF *arg1 = (DTMF *) 0 ; + char result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(DTMF **)&jarg1; + result = (char) ((arg1)->digit); + jresult = (jchar)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_DTMF_1duration_1set(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { + DTMF *arg1 = (DTMF *) 0 ; + uint32_t arg2 ; + uint32_t *argp2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(DTMF **)&jarg1; + argp2 = *(uint32_t **)&jarg2; + if (!argp2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null uint32_t"); + return ; + } + arg2 = *argp2; + if (arg1) (arg1)->duration = arg2; + +} + + +SWIGEXPORT jlong JNICALL Java_org_freeswitch_swig_freeswitchJNI_DTMF_1duration_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + DTMF *arg1 = (DTMF *) 0 ; + uint32_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(DTMF **)&jarg1; + result = ((arg1)->duration); + *(uint32_t **)&jresult = new uint32_t((uint32_t &)result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_freeswitch_swig_freeswitchJNI_new_1DTMF_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jchar jarg1, jlong jarg2) { + jlong jresult = 0 ; + char arg1 ; + uint32_t arg2 ; + DTMF *result = 0 ; + uint32_t *argp2 ; + + (void)jenv; + (void)jcls; + arg1 = (char)jarg1; + argp2 = *(uint32_t **)&jarg2; + if (!argp2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null uint32_t"); + return 0; + } + arg2 = *argp2; + result = (DTMF *)new DTMF(arg1,arg2); + *(DTMF **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_freeswitch_swig_freeswitchJNI_new_1DTMF_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jchar jarg1) { + jlong jresult = 0 ; + char arg1 ; + DTMF *result = 0 ; + + (void)jenv; + (void)jcls; + arg1 = (char)jarg1; + result = (DTMF *)new DTMF(arg1); + *(DTMF **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_delete_1DTMF(JNIEnv *jenv, jclass jcls, jlong jarg1) { + DTMF *arg1 = (DTMF *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(DTMF **)&jarg1; + delete arg1; + +} + + SWIGEXPORT jlong JNICALL Java_org_freeswitch_swig_freeswitchJNI_new_1Stream_1_1SWIG_10(JNIEnv *jenv, jclass jcls) { jlong jresult = 0 ; Stream *result = 0 ; @@ -1113,6 +1224,310 @@ } +SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_EventConsumer_1events_1set(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { + EventConsumer *arg1 = (EventConsumer *) 0 ; + switch_queue_t *arg2 = (switch_queue_t *) 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(EventConsumer **)&jarg1; + arg2 = *(switch_queue_t **)&jarg2; + if (arg1) (arg1)->events = arg2; + +} + + +SWIGEXPORT jlong JNICALL Java_org_freeswitch_swig_freeswitchJNI_EventConsumer_1events_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + EventConsumer *arg1 = (EventConsumer *) 0 ; + switch_queue_t *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(EventConsumer **)&jarg1; + result = (switch_queue_t *) ((arg1)->events); + *(switch_queue_t **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_EventConsumer_1e_1event_1id_1set(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { + EventConsumer *arg1 = (EventConsumer *) 0 ; + switch_event_types_t arg2 ; + switch_event_types_t *argp2 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(EventConsumer **)&jarg1; + argp2 = *(switch_event_types_t **)&jarg2; + if (!argp2) { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null switch_event_types_t"); + return ; + } + arg2 = *argp2; + if (arg1) (arg1)->e_event_id = arg2; + +} + + +SWIGEXPORT jlong JNICALL Java_org_freeswitch_swig_freeswitchJNI_EventConsumer_1e_1event_1id_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + EventConsumer *arg1 = (EventConsumer *) 0 ; + switch_event_types_t result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(EventConsumer **)&jarg1; + result = ((arg1)->e_event_id); + *(switch_event_types_t **)&jresult = new switch_event_types_t((switch_event_types_t &)result); + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_EventConsumer_1node_1set(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2) { + EventConsumer *arg1 = (EventConsumer *) 0 ; + switch_event_node_t *arg2 = (switch_event_node_t *) 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(EventConsumer **)&jarg1; + arg2 = *(switch_event_node_t **)&jarg2; + if (arg1) (arg1)->node = arg2; + +} + + +SWIGEXPORT jlong JNICALL Java_org_freeswitch_swig_freeswitchJNI_EventConsumer_1node_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + EventConsumer *arg1 = (EventConsumer *) 0 ; + switch_event_node_t *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(EventConsumer **)&jarg1; + result = (switch_event_node_t *) ((arg1)->node); + *(switch_event_node_t **)&jresult = result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_EventConsumer_1e_1callback_1set(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) { + EventConsumer *arg1 = (EventConsumer *) 0 ; + char *arg2 = (char *) 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(EventConsumer **)&jarg1; + arg2 = 0; + if (jarg2) { + arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0); + if (!arg2) return ; + } + { + if (arg1->e_callback) delete [] arg1->e_callback; + if (arg2) { + arg1->e_callback = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->e_callback, (const char *)arg2); + } else { + arg1->e_callback = 0; + } + } + if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2); +} + + +SWIGEXPORT jstring JNICALL Java_org_freeswitch_swig_freeswitchJNI_EventConsumer_1e_1callback_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jstring jresult = 0 ; + EventConsumer *arg1 = (EventConsumer *) 0 ; + char *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(EventConsumer **)&jarg1; + result = (char *) ((arg1)->e_callback); + if(result) jresult = jenv->NewStringUTF((const char *)result); + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_EventConsumer_1e_1subclass_1name_1set(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) { + EventConsumer *arg1 = (EventConsumer *) 0 ; + char *arg2 = (char *) 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(EventConsumer **)&jarg1; + arg2 = 0; + if (jarg2) { + arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0); + if (!arg2) return ; + } + { + if (arg1->e_subclass_name) delete [] arg1->e_subclass_name; + if (arg2) { + arg1->e_subclass_name = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->e_subclass_name, (const char *)arg2); + } else { + arg1->e_subclass_name = 0; + } + } + if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2); +} + + +SWIGEXPORT jstring JNICALL Java_org_freeswitch_swig_freeswitchJNI_EventConsumer_1e_1subclass_1name_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jstring jresult = 0 ; + EventConsumer *arg1 = (EventConsumer *) 0 ; + char *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(EventConsumer **)&jarg1; + result = (char *) ((arg1)->e_subclass_name); + if(result) jresult = jenv->NewStringUTF((const char *)result); + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_EventConsumer_1e_1cb_1arg_1set(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) { + EventConsumer *arg1 = (EventConsumer *) 0 ; + char *arg2 = (char *) 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(EventConsumer **)&jarg1; + arg2 = 0; + if (jarg2) { + arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0); + if (!arg2) return ; + } + { + if (arg1->e_cb_arg) delete [] arg1->e_cb_arg; + if (arg2) { + arg1->e_cb_arg = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->e_cb_arg, (const char *)arg2); + } else { + arg1->e_cb_arg = 0; + } + } + if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2); +} + + +SWIGEXPORT jstring JNICALL Java_org_freeswitch_swig_freeswitchJNI_EventConsumer_1e_1cb_1arg_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jstring jresult = 0 ; + EventConsumer *arg1 = (EventConsumer *) 0 ; + char *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(EventConsumer **)&jarg1; + result = (char *) ((arg1)->e_cb_arg); + if(result) jresult = jenv->NewStringUTF((const char *)result); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_freeswitch_swig_freeswitchJNI_new_1EventConsumer_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jstring jarg1, jstring jarg2) { + jlong jresult = 0 ; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + EventConsumer *result = 0 ; + + (void)jenv; + (void)jcls; + arg1 = 0; + if (jarg1) { + arg1 = (char *)jenv->GetStringUTFChars(jarg1, 0); + if (!arg1) return 0; + } + arg2 = 0; + if (jarg2) { + arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0); + if (!arg2) return 0; + } + result = (EventConsumer *)new EventConsumer((char const *)arg1,(char const *)arg2); + *(EventConsumer **)&jresult = result; + if (arg1) jenv->ReleaseStringUTFChars(jarg1, (const char *)arg1); + if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2); + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_freeswitch_swig_freeswitchJNI_new_1EventConsumer_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jstring jarg1) { + jlong jresult = 0 ; + char *arg1 = (char *) 0 ; + EventConsumer *result = 0 ; + + (void)jenv; + (void)jcls; + arg1 = 0; + if (jarg1) { + arg1 = (char *)jenv->GetStringUTFChars(jarg1, 0); + if (!arg1) return 0; + } + result = (EventConsumer *)new EventConsumer((char const *)arg1); + *(EventConsumer **)&jresult = result; + if (arg1) jenv->ReleaseStringUTFChars(jarg1, (const char *)arg1); + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_delete_1EventConsumer(JNIEnv *jenv, jclass jcls, jlong jarg1) { + EventConsumer *arg1 = (EventConsumer *) 0 ; + + (void)jenv; + (void)jcls; + arg1 = *(EventConsumer **)&jarg1; + delete arg1; + +} + + +SWIGEXPORT jlong JNICALL Java_org_freeswitch_swig_freeswitchJNI_EventConsumer_1pop_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jlong jresult = 0 ; + EventConsumer *arg1 = (EventConsumer *) 0 ; + int arg2 ; + Event *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(EventConsumer **)&jarg1; + arg2 = (int)jarg2; + result = (Event *)(arg1)->pop(arg2); + *(Event **)&jresult = result; + return jresult; +} + + +SWIGEXPORT jlong JNICALL Java_org_freeswitch_swig_freeswitchJNI_EventConsumer_1pop_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jlong jresult = 0 ; + EventConsumer *arg1 = (EventConsumer *) 0 ; + Event *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(EventConsumer **)&jarg1; + result = (Event *)(arg1)->pop(); + *(Event **)&jresult = result; + return jresult; +} + + SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_delete_1CoreSession(JNIEnv *jenv, jclass jcls, jlong jarg1) { CoreSession *arg1 = (CoreSession *) 0 ; @@ -1305,6 +1720,129 @@ } +SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1uuid_1set(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 ; + } + { + if (arg1->uuid) delete [] arg1->uuid; + if (arg2) { + arg1->uuid = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->uuid, (const char *)arg2); + } else { + arg1->uuid = 0; + } + } + if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2); +} + + +SWIGEXPORT jstring JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1uuid_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jstring jresult = 0 ; + CoreSession *arg1 = (CoreSession *) 0 ; + char *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(CoreSession **)&jarg1; + result = (char *) ((arg1)->uuid); + if(result) jresult = jenv->NewStringUTF((const char *)result); + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1tts_1name_1set(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 ; + } + { + if (arg1->tts_name) delete [] arg1->tts_name; + if (arg2) { + arg1->tts_name = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->tts_name, (const char *)arg2); + } else { + arg1->tts_name = 0; + } + } + if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2); +} + + +SWIGEXPORT jstring JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1tts_1name_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jstring jresult = 0 ; + CoreSession *arg1 = (CoreSession *) 0 ; + char *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(CoreSession **)&jarg1; + result = (char *) ((arg1)->tts_name); + if(result) jresult = jenv->NewStringUTF((const char *)result); + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1voice_1name_1set(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 ; + } + { + if (arg1->voice_name) delete [] arg1->voice_name; + if (arg2) { + arg1->voice_name = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->voice_name, (const char *)arg2); + } else { + arg1->voice_name = 0; + } + } + if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2); +} + + +SWIGEXPORT jstring JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1voice_1name_1get(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jstring jresult = 0 ; + CoreSession *arg1 = (CoreSession *) 0 ; + char *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(CoreSession **)&jarg1; + result = (char *) ((arg1)->voice_name); + if(result) jresult = jenv->NewStringUTF((const char *)result); + return jresult; +} + + SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1answer(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { jint jresult = 0 ; CoreSession *arg1 = (CoreSession *) 0 ; @@ -1850,7 +2388,7 @@ } -SWIGEXPORT jstring JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1getDigits(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jstring jarg3, jint jarg4) { +SWIGEXPORT jstring JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1getDigits_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jstring jarg3, jint jarg4) { jstring jresult = 0 ; CoreSession *arg1 = (CoreSession *) 0 ; int arg2 ; @@ -1876,6 +2414,34 @@ } +SWIGEXPORT jstring JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1getDigits_1_1SWIG_11(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2, jstring jarg3, jint jarg4, jint jarg5) { + jstring jresult = 0 ; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + char *arg3 = (char *) 0 ; + int arg4 ; + int arg5 ; + char *result = 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(CoreSession **)&jarg1; + arg2 = (int)jarg2; + arg3 = 0; + if (jarg3) { + arg3 = (char *)jenv->GetStringUTFChars(jarg3, 0); + if (!arg3) return 0; + } + arg4 = (int)jarg4; + arg5 = (int)jarg5; + result = (char *)(arg1)->getDigits(arg2,arg3,arg4,arg5); + if(result) jresult = jenv->NewStringUTF((const char *)result); + if (arg3) jenv->ReleaseStringUTFChars(jarg3, (const char *)arg3); + return jresult; +} + + SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1transfer(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jstring jarg3, jstring jarg4) { jint jresult = 0 ; CoreSession *arg1 = (CoreSession *) 0 ; @@ -2044,6 +2610,23 @@ } +SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1sleep(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jint jarg2) { + jint jresult = 0 ; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + int result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(CoreSession **)&jarg1; + arg2 = (int)jarg2; + result = (int)(arg1)->sleep(arg2); + jresult = (jint)result; + return jresult; +} + + SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1flushEvents(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { jint jresult = 0 ; CoreSession *arg1 = (CoreSession *) 0 ; @@ -2119,6 +2702,50 @@ } +SWIGEXPORT jboolean JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1answered(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + CoreSession *arg1 = (CoreSession *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(CoreSession **)&jarg1; + result = (bool)(arg1)->answered(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT jboolean JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1mediaReady(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + jboolean jresult = 0 ; + CoreSession *arg1 = (CoreSession *) 0 ; + bool result; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(CoreSession **)&jarg1; + result = (bool)(arg1)->mediaReady(); + jresult = (jboolean)result; + return jresult; +} + + +SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1waitForAnswer(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) { + CoreSession *arg1 = (CoreSession *) 0 ; + CoreSession *arg2 = (CoreSession *) 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + (void)jarg2_; + arg1 = *(CoreSession **)&jarg1; + arg2 = *(CoreSession **)&jarg2; + (arg1)->waitForAnswer(arg2); +} + + 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 ; 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 Mon Aug 4 21:29:58 2008 @@ -13,6 +13,8 @@ $(LIBLUA_A): cd lua && $(MAKE) CC="$(CC)" CFLAGS="$(ALL_CFLAGS) -DLUA_USE_LINUX -w" liblua.a +reswig: swigclean mod_lua_wrap.cpp + luaclean: cd lua && $(MAKE) clean Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/freeswitch_lua.cpp ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/freeswitch_lua.cpp (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/freeswitch_lua.cpp Mon Aug 4 21:29:58 2008 @@ -9,7 +9,7 @@ hh = mark = 0; } -Session::Session(char *uuid):CoreSession(uuid) +Session::Session(char *nuuid, CoreSession *a_leg):CoreSession(nuuid, a_leg) { cb_function = cb_arg = hangup_func_str = hangup_func_arg = NULL; hh = mark = 0; @@ -50,7 +50,14 @@ void Session::setLUA(lua_State * state) { + sanity_check_noreturn; + L = state; + if (uuid) { + lua_setglobal(L, uuid); + lua_getfield(L, LUA_GLOBALSINDEX, uuid); + } + } lua_State *Session::getLUA() @@ -84,7 +91,7 @@ { if (hh && !mark) { const char *err = NULL; - int arg_count = 1; + int arg_count = 2; mark++; if (!getLUA()) { @@ -92,6 +99,7 @@ } lua_getfield(L, LUA_GLOBALSINDEX, (char *) hangup_func_str); + lua_getfield(L, LUA_GLOBALSINDEX, uuid); lua_pushstring(L, hook_state == CS_HANGUP ? "hangup" : "transfer"); @@ -180,9 +188,11 @@ { switch_dtmf_t *dtmf = (switch_dtmf_t *) input; char str[2] = ""; - int arg_count = 2; + int arg_count = 3; lua_getfield(L, LUA_GLOBALSINDEX, (char *) cb_function); + lua_getfield(L, LUA_GLOBALSINDEX, uuid); + lua_pushstring(L, "dtmf"); lua_newtable(L); @@ -210,9 +220,11 @@ case SWITCH_INPUT_TYPE_EVENT: { switch_event_t *event = (switch_event_t *) input; - int arg_count = 2; + int arg_count = 3; + lua_getfield(L, LUA_GLOBALSINDEX, (char *) cb_function); + lua_getfield(L, LUA_GLOBALSINDEX, uuid); lua_pushstring(L, "event"); mod_lua_conjure_event(L, event, "__Input_Event__", 1); lua_getfield(L, LUA_GLOBALSINDEX, "__Input_Event__"); @@ -222,8 +234,7 @@ arg_count++; } - lua_call(L, 2, 1); - + lua_call(L, arg_count, 1); ret = lua_tostring(L, -1); lua_pop(L, 1); Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/freeswitch_lua.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/freeswitch_lua.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/freeswitch_lua.h Mon Aug 4 21:29:58 2008 @@ -20,7 +20,7 @@ int mark; public: Session(); - Session(char *uuid); + Session(char *uuid, CoreSession *a_leg = NULL); Session(switch_core_session_t *session); ~Session(); @@ -29,7 +29,7 @@ virtual void check_hangup_hook(); virtual switch_status_t run_dtmf_callback(void *input, switch_input_type_t itype); - void setInputCallback(char *cbfunc, char *funcargs); + void setInputCallback(char *cbfunc, char *funcargs = NULL); void setHangupHook(char *func, char *arg = NULL); bool ready(); Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/hack.diff ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/hack.diff (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/hack.diff Mon Aug 4 21:29:58 2008 @@ -1,6 +1,6 @@ ---- mod_lua_wrap.cpp 2008-05-11 20:03:58.000000000 -0400 -+++ mod_lua_wrap2.cpp 2008-05-11 20:05:08.000000000 -0400 -@@ -5158,7 +5158,7 @@ +--- mod_lua_wrap.cpp 2008-07-16 16:58:58.000000000 -0400 ++++ old.cpp 2008-07-16 16:58:42.000000000 -0400 +@@ -6731,7 +6731,7 @@ SWIG_check_num_args("LUA::Session",0,0) result = (LUA::Session *)new LUA::Session(); SWIG_arg=0; @@ -9,7 +9,16 @@ return SWIG_arg; if(0) SWIG_fail; -@@ -5179,7 +5179,7 @@ +@@ -6759,7 +6759,7 @@ + + result = (LUA::Session *)new LUA::Session(arg1,arg2); + SWIG_arg=0; +- SWIG_NewPointerObj(L,result,SWIGTYPE_p_LUA__Session,1); SWIG_arg++; ++ SWIG_NewPointerObj(L,result,SWIGTYPE_p_LUA__Session,1); SWIG_arg++; result->setLUA(L); + return SWIG_arg; + + if(0) SWIG_fail; +@@ -6780,7 +6780,7 @@ arg1 = (char *)lua_tostring(L, 1); result = (LUA::Session *)new LUA::Session(arg1); SWIG_arg=0; @@ -18,7 +27,7 @@ return SWIG_arg; if(0) SWIG_fail; -@@ -5204,7 +5204,7 @@ +@@ -6805,7 +6805,7 @@ result = (LUA::Session *)new LUA::Session(arg1); SWIG_arg=0; Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/mod_lua.cpp ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/mod_lua.cpp (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/mod_lua.cpp Mon Aug 4 21:29:58 2008 @@ -38,14 +38,18 @@ #include #include "mod_lua_extra.h" SWITCH_MODULE_LOAD_FUNCTION(mod_lua_load); -SWITCH_MODULE_DEFINITION(mod_lua, mod_lua_load, NULL, NULL); +SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_lua_shutdown); + +SWITCH_MODULE_DEFINITION(mod_lua, mod_lua_load, mod_lua_shutdown, NULL); static struct { switch_memory_pool_t *pool; char *xml_handler; + switch_event_node_t *node; } globals; int luaopen_freeswitch(lua_State * L); +int lua_thread(const char *text); static int panic(lua_State * L) { @@ -251,7 +255,7 @@ static switch_status_t do_config(void) { - char *cf = "lua.conf"; + const char *cf = "lua.conf"; switch_xml_t cfg, xml, settings, param; if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) { @@ -271,6 +275,10 @@ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "binding '%s' to '%s'\n", globals.xml_handler, val); switch_xml_bind_search_function(lua_fetch, switch_xml_parse_section_string(val), NULL); } + } else if (!strcmp(var, "startup-script")) { + if (val) { + lua_thread(val); + } } } } @@ -363,11 +371,38 @@ return SWITCH_STATUS_SUCCESS; } +static void message_query_handler(switch_event_t *event) +{ + char *account = switch_event_get_header(event, "message-account"); + + if (account) { + char *path, *cmd; + + path = switch_mprintf("%s%smwi.lua", SWITCH_GLOBAL_dirs.script_dir, SWITCH_PATH_SEPARATOR); + switch_assert(path != NULL); + + if (switch_file_exists(path, NULL) == SWITCH_STATUS_SUCCESS) { + cmd = switch_mprintf("%s %s", path, account); + switch_assert(cmd != NULL); + lua_thread(cmd); + switch_safe_free(cmd); + } + + switch_safe_free(path); + } +} + SWITCH_MODULE_LOAD_FUNCTION(mod_lua_load) { switch_api_interface_t *api_interface; switch_application_interface_t *app_interface; + if (switch_event_bind_removable(modname, SWITCH_EVENT_MESSAGE_QUERY, SWITCH_EVENT_SUBCLASS_ANY, message_query_handler, NULL, &globals.node) + != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't bind!\n"); + return SWITCH_STATUS_GENERR; + } + /* connect my internal structure to the blank pointer passed to me */ *module_interface = switch_loadable_module_create_module_interface(pool, modname); @@ -384,6 +419,13 @@ return SWITCH_STATUS_SUCCESS; } +SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_lua_shutdown) +{ + switch_event_unbind(&globals.node); + return SWITCH_STATUS_SUCCESS; +} + + SWITCH_END_EXTERN_C /* For Emacs: * Local Variables: @@ -393,5 +435,5 @@ * c-basic-offset:4 * End: * For VIM: - * vim:set softtabstop=4 shiftwidth=4 tabstop=4 expandtab: + * vim:set softtabstop=4 shiftwidth=4 tabstop=4: */ 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 Mon Aug 4 21:29:58 2008 @@ -10,35 +10,22 @@ #ifdef __cplusplus -template < typename T > class SwigValueWrapper { - T *tt; - public: - SwigValueWrapper():tt(0) { - } - SwigValueWrapper(const SwigValueWrapper < T > &rhs):tt(new T(*rhs.tt)) { - } - SwigValueWrapper(const T & t):tt(new T(t)) { - } - ~SwigValueWrapper() { - delete tt; - } - SwigValueWrapper & operator=(const T & t) { - delete tt; - tt = new T(t); - return *this; - } - operator T & () const { - return *tt; - } T *operator&() { - return tt; - } - private: - SwigValueWrapper & operator=(const SwigValueWrapper < T > &rhs); +template class SwigValueWrapper { + T *tt; +public: + SwigValueWrapper() : tt(0) { } + SwigValueWrapper(const SwigValueWrapper& rhs) : tt(new T(*rhs.tt)) { } + SwigValueWrapper(const T& t) : tt(new T(t)) { } + ~SwigValueWrapper() { delete tt; } + SwigValueWrapper& operator=(const T& t) { delete tt; tt = new T(t); return *this; } + operator T&() const { return *tt; } + T *operator&() { return tt; } +private: + SwigValueWrapper& operator=(const SwigValueWrapper& rhs); }; -template < typename T > T SwigValueInit() -{ - return T(); +template T SwigValueInit() { + return T(); } #endif @@ -73,14 +60,14 @@ #ifndef SWIGUNUSED # if defined(__GNUC__) # if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define SWIGUNUSED __attribute__ ((__unused__)) +# define SWIGUNUSED __attribute__ ((__unused__)) # else # define SWIGUNUSED # endif # elif defined(__ICC) -# define SWIGUNUSED __attribute__ ((__unused__)) +# define SWIGUNUSED __attribute__ ((__unused__)) # else -# define SWIGUNUSED +# define SWIGUNUSED # endif #endif @@ -88,7 +75,7 @@ # ifdef __cplusplus # define SWIGUNUSEDPARM(p) # else -# define SWIGUNUSEDPARM(p) p SWIGUNUSED +# define SWIGUNUSEDPARM(p) p SWIGUNUSED # endif #endif @@ -131,7 +118,7 @@ # define SWIGSTDCALL __stdcall # else # define SWIGSTDCALL -# endif +# endif #endif /* Deal with Microsoft's attempt at deprecating C standard runtime functions */ @@ -275,10 +262,10 @@ */ -#define SWIG_OK (0) +#define SWIG_OK (0) #define SWIG_ERROR (-1) #define SWIG_IsOK(r) (r >= 0) -#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) +#define SWIG_ArgError(r) ((r != SWIG_ERROR) ? r : SWIG_TypeError) /* The CastRankLimit says how many bits are used for the cast rank */ #define SWIG_CASTRANKLIMIT (1 << 8) @@ -305,18 +292,16 @@ # ifndef SWIG_TypeRank # define SWIG_TypeRank unsigned long # endif -# ifndef SWIG_MAXCASTRANK /* Default cast allowed */ +# ifndef SWIG_MAXCASTRANK /* Default cast allowed */ # define SWIG_MAXCASTRANK (2) # endif # define SWIG_CASTRANKMASK ((SWIG_CASTRANKLIMIT) -1) # define SWIG_CastRank(r) (r & SWIG_CASTRANKMASK) -SWIGINTERNINLINE int SWIG_AddCast(int r) -{ - return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r; +SWIGINTERNINLINE int SWIG_AddCast(int r) { + return SWIG_IsOK(r) ? ((SWIG_CastRank(r) < SWIG_MAXCASTRANK) ? (r + 1) : SWIG_ERROR) : r; } -SWIGINTERNINLINE int SWIG_CheckState(int r) -{ - return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; +SWIGINTERNINLINE int SWIG_CheckState(int r) { + return SWIG_IsOK(r) ? SWIG_CastRank(r) + 1 : 0; } #else /* no cast-rank mode */ # define SWIG_AddCast @@ -332,38 +317,38 @@ extern "C" { #endif - typedef void *(*swig_converter_func) (void *, int *); - typedef struct swig_type_info *(*swig_dycast_func) (void **); +typedef void *(*swig_converter_func)(void *, int *); +typedef struct swig_type_info *(*swig_dycast_func)(void **); /* Structure to store information on one type */ - typedef struct swig_type_info { - const char *name; /* mangled name of this type */ - const char *str; /* human readable name of this type */ - swig_dycast_func dcast; /* dynamic cast function down a hierarchy */ - struct swig_cast_info *cast; /* linked list of types that can cast into this type */ - void *clientdata; /* language specific type data */ - int owndata; /* flag if the structure owns the clientdata */ - } swig_type_info; +typedef struct swig_type_info { + const char *name; /* mangled name of this type */ + const char *str; /* human readable name of this type */ + swig_dycast_func dcast; /* dynamic cast function down a hierarchy */ + struct swig_cast_info *cast; /* linked list of types that can cast into this type */ + void *clientdata; /* language specific type data */ + int owndata; /* flag if the structure owns the clientdata */ +} swig_type_info; /* Structure to store a type and conversion function used for casting */ - typedef struct swig_cast_info { - swig_type_info *type; /* pointer to type that is equivalent to this type */ - swig_converter_func converter; /* function to cast the void pointers */ - struct swig_cast_info *next; /* pointer to next cast in linked list */ - struct swig_cast_info *prev; /* pointer to the previous cast */ - } swig_cast_info; +typedef struct swig_cast_info { + swig_type_info *type; /* pointer to type that is equivalent to this type */ + swig_converter_func converter; /* function to cast the void pointers */ + struct swig_cast_info *next; /* pointer to next cast in linked list */ + struct swig_cast_info *prev; /* pointer to the previous cast */ +} swig_cast_info; /* Structure used to store module information * Each module generates one structure like this, and the runtime collects * all of these structures and stores them in a circularly linked list.*/ - typedef struct swig_module_info { - swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */ - size_t size; /* Number of types in this module */ - struct swig_module_info *next; /* Pointer to next element in circularly linked list */ - swig_type_info **type_initial; /* Array of initially generated type structures */ - swig_cast_info **cast_initial; /* Array of initially generated casting structures */ - void *clientdata; /* Language specific module data */ - } swig_module_info; +typedef struct swig_module_info { + swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */ + size_t size; /* Number of types in this module */ + struct swig_module_info *next; /* Pointer to next element in circularly linked list */ + swig_type_info **type_initial; /* Array of initially generated type structures */ + swig_cast_info **cast_initial; /* Array of initially generated casting structures */ + void *clientdata; /* Language specific module data */ +} swig_module_info; /* Compare two type names skipping the space characters, therefore @@ -372,56 +357,54 @@ Return 0 when the two name types are equivalent, as in strncmp, but skipping ' '. */ - SWIGRUNTIME int SWIG_TypeNameComp(const char *f1, const char *l1, const char *f2, const char *l2) { - for (; (f1 != l1) && (f2 != l2); ++f1, ++f2) { - while ((*f1 == ' ') && (f1 != l1)) - ++f1; - while ((*f2 == ' ') && (f2 != l2)) - ++f2; - if (*f1 != *f2) - return (*f1 > *f2) ? 1 : -1; - } return (int) ((l1 - f1) - (l2 - f2)); - } +SWIGRUNTIME int +SWIG_TypeNameComp(const char *f1, const char *l1, + const char *f2, const char *l2) { + for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) { + while ((*f1 == ' ') && (f1 != l1)) ++f1; + while ((*f2 == ' ') && (f2 != l2)) ++f2; + if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1; + } + return (int)((l1 - f1) - (l2 - f2)); +} /* Check type equivalence in a name list like ||... Return 0 if not equal, 1 if equal */ - SWIGRUNTIME int SWIG_TypeEquiv(const char *nb, const char *tb) { - int equiv = 0; - const char *te = tb + strlen(tb); - const char *ne = nb; - while (!equiv && *ne) { - for (nb = ne; *ne; ++ne) { - if (*ne == '|') - break; - } - equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; - if (*ne) - ++ne; - } - return equiv; - } +SWIGRUNTIME int +SWIG_TypeEquiv(const char *nb, const char *tb) { + int equiv = 0; + const char* te = tb + strlen(tb); + const char* ne = nb; + while (!equiv && *ne) { + for (nb = ne; *ne; ++ne) { + if (*ne == '|') break; + } + equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; + if (*ne) ++ne; + } + return equiv; +} /* Check type equivalence in a name list like ||... Return 0 if equal, -1 if nb < tb, 1 if nb > tb */ - SWIGRUNTIME int SWIG_TypeCompare(const char *nb, const char *tb) { - int equiv = 0; - const char *te = tb + strlen(tb); - const char *ne = nb; - while (!equiv && *ne) { - for (nb = ne; *ne; ++ne) { - if (*ne == '|') - break; - } - equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; - if (*ne) - ++ne; - } - return equiv; - } +SWIGRUNTIME int +SWIG_TypeCompare(const char *nb, const char *tb) { + int equiv = 0; + const char* te = tb + strlen(tb); + const char* ne = nb; + while (!equiv && *ne) { + for (nb = ne; *ne; ++ne) { + if (*ne == '|') break; + } + equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; + if (*ne) ++ne; + } + return equiv; +} /* think of this as a c++ template<> or a scheme macro */ @@ -449,89 +432,94 @@ /* Check the typename */ - SWIGRUNTIME swig_cast_info *SWIG_TypeCheck(const char *c, swig_type_info * ty) { - SWIG_TypeCheck_Template(strcmp(iter->type->name, c) == 0, ty); - } +SWIGRUNTIME swig_cast_info * +SWIG_TypeCheck(const char *c, swig_type_info *ty) { + SWIG_TypeCheck_Template(strcmp(iter->type->name, c) == 0, ty); +} /* Same as previous function, except strcmp is replaced with a pointer comparison */ - SWIGRUNTIME swig_cast_info *SWIG_TypeCheckStruct(swig_type_info * from, swig_type_info * into) { - SWIG_TypeCheck_Template(iter->type == from, into); - } +SWIGRUNTIME swig_cast_info * +SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *into) { + SWIG_TypeCheck_Template(iter->type == from, into); +} /* Cast a pointer up an inheritance hierarchy */ - SWIGRUNTIMEINLINE void *SWIG_TypeCast(swig_cast_info * ty, void *ptr, int *newmemory) { - return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter) (ptr, newmemory); - } +SWIGRUNTIMEINLINE void * +SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) { + return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory); +} /* Dynamic pointer casting. Down an inheritance hierarchy */ - SWIGRUNTIME swig_type_info *SWIG_TypeDynamicCast(swig_type_info * ty, void **ptr) { - swig_type_info *lastty = ty; - if (!ty || !ty->dcast) - return ty; - while (ty && (ty->dcast)) { - ty = (*ty->dcast) (ptr); - if (ty) - lastty = ty; - } - return lastty; - } +SWIGRUNTIME swig_type_info * +SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) { + swig_type_info *lastty = ty; + if (!ty || !ty->dcast) return ty; + while (ty && (ty->dcast)) { + ty = (*ty->dcast)(ptr); + if (ty) lastty = ty; + } + return lastty; +} /* Return the name associated with this type */ - SWIGRUNTIMEINLINE const char *SWIG_TypeName(const swig_type_info * ty) { - return ty->name; - } +SWIGRUNTIMEINLINE const char * +SWIG_TypeName(const swig_type_info *ty) { + return ty->name; +} /* Return the pretty name associated with this type, that is an unmangled type name in a form presentable to the user. */ - SWIGRUNTIME const char *SWIG_TypePrettyName(const swig_type_info * type) { - /* The "str" field contains the equivalent pretty names of the - type, separated by vertical-bar characters. We choose - to print the last name, as it is often (?) the most - specific. */ - if (!type) - return NULL; - if (type->str != NULL) { - const char *last_name = type->str; - const char *s; - for (s = type->str; *s; s++) - if (*s == '|') - last_name = s + 1; - return last_name; - } else - return type->name; - } +SWIGRUNTIME const char * +SWIG_TypePrettyName(const swig_type_info *type) { + /* The "str" field contains the equivalent pretty names of the + type, separated by vertical-bar characters. We choose + to print the last name, as it is often (?) the most + specific. */ + if (!type) return NULL; + if (type->str != NULL) { + const char *last_name = type->str; + const char *s; + for (s = type->str; *s; s++) + if (*s == '|') last_name = s+1; + return last_name; + } + else + return type->name; +} /* Set the clientdata field for a type */ - SWIGRUNTIME void SWIG_TypeClientData(swig_type_info * ti, void *clientdata) { - swig_cast_info *cast = ti->cast; - /* if (ti->clientdata == clientdata) return; */ - ti->clientdata = clientdata; - - while (cast) { - if (!cast->converter) { - swig_type_info *tc = cast->type; - if (!tc->clientdata) { - SWIG_TypeClientData(tc, clientdata); - } - } - cast = cast->next; - } - } - SWIGRUNTIME void SWIG_TypeNewClientData(swig_type_info * ti, void *clientdata) { - SWIG_TypeClientData(ti, clientdata); - ti->owndata = 1; - } - +SWIGRUNTIME void +SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { + swig_cast_info *cast = ti->cast; + /* if (ti->clientdata == clientdata) return; */ + ti->clientdata = clientdata; + + while (cast) { + if (!cast->converter) { + swig_type_info *tc = cast->type; + if (!tc->clientdata) { + SWIG_TypeClientData(tc, clientdata); + } + } + cast = cast->next; + } +} +SWIGRUNTIME void +SWIG_TypeNewClientData(swig_type_info *ti, void *clientdata) { + SWIG_TypeClientData(ti, clientdata); + ti->owndata = 1; +} + /* Search for a swig_type_info structure only by mangled name Search is a O(log #types) @@ -540,38 +528,41 @@ Note: if start == end at the beginning of the function, we go all the way around the circular list. */ - SWIGRUNTIME swig_type_info *SWIG_MangledTypeQueryModule(swig_module_info * start, swig_module_info * end, const char *name) { - swig_module_info *iter = start; - do { - if (iter->size) { - register size_t l = 0; - register size_t r = iter->size - 1; - do { - /* since l+r >= 0, we can (>> 1) instead (/ 2) */ - register size_t i = (l + r) >> 1; - const char *iname = iter->types[i]->name; - if (iname) { - register int compare = strcmp(name, iname); - if (compare == 0) { - return iter->types[i]; - } else if (compare < 0) { - if (i) { - r = i - 1; - } else { - break; - } - } else if (compare > 0) { - l = i + 1; - } - } else { - break; /* should never happen */ - } - } while (l <= r); - } - iter = iter->next; - } while (iter != end); - return 0; +SWIGRUNTIME swig_type_info * +SWIG_MangledTypeQueryModule(swig_module_info *start, + swig_module_info *end, + const char *name) { + swig_module_info *iter = start; + do { + if (iter->size) { + register size_t l = 0; + register size_t r = iter->size - 1; + do { + /* since l+r >= 0, we can (>> 1) instead (/ 2) */ + register size_t i = (l + r) >> 1; + const char *iname = iter->types[i]->name; + if (iname) { + register int compare = strcmp(name, iname); + if (compare == 0) { + return iter->types[i]; + } else if (compare < 0) { + if (i) { + r = i - 1; + } else { + break; + } + } else if (compare > 0) { + l = i + 1; + } + } else { + break; /* should never happen */ } + } while (l <= r); + } + iter = iter->next; + } while (iter != end); + return 0; +} /* Search for a swig_type_info structure for either a mangled name or a human readable name. @@ -582,124 +573,130 @@ Note: if start == end at the beginning of the function, we go all the way around the circular list. */ - SWIGRUNTIME swig_type_info *SWIG_TypeQueryModule(swig_module_info * start, swig_module_info * end, const char *name) { - /* STEP 1: Search the name field using binary search */ - swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); - if (ret) { - return ret; - } else { - /* STEP 2: If the type hasn't been found, do a complete search - of the str field (the human readable name) */ - swig_module_info *iter = start; - do { - register size_t i = 0; - for (; i < iter->size; ++i) { - if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name))) - return iter->types[i]; - } - iter = iter->next; - } while (iter != end); - } - - /* neither found a match */ - return 0; - } +SWIGRUNTIME swig_type_info * +SWIG_TypeQueryModule(swig_module_info *start, + swig_module_info *end, + const char *name) { + /* STEP 1: Search the name field using binary search */ + swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); + if (ret) { + return ret; + } else { + /* STEP 2: If the type hasn't been found, do a complete search + of the str field (the human readable name) */ + swig_module_info *iter = start; + do { + register size_t i = 0; + for (; i < iter->size; ++i) { + if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name))) + return iter->types[i]; + } + iter = iter->next; + } while (iter != end); + } + + /* neither found a match */ + return 0; +} /* Pack binary data into a string */ - SWIGRUNTIME char *SWIG_PackData(char *c, void *ptr, size_t sz) { - static const char hex[17] = "0123456789abcdef"; - register const unsigned char *u = (unsigned char *) ptr; - register const unsigned char *eu = u + sz; - for (; u != eu; ++u) { - register unsigned char uu = *u; - *(c++) = hex[(uu & 0xf0) >> 4]; - *(c++) = hex[uu & 0xf]; - } - return c; - } +SWIGRUNTIME char * +SWIG_PackData(char *c, void *ptr, size_t sz) { + static const char hex[17] = "0123456789abcdef"; + register const unsigned char *u = (unsigned char *) ptr; + register const unsigned char *eu = u + sz; + for (; u != eu; ++u) { + register unsigned char uu = *u; + *(c++) = hex[(uu & 0xf0) >> 4]; + *(c++) = hex[uu & 0xf]; + } + return c; +} /* Unpack binary data from a string */ - SWIGRUNTIME const char *SWIG_UnpackData(const char *c, void *ptr, size_t sz) { - register unsigned char *u = (unsigned char *) ptr; - register const unsigned char *eu = u + sz; - for (; u != eu; ++u) { - register char d = *(c++); - register unsigned char uu; - if ((d >= '0') && (d <= '9')) - uu = ((d - '0') << 4); - else if ((d >= 'a') && (d <= 'f')) - uu = ((d - ('a' - 10)) << 4); - else - return (char *) 0; - d = *(c++); - if ((d >= '0') && (d <= '9')) - uu |= (d - '0'); - else if ((d >= 'a') && (d <= 'f')) - uu |= (d - ('a' - 10)); - else - return (char *) 0; - *u = uu; - } - return c; - } +SWIGRUNTIME const char * +SWIG_UnpackData(const char *c, void *ptr, size_t sz) { + register unsigned char *u = (unsigned char *) ptr; + register const unsigned char *eu = u + sz; + for (; u != eu; ++u) { + register char d = *(c++); + register unsigned char uu; + if ((d >= '0') && (d <= '9')) + uu = ((d - '0') << 4); + else if ((d >= 'a') && (d <= 'f')) + uu = ((d - ('a'-10)) << 4); + else + return (char *) 0; + d = *(c++); + if ((d >= '0') && (d <= '9')) + uu |= (d - '0'); + else if ((d >= 'a') && (d <= 'f')) + uu |= (d - ('a'-10)); + else + return (char *) 0; + *u = uu; + } + return c; +} /* Pack 'void *' into a string buffer. */ - SWIGRUNTIME char *SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) { - char *r = buff; - if ((2 * sizeof(void *) + 2) > bsz) - return 0; - *(r++) = '_'; - r = SWIG_PackData(r, &ptr, sizeof(void *)); - if (strlen(name) + 1 > (bsz - (r - buff))) - return 0; - strcpy(r, name); - return buff; - } +SWIGRUNTIME char * +SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) { + char *r = buff; + if ((2*sizeof(void *) + 2) > bsz) return 0; + *(r++) = '_'; + r = SWIG_PackData(r,&ptr,sizeof(void *)); + if (strlen(name) + 1 > (bsz - (r - buff))) return 0; + strcpy(r,name); + return buff; +} - SWIGRUNTIME const char *SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) { - if (*c != '_') { - if (strcmp(c, "NULL") == 0) { - *ptr = (void *) 0; - return name; - } else { - return 0; - } - } - return SWIG_UnpackData(++c, ptr, sizeof(void *)); - } +SWIGRUNTIME const char * +SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) { + if (*c != '_') { + if (strcmp(c,"NULL") == 0) { + *ptr = (void *) 0; + return name; + } else { + return 0; + } + } + return SWIG_UnpackData(++c,ptr,sizeof(void *)); +} - SWIGRUNTIME char *SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) { - char *r = buff; - size_t lname = (name ? strlen(name) : 0); - if ((2 * sz + 2 + lname) > bsz) - return 0; - *(r++) = '_'; - r = SWIG_PackData(r, ptr, sz); - if (lname) { - strncpy(r, name, lname + 1); - } else { - *r = 0; - } - return buff; - } +SWIGRUNTIME char * +SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) { + char *r = buff; + size_t lname = (name ? strlen(name) : 0); + if ((2*sz + 2 + lname) > bsz) return 0; + *(r++) = '_'; + r = SWIG_PackData(r,ptr,sz); + if (lname) { + strncpy(r,name,lname+1); + } else { + *r = 0; + } + return buff; +} - SWIGRUNTIME const char *SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { - if (*c != '_') { - if (strcmp(c, "NULL") == 0) { - memset(ptr, 0, sz); - return name; - } else { - return 0; - } - } - return SWIG_UnpackData(++c, ptr, sz); - } +SWIGRUNTIME const char * +SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { + if (*c != '_') { + if (strcmp(c,"NULL") == 0) { + memset(ptr,0,sz); + return name; + } else { + return 0; + } + } + return SWIG_UnpackData(++c,ptr,sz); +} #ifdef __cplusplus } @@ -722,8 +719,8 @@ #include "lua.h" #include "lauxlib.h" -#include /* for malloc */ -#include /* for a few sanity tests */ +#include /* for malloc */ +#include /* for a few sanity tests */ /* ----------------------------------------------------------------------------- * global swig types @@ -737,62 +734,62 @@ #define SWIG_LUA_CHAR 6 /* Structure for variable linking table */ - typedef struct { - const char *name; - lua_CFunction get; - lua_CFunction set; - } swig_lua_var_info; +typedef struct { + const char *name; + lua_CFunction get; + lua_CFunction set; +} swig_lua_var_info; /* Constant information structure */ - typedef struct { - int type; - char *name; - long lvalue; - double dvalue; - void *pvalue; - swig_type_info **ptype; - } swig_lua_const_info; - - typedef struct { - const char *name; - lua_CFunction method; - } swig_lua_method; - - typedef struct { - const char *name; - lua_CFunction getmethod; - lua_CFunction setmethod; - } swig_lua_attribute; - - typedef struct swig_lua_class { - const char *name; - swig_type_info **type; - lua_CFunction constructor; - void (*destructor) (void *); - swig_lua_method *methods; - swig_lua_attribute *attributes; - struct swig_lua_class **bases; - const char **base_names; - } swig_lua_class; +typedef struct { + int type; + char *name; + long lvalue; + double dvalue; + void *pvalue; + swig_type_info **ptype; +} swig_lua_const_info; + +typedef struct { + const char *name; + lua_CFunction method; +} swig_lua_method; + +typedef struct { + const char *name; + lua_CFunction getmethod; + lua_CFunction setmethod; +} swig_lua_attribute; + +typedef struct swig_lua_class { + const char *name; + swig_type_info **type; + lua_CFunction constructor; + void (*destructor)(void *); + swig_lua_method *methods; + swig_lua_attribute *attributes; + struct swig_lua_class **bases; + const char **base_names; +} swig_lua_class; /* this is the struct for wrappering all pointers in SwigLua */ - typedef struct { - swig_type_info *type; - int own; /* 1 if owned & must be destroyed */ - void *ptr; - } swig_lua_userdata; +typedef struct { + swig_type_info *type; + int own; /* 1 if owned & must be destroyed */ + void *ptr; +} swig_lua_userdata; /* this is the struct for wrapping arbitary packed binary data (currently it is only used for member function pointers) the data ordering is similar to swig_lua_userdata, but it is currently not possible to tell the two structures apart within Swig, other than by looking at the type */ - typedef struct { - swig_type_info *type; - int own; /* 1 if owned & must be destroyed */ - char data[1]; /* arbitary amount of data */ - } swig_lua_rawdata; +typedef struct { + swig_type_info *type; + int own; /* 1 if owned & must be destroyed */ + char data[1]; /* arbitary amount of data */ +} swig_lua_rawdata; /* Common SWIG API */ #define SWIG_NewPointerObj(L, ptr, type, owner) SWIG_Lua_NewPointerObj(L, (void *)ptr, type, owner) @@ -843,20 +840,24 @@ #endif /* storing/access of swig_module_info */ - SWIGRUNTIME swig_module_info *SWIG_Lua_GetModule(lua_State * L) { - swig_module_info *ret = 0; - lua_pushstring(L, "swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME); - lua_rawget(L, LUA_REGISTRYINDEX); - if (lua_islightuserdata(L, -1)) - ret = (swig_module_info *) lua_touserdata(L, -1); - lua_pop(L, 1); /* tidy */ - return ret; - } SWIGRUNTIME void SWIG_Lua_SetModule(lua_State * L, swig_module_info * module) { - /* add this all into the Lua registry: */ - lua_pushstring(L, "swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME); - lua_pushlightuserdata(L, (void *) module); - lua_rawset(L, LUA_REGISTRYINDEX); - } +SWIGRUNTIME swig_module_info * +SWIG_Lua_GetModule(lua_State* L) { + swig_module_info *ret = 0; + lua_pushstring(L,"swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME); + lua_rawget(L,LUA_REGISTRYINDEX); + if (lua_islightuserdata(L,-1)) + ret=(swig_module_info*)lua_touserdata(L,-1); + lua_pop(L,1); /* tidy */ + return ret; +} + +SWIGRUNTIME void +SWIG_Lua_SetModule(lua_State* L, swig_module_info *module) { + /* add this all into the Lua registry: */ + lua_pushstring(L,"swig_runtime_data_type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME); + lua_pushlightuserdata(L,(void*)module); + lua_rawset(L,LUA_REGISTRYINDEX); +} /* ----------------------------------------------------------------------------- * global variable support code: modules @@ -865,18 +866,20 @@ /* this function is called when trying to set an immutable. default value is to print an error. This can removed with a compile flag SWIGLUA_IGNORE_SET_IMMUTABLE */ - SWIGINTERN int SWIG_Lua_set_immutable(lua_State * L) { +SWIGINTERN int SWIG_Lua_set_immutable(lua_State* L) +{ /* there should be 1 param passed in: the new value */ #ifndef SWIGLUA_IGNORE_SET_IMMUTABLE - lua_pop(L, 1); /* remove it */ - lua_pushstring(L, "This variable is immutable"); - lua_error(L); + lua_pop(L,1); /* remove it */ + lua_pushstring(L,"This variable is immutable"); + lua_error(L); #endif - return 0; /* should not return anything */ - } + return 0; /* should not return anything */ +} /* the module.get method used for getting linked data */ - SWIGINTERN int SWIG_Lua_module_get(lua_State * L) { +SWIGINTERN int SWIG_Lua_module_get(lua_State* L) +{ /* there should be 2 params passed in (1) table (not the meta table) (2) string name of the attribute @@ -884,158 +887,173 @@ lua_topointer(L,1),lua_typename(L,lua_type(L,1)), lua_tostring(L,2)); */ - /* get the metatable */ - assert(lua_istable(L, 1)); /* just in case */ - lua_getmetatable(L, 1); /* get the metatable */ - assert(lua_istable(L, -1)); /* just in case */ - SWIG_Lua_get_table(L, ".get"); /* get the .get table */ - lua_remove(L, 3); /* remove metatable */ - if (lua_istable(L, -1)) { - /* look for the key in the .get table */ - lua_pushvalue(L, 2); /* key */ - lua_rawget(L, -2); - lua_remove(L, 3); /* remove .get */ - if (lua_iscfunction(L, -1)) { /* found it so call the fn & return its value */ - lua_call(L, 0, 1); - return 1; - } - lua_pop(L, 1); /* remove the top */ - } - lua_pop(L, 1); /* remove the .get */ - lua_pushnil(L); /* return a nil */ - return 1; - } + /* get the metatable */ + assert(lua_istable(L,1)); /* just in case */ + lua_getmetatable(L,1); /* get the metatable */ + assert(lua_istable(L,-1)); /* just in case */ + SWIG_Lua_get_table(L,".get"); /* get the .get table */ + lua_remove(L,3); /* remove metatable */ + if (lua_istable(L,-1)) + { + /* look for the key in the .get table */ + lua_pushvalue(L,2); /* key */ + lua_rawget(L,-2); + lua_remove(L,3); /* remove .get */ + if (lua_iscfunction(L,-1)) + { /* found it so call the fn & return its value */ + lua_call(L,0,1); + return 1; + } + lua_pop(L,1); /* remove the top */ + } + lua_pop(L,1); /* remove the .get */ + lua_pushnil(L); /* return a nil */ + return 1; +} /* the module.set method used for setting linked data */ - SWIGINTERN int SWIG_Lua_module_set(lua_State * L) { +SWIGINTERN int SWIG_Lua_module_set(lua_State* L) +{ /* there should be 3 params passed in (1) table (not the meta table) (2) string name of the attribute (3) any for the new value */ - /* get the metatable */ - assert(lua_istable(L, 1)); /* just in case */ - lua_getmetatable(L, 1); /* get the metatable */ - assert(lua_istable(L, -1)); /* just in case */ - SWIG_Lua_get_table(L, ".set"); /* get the .set table */ - lua_remove(L, 4); /* remove metatable */ - if (lua_istable(L, -1)) { - /* look for the key in the .set table */ - lua_pushvalue(L, 2); /* key */ - lua_rawget(L, -2); - lua_remove(L, 4); /* remove .set */ - if (lua_iscfunction(L, -1)) { /* found it so call the fn & return its value */ - lua_pushvalue(L, 3); /* value */ - lua_call(L, 1, 0); - return 0; - } - } - lua_settop(L, 3); /* reset back to start */ - /* we now have the table, key & new value, so just set directly */ - lua_rawset(L, 1); /* add direct */ - return 0; - } + /* get the metatable */ + assert(lua_istable(L,1)); /* just in case */ + lua_getmetatable(L,1); /* get the metatable */ + assert(lua_istable(L,-1)); /* just in case */ + SWIG_Lua_get_table(L,".set"); /* get the .set table */ + lua_remove(L,4); /* remove metatable */ + if (lua_istable(L,-1)) + { + /* look for the key in the .set table */ + lua_pushvalue(L,2); /* key */ + lua_rawget(L,-2); + lua_remove(L,4); /* remove .set */ + if (lua_iscfunction(L,-1)) + { /* found it so call the fn & return its value */ + lua_pushvalue(L,3); /* value */ + lua_call(L,1,0); + return 0; + } + } + lua_settop(L,3); /* reset back to start */ + /* we now have the table, key & new value, so just set directly */ + lua_rawset(L,1); /* add direct */ + return 0; +} /* registering a module in lua */ - SWIGINTERN void SWIG_Lua_module_begin(lua_State * L, const char *name) { - assert(lua_istable(L, -1)); /* just in case */ - lua_pushstring(L, name); - lua_newtable(L); /* the table */ - /* add meta table */ - lua_newtable(L); /* the meta table */ - SWIG_Lua_add_function(L, "__index", SWIG_Lua_module_get); - SWIG_Lua_add_function(L, "__newindex", SWIG_Lua_module_set); - lua_pushstring(L, ".get"); - lua_newtable(L); /* the .get table */ - lua_rawset(L, -3); /* add .get into metatable */ - lua_pushstring(L, ".set"); - lua_newtable(L); /* the .set table */ - lua_rawset(L, -3); /* add .set into metatable */ - lua_setmetatable(L, -2); /* sets meta table in module */ - lua_rawset(L, -3); /* add module into parent */ - SWIG_Lua_get_table(L, name); /* get the table back out */ - } +SWIGINTERN void SWIG_Lua_module_begin(lua_State* L,const char* name) +{ + assert(lua_istable(L,-1)); /* just in case */ + lua_pushstring(L,name); + lua_newtable(L); /* the table */ + /* add meta table */ + lua_newtable(L); /* the meta table */ + SWIG_Lua_add_function(L,"__index",SWIG_Lua_module_get); + SWIG_Lua_add_function(L,"__newindex",SWIG_Lua_module_set); + lua_pushstring(L,".get"); + lua_newtable(L); /* the .get table */ + lua_rawset(L,-3); /* add .get into metatable */ + lua_pushstring(L,".set"); + lua_newtable(L); /* the .set table */ + lua_rawset(L,-3); /* add .set into metatable */ + lua_setmetatable(L,-2); /* sets meta table in module */ + lua_rawset(L,-3); /* add module into parent */ + SWIG_Lua_get_table(L,name); /* get the table back out */ +} /* ending the register */ - SWIGINTERN void SWIG_Lua_module_end(lua_State * L) { - lua_pop(L, 1); /* tidy stack (remove module) */ - } +SWIGINTERN void SWIG_Lua_module_end(lua_State* L) +{ + lua_pop(L,1); /* tidy stack (remove module) */ +} /* adding a linked variable to the module */ - SWIGINTERN void SWIG_Lua_module_add_variable(lua_State * L, const char *name, lua_CFunction getFn, lua_CFunction setFn) { - assert(lua_istable(L, -1)); /* just in case */ - lua_getmetatable(L, -1); /* get the metatable */ - assert(lua_istable(L, -1)); /* just in case */ - SWIG_Lua_get_table(L, ".get"); /* find the .get table */ - assert(lua_istable(L, -1)); /* should be a table: */ - SWIG_Lua_add_function(L, name, getFn); - lua_pop(L, 1); /* tidy stack (remove table) */ - if (setFn) { /* if there is a set fn */ - SWIG_Lua_get_table(L, ".set"); /* find the .set table */ - assert(lua_istable(L, -1)); /* should be a table: */ - SWIG_Lua_add_function(L, name, setFn); - lua_pop(L, 1); /* tidy stack (remove table) */ - } - lua_pop(L, 1); /* tidy stack (remove meta) */ - } +SWIGINTERN void SWIG_Lua_module_add_variable(lua_State* L,const char* name,lua_CFunction getFn,lua_CFunction setFn) +{ + assert(lua_istable(L,-1)); /* just in case */ + lua_getmetatable(L,-1); /* get the metatable */ + assert(lua_istable(L,-1)); /* just in case */ + SWIG_Lua_get_table(L,".get"); /* find the .get table */ + assert(lua_istable(L,-1)); /* should be a table: */ + SWIG_Lua_add_function(L,name,getFn); + lua_pop(L,1); /* tidy stack (remove table) */ + if (setFn) /* if there is a set fn */ + { + SWIG_Lua_get_table(L,".set"); /* find the .set table */ + assert(lua_istable(L,-1)); /* should be a table: */ + SWIG_Lua_add_function(L,name,setFn); + lua_pop(L,1); /* tidy stack (remove table) */ + } + lua_pop(L,1); /* tidy stack (remove meta) */ +} /* adding a function module */ - SWIGINTERN void SWIG_Lua_module_add_function(lua_State * L, const char *name, lua_CFunction fn) { - SWIG_Lua_add_function(L, name, fn); - } +SWIGINTERN void SWIG_Lua_module_add_function(lua_State* L,const char* name,lua_CFunction fn) +{ + SWIG_Lua_add_function(L,name,fn); +} /* ----------------------------------------------------------------------------- * global variable support code: classes * ----------------------------------------------------------------------------- */ /* the class.get method, performs the lookup of class attributes */ - SWIGINTERN int SWIG_Lua_class_get(lua_State * L) { +SWIGINTERN int SWIG_Lua_class_get(lua_State* L) +{ /* there should be 2 params passed in (1) userdata (not the meta table) (2) string name of the attribute */ - assert(lua_isuserdata(L, -2)); /* just in case */ - lua_getmetatable(L, -2); /* get the meta table */ - assert(lua_istable(L, -1)); /* just in case */ - SWIG_Lua_get_table(L, ".get"); /* find the .get table */ - assert(lua_istable(L, -1)); /* just in case */ - /* look for the key in the .get table */ - lua_pushvalue(L, 2); /* key */ - lua_rawget(L, -2); - lua_remove(L, -2); /* stack tidy, remove .get table */ - if (lua_iscfunction(L, -1)) { /* found it so call the fn & return its value */ - lua_pushvalue(L, 1); /* the userdata */ - lua_call(L, 1, 1); /* 1 value in (userdata),1 out (result) */ - lua_remove(L, -2); /* stack tidy, remove metatable */ - return 1; - } - lua_pop(L, 1); /* remove whatever was there */ - /* ok, so try the .fn table */ - SWIG_Lua_get_table(L, ".fn"); /* find the .get table */ - assert(lua_istable(L, -1)); /* just in case */ - lua_pushvalue(L, 2); /* key */ - lua_rawget(L, -2); /* look for the fn */ - lua_remove(L, -2); /* stack tidy, remove .fn table */ - if (lua_isfunction(L, -1)) { /* note: if its a C function or lua function *//* found it so return the fn & let lua call it */ - lua_remove(L, -2); /* stack tidy, remove metatable */ - return 1; - } - lua_pop(L, 1); /* remove whatever was there */ - /* NEW: looks for the __getitem() fn - this is a user provided get fn */ - SWIG_Lua_get_table(L, "__getitem"); /* find the __getitem fn */ - if (lua_iscfunction(L, -1)) { /* if its there *//* found it so call the fn & return its value */ - lua_pushvalue(L, 1); /* the userdata */ - lua_pushvalue(L, 2); /* the parameter */ - lua_call(L, 2, 1); /* 2 value in (userdata),1 out (result) */ - lua_remove(L, -2); /* stack tidy, remove metatable */ - return 1; - } - return 0; /* sorry not known */ - } + assert(lua_isuserdata(L,-2)); /* just in case */ + lua_getmetatable(L,-2); /* get the meta table */ + assert(lua_istable(L,-1)); /* just in case */ + SWIG_Lua_get_table(L,".get"); /* find the .get table */ + assert(lua_istable(L,-1)); /* just in case */ + /* look for the key in the .get table */ + lua_pushvalue(L,2); /* key */ + lua_rawget(L,-2); + lua_remove(L,-2); /* stack tidy, remove .get table */ + if (lua_iscfunction(L,-1)) + { /* found it so call the fn & return its value */ + lua_pushvalue(L,1); /* the userdata */ + lua_call(L,1,1); /* 1 value in (userdata),1 out (result) */ + lua_remove(L,-2); /* stack tidy, remove metatable */ + return 1; + } + lua_pop(L,1); /* remove whatever was there */ + /* ok, so try the .fn table */ + SWIG_Lua_get_table(L,".fn"); /* find the .get table */ + assert(lua_istable(L,-1)); /* just in case */ + lua_pushvalue(L,2); /* key */ + lua_rawget(L,-2); /* look for the fn */ + lua_remove(L,-2); /* stack tidy, remove .fn table */ + if (lua_isfunction(L,-1)) /* note: if its a C function or lua function */ + { /* found it so return the fn & let lua call it */ + lua_remove(L,-2); /* stack tidy, remove metatable */ + return 1; + } + lua_pop(L,1); /* remove whatever was there */ + /* NEW: looks for the __getitem() fn + this is a user provided get fn */ + SWIG_Lua_get_table(L,"__getitem"); /* find the __getitem fn */ + if (lua_iscfunction(L,-1)) /* if its there */ + { /* found it so call the fn & return its value */ + lua_pushvalue(L,1); /* the userdata */ + lua_pushvalue(L,2); /* the parameter */ + lua_call(L,2,1); /* 2 value in (userdata),1 out (result) */ + lua_remove(L,-2); /* stack tidy, remove metatable */ + return 1; + } + return 0; /* sorry not known */ +} /* the class.set method, performs the lookup of class attributes */ - SWIGINTERN int SWIG_Lua_class_set(lua_State * L) { +SWIGINTERN int SWIG_Lua_class_set(lua_State* L) +{ /* there should be 3 params passed in (1) table (not the meta table) (2) string name of the attribute @@ -1045,123 +1063,136 @@ lua_tostring(L,2), lua_topointer(L,3),lua_typename(L,lua_type(L,3)));*/ - assert(lua_isuserdata(L, 1)); /* just in case */ - lua_getmetatable(L, 1); /* get the meta table */ - assert(lua_istable(L, -1)); /* just in case */ - - SWIG_Lua_get_table(L, ".set"); /* find the .set table */ - if (lua_istable(L, -1)) { - /* look for the key in the .set table */ - lua_pushvalue(L, 2); /* key */ - lua_rawget(L, -2); - if (lua_iscfunction(L, -1)) { /* found it so call the fn & return its value */ - lua_pushvalue(L, 1); /* userdata */ - lua_pushvalue(L, 3); /* value */ - lua_call(L, 2, 0); - return 0; - } - lua_pop(L, 1); /* remove the value */ - } - lua_pop(L, 1); /* remove the value .set table */ - /* NEW: looks for the __setitem() fn - this is a user provided set fn */ - SWIG_Lua_get_table(L, "__setitem"); /* find the fn */ - if (lua_iscfunction(L, -1)) { /* if its there *//* found it so call the fn & return its value */ - lua_pushvalue(L, 1); /* the userdata */ - lua_pushvalue(L, 2); /* the parameter */ - lua_pushvalue(L, 3); /* the value */ - lua_call(L, 3, 0); /* 3 values in ,0 out */ - lua_remove(L, -2); /* stack tidy, remove metatable */ - return 1; - } - return 0; - } + assert(lua_isuserdata(L,1)); /* just in case */ + lua_getmetatable(L,1); /* get the meta table */ + assert(lua_istable(L,-1)); /* just in case */ + + SWIG_Lua_get_table(L,".set"); /* find the .set table */ + if (lua_istable(L,-1)) + { + /* look for the key in the .set table */ + lua_pushvalue(L,2); /* key */ + lua_rawget(L,-2); + if (lua_iscfunction(L,-1)) + { /* found it so call the fn & return its value */ + lua_pushvalue(L,1); /* userdata */ + lua_pushvalue(L,3); /* value */ + lua_call(L,2,0); + return 0; + } + lua_pop(L,1); /* remove the value */ + } + lua_pop(L,1); /* remove the value .set table */ + /* NEW: looks for the __setitem() fn + this is a user provided set fn */ + SWIG_Lua_get_table(L,"__setitem"); /* find the fn */ + if (lua_iscfunction(L,-1)) /* if its there */ + { /* found it so call the fn & return its value */ + lua_pushvalue(L,1); /* the userdata */ + lua_pushvalue(L,2); /* the parameter */ + lua_pushvalue(L,3); /* the value */ + lua_call(L,3,0); /* 3 values in ,0 out */ + lua_remove(L,-2); /* stack tidy, remove metatable */ + return 1; + } + return 0; +} /* the class.destruct method called by the interpreter */ - SWIGINTERN int SWIG_Lua_class_destruct(lua_State * L) { +SWIGINTERN int SWIG_Lua_class_destruct(lua_State* L) +{ /* there should be 1 params passed in (1) userdata (not the meta table) */ - swig_lua_userdata *usr; - swig_lua_class *clss; - assert(lua_isuserdata(L, -1)); /* just in case */ - usr = (swig_lua_userdata *) lua_touserdata(L, -1); /* get it */ - /* if must be destroyed & has a destructor */ - if (usr->own) { /* if must be destroyed */ - clss = (swig_lua_class *) usr->type->clientdata; /* get the class */ - if (clss && clss->destructor) { /* there is a destroy fn */ - clss->destructor(usr->ptr); /* bye bye */ - } - } - return 0; - } + swig_lua_userdata* usr; + swig_lua_class* clss; + assert(lua_isuserdata(L,-1)); /* just in case */ + usr=(swig_lua_userdata*)lua_touserdata(L,-1); /* get it */ + /* if must be destroyed & has a destructor */ + if (usr->own) /* if must be destroyed */ + { + clss=(swig_lua_class*)usr->type->clientdata; /* get the class */ + if (clss && clss->destructor) /* there is a destroy fn */ + { + clss->destructor(usr->ptr); /* bye bye */ + } + } + return 0; +} /* gets the swig class registry (or creates it) */ - SWIGINTERN void SWIG_Lua_get_class_registry(lua_State * L) { - /* add this all into the swig registry: */ - lua_pushstring(L, "SWIG"); - lua_rawget(L, LUA_REGISTRYINDEX); /* get the registry */ - if (!lua_istable(L, -1)) { /* not there *//* must be first time, so add it */ - lua_pop(L, 1); /* remove the result */ - lua_pushstring(L, "SWIG"); - lua_newtable(L); - lua_rawset(L, LUA_REGISTRYINDEX); - /* then get it */ - lua_pushstring(L, "SWIG"); - lua_rawget(L, LUA_REGISTRYINDEX); - } - } +SWIGINTERN void SWIG_Lua_get_class_registry(lua_State* L) +{ + /* add this all into the swig registry: */ + lua_pushstring(L,"SWIG"); + lua_rawget(L,LUA_REGISTRYINDEX); /* get the registry */ + if (!lua_istable(L,-1)) /* not there */ + { /* must be first time, so add it */ + lua_pop(L,1); /* remove the result */ + lua_pushstring(L,"SWIG"); + lua_newtable(L); + lua_rawset(L,LUA_REGISTRYINDEX); + /* then get it */ + lua_pushstring(L,"SWIG"); + lua_rawget(L,LUA_REGISTRYINDEX); + } +} /* helper fn to get the classes metatable from the register */ - SWIGINTERN void SWIG_Lua_get_class_metatable(lua_State * L, const char *cname) { - SWIG_Lua_get_class_registry(L); /* get the registry */ - lua_pushstring(L, cname); /* get the name */ - lua_rawget(L, -2); /* get it */ - lua_remove(L, -2); /* tidy up (remove registry) */ - } +SWIGINTERN void SWIG_Lua_get_class_metatable(lua_State* L,const char* cname) +{ + SWIG_Lua_get_class_registry(L); /* get the registry */ + lua_pushstring(L,cname); /* get the name */ + lua_rawget(L,-2); /* get it */ + lua_remove(L,-2); /* tidy up (remove registry) */ +} /* helper add a variable to a registered class */ - SWIGINTERN void SWIG_Lua_add_class_variable(lua_State * L, const char *name, lua_CFunction getFn, lua_CFunction setFn) { - assert(lua_istable(L, -1)); /* just in case */ - SWIG_Lua_get_table(L, ".get"); /* find the .get table */ - assert(lua_istable(L, -1)); /* just in case */ - SWIG_Lua_add_function(L, name, getFn); - lua_pop(L, 1); /* tidy stack (remove table) */ - if (setFn) { - SWIG_Lua_get_table(L, ".set"); /* find the .set table */ - assert(lua_istable(L, -1)); /* just in case */ - SWIG_Lua_add_function(L, name, setFn); - lua_pop(L, 1); /* tidy stack (remove table) */ - } - } +SWIGINTERN void SWIG_Lua_add_class_variable(lua_State* L,const char* name,lua_CFunction getFn,lua_CFunction setFn) +{ + assert(lua_istable(L,-1)); /* just in case */ + SWIG_Lua_get_table(L,".get"); /* find the .get table */ + assert(lua_istable(L,-1)); /* just in case */ + SWIG_Lua_add_function(L,name,getFn); + lua_pop(L,1); /* tidy stack (remove table) */ + if (setFn) + { + SWIG_Lua_get_table(L,".set"); /* find the .set table */ + assert(lua_istable(L,-1)); /* just in case */ + SWIG_Lua_add_function(L,name,setFn); + lua_pop(L,1); /* tidy stack (remove table) */ + } +} /* helper to recursively add class details (attributes & operations) */ - SWIGINTERN void SWIG_Lua_add_class_details(lua_State * L, swig_lua_class * clss) { - int i; - /* call all the base classes first: we can then override these later: */ - for (i = 0; clss->bases[i]; i++) { - SWIG_Lua_add_class_details(L, clss->bases[i]); - } - /* add fns */ - for (i = 0; clss->attributes[i].name; i++) { - SWIG_Lua_add_class_variable(L, clss->attributes[i].name, clss->attributes[i].getmethod, clss->attributes[i].setmethod); - } - /* add methods to the metatable */ - SWIG_Lua_get_table(L, ".fn"); /* find the .fn table */ - assert(lua_istable(L, -1)); /* just in case */ - for (i = 0; clss->methods[i].name; i++) { - SWIG_Lua_add_function(L, clss->methods[i].name, clss->methods[i].method); - } - lua_pop(L, 1); /* tidy stack (remove table) */ - /* add operator overloads - these look ANY method which start with "__" and assume they - are operator overloads & add them to the metatable - (this might mess up is someone defines a method __gc (the destructor) */ - for (i = 0; clss->methods[i].name; i++) { - if (clss->methods[i].name[0] == '_' && clss->methods[i].name[1] == '_') { - SWIG_Lua_add_function(L, clss->methods[i].name, clss->methods[i].method); - } - } - } +SWIGINTERN void SWIG_Lua_add_class_details(lua_State* L,swig_lua_class* clss) +{ + int i; + /* call all the base classes first: we can then override these later: */ + for(i=0;clss->bases[i];i++) + { + SWIG_Lua_add_class_details(L,clss->bases[i]); + } + /* add fns */ + for(i=0;clss->attributes[i].name;i++){ + SWIG_Lua_add_class_variable(L,clss->attributes[i].name,clss->attributes[i].getmethod,clss->attributes[i].setmethod); + } + /* add methods to the metatable */ + SWIG_Lua_get_table(L,".fn"); /* find the .fn table */ + assert(lua_istable(L,-1)); /* just in case */ + for(i=0;clss->methods[i].name;i++){ + SWIG_Lua_add_function(L,clss->methods[i].name,clss->methods[i].method); + } + lua_pop(L,1); /* tidy stack (remove table) */ + /* add operator overloads + these look ANY method which start with "__" and assume they + are operator overloads & add them to the metatable + (this might mess up is someone defines a method __gc (the destructor)*/ + for(i=0;clss->methods[i].name;i++){ + if (clss->methods[i].name[0]=='_' && clss->methods[i].name[1]=='_'){ + SWIG_Lua_add_function(L,clss->methods[i].name,clss->methods[i].method); + } + } +} /* set up the base classes pointers. Each class structure has a list of pointers to the base class structures. @@ -1170,237 +1201,256 @@ spread over more than one swig file. Therefore it must be done at runtime, querying the SWIG type system. */ - SWIGINTERN void SWIG_Lua_init_base_class(lua_State * L, swig_lua_class * clss) { - int i = 0; - swig_module_info *module = SWIG_GetModule(L); - for (i = 0; clss->base_names[i]; i++) { - if (clss->bases[i] == 0) { /* not found yet */ - /* lookup and cache the base class */ - swig_type_info *info = SWIG_TypeQueryModule(module, module, clss->base_names[i]); - if (info) - clss->bases[i] = (swig_lua_class *) info->clientdata; - } - } - } +SWIGINTERN void SWIG_Lua_init_base_class(lua_State* L,swig_lua_class* clss) +{ + int i=0; + swig_module_info* module=SWIG_GetModule(L); + for(i=0;clss->base_names[i];i++) + { + if (clss->bases[i]==0) /* not found yet */ + { + /* lookup and cache the base class */ + swig_type_info *info = SWIG_TypeQueryModule(module,module,clss->base_names[i]); + if (info) clss->bases[i] = (swig_lua_class *) info->clientdata; + } + } +} /* performs the entire class registration process */ - SWIGINTERN void SWIG_Lua_class_register(lua_State * L, swig_lua_class * clss) { - /* add its constructor to module with the name of the class - so you can do MyClass(...) as well as new_MyClass(...) - BUT only if a constructor is defined - (this overcomes the problem of pure virtual classes without constructors) */ - if (clss->constructor) - SWIG_Lua_add_function(L, clss->name, clss->constructor); - - SWIG_Lua_get_class_registry(L); /* get the registry */ - lua_pushstring(L, clss->name); /* get the name */ - lua_newtable(L); /* create the metatable */ - /* add string of class name called ".type" */ - lua_pushstring(L, ".type"); - lua_pushstring(L, clss->name); - lua_rawset(L, -3); - /* add a table called ".get" */ - lua_pushstring(L, ".get"); - lua_newtable(L); - lua_rawset(L, -3); - /* add a table called ".set" */ - lua_pushstring(L, ".set"); - lua_newtable(L); - lua_rawset(L, -3); - /* add a table called ".fn" */ - lua_pushstring(L, ".fn"); - lua_newtable(L); - lua_rawset(L, -3); - /* add accessor fns for using the .get,.set&.fn */ - SWIG_Lua_add_function(L, "__index", SWIG_Lua_class_get); - SWIG_Lua_add_function(L, "__newindex", SWIG_Lua_class_set); - SWIG_Lua_add_function(L, "__gc", SWIG_Lua_class_destruct); - /* add it */ - lua_rawset(L, -3); /* metatable into registry */ - lua_pop(L, 1); /* tidy stack (remove registry) */ - - SWIG_Lua_get_class_metatable(L, clss->name); - SWIG_Lua_add_class_details(L, clss); /* recursive adding of details (atts & ops) */ - lua_pop(L, 1); /* tidy stack (remove class metatable) */ - } +SWIGINTERN void SWIG_Lua_class_register(lua_State* L,swig_lua_class* clss) +{ + /* add its constructor to module with the name of the class + so you can do MyClass(...) as well as new_MyClass(...) + BUT only if a constructor is defined + (this overcomes the problem of pure virtual classes without constructors)*/ + if (clss->constructor) + SWIG_Lua_add_function(L,clss->name,clss->constructor); + + SWIG_Lua_get_class_registry(L); /* get the registry */ + lua_pushstring(L,clss->name); /* get the name */ + lua_newtable(L); /* create the metatable */ + /* add string of class name called ".type" */ + lua_pushstring(L,".type"); + lua_pushstring(L,clss->name); + lua_rawset(L,-3); + /* add a table called ".get" */ + lua_pushstring(L,".get"); + lua_newtable(L); + lua_rawset(L,-3); + /* add a table called ".set" */ + lua_pushstring(L,".set"); + lua_newtable(L); + lua_rawset(L,-3); + /* add a table called ".fn" */ + lua_pushstring(L,".fn"); + lua_newtable(L); + lua_rawset(L,-3); + /* add accessor fns for using the .get,.set&.fn */ + SWIG_Lua_add_function(L,"__index",SWIG_Lua_class_get); + SWIG_Lua_add_function(L,"__newindex",SWIG_Lua_class_set); + SWIG_Lua_add_function(L,"__gc",SWIG_Lua_class_destruct); + /* add it */ + lua_rawset(L,-3); /* metatable into registry */ + lua_pop(L,1); /* tidy stack (remove registry) */ + + SWIG_Lua_get_class_metatable(L,clss->name); + SWIG_Lua_add_class_details(L,clss); /* recursive adding of details (atts & ops) */ + lua_pop(L,1); /* tidy stack (remove class metatable) */ +} /* ----------------------------------------------------------------------------- * Class/structure conversion fns * ----------------------------------------------------------------------------- */ /* helper to add metatable to new lua object */ - SWIGINTERN void _SWIG_Lua_AddMetatable(lua_State * L, swig_type_info * type) { - if (type->clientdata) { /* there is clientdata: so add the metatable */ - SWIG_Lua_get_class_metatable(L, ((swig_lua_class *) (type->clientdata))->name); - if (lua_istable(L, -1)) { - lua_setmetatable(L, -2); - } else { - lua_pop(L, 1); - } - } - } +SWIGINTERN void _SWIG_Lua_AddMetatable(lua_State* L,swig_type_info *type) +{ + if (type->clientdata) /* there is clientdata: so add the metatable */ + { + SWIG_Lua_get_class_metatable(L,((swig_lua_class*)(type->clientdata))->name); + if (lua_istable(L,-1)) + { + lua_setmetatable(L,-2); + } + else + { + lua_pop(L,1); + } + } +} /* pushes a new object into the lua stack */ - SWIGRUNTIME void SWIG_Lua_NewPointerObj(lua_State * L, void *ptr, swig_type_info * type, int own) { - swig_lua_userdata *usr; - if (!ptr) { - lua_pushnil(L); - return; - } - usr = (swig_lua_userdata *) lua_newuserdata(L, sizeof(swig_lua_userdata)); /* get data */ - usr->ptr = ptr; /* set the ptr */ - usr->type = type; - usr->own = own; - _SWIG_Lua_AddMetatable(L, type); /* add metatable */ - } +SWIGRUNTIME void SWIG_Lua_NewPointerObj(lua_State* L,void* ptr,swig_type_info *type, int own) +{ + swig_lua_userdata* usr; + if (!ptr){ + lua_pushnil(L); + return; + } + usr=(swig_lua_userdata*)lua_newuserdata(L,sizeof(swig_lua_userdata)); /* get data */ + usr->ptr=ptr; /* set the ptr */ + usr->type=type; + usr->own=own; + _SWIG_Lua_AddMetatable(L,type); /* add metatable */ +} /* takes a object from the lua stack & converts it into an object of the correct type (if possible) */ - SWIGRUNTIME int SWIG_Lua_ConvertPtr(lua_State * L, int index, void **ptr, swig_type_info * type, int flags) { - swig_lua_userdata *usr; - swig_cast_info *cast; - if (lua_isnil(L, index)) { - *ptr = 0; - return SWIG_OK; - } /* special case: lua nil => NULL pointer */ - usr = (swig_lua_userdata *) lua_touserdata(L, index); /* get data */ - if (usr) { - if (flags & SWIG_POINTER_DISOWN) { /* must disown the object */ - usr->own = 0; - } - if (!type) { /* special cast void*, no casting fn */ - *ptr = usr->ptr; - return SWIG_OK; /* ok */ - } - cast = SWIG_TypeCheckStruct(usr->type, type); /* performs normal type checking */ - if (cast) { - int newmemory = 0; - *ptr = SWIG_TypeCast(cast, usr->ptr, &newmemory); - assert(!newmemory); /* newmemory handling not yet implemented */ - return SWIG_OK; /* ok */ - } - } - return SWIG_ERROR; /* error */ - } +SWIGRUNTIME int SWIG_Lua_ConvertPtr(lua_State* L,int index,void** ptr,swig_type_info *type,int flags) +{ + swig_lua_userdata* usr; + swig_cast_info *cast; + if (lua_isnil(L,index)){*ptr=0; return SWIG_OK;} /* special case: lua nil => NULL pointer */ + usr=(swig_lua_userdata*)lua_touserdata(L,index); /* get data */ + if (usr) + { + if (flags & SWIG_POINTER_DISOWN) /* must disown the object */ + { + usr->own=0; + } + if (!type) /* special cast void*, no casting fn */ + { + *ptr=usr->ptr; + return SWIG_OK; /* ok */ + } + cast=SWIG_TypeCheckStruct(usr->type,type); /* performs normal type checking */ + if (cast) + { + int newmemory = 0; + *ptr=SWIG_TypeCast(cast,usr->ptr,&newmemory); + assert(!newmemory); /* newmemory handling not yet implemented */ + return SWIG_OK; /* ok */ + } + } + return SWIG_ERROR; /* error */ +} - SWIGRUNTIME void *SWIG_Lua_MustGetPtr(lua_State * L, int index, swig_type_info * type, int flags, int argnum, const char *func_name) { - void *result; - if (!SWIG_IsOK(SWIG_ConvertPtr(L, index, &result, type, flags))) { - lua_pushfstring(L, "Error in %s, expected a %s at argument number %d\n", func_name, (type && type->str) ? type->str : "void*", argnum); - lua_error(L); - } - return result; - } +SWIGRUNTIME void* SWIG_Lua_MustGetPtr(lua_State* L,int index,swig_type_info *type,int flags, + int argnum,const char* func_name){ + void* result; + if (!SWIG_IsOK(SWIG_ConvertPtr(L,index,&result,type,flags))){ + lua_pushfstring(L,"Error in %s, expected a %s at argument number %d\n", + func_name,(type && type->str)?type->str:"void*",argnum); + lua_error(L); + } + return result; +} /* pushes a packed userdata. user for member fn pointers only */ - SWIGRUNTIME void SWIG_Lua_NewPackedObj(lua_State * L, void *ptr, size_t size, swig_type_info * type) { - swig_lua_rawdata *raw; - assert(ptr); /* not acceptable to pass in a NULL value */ - raw = (swig_lua_rawdata *) lua_newuserdata(L, sizeof(swig_lua_rawdata) - 1 + size); /* alloc data */ - raw->type = type; - raw->own = 0; - memcpy(raw->data, ptr, size); /* copy the data */ - _SWIG_Lua_AddMetatable(L, type); /* add metatable */ - } - +SWIGRUNTIME void SWIG_Lua_NewPackedObj(lua_State* L,void* ptr,size_t size,swig_type_info *type) +{ + swig_lua_rawdata* raw; + assert(ptr); /* not acceptable to pass in a NULL value */ + raw=(swig_lua_rawdata*)lua_newuserdata(L,sizeof(swig_lua_rawdata)-1+size); /* alloc data */ + raw->type=type; + raw->own=0; + memcpy(raw->data,ptr,size); /* copy the data */ + _SWIG_Lua_AddMetatable(L,type); /* add metatable */ +} + /* converts a packed userdata. user for member fn pointers only */ - SWIGRUNTIME int SWIG_Lua_ConvertPacked(lua_State * L, int index, void *ptr, size_t size, swig_type_info * type) { - swig_lua_rawdata *raw; - raw = (swig_lua_rawdata *) lua_touserdata(L, index); /* get data */ - if (!raw) - return SWIG_ERROR; /* error */ - if (type == 0 || type == raw->type) { /* void* or identical type */ - memcpy(ptr, raw->data, size); /* copy it */ - return SWIG_OK; /* ok */ - } - return SWIG_ERROR; /* error */ - } +SWIGRUNTIME int SWIG_Lua_ConvertPacked(lua_State* L,int index,void* ptr,size_t size,swig_type_info *type) +{ + swig_lua_rawdata* raw; + raw=(swig_lua_rawdata*)lua_touserdata(L,index); /* get data */ + if (!raw) return SWIG_ERROR; /* error */ + if (type==0 || type==raw->type) /* void* or identical type */ + { + memcpy(ptr,raw->data,size); /* copy it */ + return SWIG_OK; /* ok */ + } + return SWIG_ERROR; /* error */ +} /* a function to get the typestring of a piece of data */ - SWIGRUNTIME const char *SWIG_Lua_typename(lua_State * L, int tp) { - swig_lua_userdata *usr; - if (lua_isuserdata(L, tp)) { - usr = (swig_lua_userdata *) lua_touserdata(L, 1); /* get data */ - if (usr && usr->type && usr->type->str) - return usr->type->str; - return "userdata (unknown type)"; - } - return lua_typename(L, lua_type(L, tp)); - } +SWIGRUNTIME const char *SWIG_Lua_typename(lua_State *L, int tp) +{ + swig_lua_userdata* usr; + if (lua_isuserdata(L,tp)) + { + usr=(swig_lua_userdata*)lua_touserdata(L,1); /* get data */ + if (usr && usr->type && usr->type->str) + return usr->type->str; + return "userdata (unknown type)"; + } + return lua_typename(L,lua_type(L,tp)); +} /* lua callable function to get the userdata's type */ - SWIGRUNTIME int SWIG_Lua_type(lua_State * L) { - lua_pushstring(L, SWIG_Lua_typename(L, 1)); - return 1; - } +SWIGRUNTIME int SWIG_Lua_type(lua_State* L) +{ + lua_pushstring(L,SWIG_Lua_typename(L,1)); + return 1; +} /* lua callable function to compare userdata's value the issue is that two userdata may point to the same thing but to lua, they are different objects */ - SWIGRUNTIME int SWIG_Lua_equal(lua_State * L) { - int result; - swig_lua_userdata *usr1, *usr2; - if (!lua_isuserdata(L, 1) || !lua_isuserdata(L, 2)) /* just in case */ - return 0; /* nil reply */ - usr1 = (swig_lua_userdata *) lua_touserdata(L, 1); /* get data */ - usr2 = (swig_lua_userdata *) lua_touserdata(L, 2); /* get data */ - /*result=(usr1->ptr==usr2->ptr && usr1->type==usr2->type); only works if type is the same */ - result = (usr1->ptr == usr2->ptr); - lua_pushboolean(L, result); - return 1; - } +SWIGRUNTIME int SWIG_Lua_equal(lua_State* L) +{ + int result; + swig_lua_userdata *usr1,*usr2; + if (!lua_isuserdata(L,1) || !lua_isuserdata(L,2)) /* just in case */ + return 0; /* nil reply */ + usr1=(swig_lua_userdata*)lua_touserdata(L,1); /* get data */ + usr2=(swig_lua_userdata*)lua_touserdata(L,2); /* get data */ + /*result=(usr1->ptr==usr2->ptr && usr1->type==usr2->type); only works if type is the same*/ + result=(usr1->ptr==usr2->ptr); + lua_pushboolean(L,result); + return 1; +} /* ----------------------------------------------------------------------------- * global variable support code: class/struct typemap functions * ----------------------------------------------------------------------------- */ /* Install Constants */ - SWIGINTERN void - SWIG_Lua_InstallConstants(lua_State * L, swig_lua_const_info constants[]) { - int i; - for (i = 0; constants[i].type; i++) { - switch (constants[i].type) { - case SWIG_LUA_INT: - lua_pushstring(L, constants[i].name); - lua_pushnumber(L, (lua_Number) constants[i].lvalue); - lua_rawset(L, -3); - break; - case SWIG_LUA_FLOAT: - lua_pushstring(L, constants[i].name); - lua_pushnumber(L, (lua_Number) constants[i].dvalue); - lua_rawset(L, -3); - break; - case SWIG_LUA_CHAR: - lua_pushstring(L, constants[i].name); - lua_pushfstring(L, "%c", (char) constants[i].lvalue); - lua_rawset(L, -3); - break; - case SWIG_LUA_STRING: - lua_pushstring(L, constants[i].name); - lua_pushstring(L, (char *) constants[i].pvalue); - lua_rawset(L, -3); - break; - case SWIG_LUA_POINTER: - lua_pushstring(L, constants[i].name); - SWIG_NewPointerObj(L, constants[i].pvalue, *(constants[i]).ptype, 0); - lua_rawset(L, -3); - break; - case SWIG_LUA_BINARY: - lua_pushstring(L, constants[i].name); - SWIG_NewMemberObj(L, constants[i].pvalue, constants[i].lvalue, *(constants[i]).ptype); - lua_rawset(L, -3); - break; - default: - break; - } - } - } +SWIGINTERN void +SWIG_Lua_InstallConstants(lua_State* L, swig_lua_const_info constants[]) { + int i; + for (i = 0; constants[i].type; i++) { + switch(constants[i].type) { + case SWIG_LUA_INT: + lua_pushstring(L,constants[i].name); + lua_pushnumber(L,(lua_Number)constants[i].lvalue); + lua_rawset(L,-3); + break; + case SWIG_LUA_FLOAT: + lua_pushstring(L,constants[i].name); + lua_pushnumber(L,(lua_Number)constants[i].dvalue); + lua_rawset(L,-3); + break; + case SWIG_LUA_CHAR: + lua_pushstring(L,constants[i].name); + lua_pushfstring(L,"%c",(char)constants[i].lvalue); + lua_rawset(L,-3); + break; + case SWIG_LUA_STRING: + lua_pushstring(L,constants[i].name); + lua_pushstring(L,(char *) constants[i].pvalue); + lua_rawset(L,-3); + break; + case SWIG_LUA_POINTER: + lua_pushstring(L,constants[i].name); + SWIG_NewPointerObj(L,constants[i].pvalue, *(constants[i]).ptype,0); + lua_rawset(L,-3); + break; + case SWIG_LUA_BINARY: + lua_pushstring(L,constants[i].name); + SWIG_NewMemberObj(L,constants[i].pvalue,constants[i].lvalue,*(constants[i]).ptype); + lua_rawset(L,-3); + break; + default: + break; + } + } +} /* ----------------------------------------------------------------------------- * executing lua code from within the wrapper * ----------------------------------------------------------------------------- */ -#ifndef SWIG_DOSTRING_FAIL /* Allows redefining of error function */ +#ifndef SWIG_DOSTRING_FAIL /* Allows redefining of error function */ #define SWIG_DOSTRING_FAIL(S) fprintf(stderr,"%s\n",S) #endif /* Executes a C string in Lua a really simple way of calling lua from C @@ -1408,23 +1458,22 @@ In lua 5.0.X its lua_dostring() In lua 5.1.X its luaL_dostring() */ - SWIGINTERN int - SWIG_Lua_dostring(lua_State * L, const char *str) { - int ok, top; - if (str == 0 || str[0] == 0) - return 0; /* nothing to do */ - top = lua_gettop(L); /* save stack */ +SWIGINTERN int +SWIG_Lua_dostring(lua_State *L, const char* str) { + int ok,top; + if (str==0 || str[0]==0) return 0; /* nothing to do */ + top=lua_gettop(L); /* save stack */ #if (defined(LUA_VERSION_NUM) && (LUA_VERSION_NUM>=501)) - ok = luaL_dostring(L, str); /* looks like this is lua 5.1.X or later, good */ + ok=luaL_dostring(L,str); /* looks like this is lua 5.1.X or later, good */ #else - ok = lua_dostring(L, str); /* might be lua 5.0.x, using lua_dostring */ + ok=lua_dostring(L,str); /* might be lua 5.0.x, using lua_dostring */ #endif - if (ok != 0) { - SWIG_DOSTRING_FAIL(lua_tostring(L, -1)); - } - lua_settop(L, top); /* restore the stack */ - return ok; - } + if (ok!=0) { + SWIG_DOSTRING_FAIL(lua_tostring(L,-1)); + } + lua_settop(L,top); /* restore the stack */ + return ok; +} #ifdef __cplusplus } @@ -1437,26 +1486,31 @@ #define SWIGTYPE_p_API swig_types[0] #define SWIGTYPE_p_CoreSession swig_types[1] -#define SWIGTYPE_p_Event swig_types[2] -#define SWIGTYPE_p_IVRMenu swig_types[3] -#define SWIGTYPE_p_LUA__Session swig_types[4] -#define SWIGTYPE_p_Stream swig_types[5] -#define SWIGTYPE_p_input_callback_state swig_types[6] -#define SWIGTYPE_p_lua_State swig_types[7] -#define SWIGTYPE_p_session_flag_t swig_types[8] -#define SWIGTYPE_p_switch_channel_state_t swig_types[9] -#define SWIGTYPE_p_switch_channel_t swig_types[10] -#define SWIGTYPE_p_switch_core_session_t swig_types[11] -#define SWIGTYPE_p_switch_event_t swig_types[12] -#define SWIGTYPE_p_switch_input_args_t swig_types[13] -#define SWIGTYPE_p_switch_input_type_t swig_types[14] -#define SWIGTYPE_p_switch_priority_t swig_types[15] -#define SWIGTYPE_p_switch_status_t swig_types[16] -#define SWIGTYPE_p_switch_stream_handle_t swig_types[17] -#define SWIGTYPE_p_void swig_types[18] -static swig_type_info *swig_types[20]; -static swig_module_info swig_module = { swig_types, 19, 0, 0, 0, 0 }; - +#define SWIGTYPE_p_DTMF swig_types[2] +#define SWIGTYPE_p_Event swig_types[3] +#define SWIGTYPE_p_EventConsumer swig_types[4] +#define SWIGTYPE_p_IVRMenu swig_types[5] +#define SWIGTYPE_p_LUA__Session swig_types[6] +#define SWIGTYPE_p_Stream swig_types[7] +#define SWIGTYPE_p_input_callback_state swig_types[8] +#define SWIGTYPE_p_lua_State swig_types[9] +#define SWIGTYPE_p_session_flag_t swig_types[10] +#define SWIGTYPE_p_switch_channel_state_t swig_types[11] +#define SWIGTYPE_p_switch_channel_t swig_types[12] +#define SWIGTYPE_p_switch_core_session_t swig_types[13] +#define SWIGTYPE_p_switch_event_node_t swig_types[14] +#define SWIGTYPE_p_switch_event_t swig_types[15] +#define SWIGTYPE_p_switch_event_types_t swig_types[16] +#define SWIGTYPE_p_switch_input_args_t swig_types[17] +#define SWIGTYPE_p_switch_input_type_t swig_types[18] +#define SWIGTYPE_p_switch_priority_t swig_types[19] +#define SWIGTYPE_p_switch_queue_t swig_types[20] +#define SWIGTYPE_p_switch_status_t swig_types[21] +#define SWIGTYPE_p_switch_stream_handle_t swig_types[22] +#define SWIGTYPE_p_uint32_t swig_types[23] +#define SWIGTYPE_p_void swig_types[24] +static swig_type_info *swig_types[26]; +static swig_module_info swig_module = {swig_types, 25, 0, 0, 0, 0}; #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) @@ -1470,5297 +1524,6175 @@ namespace swig { - typedef struct { - } LANGUAGE_OBJ; +typedef struct{} LANGUAGE_OBJ; } + + #include "switch.h" #include "switch_cpp.h" #include "freeswitch_lua.h" + #ifdef __cplusplus extern "C" { #endif - static int _wrap_consoleLog(lua_State * L) { - int SWIG_arg = -1; - char *arg1 = (char *) 0; - char *arg2 = (char *) 0; - - SWIG_check_num_args("consoleLog", 2, 2) - if (!lua_isstring(L, 1)) - SWIG_fail_arg("consoleLog", 1, "char *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("consoleLog", 2, "char *"); - arg1 = (char *) lua_tostring(L, 1); - arg2 = (char *) lua_tostring(L, 2); - consoleLog(arg1, arg2); - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail:lua_error(L); - return SWIG_arg; - } static int _wrap_consoleCleanLog(lua_State * L) { - int SWIG_arg = -1; - char *arg1 = (char *) 0; - - SWIG_check_num_args("consoleCleanLog", 1, 1) - if (!lua_isstring(L, 1)) - SWIG_fail_arg("consoleCleanLog", 1, "char *"); - arg1 = (char *) lua_tostring(L, 1); - consoleCleanLog(arg1); - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } - - - static int _wrap_new_IVRMenu(lua_State * L) { - int SWIG_arg = -1; - IVRMenu *arg1 = (IVRMenu *) 0; - char *arg2 = (char *) 0; - char *arg3 = (char *) 0; - char *arg4 = (char *) 0; - char *arg5 = (char *) 0; - char *arg6 = (char *) 0; - char *arg7 = (char *) 0; - char *arg8 = (char *) 0; - int arg9; - int arg10; - int arg11; - int arg12; - int arg13; - IVRMenu *result = 0; - - SWIG_check_num_args("IVRMenu", 13, 13) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("IVRMenu", 1, "IVRMenu *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("IVRMenu", 2, "char const *"); - if (!lua_isstring(L, 3)) - SWIG_fail_arg("IVRMenu", 3, "char const *"); - if (!lua_isstring(L, 4)) - SWIG_fail_arg("IVRMenu", 4, "char const *"); - if (!lua_isstring(L, 5)) - SWIG_fail_arg("IVRMenu", 5, "char const *"); - if (!lua_isstring(L, 6)) - SWIG_fail_arg("IVRMenu", 6, "char const *"); - if (!lua_isstring(L, 7)) - SWIG_fail_arg("IVRMenu", 7, "char const *"); - if (!lua_isstring(L, 8)) - SWIG_fail_arg("IVRMenu", 8, "char const *"); - if (!lua_isnumber(L, 9)) - SWIG_fail_arg("IVRMenu", 9, "int"); - if (!lua_isnumber(L, 10)) - SWIG_fail_arg("IVRMenu", 10, "int"); - if (!lua_isnumber(L, 11)) - SWIG_fail_arg("IVRMenu", 11, "int"); - if (!lua_isnumber(L, 12)) - SWIG_fail_arg("IVRMenu", 12, "int"); - if (!lua_isnumber(L, 13)) - SWIG_fail_arg("IVRMenu", 13, "int"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_IVRMenu, 0))) { - SWIG_fail_ptr("new_IVRMenu", 1, SWIGTYPE_p_IVRMenu); - } - - arg2 = (char *) lua_tostring(L, 2); - arg3 = (char *) lua_tostring(L, 3); - arg4 = (char *) lua_tostring(L, 4); - arg5 = (char *) lua_tostring(L, 5); - arg6 = (char *) lua_tostring(L, 6); - arg7 = (char *) lua_tostring(L, 7); - arg8 = (char *) lua_tostring(L, 8); - arg9 = (int) lua_tonumber(L, 9); - arg10 = (int) lua_tonumber(L, 10); - arg11 = (int) lua_tonumber(L, 11); - arg12 = (int) lua_tonumber(L, 12); - arg13 = (int) lua_tonumber(L, 13); - result = - (IVRMenu *) new IVRMenu(arg1, (char const *) arg2, (char const *) arg3, (char const *) arg4, (char const *) arg5, (char const *) arg6, - (char const *) arg7, (char const *) arg8, arg9, arg10, arg11, arg12, arg13); - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_IVRMenu, 1); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } - +static int _wrap_consoleLog(lua_State* L) { + int SWIG_arg = -1; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + + SWIG_check_num_args("consoleLog",2,2) + if(!lua_isstring(L,1)) SWIG_fail_arg("consoleLog",1,"char *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("consoleLog",2,"char *"); + arg1 = (char *)lua_tostring(L, 1); + arg2 = (char *)lua_tostring(L, 2); + consoleLog(arg1,arg2); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_delete_IVRMenu(lua_State * L) { - int SWIG_arg = -1; - IVRMenu *arg1 = (IVRMenu *) 0; - SWIG_check_num_args("IVRMenu", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("IVRMenu", 1, "IVRMenu *"); +static int _wrap_consoleCleanLog(lua_State* L) { + int SWIG_arg = -1; + char *arg1 = (char *) 0 ; + + SWIG_check_num_args("consoleCleanLog",1,1) + if(!lua_isstring(L,1)) SWIG_fail_arg("consoleCleanLog",1,"char *"); + arg1 = (char *)lua_tostring(L, 1); + consoleCleanLog(arg1); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_IVRMenu, SWIG_POINTER_DISOWN))) { - SWIG_fail_ptr("delete_IVRMenu", 1, SWIGTYPE_p_IVRMenu); - } - delete arg1; +static int _wrap_new_IVRMenu(lua_State* L) { + int SWIG_arg = -1; + IVRMenu *arg1 = (IVRMenu *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + char *arg5 = (char *) 0 ; + char *arg6 = (char *) 0 ; + char *arg7 = (char *) 0 ; + char *arg8 = (char *) 0 ; + int arg9 ; + int arg10 ; + int arg11 ; + int arg12 ; + int arg13 ; + IVRMenu *result = 0 ; + + SWIG_check_num_args("IVRMenu",13,13) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("IVRMenu",1,"IVRMenu *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("IVRMenu",2,"char const *"); + if(!lua_isstring(L,3)) SWIG_fail_arg("IVRMenu",3,"char const *"); + if(!lua_isstring(L,4)) SWIG_fail_arg("IVRMenu",4,"char const *"); + if(!lua_isstring(L,5)) SWIG_fail_arg("IVRMenu",5,"char const *"); + if(!lua_isstring(L,6)) SWIG_fail_arg("IVRMenu",6,"char const *"); + if(!lua_isstring(L,7)) SWIG_fail_arg("IVRMenu",7,"char const *"); + if(!lua_isstring(L,8)) SWIG_fail_arg("IVRMenu",8,"char const *"); + if(!lua_isnumber(L,9)) SWIG_fail_arg("IVRMenu",9,"int"); + if(!lua_isnumber(L,10)) SWIG_fail_arg("IVRMenu",10,"int"); + if(!lua_isnumber(L,11)) SWIG_fail_arg("IVRMenu",11,"int"); + if(!lua_isnumber(L,12)) SWIG_fail_arg("IVRMenu",12,"int"); + if(!lua_isnumber(L,13)) SWIG_fail_arg("IVRMenu",13,"int"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_IVRMenu,0))){ + SWIG_fail_ptr("new_IVRMenu",1,SWIGTYPE_p_IVRMenu); + } + + arg2 = (char *)lua_tostring(L, 2); + arg3 = (char *)lua_tostring(L, 3); + arg4 = (char *)lua_tostring(L, 4); + arg5 = (char *)lua_tostring(L, 5); + arg6 = (char *)lua_tostring(L, 6); + arg7 = (char *)lua_tostring(L, 7); + arg8 = (char *)lua_tostring(L, 8); + arg9 = (int)lua_tonumber(L, 9); + arg10 = (int)lua_tonumber(L, 10); + arg11 = (int)lua_tonumber(L, 11); + arg12 = (int)lua_tonumber(L, 12); + arg13 = (int)lua_tonumber(L, 13); + result = (IVRMenu *)new IVRMenu(arg1,(char const *)arg2,(char const *)arg3,(char const *)arg4,(char const *)arg5,(char const *)arg6,(char const *)arg7,(char const *)arg8,arg9,arg10,arg11,arg12,arg13); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_IVRMenu,1); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - SWIG_arg = 0; - return SWIG_arg; +static int _wrap_delete_IVRMenu(lua_State* L) { + int SWIG_arg = -1; + IVRMenu *arg1 = (IVRMenu *) 0 ; + + SWIG_check_num_args("IVRMenu",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("IVRMenu",1,"IVRMenu *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_IVRMenu,SWIG_POINTER_DISOWN))){ + SWIG_fail_ptr("delete_IVRMenu",1,SWIGTYPE_p_IVRMenu); + } + + delete arg1; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (0) - SWIG_fail; - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_IVRMenu_bindAction(lua_State* L) { + int SWIG_arg = -1; + IVRMenu *arg1 = (IVRMenu *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + + SWIG_check_num_args("bindAction",4,4) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("bindAction",1,"IVRMenu *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("bindAction",2,"char *"); + if(!lua_isstring(L,3)) SWIG_fail_arg("bindAction",3,"char const *"); + if(!lua_isstring(L,4)) SWIG_fail_arg("bindAction",4,"char const *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_IVRMenu,0))){ + SWIG_fail_ptr("IVRMenu_bindAction",1,SWIGTYPE_p_IVRMenu); + } + + arg2 = (char *)lua_tostring(L, 2); + arg3 = (char *)lua_tostring(L, 3); + arg4 = (char *)lua_tostring(L, 4); + (arg1)->bindAction(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_IVRMenu_bindAction(lua_State * L) { - int SWIG_arg = -1; - IVRMenu *arg1 = (IVRMenu *) 0; - char *arg2 = (char *) 0; - char *arg3 = (char *) 0; - char *arg4 = (char *) 0; - - SWIG_check_num_args("bindAction", 4, 4) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("bindAction", 1, "IVRMenu *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("bindAction", 2, "char *"); - if (!lua_isstring(L, 3)) - SWIG_fail_arg("bindAction", 3, "char const *"); - if (!lua_isstring(L, 4)) - SWIG_fail_arg("bindAction", 4, "char const *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_IVRMenu, 0))) { - SWIG_fail_ptr("IVRMenu_bindAction", 1, SWIGTYPE_p_IVRMenu); - } - - arg2 = (char *) lua_tostring(L, 2); - arg3 = (char *) lua_tostring(L, 3); - arg4 = (char *) lua_tostring(L, 4); - (arg1)->bindAction(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_IVRMenu_execute(lua_State* L) { + int SWIG_arg = -1; + IVRMenu *arg1 = (IVRMenu *) 0 ; + CoreSession *arg2 = (CoreSession *) 0 ; + char *arg3 = (char *) 0 ; + + SWIG_check_num_args("execute",3,3) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("execute",1,"IVRMenu *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("execute",2,"CoreSession *"); + if(!lua_isstring(L,3)) SWIG_fail_arg("execute",3,"char const *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_IVRMenu,0))){ + SWIG_fail_ptr("IVRMenu_execute",1,SWIGTYPE_p_IVRMenu); + } + + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&arg2,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("IVRMenu_execute",2,SWIGTYPE_p_CoreSession); + } + + arg3 = (char *)lua_tostring(L, 3); + (arg1)->execute(arg2,(char const *)arg3); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_IVRMenu_execute(lua_State * L) { - int SWIG_arg = -1; - IVRMenu *arg1 = (IVRMenu *) 0; - CoreSession *arg2 = (CoreSession *) 0; - char *arg3 = (char *) 0; - - SWIG_check_num_args("execute", 3, 3) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("execute", 1, "IVRMenu *"); - if (!SWIG_isptrtype(L, 2)) - SWIG_fail_arg("execute", 2, "CoreSession *"); - if (!lua_isstring(L, 3)) - SWIG_fail_arg("execute", 3, "char const *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_IVRMenu, 0))) { - SWIG_fail_ptr("IVRMenu_execute", 1, SWIGTYPE_p_IVRMenu); - } - - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 2, (void **) &arg2, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("IVRMenu_execute", 2, SWIGTYPE_p_CoreSession); - } - - arg3 = (char *) lua_tostring(L, 3); - (arg1)->execute(arg2, (char const *) arg3); - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static void swig_delete_IVRMenu(void *obj) { +IVRMenu *arg1 = (IVRMenu *) obj; +delete arg1; +} +static swig_lua_method swig_IVRMenu_methods[] = { + {"bindAction", _wrap_IVRMenu_bindAction}, + {"execute", _wrap_IVRMenu_execute}, + {0,0} +}; +static swig_lua_attribute swig_IVRMenu_attributes[] = { + {0,0,0} +}; +static swig_lua_class *swig_IVRMenu_bases[] = {0}; +static const char *swig_IVRMenu_base_names[] = {0}; +static swig_lua_class _wrap_class_IVRMenu = { "IVRMenu", &SWIGTYPE_p_IVRMenu,_wrap_new_IVRMenu, swig_delete_IVRMenu, swig_IVRMenu_methods, swig_IVRMenu_attributes, swig_IVRMenu_bases, swig_IVRMenu_base_names }; + +static int _wrap_new_API(lua_State* L) { + int SWIG_arg = -1; + API *result = 0 ; + + SWIG_check_num_args("API",0,0) + result = (API *)new API(); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_API,1); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static void swig_delete_IVRMenu(void *obj) { - IVRMenu *arg1 = (IVRMenu *) obj; - delete arg1; - } - static swig_lua_method swig_IVRMenu_methods[] = { - {"bindAction", _wrap_IVRMenu_bindAction}, - {"execute", _wrap_IVRMenu_execute}, - {0, 0} - }; - static swig_lua_attribute swig_IVRMenu_attributes[] = { - {0, 0, 0} - }; - static swig_lua_class *swig_IVRMenu_bases[] = { 0 }; - static const char *swig_IVRMenu_base_names[] = { 0 }; - static swig_lua_class _wrap_class_IVRMenu = - { "IVRMenu", &SWIGTYPE_p_IVRMenu, _wrap_new_IVRMenu, swig_delete_IVRMenu, swig_IVRMenu_methods, swig_IVRMenu_attributes, swig_IVRMenu_bases, -swig_IVRMenu_base_names }; - - static int _wrap_new_API(lua_State * L) { - int SWIG_arg = -1; - API *result = 0; - - SWIG_check_num_args("API", 0, 0) - result = (API *) new API(); - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_API, 1); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_delete_API(lua_State* L) { + int SWIG_arg = -1; + API *arg1 = (API *) 0 ; + + SWIG_check_num_args("API",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("API",1,"API *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_API,SWIG_POINTER_DISOWN))){ + SWIG_fail_ptr("delete_API",1,SWIGTYPE_p_API); + } + + delete arg1; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_delete_API(lua_State * L) { - int SWIG_arg = -1; - API *arg1 = (API *) 0; +static int _wrap_API_execute(lua_State* L) { + int SWIG_arg = -1; + API *arg1 = (API *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("execute",3,3) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("execute",1,"API *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("execute",2,"char const *"); + if(!lua_isstring(L,3)) SWIG_fail_arg("execute",3,"char const *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_API,0))){ + SWIG_fail_ptr("API_execute",1,SWIGTYPE_p_API); + } + + arg2 = (char *)lua_tostring(L, 2); + arg3 = (char *)lua_tostring(L, 3); + result = (char *)(arg1)->execute((char const *)arg2,(char const *)arg3); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - SWIG_check_num_args("API", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("API", 1, "API *"); - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_API, SWIG_POINTER_DISOWN))) { - SWIG_fail_ptr("delete_API", 1, SWIGTYPE_p_API); - } +static int _wrap_API_executeString(lua_State* L) { + int SWIG_arg = -1; + API *arg1 = (API *) 0 ; + char *arg2 = (char *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("executeString",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("executeString",1,"API *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("executeString",2,"char const *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_API,0))){ + SWIG_fail_ptr("API_executeString",1,SWIGTYPE_p_API); + } + + arg2 = (char *)lua_tostring(L, 2); + result = (char *)(arg1)->executeString((char const *)arg2); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - delete arg1; - SWIG_arg = 0; +static void swig_delete_API(void *obj) { +API *arg1 = (API *) obj; +delete arg1; +} +static swig_lua_method swig_API_methods[] = { + {"execute", _wrap_API_execute}, + {"executeString", _wrap_API_executeString}, + {0,0} +}; +static swig_lua_attribute swig_API_attributes[] = { + {0,0,0} +}; +static swig_lua_class *swig_API_bases[] = {0}; +static const char *swig_API_base_names[] = {0}; +static swig_lua_class _wrap_class_API = { "API", &SWIGTYPE_p_API,_wrap_new_API, swig_delete_API, swig_API_methods, swig_API_attributes, swig_API_bases, swig_API_base_names }; + +static int _wrap_input_callback_state_t_function_set(lua_State* L) { + int SWIG_arg = -1; + input_callback_state_t *arg1 = (input_callback_state_t *) 0 ; + void *arg2 = (void *) 0 ; + + SWIG_check_num_args("function",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("function",1,"input_callback_state_t *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("function",2,"void *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_input_callback_state,0))){ + SWIG_fail_ptr("input_callback_state_t_function_set",1,SWIGTYPE_p_input_callback_state); + } + + arg2=(void *)SWIG_MustGetPtr(L,2,0,0,2,"input_callback_state_t_function_set"); + if (arg1) (arg1)->function = arg2; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - return SWIG_arg; - if (0) - SWIG_fail; +static int _wrap_input_callback_state_t_function_get(lua_State* L) { + int SWIG_arg = -1; + input_callback_state_t *arg1 = (input_callback_state_t *) 0 ; + void *result = 0 ; + + SWIG_check_num_args("function",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("function",1,"input_callback_state_t *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_input_callback_state,0))){ + SWIG_fail_ptr("input_callback_state_t_function_get",1,SWIGTYPE_p_input_callback_state); + } + + result = (void *) ((arg1)->function); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_void,0); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - fail: - lua_error(L); - return SWIG_arg; - } - - static int _wrap_API_execute(lua_State * L) { - int SWIG_arg = -1; - API *arg1 = (API *) 0; - char *arg2 = (char *) 0; - char *arg3 = (char *) 0; - char *result = 0; - - SWIG_check_num_args("execute", 3, 3) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("execute", 1, "API *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("execute", 2, "char const *"); - if (!lua_isstring(L, 3)) - SWIG_fail_arg("execute", 3, "char const *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_API, 0))) { - SWIG_fail_ptr("API_execute", 1, SWIGTYPE_p_API); - } - - arg2 = (char *) lua_tostring(L, 2); - arg3 = (char *) lua_tostring(L, 3); - result = (char *) (arg1)->execute((char const *) arg2, (char const *) arg3); - SWIG_arg = 0; - lua_pushstring(L, (const char *) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } - - - static int _wrap_API_executeString(lua_State * L) { - int SWIG_arg = -1; - API *arg1 = (API *) 0; - char *arg2 = (char *) 0; - char *result = 0; - - SWIG_check_num_args("executeString", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("executeString", 1, "API *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("executeString", 2, "char const *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_API, 0))) { - SWIG_fail_ptr("API_executeString", 1, SWIGTYPE_p_API); - } - - arg2 = (char *) lua_tostring(L, 2); - result = (char *) (arg1)->executeString((char const *) arg2); - SWIG_arg = 0; - lua_pushstring(L, (const char *) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_input_callback_state_t_threadState_set(lua_State* L) { + int SWIG_arg = -1; + input_callback_state_t *arg1 = (input_callback_state_t *) 0 ; + void *arg2 = (void *) 0 ; + + SWIG_check_num_args("threadState",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("threadState",1,"input_callback_state_t *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("threadState",2,"void *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_input_callback_state,0))){ + SWIG_fail_ptr("input_callback_state_t_threadState_set",1,SWIGTYPE_p_input_callback_state); + } + + arg2=(void *)SWIG_MustGetPtr(L,2,0,0,2,"input_callback_state_t_threadState_set"); + if (arg1) (arg1)->threadState = arg2; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static void swig_delete_API(void *obj) { - API *arg1 = (API *) obj; - delete arg1; - } - static swig_lua_method swig_API_methods[] = { - {"execute", _wrap_API_execute}, - {"executeString", _wrap_API_executeString}, - {0, 0} - }; - static swig_lua_attribute swig_API_attributes[] = { - {0, 0, 0} - }; - static swig_lua_class *swig_API_bases[] = { 0 }; - static const char *swig_API_base_names[] = { 0 }; - static swig_lua_class _wrap_class_API = - { "API", &SWIGTYPE_p_API, _wrap_new_API, swig_delete_API, swig_API_methods, swig_API_attributes, swig_API_bases, swig_API_base_names }; - - static int _wrap_input_callback_state_t_function_set(lua_State * L) { - int SWIG_arg = -1; - input_callback_state_t *arg1 = (input_callback_state_t *) 0; - void *arg2 = (void *) 0; - - SWIG_check_num_args("function", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("function", 1, "input_callback_state_t *"); - if (!SWIG_isptrtype(L, 2)) - SWIG_fail_arg("function", 2, "void *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_input_callback_state, 0))) { - SWIG_fail_ptr("input_callback_state_t_function_set", 1, SWIGTYPE_p_input_callback_state); - } - - arg2 = (void *) SWIG_MustGetPtr(L, 2, 0, 0, 2, "input_callback_state_t_function_set"); - if (arg1) - (arg1)->function = arg2; - - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_input_callback_state_t_threadState_get(lua_State* L) { + int SWIG_arg = -1; + input_callback_state_t *arg1 = (input_callback_state_t *) 0 ; + void *result = 0 ; + + SWIG_check_num_args("threadState",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("threadState",1,"input_callback_state_t *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_input_callback_state,0))){ + SWIG_fail_ptr("input_callback_state_t_threadState_get",1,SWIGTYPE_p_input_callback_state); + } + + result = (void *) ((arg1)->threadState); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_void,0); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_input_callback_state_t_function_get(lua_State * L) { - int SWIG_arg = -1; - input_callback_state_t *arg1 = (input_callback_state_t *) 0; - void *result = 0; - - SWIG_check_num_args("function", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("function", 1, "input_callback_state_t *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_input_callback_state, 0))) { - SWIG_fail_ptr("input_callback_state_t_function_get", 1, SWIGTYPE_p_input_callback_state); - } - - result = (void *) ((arg1)->function); - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_void, 0); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_input_callback_state_t_extra_set(lua_State* L) { + int SWIG_arg = -1; + input_callback_state_t *arg1 = (input_callback_state_t *) 0 ; + void *arg2 = (void *) 0 ; + + SWIG_check_num_args("extra",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("extra",1,"input_callback_state_t *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("extra",2,"void *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_input_callback_state,0))){ + SWIG_fail_ptr("input_callback_state_t_extra_set",1,SWIGTYPE_p_input_callback_state); + } + + arg2=(void *)SWIG_MustGetPtr(L,2,0,0,2,"input_callback_state_t_extra_set"); + if (arg1) (arg1)->extra = arg2; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_input_callback_state_t_threadState_set(lua_State * L) { - int SWIG_arg = -1; - input_callback_state_t *arg1 = (input_callback_state_t *) 0; - void *arg2 = (void *) 0; - - SWIG_check_num_args("threadState", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("threadState", 1, "input_callback_state_t *"); - if (!SWIG_isptrtype(L, 2)) - SWIG_fail_arg("threadState", 2, "void *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_input_callback_state, 0))) { - SWIG_fail_ptr("input_callback_state_t_threadState_set", 1, SWIGTYPE_p_input_callback_state); - } - - arg2 = (void *) SWIG_MustGetPtr(L, 2, 0, 0, 2, "input_callback_state_t_threadState_set"); - if (arg1) - (arg1)->threadState = arg2; - - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_input_callback_state_t_extra_get(lua_State* L) { + int SWIG_arg = -1; + input_callback_state_t *arg1 = (input_callback_state_t *) 0 ; + void *result = 0 ; + + SWIG_check_num_args("extra",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("extra",1,"input_callback_state_t *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_input_callback_state,0))){ + SWIG_fail_ptr("input_callback_state_t_extra_get",1,SWIGTYPE_p_input_callback_state); + } + + result = (void *) ((arg1)->extra); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_void,0); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_input_callback_state_t_threadState_get(lua_State * L) { - int SWIG_arg = -1; - input_callback_state_t *arg1 = (input_callback_state_t *) 0; - void *result = 0; - - SWIG_check_num_args("threadState", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("threadState", 1, "input_callback_state_t *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_input_callback_state, 0))) { - SWIG_fail_ptr("input_callback_state_t_threadState_get", 1, SWIGTYPE_p_input_callback_state); - } - - result = (void *) ((arg1)->threadState); - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_void, 0); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_input_callback_state_t_funcargs_set(lua_State* L) { + int SWIG_arg = -1; + input_callback_state_t *arg1 = (input_callback_state_t *) 0 ; + char *arg2 = (char *) 0 ; + + SWIG_check_num_args("funcargs",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("funcargs",1,"input_callback_state_t *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("funcargs",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_input_callback_state,0))){ + SWIG_fail_ptr("input_callback_state_t_funcargs_set",1,SWIGTYPE_p_input_callback_state); + } + + arg2 = (char *)lua_tostring(L, 2); + { + if (arg1->funcargs) delete [] arg1->funcargs; + if (arg2) { + arg1->funcargs = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->funcargs, (const char *)arg2); + } else { + arg1->funcargs = 0; + } + } + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_input_callback_state_t_extra_set(lua_State * L) { - int SWIG_arg = -1; - input_callback_state_t *arg1 = (input_callback_state_t *) 0; - void *arg2 = (void *) 0; - - SWIG_check_num_args("extra", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("extra", 1, "input_callback_state_t *"); - if (!SWIG_isptrtype(L, 2)) - SWIG_fail_arg("extra", 2, "void *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_input_callback_state, 0))) { - SWIG_fail_ptr("input_callback_state_t_extra_set", 1, SWIGTYPE_p_input_callback_state); - } - - arg2 = (void *) SWIG_MustGetPtr(L, 2, 0, 0, 2, "input_callback_state_t_extra_set"); - if (arg1) - (arg1)->extra = arg2; - - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_input_callback_state_t_funcargs_get(lua_State* L) { + int SWIG_arg = -1; + input_callback_state_t *arg1 = (input_callback_state_t *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("funcargs",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("funcargs",1,"input_callback_state_t *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_input_callback_state,0))){ + SWIG_fail_ptr("input_callback_state_t_funcargs_get",1,SWIGTYPE_p_input_callback_state); + } + + result = (char *) ((arg1)->funcargs); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_input_callback_state_t_extra_get(lua_State * L) { - int SWIG_arg = -1; - input_callback_state_t *arg1 = (input_callback_state_t *) 0; - void *result = 0; - - SWIG_check_num_args("extra", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("extra", 1, "input_callback_state_t *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_input_callback_state, 0))) { - SWIG_fail_ptr("input_callback_state_t_extra_get", 1, SWIGTYPE_p_input_callback_state); - } - - result = (void *) ((arg1)->extra); - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_void, 0); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_new_input_callback_state_t(lua_State* L) { + int SWIG_arg = -1; + input_callback_state_t *result = 0 ; + + SWIG_check_num_args("input_callback_state_t::input_callback_state_t",0,0) + result = (input_callback_state_t *)new input_callback_state_t(); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_input_callback_state,1); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_input_callback_state_t_funcargs_set(lua_State * L) { - int SWIG_arg = -1; - input_callback_state_t *arg1 = (input_callback_state_t *) 0; - char *arg2 = (char *) 0; - - SWIG_check_num_args("funcargs", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("funcargs", 1, "input_callback_state_t *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("funcargs", 2, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_input_callback_state, 0))) { - SWIG_fail_ptr("input_callback_state_t_funcargs_set", 1, SWIGTYPE_p_input_callback_state); - } - - arg2 = (char *) lua_tostring(L, 2); - { - if (arg1->funcargs) - delete[]arg1->funcargs; - if (arg2) { - arg1->funcargs = (char *) (new char[strlen((const char *)arg2) + 1]); - strcpy((char *) arg1->funcargs, (const char *) arg2); - } else { - arg1->funcargs = 0; - } - } - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_delete_input_callback_state_t(lua_State* L) { + int SWIG_arg = -1; + input_callback_state_t *arg1 = (input_callback_state_t *) 0 ; + + SWIG_check_num_args("input_callback_state_t::~input_callback_state_t",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("input_callback_state_t::~input_callback_state_t",1,"input_callback_state_t *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_input_callback_state,SWIG_POINTER_DISOWN))){ + SWIG_fail_ptr("delete_input_callback_state_t",1,SWIGTYPE_p_input_callback_state); + } + + delete arg1; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_input_callback_state_t_funcargs_get(lua_State * L) { - int SWIG_arg = -1; - input_callback_state_t *arg1 = (input_callback_state_t *) 0; - char *result = 0; - - SWIG_check_num_args("funcargs", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("funcargs", 1, "input_callback_state_t *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_input_callback_state, 0))) { - SWIG_fail_ptr("input_callback_state_t_funcargs_get", 1, SWIGTYPE_p_input_callback_state); - } - - result = (char *) ((arg1)->funcargs); - SWIG_arg = 0; - lua_pushstring(L, (const char *) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static void swig_delete_input_callback_state_t(void *obj) { +input_callback_state_t *arg1 = (input_callback_state_t *) obj; +delete arg1; +} +static swig_lua_method swig_input_callback_state_t_methods[] = { + {0,0} +}; +static swig_lua_attribute swig_input_callback_state_t_attributes[] = { + { "function", _wrap_input_callback_state_t_function_get, _wrap_input_callback_state_t_function_set}, + { "threadState", _wrap_input_callback_state_t_threadState_get, _wrap_input_callback_state_t_threadState_set}, + { "extra", _wrap_input_callback_state_t_extra_get, _wrap_input_callback_state_t_extra_set}, + { "funcargs", _wrap_input_callback_state_t_funcargs_get, _wrap_input_callback_state_t_funcargs_set}, + {0,0,0} +}; +static swig_lua_class *swig_input_callback_state_t_bases[] = {0}; +static const char *swig_input_callback_state_t_base_names[] = {0}; +static swig_lua_class _wrap_class_input_callback_state_t = { "input_callback_state_t", &SWIGTYPE_p_input_callback_state,_wrap_new_input_callback_state_t, swig_delete_input_callback_state_t, swig_input_callback_state_t_methods, swig_input_callback_state_t_attributes, swig_input_callback_state_t_bases, swig_input_callback_state_t_base_names }; + +static int _wrap_DTMF_digit_set(lua_State* L) { + int SWIG_arg = -1; + DTMF *arg1 = (DTMF *) 0 ; + char arg2 ; + + SWIG_check_num_args("digit",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("digit",1,"DTMF *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("digit",2,"char"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_DTMF,0))){ + SWIG_fail_ptr("DTMF_digit_set",1,SWIGTYPE_p_DTMF); + } + + arg2 = (lua_tostring(L, 2))[0]; + if (arg1) (arg1)->digit = arg2; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_new_input_callback_state_t(lua_State * L) { - int SWIG_arg = -1; - input_callback_state_t *result = 0; - - SWIG_check_num_args("input_callback_state_t::input_callback_state_t", 0, 0) - result = (input_callback_state_t *) new input_callback_state_t(); - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_input_callback_state, 1); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_DTMF_digit_get(lua_State* L) { + int SWIG_arg = -1; + DTMF *arg1 = (DTMF *) 0 ; + char result; + + SWIG_check_num_args("digit",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("digit",1,"DTMF *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_DTMF,0))){ + SWIG_fail_ptr("DTMF_digit_get",1,SWIGTYPE_p_DTMF); + } + + result = (char) ((arg1)->digit); + SWIG_arg=0; + lua_pushfstring(L,"%c",result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_delete_input_callback_state_t(lua_State * L) { - int SWIG_arg = -1; - input_callback_state_t *arg1 = (input_callback_state_t *) 0; +static int _wrap_DTMF_duration_set(lua_State* L) { + int SWIG_arg = -1; + DTMF *arg1 = (DTMF *) 0 ; + uint32_t arg2 ; + uint32_t *argp2 ; + + SWIG_check_num_args("duration",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("duration",1,"DTMF *"); + if(!lua_isuserdata(L,2)) SWIG_fail_arg("duration",2,"uint32_t"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_DTMF,0))){ + SWIG_fail_ptr("DTMF_duration_set",1,SWIGTYPE_p_DTMF); + } + + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&argp2,SWIGTYPE_p_uint32_t,0))){ + SWIG_fail_ptr("DTMF_duration_set",2,SWIGTYPE_p_uint32_t); + } + arg2 = *argp2; + + if (arg1) (arg1)->duration = arg2; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - SWIG_check_num_args("input_callback_state_t::~input_callback_state_t", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("input_callback_state_t::~input_callback_state_t", 1, "input_callback_state_t *"); - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_input_callback_state, SWIG_POINTER_DISOWN))) { - SWIG_fail_ptr("delete_input_callback_state_t", 1, SWIGTYPE_p_input_callback_state); - } +static int _wrap_DTMF_duration_get(lua_State* L) { + int SWIG_arg = -1; + DTMF *arg1 = (DTMF *) 0 ; + uint32_t result; + + SWIG_check_num_args("duration",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("duration",1,"DTMF *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_DTMF,0))){ + SWIG_fail_ptr("DTMF_duration_get",1,SWIGTYPE_p_DTMF); + } + + result = ((arg1)->duration); + SWIG_arg=0; + { + uint32_t * resultptr = new uint32_t((uint32_t &) result); + SWIG_NewPointerObj(L,(void *) resultptr,SWIGTYPE_p_uint32_t,1); SWIG_arg++; + } + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - delete arg1; - SWIG_arg = 0; +static int _wrap_new_DTMF__SWIG_0(lua_State* L) { + int SWIG_arg = -1; + char arg1 ; + uint32_t arg2 ; + DTMF *result = 0 ; + uint32_t *argp2 ; + + SWIG_check_num_args("DTMF",2,2) + if(!lua_isstring(L,1)) SWIG_fail_arg("DTMF",1,"char"); + if(!lua_isuserdata(L,2)) SWIG_fail_arg("DTMF",2,"uint32_t"); + arg1 = (lua_tostring(L, 1))[0]; + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&argp2,SWIGTYPE_p_uint32_t,0))){ + SWIG_fail_ptr("new_DTMF",2,SWIGTYPE_p_uint32_t); + } + arg2 = *argp2; + + result = (DTMF *)new DTMF(arg1,arg2); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_DTMF,1); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - return SWIG_arg; - if (0) - SWIG_fail; +static int _wrap_new_DTMF__SWIG_1(lua_State* L) { + int SWIG_arg = -1; + char arg1 ; + DTMF *result = 0 ; + + SWIG_check_num_args("DTMF",1,1) + if(!lua_isstring(L,1)) SWIG_fail_arg("DTMF",1,"char"); + arg1 = (lua_tostring(L, 1))[0]; + result = (DTMF *)new DTMF(arg1); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_DTMF,1); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_new_DTMF(lua_State* L) { + int argc; + int argv[3]={ + 1,2,3 + }; + + argc = lua_gettop(L); + if (argc == 1) { + int _v; + { + _v = lua_isstring(L,argv[0]) && (lua_strlen(L,argv[0])==1); + } + if (_v) { + return _wrap_new_DTMF__SWIG_1(L); + } + } + if (argc == 2) { + int _v; + { + _v = lua_isstring(L,argv[0]) && (lua_strlen(L,argv[0])==1); + } + if (_v) { + { + void *ptr; + if (lua_isuserdata(L,argv[1])==0 || SWIG_ConvertPtr(L,argv[1], (void **) &ptr, SWIGTYPE_p_uint32_t, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + return _wrap_new_DTMF__SWIG_0(L); + } + } + } + + lua_pushstring(L,"No matching function for overloaded 'new_DTMF'"); + lua_error(L);return 0; +} - static void swig_delete_input_callback_state_t(void *obj) { - input_callback_state_t *arg1 = (input_callback_state_t *) obj; - delete arg1; - } - static swig_lua_method swig_input_callback_state_t_methods[] = { - {0, 0} - }; - static swig_lua_attribute swig_input_callback_state_t_attributes[] = { - {"function", _wrap_input_callback_state_t_function_get, _wrap_input_callback_state_t_function_set}, - {"threadState", _wrap_input_callback_state_t_threadState_get, _wrap_input_callback_state_t_threadState_set}, - {"extra", _wrap_input_callback_state_t_extra_get, _wrap_input_callback_state_t_extra_set}, - {"funcargs", _wrap_input_callback_state_t_funcargs_get, _wrap_input_callback_state_t_funcargs_set}, - {0, 0, 0} - }; - static swig_lua_class *swig_input_callback_state_t_bases[] = { 0 }; - static const char *swig_input_callback_state_t_base_names[] = { 0 }; - static swig_lua_class _wrap_class_input_callback_state_t = - { "input_callback_state_t", &SWIGTYPE_p_input_callback_state, _wrap_new_input_callback_state_t, swig_delete_input_callback_state_t, -swig_input_callback_state_t_methods, swig_input_callback_state_t_attributes, swig_input_callback_state_t_bases, swig_input_callback_state_t_base_names }; - - static int _wrap_new_Stream__SWIG_0(lua_State * L) { - int SWIG_arg = -1; - Stream *result = 0; - - SWIG_check_num_args("Stream", 0, 0) - result = (Stream *) new Stream(); - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_Stream, 1); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_delete_DTMF(lua_State* L) { + int SWIG_arg = -1; + DTMF *arg1 = (DTMF *) 0 ; + + SWIG_check_num_args("DTMF",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("DTMF",1,"DTMF *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_DTMF,SWIG_POINTER_DISOWN))){ + SWIG_fail_ptr("delete_DTMF",1,SWIGTYPE_p_DTMF); + } + + delete arg1; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_new_Stream__SWIG_1(lua_State * L) { - int SWIG_arg = -1; - switch_stream_handle_t *arg1 = (switch_stream_handle_t *) 0; - Stream *result = 0; - - SWIG_check_num_args("Stream", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("Stream", 1, "switch_stream_handle_t *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_switch_stream_handle_t, 0))) { - SWIG_fail_ptr("new_Stream", 1, SWIGTYPE_p_switch_stream_handle_t); - } - - result = (Stream *) new Stream(arg1); - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_Stream, 1); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static void swig_delete_DTMF(void *obj) { +DTMF *arg1 = (DTMF *) obj; +delete arg1; +} +static swig_lua_method swig_DTMF_methods[] = { + {0,0} +}; +static swig_lua_attribute swig_DTMF_attributes[] = { + { "digit", _wrap_DTMF_digit_get, _wrap_DTMF_digit_set}, + { "duration", _wrap_DTMF_duration_get, _wrap_DTMF_duration_set}, + {0,0,0} +}; +static swig_lua_class *swig_DTMF_bases[] = {0}; +static const char *swig_DTMF_base_names[] = {0}; +static swig_lua_class _wrap_class_DTMF = { "DTMF", &SWIGTYPE_p_DTMF,_wrap_new_DTMF, swig_delete_DTMF, swig_DTMF_methods, swig_DTMF_attributes, swig_DTMF_bases, swig_DTMF_base_names }; + +static int _wrap_new_Stream__SWIG_0(lua_State* L) { + int SWIG_arg = -1; + Stream *result = 0 ; + + SWIG_check_num_args("Stream",0,0) + result = (Stream *)new Stream(); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_Stream,1); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_new_Stream(lua_State * L) { - int argc; - int argv[2] = { - 1, 2 - }; - - argc = lua_gettop(L); - if (argc == 0) { - return _wrap_new_Stream__SWIG_0(L); - } - if (argc == 1) { - int _v; - { - void *ptr; - if (SWIG_isptrtype(L, argv[0]) == 0 || SWIG_ConvertPtr(L, argv[0], (void **) &ptr, SWIGTYPE_p_switch_stream_handle_t, 0)) { - _v = 0; - } else { - _v = 1; - } - } - if (_v) { - return _wrap_new_Stream__SWIG_1(L); - } - } - - lua_pushstring(L, "No matching function for overloaded 'new_Stream'"); - lua_error(L); - return 0; - } +static int _wrap_new_Stream__SWIG_1(lua_State* L) { + int SWIG_arg = -1; + switch_stream_handle_t *arg1 = (switch_stream_handle_t *) 0 ; + Stream *result = 0 ; + + SWIG_check_num_args("Stream",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("Stream",1,"switch_stream_handle_t *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_switch_stream_handle_t,0))){ + SWIG_fail_ptr("new_Stream",1,SWIGTYPE_p_switch_stream_handle_t); + } + + result = (Stream *)new Stream(arg1); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_Stream,1); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_delete_Stream(lua_State * L) { - int SWIG_arg = -1; - Stream *arg1 = (Stream *) 0; - SWIG_check_num_args("Stream", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("Stream", 1, "Stream *"); +static int _wrap_new_Stream(lua_State* L) { + int argc; + int argv[2]={ + 1,2 + }; + + argc = lua_gettop(L); + if (argc == 0) { + return _wrap_new_Stream__SWIG_0(L); + } + if (argc == 1) { + int _v; + { + void *ptr; + if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_switch_stream_handle_t, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + return _wrap_new_Stream__SWIG_1(L); + } + } + + lua_pushstring(L,"No matching function for overloaded 'new_Stream'"); + lua_error(L);return 0; +} - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Stream, SWIG_POINTER_DISOWN))) { - SWIG_fail_ptr("delete_Stream", 1, SWIGTYPE_p_Stream); - } - delete arg1; +static int _wrap_delete_Stream(lua_State* L) { + int SWIG_arg = -1; + Stream *arg1 = (Stream *) 0 ; + + SWIG_check_num_args("Stream",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("Stream",1,"Stream *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Stream,SWIG_POINTER_DISOWN))){ + SWIG_fail_ptr("delete_Stream",1,SWIGTYPE_p_Stream); + } + + delete arg1; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - SWIG_arg = 0; - return SWIG_arg; +static int _wrap_Stream_write(lua_State* L) { + int SWIG_arg = -1; + Stream *arg1 = (Stream *) 0 ; + char *arg2 = (char *) 0 ; + + SWIG_check_num_args("write",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("write",1,"Stream *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("write",2,"char const *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Stream,0))){ + SWIG_fail_ptr("Stream_write",1,SWIGTYPE_p_Stream); + } + + arg2 = (char *)lua_tostring(L, 2); + (arg1)->write((char const *)arg2); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (0) - SWIG_fail; - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Stream_get_data(lua_State* L) { + int SWIG_arg = -1; + Stream *arg1 = (Stream *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("get_data",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("get_data",1,"Stream *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Stream,0))){ + SWIG_fail_ptr("Stream_get_data",1,SWIGTYPE_p_Stream); + } + + result = (char *)(arg1)->get_data(); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Stream_write(lua_State * L) { - int SWIG_arg = -1; - Stream *arg1 = (Stream *) 0; - char *arg2 = (char *) 0; - - SWIG_check_num_args("write", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("write", 1, "Stream *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("write", 2, "char const *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Stream, 0))) { - SWIG_fail_ptr("Stream_write", 1, SWIGTYPE_p_Stream); - } - - arg2 = (char *) lua_tostring(L, 2); - (arg1)->write((char const *) arg2); - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static void swig_delete_Stream(void *obj) { +Stream *arg1 = (Stream *) obj; +delete arg1; +} +static swig_lua_method swig_Stream_methods[] = { + {"write", _wrap_Stream_write}, + {"get_data", _wrap_Stream_get_data}, + {0,0} +}; +static swig_lua_attribute swig_Stream_attributes[] = { + {0,0,0} +}; +static swig_lua_class *swig_Stream_bases[] = {0}; +static const char *swig_Stream_base_names[] = {0}; +static swig_lua_class _wrap_class_Stream = { "Stream", &SWIGTYPE_p_Stream,_wrap_new_Stream, swig_delete_Stream, swig_Stream_methods, swig_Stream_attributes, swig_Stream_bases, swig_Stream_base_names }; + +static int _wrap_Event_event_set(lua_State* L) { + int SWIG_arg = -1; + Event *arg1 = (Event *) 0 ; + switch_event_t *arg2 = (switch_event_t *) 0 ; + + SWIG_check_num_args("event",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("event",1,"Event *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("event",2,"switch_event_t *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Event,0))){ + SWIG_fail_ptr("Event_event_set",1,SWIGTYPE_p_Event); + } + + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&arg2,SWIGTYPE_p_switch_event_t,SWIG_POINTER_DISOWN))){ + SWIG_fail_ptr("Event_event_set",2,SWIGTYPE_p_switch_event_t); + } + + if (arg1) (arg1)->event = arg2; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Stream_get_data(lua_State * L) { - int SWIG_arg = -1; - Stream *arg1 = (Stream *) 0; - char *result = 0; - - SWIG_check_num_args("get_data", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("get_data", 1, "Stream *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Stream, 0))) { - SWIG_fail_ptr("Stream_get_data", 1, SWIGTYPE_p_Stream); - } - - result = (char *) (arg1)->get_data(); - SWIG_arg = 0; - lua_pushstring(L, (const char *) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Event_event_get(lua_State* L) { + int SWIG_arg = -1; + Event *arg1 = (Event *) 0 ; + switch_event_t *result = 0 ; + + SWIG_check_num_args("event",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("event",1,"Event *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Event,0))){ + SWIG_fail_ptr("Event_event_get",1,SWIGTYPE_p_Event); + } + + result = (switch_event_t *) ((arg1)->event); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_switch_event_t,0); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static void swig_delete_Stream(void *obj) { - Stream *arg1 = (Stream *) obj; - delete arg1; - } - static swig_lua_method swig_Stream_methods[] = { - {"write", _wrap_Stream_write}, - {"get_data", _wrap_Stream_get_data}, - {0, 0} - }; - static swig_lua_attribute swig_Stream_attributes[] = { - {0, 0, 0} - }; - static swig_lua_class *swig_Stream_bases[] = { 0 }; - static const char *swig_Stream_base_names[] = { 0 }; - static swig_lua_class _wrap_class_Stream = - { "Stream", &SWIGTYPE_p_Stream, _wrap_new_Stream, swig_delete_Stream, swig_Stream_methods, swig_Stream_attributes, swig_Stream_bases, -swig_Stream_base_names }; - - static int _wrap_Event_event_set(lua_State * L) { - int SWIG_arg = -1; - Event *arg1 = (Event *) 0; - switch_event_t *arg2 = (switch_event_t *) 0; - - SWIG_check_num_args("event", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("event", 1, "Event *"); - if (!SWIG_isptrtype(L, 2)) - SWIG_fail_arg("event", 2, "switch_event_t *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Event, 0))) { - SWIG_fail_ptr("Event_event_set", 1, SWIGTYPE_p_Event); - } - - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 2, (void **) &arg2, SWIGTYPE_p_switch_event_t, SWIG_POINTER_DISOWN))) { - SWIG_fail_ptr("Event_event_set", 2, SWIGTYPE_p_switch_event_t); - } - - if (arg1) - (arg1)->event = arg2; - - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Event_serialized_string_set(lua_State* L) { + int SWIG_arg = -1; + Event *arg1 = (Event *) 0 ; + char *arg2 = (char *) 0 ; + + SWIG_check_num_args("serialized_string",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("serialized_string",1,"Event *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("serialized_string",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Event,0))){ + SWIG_fail_ptr("Event_serialized_string_set",1,SWIGTYPE_p_Event); + } + + arg2 = (char *)lua_tostring(L, 2); + { + if (arg1->serialized_string) delete [] arg1->serialized_string; + if (arg2) { + arg1->serialized_string = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->serialized_string, (const char *)arg2); + } else { + arg1->serialized_string = 0; + } + } + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Event_event_get(lua_State * L) { - int SWIG_arg = -1; - Event *arg1 = (Event *) 0; - switch_event_t *result = 0; - - SWIG_check_num_args("event", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("event", 1, "Event *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Event, 0))) { - SWIG_fail_ptr("Event_event_get", 1, SWIGTYPE_p_Event); - } - - result = (switch_event_t *) ((arg1)->event); - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_switch_event_t, 0); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Event_serialized_string_get(lua_State* L) { + int SWIG_arg = -1; + Event *arg1 = (Event *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("serialized_string",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("serialized_string",1,"Event *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Event,0))){ + SWIG_fail_ptr("Event_serialized_string_get",1,SWIGTYPE_p_Event); + } + + result = (char *) ((arg1)->serialized_string); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Event_serialized_string_set(lua_State * L) { - int SWIG_arg = -1; - Event *arg1 = (Event *) 0; - char *arg2 = (char *) 0; - - SWIG_check_num_args("serialized_string", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("serialized_string", 1, "Event *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("serialized_string", 2, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Event, 0))) { - SWIG_fail_ptr("Event_serialized_string_set", 1, SWIGTYPE_p_Event); - } - - arg2 = (char *) lua_tostring(L, 2); - { - if (arg1->serialized_string) - delete[]arg1->serialized_string; - if (arg2) { - arg1->serialized_string = (char *) (new char[strlen((const char *)arg2) + 1]); - strcpy((char *) arg1->serialized_string, (const char *) arg2); - } else { - arg1->serialized_string = 0; - } - } - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Event_mine_set(lua_State* L) { + int SWIG_arg = -1; + Event *arg1 = (Event *) 0 ; + int arg2 ; + + SWIG_check_num_args("mine",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("mine",1,"Event *"); + if(!lua_isnumber(L,2)) SWIG_fail_arg("mine",2,"int"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Event,0))){ + SWIG_fail_ptr("Event_mine_set",1,SWIGTYPE_p_Event); + } + + arg2 = (int)lua_tonumber(L, 2); + if (arg1) (arg1)->mine = arg2; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Event_serialized_string_get(lua_State * L) { - int SWIG_arg = -1; - Event *arg1 = (Event *) 0; - char *result = 0; - - SWIG_check_num_args("serialized_string", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("serialized_string", 1, "Event *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Event, 0))) { - SWIG_fail_ptr("Event_serialized_string_get", 1, SWIGTYPE_p_Event); - } - - result = (char *) ((arg1)->serialized_string); - SWIG_arg = 0; - lua_pushstring(L, (const char *) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Event_mine_get(lua_State* L) { + int SWIG_arg = -1; + Event *arg1 = (Event *) 0 ; + int result; + + SWIG_check_num_args("mine",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("mine",1,"Event *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Event,0))){ + SWIG_fail_ptr("Event_mine_get",1,SWIGTYPE_p_Event); + } + + result = (int) ((arg1)->mine); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Event_mine_set(lua_State * L) { - int SWIG_arg = -1; - Event *arg1 = (Event *) 0; - int arg2; - - SWIG_check_num_args("mine", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("mine", 1, "Event *"); - if (!lua_isnumber(L, 2)) - SWIG_fail_arg("mine", 2, "int"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Event, 0))) { - SWIG_fail_ptr("Event_mine_set", 1, SWIGTYPE_p_Event); - } - - arg2 = (int) lua_tonumber(L, 2); - if (arg1) - (arg1)->mine = arg2; - - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_new_Event__SWIG_0(lua_State* L) { + int SWIG_arg = -1; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + Event *result = 0 ; + + SWIG_check_num_args("Event",2,2) + if(!lua_isstring(L,1)) SWIG_fail_arg("Event",1,"char const *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("Event",2,"char const *"); + arg1 = (char *)lua_tostring(L, 1); + arg2 = (char *)lua_tostring(L, 2); + result = (Event *)new Event((char const *)arg1,(char const *)arg2); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_Event,1); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Event_mine_get(lua_State * L) { - int SWIG_arg = -1; - Event *arg1 = (Event *) 0; - int result; - - SWIG_check_num_args("mine", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("mine", 1, "Event *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Event, 0))) { - SWIG_fail_ptr("Event_mine_get", 1, SWIGTYPE_p_Event); - } - - result = (int) ((arg1)->mine); - SWIG_arg = 0; - lua_pushnumber(L, (lua_Number) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_new_Event__SWIG_1(lua_State* L) { + int SWIG_arg = -1; + char *arg1 = (char *) 0 ; + Event *result = 0 ; + + SWIG_check_num_args("Event",1,1) + if(!lua_isstring(L,1)) SWIG_fail_arg("Event",1,"char const *"); + arg1 = (char *)lua_tostring(L, 1); + result = (Event *)new Event((char const *)arg1); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_Event,1); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_new_Event__SWIG_0(lua_State * L) { - int SWIG_arg = -1; - char *arg1 = (char *) 0; - char *arg2 = (char *) 0; - Event *result = 0; - - SWIG_check_num_args("Event", 2, 2) - if (!lua_isstring(L, 1)) - SWIG_fail_arg("Event", 1, "char const *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("Event", 2, "char const *"); - arg1 = (char *) lua_tostring(L, 1); - arg2 = (char *) lua_tostring(L, 2); - result = (Event *) new Event((char const *) arg1, (char const *) arg2); - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_Event, 1); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_new_Event__SWIG_2(lua_State* L) { + int SWIG_arg = -1; + switch_event_t *arg1 = (switch_event_t *) 0 ; + int arg2 ; + Event *result = 0 ; + + SWIG_check_num_args("Event",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("Event",1,"switch_event_t *"); + if(!lua_isnumber(L,2)) SWIG_fail_arg("Event",2,"int"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_switch_event_t,0))){ + SWIG_fail_ptr("new_Event",1,SWIGTYPE_p_switch_event_t); + } + + arg2 = (int)lua_tonumber(L, 2); + result = (Event *)new Event(arg1,arg2); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_Event,1); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_new_Event__SWIG_1(lua_State * L) { - int SWIG_arg = -1; - char *arg1 = (char *) 0; - Event *result = 0; - - SWIG_check_num_args("Event", 1, 1) - if (!lua_isstring(L, 1)) - SWIG_fail_arg("Event", 1, "char const *"); - arg1 = (char *) lua_tostring(L, 1); - result = (Event *) new Event((char const *) arg1); - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_Event, 1); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_new_Event__SWIG_3(lua_State* L) { + int SWIG_arg = -1; + switch_event_t *arg1 = (switch_event_t *) 0 ; + Event *result = 0 ; + + SWIG_check_num_args("Event",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("Event",1,"switch_event_t *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_switch_event_t,0))){ + SWIG_fail_ptr("new_Event",1,SWIGTYPE_p_switch_event_t); + } + + result = (Event *)new Event(arg1); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_Event,1); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_new_Event__SWIG_2(lua_State * L) { - int SWIG_arg = -1; - switch_event_t *arg1 = (switch_event_t *) 0; - int arg2; - Event *result = 0; - - SWIG_check_num_args("Event", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("Event", 1, "switch_event_t *"); - if (!lua_isnumber(L, 2)) - SWIG_fail_arg("Event", 2, "int"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_switch_event_t, 0))) { - SWIG_fail_ptr("new_Event", 1, SWIGTYPE_p_switch_event_t); - } - - arg2 = (int) lua_tonumber(L, 2); - result = (Event *) new Event(arg1, arg2); - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_Event, 1); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } - +static int _wrap_new_Event(lua_State* L) { + int argc; + int argv[3]={ + 1,2,3 + }; + + argc = lua_gettop(L); + if (argc == 1) { + int _v; + { + void *ptr; + if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_switch_event_t, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + return _wrap_new_Event__SWIG_3(L); + } + } + if (argc == 1) { + int _v; + { + _v = lua_isstring(L,argv[0]); + } + if (_v) { + return _wrap_new_Event__SWIG_1(L); + } + } + if (argc == 2) { + int _v; + { + void *ptr; + if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_switch_event_t, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + { + _v = lua_isnumber(L,argv[1]); + } + if (_v) { + return _wrap_new_Event__SWIG_2(L); + } + } + } + if (argc == 2) { + int _v; + { + _v = lua_isstring(L,argv[0]); + } + if (_v) { + { + _v = lua_isstring(L,argv[1]); + } + if (_v) { + return _wrap_new_Event__SWIG_0(L); + } + } + } + + lua_pushstring(L,"No matching function for overloaded 'new_Event'"); + lua_error(L);return 0; +} - static int _wrap_new_Event__SWIG_3(lua_State * L) { - int SWIG_arg = -1; - switch_event_t *arg1 = (switch_event_t *) 0; - Event *result = 0; - - SWIG_check_num_args("Event", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("Event", 1, "switch_event_t *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_switch_event_t, 0))) { - SWIG_fail_ptr("new_Event", 1, SWIGTYPE_p_switch_event_t); - } - - result = (Event *) new Event(arg1); - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_Event, 1); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_delete_Event(lua_State* L) { + int SWIG_arg = -1; + Event *arg1 = (Event *) 0 ; + + SWIG_check_num_args("Event",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("Event",1,"Event *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Event,SWIG_POINTER_DISOWN))){ + SWIG_fail_ptr("delete_Event",1,SWIGTYPE_p_Event); + } + + delete arg1; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_new_Event(lua_State * L) { - int argc; - int argv[3] = { - 1, 2, 3 - }; - - argc = lua_gettop(L); - if (argc == 1) { - int _v; - { - void *ptr; - if (SWIG_isptrtype(L, argv[0]) == 0 || SWIG_ConvertPtr(L, argv[0], (void **) &ptr, SWIGTYPE_p_switch_event_t, 0)) { - _v = 0; - } else { - _v = 1; - } - } - if (_v) { - return _wrap_new_Event__SWIG_3(L); - } - } - if (argc == 1) { - int _v; - { - _v = lua_isstring(L, argv[0]); - } - if (_v) { - return _wrap_new_Event__SWIG_1(L); - } - } - if (argc == 2) { - int _v; - { - void *ptr; - if (SWIG_isptrtype(L, argv[0]) == 0 || SWIG_ConvertPtr(L, argv[0], (void **) &ptr, SWIGTYPE_p_switch_event_t, 0)) { - _v = 0; - } else { - _v = 1; - } - } - if (_v) { - { - _v = lua_isnumber(L, argv[1]); - } - if (_v) { - return _wrap_new_Event__SWIG_2(L); - } - } - } - if (argc == 2) { - int _v; - { - _v = lua_isstring(L, argv[0]); - } - if (_v) { - { - _v = lua_isstring(L, argv[1]); - } - if (_v) { - return _wrap_new_Event__SWIG_0(L); - } - } - } - - lua_pushstring(L, "No matching function for overloaded 'new_Event'"); - lua_error(L); - return 0; - } +static int _wrap_Event_serialize__SWIG_0(lua_State* L) { + int SWIG_arg = -1; + Event *arg1 = (Event *) 0 ; + char *arg2 = (char *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("serialize",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("serialize",1,"Event *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("serialize",2,"char const *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Event,0))){ + SWIG_fail_ptr("Event_serialize",1,SWIGTYPE_p_Event); + } + + arg2 = (char *)lua_tostring(L, 2); + result = (char *)(arg1)->serialize((char const *)arg2); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_delete_Event(lua_State * L) { - int SWIG_arg = -1; - Event *arg1 = (Event *) 0; - SWIG_check_num_args("Event", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("Event", 1, "Event *"); +static int _wrap_Event_serialize__SWIG_1(lua_State* L) { + int SWIG_arg = -1; + Event *arg1 = (Event *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("serialize",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("serialize",1,"Event *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Event,0))){ + SWIG_fail_ptr("Event_serialize",1,SWIGTYPE_p_Event); + } + + result = (char *)(arg1)->serialize(); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Event, SWIG_POINTER_DISOWN))) { - SWIG_fail_ptr("delete_Event", 1, SWIGTYPE_p_Event); - } - delete arg1; +static int _wrap_Event_serialize(lua_State* L) { + int argc; + int argv[3]={ + 1,2,3 + }; + + argc = lua_gettop(L); + if (argc == 1) { + int _v; + { + void *ptr; + if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_Event, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + return _wrap_Event_serialize__SWIG_1(L); + } + } + if (argc == 2) { + int _v; + { + void *ptr; + if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_Event, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + { + _v = lua_isstring(L,argv[1]); + } + if (_v) { + return _wrap_Event_serialize__SWIG_0(L); + } + } + } + + lua_pushstring(L,"No matching function for overloaded 'Event_serialize'"); + lua_error(L);return 0; +} - SWIG_arg = 0; - return SWIG_arg; +static int _wrap_Event_setPriority__SWIG_0(lua_State* L) { + int SWIG_arg = -1; + Event *arg1 = (Event *) 0 ; + switch_priority_t arg2 ; + bool result; + switch_priority_t *argp2 ; + + SWIG_check_num_args("setPriority",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("setPriority",1,"Event *"); + if(!lua_isuserdata(L,2)) SWIG_fail_arg("setPriority",2,"switch_priority_t"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Event,0))){ + SWIG_fail_ptr("Event_setPriority",1,SWIGTYPE_p_Event); + } + + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&argp2,SWIGTYPE_p_switch_priority_t,0))){ + SWIG_fail_ptr("Event_setPriority",2,SWIGTYPE_p_switch_priority_t); + } + arg2 = *argp2; + + result = (bool)(arg1)->setPriority(arg2); + SWIG_arg=0; + lua_pushboolean(L,(int)(result==true)); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (0) - SWIG_fail; - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Event_setPriority__SWIG_1(lua_State* L) { + int SWIG_arg = -1; + Event *arg1 = (Event *) 0 ; + bool result; + + SWIG_check_num_args("setPriority",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("setPriority",1,"Event *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Event,0))){ + SWIG_fail_ptr("Event_setPriority",1,SWIGTYPE_p_Event); + } + + result = (bool)(arg1)->setPriority(); + SWIG_arg=0; + lua_pushboolean(L,(int)(result==true)); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Event_serialize__SWIG_0(lua_State * L) { - int SWIG_arg = -1; - Event *arg1 = (Event *) 0; - char *arg2 = (char *) 0; - char *result = 0; - - SWIG_check_num_args("serialize", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("serialize", 1, "Event *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("serialize", 2, "char const *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Event, 0))) { - SWIG_fail_ptr("Event_serialize", 1, SWIGTYPE_p_Event); - } - - arg2 = (char *) lua_tostring(L, 2); - result = (char *) (arg1)->serialize((char const *) arg2); - SWIG_arg = 0; - lua_pushstring(L, (const char *) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Event_setPriority(lua_State* L) { + int argc; + int argv[3]={ + 1,2,3 + }; + + argc = lua_gettop(L); + if (argc == 1) { + int _v; + { + void *ptr; + if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_Event, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + return _wrap_Event_setPriority__SWIG_1(L); + } + } + if (argc == 2) { + int _v; + { + void *ptr; + if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_Event, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + { + void *ptr; + if (lua_isuserdata(L,argv[1])==0 || SWIG_ConvertPtr(L,argv[1], (void **) &ptr, SWIGTYPE_p_switch_priority_t, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + return _wrap_Event_setPriority__SWIG_0(L); + } + } + } + + lua_pushstring(L,"No matching function for overloaded 'Event_setPriority'"); + lua_error(L);return 0; +} - static int _wrap_Event_serialize__SWIG_1(lua_State * L) { - int SWIG_arg = -1; - Event *arg1 = (Event *) 0; - char *result = 0; - - SWIG_check_num_args("serialize", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("serialize", 1, "Event *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Event, 0))) { - SWIG_fail_ptr("Event_serialize", 1, SWIGTYPE_p_Event); - } - - result = (char *) (arg1)->serialize(); - SWIG_arg = 0; - lua_pushstring(L, (const char *) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Event_getHeader(lua_State* L) { + int SWIG_arg = -1; + Event *arg1 = (Event *) 0 ; + char *arg2 = (char *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("getHeader",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("getHeader",1,"Event *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("getHeader",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Event,0))){ + SWIG_fail_ptr("Event_getHeader",1,SWIGTYPE_p_Event); + } + + arg2 = (char *)lua_tostring(L, 2); + result = (char *)(arg1)->getHeader(arg2); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Event_serialize(lua_State * L) { - int argc; - int argv[3] = { - 1, 2, 3 - }; - - argc = lua_gettop(L); - if (argc == 1) { - int _v; - { - void *ptr; - if (SWIG_isptrtype(L, argv[0]) == 0 || SWIG_ConvertPtr(L, argv[0], (void **) &ptr, SWIGTYPE_p_Event, 0)) { - _v = 0; - } else { - _v = 1; - } - } - if (_v) { - return _wrap_Event_serialize__SWIG_1(L); - } - } - if (argc == 2) { - int _v; - { - void *ptr; - if (SWIG_isptrtype(L, argv[0]) == 0 || SWIG_ConvertPtr(L, argv[0], (void **) &ptr, SWIGTYPE_p_Event, 0)) { - _v = 0; - } else { - _v = 1; - } - } - if (_v) { - { - _v = lua_isstring(L, argv[1]); - } - if (_v) { - return _wrap_Event_serialize__SWIG_0(L); - } - } - } - - lua_pushstring(L, "No matching function for overloaded 'Event_serialize'"); - lua_error(L); - return 0; - } +static int _wrap_Event_getBody(lua_State* L) { + int SWIG_arg = -1; + Event *arg1 = (Event *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("getBody",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("getBody",1,"Event *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Event,0))){ + SWIG_fail_ptr("Event_getBody",1,SWIGTYPE_p_Event); + } + + result = (char *)(arg1)->getBody(); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Event_setPriority__SWIG_0(lua_State * L) { - int SWIG_arg = -1; - Event *arg1 = (Event *) 0; - switch_priority_t arg2; - bool result; - switch_priority_t *argp2; - - SWIG_check_num_args("setPriority", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("setPriority", 1, "Event *"); - if (!lua_isuserdata(L, 2)) - SWIG_fail_arg("setPriority", 2, "switch_priority_t"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Event, 0))) { - SWIG_fail_ptr("Event_setPriority", 1, SWIGTYPE_p_Event); - } - - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 2, (void **) &argp2, SWIGTYPE_p_switch_priority_t, 0))) { - SWIG_fail_ptr("Event_setPriority", 2, SWIGTYPE_p_switch_priority_t); - } - arg2 = *argp2; - - result = (bool) (arg1)->setPriority(arg2); - SWIG_arg = 0; - lua_pushboolean(L, (int) (result == true)); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Event_getType(lua_State* L) { + int SWIG_arg = -1; + Event *arg1 = (Event *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("getType",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("getType",1,"Event *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Event,0))){ + SWIG_fail_ptr("Event_getType",1,SWIGTYPE_p_Event); + } + + result = (char *)(arg1)->getType(); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Event_setPriority__SWIG_1(lua_State * L) { - int SWIG_arg = -1; - Event *arg1 = (Event *) 0; - bool result; - - SWIG_check_num_args("setPriority", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("setPriority", 1, "Event *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Event, 0))) { - SWIG_fail_ptr("Event_setPriority", 1, SWIGTYPE_p_Event); - } - - result = (bool) (arg1)->setPriority(); - SWIG_arg = 0; - lua_pushboolean(L, (int) (result == true)); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Event_addBody(lua_State* L) { + int SWIG_arg = -1; + Event *arg1 = (Event *) 0 ; + char *arg2 = (char *) 0 ; + bool result; + + SWIG_check_num_args("addBody",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("addBody",1,"Event *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("addBody",2,"char const *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Event,0))){ + SWIG_fail_ptr("Event_addBody",1,SWIGTYPE_p_Event); + } + + arg2 = (char *)lua_tostring(L, 2); + result = (bool)(arg1)->addBody((char const *)arg2); + SWIG_arg=0; + lua_pushboolean(L,(int)(result==true)); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Event_setPriority(lua_State * L) { - int argc; - int argv[3] = { - 1, 2, 3 - }; - - argc = lua_gettop(L); - if (argc == 1) { - int _v; - { - void *ptr; - if (SWIG_isptrtype(L, argv[0]) == 0 || SWIG_ConvertPtr(L, argv[0], (void **) &ptr, SWIGTYPE_p_Event, 0)) { - _v = 0; - } else { - _v = 1; - } - } - if (_v) { - return _wrap_Event_setPriority__SWIG_1(L); - } - } - if (argc == 2) { - int _v; - { - void *ptr; - if (SWIG_isptrtype(L, argv[0]) == 0 || SWIG_ConvertPtr(L, argv[0], (void **) &ptr, SWIGTYPE_p_Event, 0)) { - _v = 0; - } else { - _v = 1; - } - } - if (_v) { - { - void *ptr; - if (lua_isuserdata(L, argv[1]) == 0 || SWIG_ConvertPtr(L, argv[1], (void **) &ptr, SWIGTYPE_p_switch_priority_t, 0)) { - _v = 0; - } else { - _v = 1; - } - } - if (_v) { - return _wrap_Event_setPriority__SWIG_0(L); - } - } - } - - lua_pushstring(L, "No matching function for overloaded 'Event_setPriority'"); - lua_error(L); - return 0; - } +static int _wrap_Event_addHeader(lua_State* L) { + int SWIG_arg = -1; + Event *arg1 = (Event *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + bool result; + + SWIG_check_num_args("addHeader",3,3) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("addHeader",1,"Event *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("addHeader",2,"char const *"); + if(!lua_isstring(L,3)) SWIG_fail_arg("addHeader",3,"char const *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Event,0))){ + SWIG_fail_ptr("Event_addHeader",1,SWIGTYPE_p_Event); + } + + arg2 = (char *)lua_tostring(L, 2); + arg3 = (char *)lua_tostring(L, 3); + result = (bool)(arg1)->addHeader((char const *)arg2,(char const *)arg3); + SWIG_arg=0; + lua_pushboolean(L,(int)(result==true)); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Event_getHeader(lua_State * L) { - int SWIG_arg = -1; - Event *arg1 = (Event *) 0; - char *arg2 = (char *) 0; - char *result = 0; - - SWIG_check_num_args("getHeader", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("getHeader", 1, "Event *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("getHeader", 2, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Event, 0))) { - SWIG_fail_ptr("Event_getHeader", 1, SWIGTYPE_p_Event); - } - - arg2 = (char *) lua_tostring(L, 2); - result = (char *) (arg1)->getHeader(arg2); - SWIG_arg = 0; - lua_pushstring(L, (const char *) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Event_delHeader(lua_State* L) { + int SWIG_arg = -1; + Event *arg1 = (Event *) 0 ; + char *arg2 = (char *) 0 ; + bool result; + + SWIG_check_num_args("delHeader",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("delHeader",1,"Event *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("delHeader",2,"char const *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Event,0))){ + SWIG_fail_ptr("Event_delHeader",1,SWIGTYPE_p_Event); + } + + arg2 = (char *)lua_tostring(L, 2); + result = (bool)(arg1)->delHeader((char const *)arg2); + SWIG_arg=0; + lua_pushboolean(L,(int)(result==true)); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Event_getBody(lua_State * L) { - int SWIG_arg = -1; - Event *arg1 = (Event *) 0; - char *result = 0; - - SWIG_check_num_args("getBody", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("getBody", 1, "Event *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Event, 0))) { - SWIG_fail_ptr("Event_getBody", 1, SWIGTYPE_p_Event); - } - - result = (char *) (arg1)->getBody(); - SWIG_arg = 0; - lua_pushstring(L, (const char *) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Event_fire(lua_State* L) { + int SWIG_arg = -1; + Event *arg1 = (Event *) 0 ; + bool result; + + SWIG_check_num_args("fire",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("fire",1,"Event *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Event,0))){ + SWIG_fail_ptr("Event_fire",1,SWIGTYPE_p_Event); + } + + result = (bool)(arg1)->fire(); + SWIG_arg=0; + lua_pushboolean(L,(int)(result==true)); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Event_getType(lua_State * L) { - int SWIG_arg = -1; - Event *arg1 = (Event *) 0; - char *result = 0; - - SWIG_check_num_args("getType", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("getType", 1, "Event *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Event, 0))) { - SWIG_fail_ptr("Event_getType", 1, SWIGTYPE_p_Event); - } - - result = (char *) (arg1)->getType(); - SWIG_arg = 0; - lua_pushstring(L, (const char *) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static void swig_delete_Event(void *obj) { +Event *arg1 = (Event *) obj; +delete arg1; +} +static swig_lua_method swig_Event_methods[] = { + {"serialize", _wrap_Event_serialize}, + {"setPriority", _wrap_Event_setPriority}, + {"getHeader", _wrap_Event_getHeader}, + {"getBody", _wrap_Event_getBody}, + {"getType", _wrap_Event_getType}, + {"addBody", _wrap_Event_addBody}, + {"addHeader", _wrap_Event_addHeader}, + {"delHeader", _wrap_Event_delHeader}, + {"fire", _wrap_Event_fire}, + {0,0} +}; +static swig_lua_attribute swig_Event_attributes[] = { + { "event", _wrap_Event_event_get, _wrap_Event_event_set}, + { "serialized_string", _wrap_Event_serialized_string_get, _wrap_Event_serialized_string_set}, + { "mine", _wrap_Event_mine_get, _wrap_Event_mine_set}, + {0,0,0} +}; +static swig_lua_class *swig_Event_bases[] = {0}; +static const char *swig_Event_base_names[] = {0}; +static swig_lua_class _wrap_class_Event = { "Event", &SWIGTYPE_p_Event,_wrap_new_Event, swig_delete_Event, swig_Event_methods, swig_Event_attributes, swig_Event_bases, swig_Event_base_names }; + +static int _wrap_EventConsumer_events_set(lua_State* L) { + int SWIG_arg = -1; + EventConsumer *arg1 = (EventConsumer *) 0 ; + switch_queue_t *arg2 = (switch_queue_t *) 0 ; + + SWIG_check_num_args("events",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("events",1,"EventConsumer *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("events",2,"switch_queue_t *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_EventConsumer,0))){ + SWIG_fail_ptr("EventConsumer_events_set",1,SWIGTYPE_p_EventConsumer); + } + + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&arg2,SWIGTYPE_p_switch_queue_t,SWIG_POINTER_DISOWN))){ + SWIG_fail_ptr("EventConsumer_events_set",2,SWIGTYPE_p_switch_queue_t); + } + + if (arg1) (arg1)->events = arg2; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Event_addBody(lua_State * L) { - int SWIG_arg = -1; - Event *arg1 = (Event *) 0; - char *arg2 = (char *) 0; - bool result; - - SWIG_check_num_args("addBody", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("addBody", 1, "Event *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("addBody", 2, "char const *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Event, 0))) { - SWIG_fail_ptr("Event_addBody", 1, SWIGTYPE_p_Event); - } - - arg2 = (char *) lua_tostring(L, 2); - result = (bool) (arg1)->addBody((char const *) arg2); - SWIG_arg = 0; - lua_pushboolean(L, (int) (result == true)); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_EventConsumer_events_get(lua_State* L) { + int SWIG_arg = -1; + EventConsumer *arg1 = (EventConsumer *) 0 ; + switch_queue_t *result = 0 ; + + SWIG_check_num_args("events",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("events",1,"EventConsumer *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_EventConsumer,0))){ + SWIG_fail_ptr("EventConsumer_events_get",1,SWIGTYPE_p_EventConsumer); + } + + result = (switch_queue_t *) ((arg1)->events); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_switch_queue_t,0); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Event_addHeader(lua_State * L) { - int SWIG_arg = -1; - Event *arg1 = (Event *) 0; - char *arg2 = (char *) 0; - char *arg3 = (char *) 0; - bool result; - - SWIG_check_num_args("addHeader", 3, 3) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("addHeader", 1, "Event *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("addHeader", 2, "char const *"); - if (!lua_isstring(L, 3)) - SWIG_fail_arg("addHeader", 3, "char const *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Event, 0))) { - SWIG_fail_ptr("Event_addHeader", 1, SWIGTYPE_p_Event); - } - - arg2 = (char *) lua_tostring(L, 2); - arg3 = (char *) lua_tostring(L, 3); - result = (bool) (arg1)->addHeader((char const *) arg2, (char const *) arg3); - SWIG_arg = 0; - lua_pushboolean(L, (int) (result == true)); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_EventConsumer_e_event_id_set(lua_State* L) { + int SWIG_arg = -1; + EventConsumer *arg1 = (EventConsumer *) 0 ; + switch_event_types_t arg2 ; + switch_event_types_t *argp2 ; + + SWIG_check_num_args("e_event_id",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("e_event_id",1,"EventConsumer *"); + if(!lua_isuserdata(L,2)) SWIG_fail_arg("e_event_id",2,"switch_event_types_t"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_EventConsumer,0))){ + SWIG_fail_ptr("EventConsumer_e_event_id_set",1,SWIGTYPE_p_EventConsumer); + } + + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&argp2,SWIGTYPE_p_switch_event_types_t,0))){ + SWIG_fail_ptr("EventConsumer_e_event_id_set",2,SWIGTYPE_p_switch_event_types_t); + } + arg2 = *argp2; + + if (arg1) (arg1)->e_event_id = arg2; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Event_delHeader(lua_State * L) { - int SWIG_arg = -1; - Event *arg1 = (Event *) 0; - char *arg2 = (char *) 0; - bool result; - - SWIG_check_num_args("delHeader", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("delHeader", 1, "Event *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("delHeader", 2, "char const *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Event, 0))) { - SWIG_fail_ptr("Event_delHeader", 1, SWIGTYPE_p_Event); - } - - arg2 = (char *) lua_tostring(L, 2); - result = (bool) (arg1)->delHeader((char const *) arg2); - SWIG_arg = 0; - lua_pushboolean(L, (int) (result == true)); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_EventConsumer_e_event_id_get(lua_State* L) { + int SWIG_arg = -1; + EventConsumer *arg1 = (EventConsumer *) 0 ; + switch_event_types_t result; + + SWIG_check_num_args("e_event_id",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("e_event_id",1,"EventConsumer *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_EventConsumer,0))){ + SWIG_fail_ptr("EventConsumer_e_event_id_get",1,SWIGTYPE_p_EventConsumer); + } + + result = ((arg1)->e_event_id); + SWIG_arg=0; + { + switch_event_types_t * resultptr = new switch_event_types_t((switch_event_types_t &) result); + SWIG_NewPointerObj(L,(void *) resultptr,SWIGTYPE_p_switch_event_types_t,1); SWIG_arg++; + } + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Event_fire(lua_State * L) { - int SWIG_arg = -1; - Event *arg1 = (Event *) 0; - bool result; - - SWIG_check_num_args("fire", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("fire", 1, "Event *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_Event, 0))) { - SWIG_fail_ptr("Event_fire", 1, SWIGTYPE_p_Event); - } - - result = (bool) (arg1)->fire(); - SWIG_arg = 0; - lua_pushboolean(L, (int) (result == true)); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_EventConsumer_node_set(lua_State* L) { + int SWIG_arg = -1; + EventConsumer *arg1 = (EventConsumer *) 0 ; + switch_event_node_t *arg2 = (switch_event_node_t *) 0 ; + + SWIG_check_num_args("node",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("node",1,"EventConsumer *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("node",2,"switch_event_node_t *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_EventConsumer,0))){ + SWIG_fail_ptr("EventConsumer_node_set",1,SWIGTYPE_p_EventConsumer); + } + + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&arg2,SWIGTYPE_p_switch_event_node_t,SWIG_POINTER_DISOWN))){ + SWIG_fail_ptr("EventConsumer_node_set",2,SWIGTYPE_p_switch_event_node_t); + } + + if (arg1) (arg1)->node = arg2; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static void swig_delete_Event(void *obj) { - Event *arg1 = (Event *) obj; - delete arg1; - } - static swig_lua_method swig_Event_methods[] = { - {"serialize", _wrap_Event_serialize}, - {"setPriority", _wrap_Event_setPriority}, - {"getHeader", _wrap_Event_getHeader}, - {"getBody", _wrap_Event_getBody}, - {"getType", _wrap_Event_getType}, - {"addBody", _wrap_Event_addBody}, - {"addHeader", _wrap_Event_addHeader}, - {"delHeader", _wrap_Event_delHeader}, - {"fire", _wrap_Event_fire}, - {0, 0} - }; - static swig_lua_attribute swig_Event_attributes[] = { - {"event", _wrap_Event_event_get, _wrap_Event_event_set}, - {"serialized_string", _wrap_Event_serialized_string_get, _wrap_Event_serialized_string_set}, - {"mine", _wrap_Event_mine_get, _wrap_Event_mine_set}, - {0, 0, 0} - }; - static swig_lua_class *swig_Event_bases[] = { 0 }; - static const char *swig_Event_base_names[] = { 0 }; - static swig_lua_class _wrap_class_Event = - { "Event", &SWIGTYPE_p_Event, _wrap_new_Event, swig_delete_Event, swig_Event_methods, swig_Event_attributes, swig_Event_bases, -swig_Event_base_names }; - - static int _wrap_delete_CoreSession(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - - SWIG_check_num_args("CoreSession", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("CoreSession", 1, "CoreSession *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, SWIG_POINTER_DISOWN))) { - SWIG_fail_ptr("delete_CoreSession", 1, SWIGTYPE_p_CoreSession); - } - - delete arg1; - - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_EventConsumer_node_get(lua_State* L) { + int SWIG_arg = -1; + EventConsumer *arg1 = (EventConsumer *) 0 ; + switch_event_node_t *result = 0 ; + + SWIG_check_num_args("node",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("node",1,"EventConsumer *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_EventConsumer,0))){ + SWIG_fail_ptr("EventConsumer_node_get",1,SWIGTYPE_p_EventConsumer); + } + + result = (switch_event_node_t *) ((arg1)->node); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_switch_event_node_t,0); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_session_set(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - switch_core_session_t *arg2 = (switch_core_session_t *) 0; +static int _wrap_EventConsumer_e_callback_set(lua_State* L) { + int SWIG_arg = -1; + EventConsumer *arg1 = (EventConsumer *) 0 ; + char *arg2 = (char *) 0 ; + + SWIG_check_num_args("e_callback",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("e_callback",1,"EventConsumer *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("e_callback",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_EventConsumer,0))){ + SWIG_fail_ptr("EventConsumer_e_callback_set",1,SWIGTYPE_p_EventConsumer); + } + + arg2 = (char *)lua_tostring(L, 2); + { + if (arg1->e_callback) delete [] arg1->e_callback; + if (arg2) { + arg1->e_callback = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->e_callback, (const char *)arg2); + } else { + arg1->e_callback = 0; + } + } + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - SWIG_check_num_args("session", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("session", 1, "CoreSession *"); - if (!SWIG_isptrtype(L, 2)) - SWIG_fail_arg("session", 2, "switch_core_session_t *"); - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_session_set", 1, SWIGTYPE_p_CoreSession); - } +static int _wrap_EventConsumer_e_callback_get(lua_State* L) { + int SWIG_arg = -1; + EventConsumer *arg1 = (EventConsumer *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("e_callback",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("e_callback",1,"EventConsumer *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_EventConsumer,0))){ + SWIG_fail_ptr("EventConsumer_e_callback_get",1,SWIGTYPE_p_EventConsumer); + } + + result = (char *) ((arg1)->e_callback); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 2, (void **) &arg2, SWIGTYPE_p_switch_core_session_t, SWIG_POINTER_DISOWN))) { - SWIG_fail_ptr("CoreSession_session_set", 2, SWIGTYPE_p_switch_core_session_t); - } +static int _wrap_EventConsumer_e_subclass_name_set(lua_State* L) { + int SWIG_arg = -1; + EventConsumer *arg1 = (EventConsumer *) 0 ; + char *arg2 = (char *) 0 ; + + SWIG_check_num_args("e_subclass_name",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("e_subclass_name",1,"EventConsumer *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("e_subclass_name",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_EventConsumer,0))){ + SWIG_fail_ptr("EventConsumer_e_subclass_name_set",1,SWIGTYPE_p_EventConsumer); + } + + arg2 = (char *)lua_tostring(L, 2); + { + if (arg1->e_subclass_name) delete [] arg1->e_subclass_name; + if (arg2) { + arg1->e_subclass_name = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->e_subclass_name, (const char *)arg2); + } else { + arg1->e_subclass_name = 0; + } + } + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (arg1) - (arg1)->session = arg2; - SWIG_arg = 0; +static int _wrap_EventConsumer_e_subclass_name_get(lua_State* L) { + int SWIG_arg = -1; + EventConsumer *arg1 = (EventConsumer *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("e_subclass_name",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("e_subclass_name",1,"EventConsumer *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_EventConsumer,0))){ + SWIG_fail_ptr("EventConsumer_e_subclass_name_get",1,SWIGTYPE_p_EventConsumer); + } + + result = (char *) ((arg1)->e_subclass_name); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - return SWIG_arg; - if (0) - SWIG_fail; +static int _wrap_EventConsumer_e_cb_arg_set(lua_State* L) { + int SWIG_arg = -1; + EventConsumer *arg1 = (EventConsumer *) 0 ; + char *arg2 = (char *) 0 ; + + SWIG_check_num_args("e_cb_arg",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("e_cb_arg",1,"EventConsumer *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("e_cb_arg",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_EventConsumer,0))){ + SWIG_fail_ptr("EventConsumer_e_cb_arg_set",1,SWIGTYPE_p_EventConsumer); + } + + arg2 = (char *)lua_tostring(L, 2); + { + if (arg1->e_cb_arg) delete [] arg1->e_cb_arg; + if (arg2) { + arg1->e_cb_arg = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->e_cb_arg, (const char *)arg2); + } else { + arg1->e_cb_arg = 0; + } + } + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_EventConsumer_e_cb_arg_get(lua_State* L) { + int SWIG_arg = -1; + EventConsumer *arg1 = (EventConsumer *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("e_cb_arg",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("e_cb_arg",1,"EventConsumer *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_EventConsumer,0))){ + SWIG_fail_ptr("EventConsumer_e_cb_arg_get",1,SWIGTYPE_p_EventConsumer); + } + + result = (char *) ((arg1)->e_cb_arg); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_session_get(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - switch_core_session_t *result = 0; - - SWIG_check_num_args("session", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("session", 1, "CoreSession *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_session_get", 1, SWIGTYPE_p_CoreSession); - } - - result = (switch_core_session_t *) ((arg1)->session); - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_switch_core_session_t, 0); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_new_EventConsumer__SWIG_0(lua_State* L) { + int SWIG_arg = -1; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + EventConsumer *result = 0 ; + + SWIG_check_num_args("EventConsumer",2,2) + if(!lua_isstring(L,1)) SWIG_fail_arg("EventConsumer",1,"char const *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("EventConsumer",2,"char const *"); + arg1 = (char *)lua_tostring(L, 1); + arg2 = (char *)lua_tostring(L, 2); + result = (EventConsumer *)new EventConsumer((char const *)arg1,(char const *)arg2); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_EventConsumer,1); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_channel_set(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - switch_channel_t *arg2 = (switch_channel_t *) 0; - SWIG_check_num_args("channel", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("channel", 1, "CoreSession *"); - if (!SWIG_isptrtype(L, 2)) - SWIG_fail_arg("channel", 2, "switch_channel_t *"); +static int _wrap_new_EventConsumer__SWIG_1(lua_State* L) { + int SWIG_arg = -1; + char *arg1 = (char *) 0 ; + EventConsumer *result = 0 ; + + SWIG_check_num_args("EventConsumer",1,1) + if(!lua_isstring(L,1)) SWIG_fail_arg("EventConsumer",1,"char const *"); + arg1 = (char *)lua_tostring(L, 1); + result = (EventConsumer *)new EventConsumer((char const *)arg1); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_EventConsumer,1); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_channel_set", 1, SWIGTYPE_p_CoreSession); - } +static int _wrap_new_EventConsumer(lua_State* L) { + int argc; + int argv[3]={ + 1,2,3 + }; + + argc = lua_gettop(L); + if (argc == 1) { + int _v; + { + _v = lua_isstring(L,argv[0]); + } + if (_v) { + return _wrap_new_EventConsumer__SWIG_1(L); + } + } + if (argc == 2) { + int _v; + { + _v = lua_isstring(L,argv[0]); + } + if (_v) { + { + _v = lua_isstring(L,argv[1]); + } + if (_v) { + return _wrap_new_EventConsumer__SWIG_0(L); + } + } + } + + lua_pushstring(L,"No matching function for overloaded 'new_EventConsumer'"); + lua_error(L);return 0; +} - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 2, (void **) &arg2, SWIGTYPE_p_switch_channel_t, SWIG_POINTER_DISOWN))) { - SWIG_fail_ptr("CoreSession_channel_set", 2, SWIGTYPE_p_switch_channel_t); - } - if (arg1) - (arg1)->channel = arg2; - - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_delete_EventConsumer(lua_State* L) { + int SWIG_arg = -1; + EventConsumer *arg1 = (EventConsumer *) 0 ; + + SWIG_check_num_args("EventConsumer",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("EventConsumer",1,"EventConsumer *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_EventConsumer,SWIG_POINTER_DISOWN))){ + SWIG_fail_ptr("delete_EventConsumer",1,SWIGTYPE_p_EventConsumer); + } + + delete arg1; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_channel_get(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - switch_channel_t *result = 0; - - SWIG_check_num_args("channel", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("channel", 1, "CoreSession *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_channel_get", 1, SWIGTYPE_p_CoreSession); - } - - result = (switch_channel_t *) ((arg1)->channel); - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_switch_channel_t, 0); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_EventConsumer_pop__SWIG_0(lua_State* L) { + int SWIG_arg = -1; + EventConsumer *arg1 = (EventConsumer *) 0 ; + int arg2 ; + Event *result = 0 ; + + SWIG_check_num_args("pop",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("pop",1,"EventConsumer *"); + if(!lua_isnumber(L,2)) SWIG_fail_arg("pop",2,"int"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_EventConsumer,0))){ + SWIG_fail_ptr("EventConsumer_pop",1,SWIGTYPE_p_EventConsumer); + } + + arg2 = (int)lua_tonumber(L, 2); + result = (Event *)(arg1)->pop(arg2); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_Event,0); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_flags_set(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - unsigned int arg2; - - SWIG_check_num_args("flags", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("flags", 1, "CoreSession *"); - if (!lua_isnumber(L, 2)) - SWIG_fail_arg("flags", 2, "unsigned int"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_flags_set", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (unsigned int) lua_tonumber(L, 2); - if (arg1) - (arg1)->flags = arg2; - - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_EventConsumer_pop__SWIG_1(lua_State* L) { + int SWIG_arg = -1; + EventConsumer *arg1 = (EventConsumer *) 0 ; + Event *result = 0 ; + + SWIG_check_num_args("pop",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("pop",1,"EventConsumer *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_EventConsumer,0))){ + SWIG_fail_ptr("EventConsumer_pop",1,SWIGTYPE_p_EventConsumer); + } + + result = (Event *)(arg1)->pop(); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_Event,0); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_flags_get(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - unsigned int result; - - SWIG_check_num_args("flags", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("flags", 1, "CoreSession *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_flags_get", 1, SWIGTYPE_p_CoreSession); - } - - result = (unsigned int) ((arg1)->flags); - SWIG_arg = 0; - lua_pushnumber(L, (lua_Number) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_EventConsumer_pop(lua_State* L) { + int argc; + int argv[3]={ + 1,2,3 + }; + + argc = lua_gettop(L); + if (argc == 1) { + int _v; + { + void *ptr; + if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_EventConsumer, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + return _wrap_EventConsumer_pop__SWIG_1(L); + } + } + if (argc == 2) { + int _v; + { + void *ptr; + if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_EventConsumer, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + { + _v = lua_isnumber(L,argv[1]); + } + if (_v) { + return _wrap_EventConsumer_pop__SWIG_0(L); + } + } + } + + lua_pushstring(L,"No matching function for overloaded 'EventConsumer_pop'"); + lua_error(L);return 0; +} - static int _wrap_CoreSession_allocated_set(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - int arg2; - - SWIG_check_num_args("allocated", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("allocated", 1, "CoreSession *"); - if (!lua_isnumber(L, 2)) - SWIG_fail_arg("allocated", 2, "int"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_allocated_set", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (int) lua_tonumber(L, 2); - if (arg1) - (arg1)->allocated = arg2; - - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static void swig_delete_EventConsumer(void *obj) { +EventConsumer *arg1 = (EventConsumer *) obj; +delete arg1; +} +static swig_lua_method swig_EventConsumer_methods[] = { + {"pop", _wrap_EventConsumer_pop}, + {0,0} +}; +static swig_lua_attribute swig_EventConsumer_attributes[] = { + { "events", _wrap_EventConsumer_events_get, _wrap_EventConsumer_events_set}, + { "e_event_id", _wrap_EventConsumer_e_event_id_get, _wrap_EventConsumer_e_event_id_set}, + { "node", _wrap_EventConsumer_node_get, _wrap_EventConsumer_node_set}, + { "e_callback", _wrap_EventConsumer_e_callback_get, _wrap_EventConsumer_e_callback_set}, + { "e_subclass_name", _wrap_EventConsumer_e_subclass_name_get, _wrap_EventConsumer_e_subclass_name_set}, + { "e_cb_arg", _wrap_EventConsumer_e_cb_arg_get, _wrap_EventConsumer_e_cb_arg_set}, + {0,0,0} +}; +static swig_lua_class *swig_EventConsumer_bases[] = {0}; +static const char *swig_EventConsumer_base_names[] = {0}; +static swig_lua_class _wrap_class_EventConsumer = { "EventConsumer", &SWIGTYPE_p_EventConsumer,_wrap_new_EventConsumer, swig_delete_EventConsumer, swig_EventConsumer_methods, swig_EventConsumer_attributes, swig_EventConsumer_bases, swig_EventConsumer_base_names }; + +static int _wrap_delete_CoreSession(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + + SWIG_check_num_args("CoreSession",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("CoreSession",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,SWIG_POINTER_DISOWN))){ + SWIG_fail_ptr("delete_CoreSession",1,SWIGTYPE_p_CoreSession); + } + + delete arg1; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_allocated_get(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - int result; - - SWIG_check_num_args("allocated", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("allocated", 1, "CoreSession *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_allocated_get", 1, SWIGTYPE_p_CoreSession); - } - - result = (int) ((arg1)->allocated); - SWIG_arg = 0; - lua_pushnumber(L, (lua_Number) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_session_set(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + switch_core_session_t *arg2 = (switch_core_session_t *) 0 ; + + SWIG_check_num_args("session",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("session",1,"CoreSession *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("session",2,"switch_core_session_t *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_session_set",1,SWIGTYPE_p_CoreSession); + } + + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&arg2,SWIGTYPE_p_switch_core_session_t,SWIG_POINTER_DISOWN))){ + SWIG_fail_ptr("CoreSession_session_set",2,SWIGTYPE_p_switch_core_session_t); + } + + if (arg1) (arg1)->session = arg2; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_cb_state_set(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - input_callback_state *arg2 = (input_callback_state *) 0; +static int _wrap_CoreSession_session_get(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + switch_core_session_t *result = 0 ; + + SWIG_check_num_args("session",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("session",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_session_get",1,SWIGTYPE_p_CoreSession); + } + + result = (switch_core_session_t *) ((arg1)->session); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_switch_core_session_t,0); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - SWIG_check_num_args("cb_state", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("cb_state", 1, "CoreSession *"); - if (!SWIG_isptrtype(L, 2)) - SWIG_fail_arg("cb_state", 2, "input_callback_state *"); - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_cb_state_set", 1, SWIGTYPE_p_CoreSession); - } +static int _wrap_CoreSession_channel_set(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + switch_channel_t *arg2 = (switch_channel_t *) 0 ; + + SWIG_check_num_args("channel",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("channel",1,"CoreSession *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("channel",2,"switch_channel_t *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_channel_set",1,SWIGTYPE_p_CoreSession); + } + + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&arg2,SWIGTYPE_p_switch_channel_t,SWIG_POINTER_DISOWN))){ + SWIG_fail_ptr("CoreSession_channel_set",2,SWIGTYPE_p_switch_channel_t); + } + + if (arg1) (arg1)->channel = arg2; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 2, (void **) &arg2, SWIGTYPE_p_input_callback_state, 0))) { - SWIG_fail_ptr("CoreSession_cb_state_set", 2, SWIGTYPE_p_input_callback_state); - } +static int _wrap_CoreSession_channel_get(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + switch_channel_t *result = 0 ; + + SWIG_check_num_args("channel",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("channel",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_channel_get",1,SWIGTYPE_p_CoreSession); + } + + result = (switch_channel_t *) ((arg1)->channel); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_switch_channel_t,0); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (arg1) - (arg1)->cb_state = *arg2; - SWIG_arg = 0; +static int _wrap_CoreSession_flags_set(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + unsigned int arg2 ; + + SWIG_check_num_args("flags",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("flags",1,"CoreSession *"); + if(!lua_isnumber(L,2)) SWIG_fail_arg("flags",2,"unsigned int"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_flags_set",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (unsigned int)lua_tonumber(L, 2); + if (arg1) (arg1)->flags = arg2; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - return SWIG_arg; - if (0) - SWIG_fail; +static int _wrap_CoreSession_flags_get(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + unsigned int result; + + SWIG_check_num_args("flags",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("flags",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_flags_get",1,SWIGTYPE_p_CoreSession); + } + + result = (unsigned int) ((arg1)->flags); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_allocated_set(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + + SWIG_check_num_args("allocated",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("allocated",1,"CoreSession *"); + if(!lua_isnumber(L,2)) SWIG_fail_arg("allocated",2,"int"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_allocated_set",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (int)lua_tonumber(L, 2); + if (arg1) (arg1)->allocated = arg2; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_cb_state_get(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - input_callback_state *result = 0; - - SWIG_check_num_args("cb_state", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("cb_state", 1, "CoreSession *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_cb_state_get", 1, SWIGTYPE_p_CoreSession); - } - - result = (input_callback_state *) & ((arg1)->cb_state); - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_input_callback_state, 0); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_allocated_get(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + int result; + + SWIG_check_num_args("allocated",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("allocated",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_allocated_get",1,SWIGTYPE_p_CoreSession); + } + + result = (int) ((arg1)->allocated); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_hook_state_set(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - switch_channel_state_t arg2; - switch_channel_state_t *argp2; - SWIG_check_num_args("hook_state", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("hook_state", 1, "CoreSession *"); - if (!lua_isuserdata(L, 2)) - SWIG_fail_arg("hook_state", 2, "switch_channel_state_t"); +static int _wrap_CoreSession_cb_state_set(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + input_callback_state *arg2 = (input_callback_state *) 0 ; + + SWIG_check_num_args("cb_state",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("cb_state",1,"CoreSession *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("cb_state",2,"input_callback_state *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_cb_state_set",1,SWIGTYPE_p_CoreSession); + } + + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&arg2,SWIGTYPE_p_input_callback_state,0))){ + SWIG_fail_ptr("CoreSession_cb_state_set",2,SWIGTYPE_p_input_callback_state); + } + + if (arg1) (arg1)->cb_state = *arg2; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_hook_state_set", 1, SWIGTYPE_p_CoreSession); - } +static int _wrap_CoreSession_cb_state_get(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + input_callback_state *result = 0 ; + + SWIG_check_num_args("cb_state",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("cb_state",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_cb_state_get",1,SWIGTYPE_p_CoreSession); + } + + result = (input_callback_state *)& ((arg1)->cb_state); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_input_callback_state,0); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 2, (void **) &argp2, SWIGTYPE_p_switch_channel_state_t, 0))) { - SWIG_fail_ptr("CoreSession_hook_state_set", 2, SWIGTYPE_p_switch_channel_state_t); - } - arg2 = *argp2; - if (arg1) - (arg1)->hook_state = arg2; +static int _wrap_CoreSession_hook_state_set(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + switch_channel_state_t arg2 ; + switch_channel_state_t *argp2 ; + + SWIG_check_num_args("hook_state",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("hook_state",1,"CoreSession *"); + if(!lua_isuserdata(L,2)) SWIG_fail_arg("hook_state",2,"switch_channel_state_t"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_hook_state_set",1,SWIGTYPE_p_CoreSession); + } + + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&argp2,SWIGTYPE_p_switch_channel_state_t,0))){ + SWIG_fail_ptr("CoreSession_hook_state_set",2,SWIGTYPE_p_switch_channel_state_t); + } + arg2 = *argp2; + + if (arg1) (arg1)->hook_state = arg2; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - SWIG_arg = 0; - return SWIG_arg; +static int _wrap_CoreSession_hook_state_get(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + switch_channel_state_t result; + + SWIG_check_num_args("hook_state",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("hook_state",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_hook_state_get",1,SWIGTYPE_p_CoreSession); + } + + result = ((arg1)->hook_state); + SWIG_arg=0; + { + switch_channel_state_t * resultptr = new switch_channel_state_t((switch_channel_state_t &) result); + SWIG_NewPointerObj(L,(void *) resultptr,SWIGTYPE_p_switch_channel_state_t,1); SWIG_arg++; + } + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (0) - SWIG_fail; - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_uuid_set(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + + SWIG_check_num_args("uuid",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("uuid",1,"CoreSession *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("uuid",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_uuid_set",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (char *)lua_tostring(L, 2); + { + if (arg1->uuid) delete [] arg1->uuid; + if (arg2) { + arg1->uuid = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->uuid, (const char *)arg2); + } else { + arg1->uuid = 0; + } + } + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_hook_state_get(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - switch_channel_state_t result; - - SWIG_check_num_args("hook_state", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("hook_state", 1, "CoreSession *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_hook_state_get", 1, SWIGTYPE_p_CoreSession); - } - - result = ((arg1)->hook_state); - SWIG_arg = 0; - { - switch_channel_state_t *resultptr = new switch_channel_state_t ((switch_channel_state_t &) result); - SWIG_NewPointerObj(L, (void *) resultptr, SWIGTYPE_p_switch_channel_state_t, 1); - SWIG_arg++; - } - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_uuid_get(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("uuid",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("uuid",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_uuid_get",1,SWIGTYPE_p_CoreSession); + } + + result = (char *) ((arg1)->uuid); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_answer(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - int result; - - SWIG_check_num_args("answer", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("answer", 1, "CoreSession *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_answer", 1, SWIGTYPE_p_CoreSession); - } - - result = (int) (arg1)->answer(); - SWIG_arg = 0; - lua_pushnumber(L, (lua_Number) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_tts_name_set(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + + SWIG_check_num_args("tts_name",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("tts_name",1,"CoreSession *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("tts_name",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_tts_name_set",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (char *)lua_tostring(L, 2); + { + if (arg1->tts_name) delete [] arg1->tts_name; + if (arg2) { + arg1->tts_name = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->tts_name, (const char *)arg2); + } else { + arg1->tts_name = 0; + } + } + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_preAnswer(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - int result; - - SWIG_check_num_args("preAnswer", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("preAnswer", 1, "CoreSession *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_preAnswer", 1, SWIGTYPE_p_CoreSession); - } - - result = (int) (arg1)->preAnswer(); - SWIG_arg = 0; - lua_pushnumber(L, (lua_Number) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_tts_name_get(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("tts_name",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("tts_name",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_tts_name_get",1,SWIGTYPE_p_CoreSession); + } + + result = (char *) ((arg1)->tts_name); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_hangup__SWIG_0(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - char *arg2 = (char *) 0; - - SWIG_check_num_args("hangup", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("hangup", 1, "CoreSession *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("hangup", 2, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_hangup", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (char *) lua_tostring(L, 2); - (arg1)->hangup(arg2); - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_voice_name_set(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + + SWIG_check_num_args("voice_name",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("voice_name",1,"CoreSession *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("voice_name",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_voice_name_set",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (char *)lua_tostring(L, 2); + { + if (arg1->voice_name) delete [] arg1->voice_name; + if (arg2) { + arg1->voice_name = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->voice_name, (const char *)arg2); + } else { + arg1->voice_name = 0; + } + } + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_hangup__SWIG_1(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; +static int _wrap_CoreSession_voice_name_get(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("voice_name",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("voice_name",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_voice_name_get",1,SWIGTYPE_p_CoreSession); + } + + result = (char *) ((arg1)->voice_name); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - SWIG_check_num_args("hangup", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("hangup", 1, "CoreSession *"); - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_hangup", 1, SWIGTYPE_p_CoreSession); - } +static int _wrap_CoreSession_answer(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + int result; + + SWIG_check_num_args("answer",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("answer",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_answer",1,SWIGTYPE_p_CoreSession); + } + + result = (int)(arg1)->answer(); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - (arg1)->hangup(); - SWIG_arg = 0; - return SWIG_arg; +static int _wrap_CoreSession_preAnswer(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + int result; + + SWIG_check_num_args("preAnswer",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("preAnswer",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_preAnswer",1,SWIGTYPE_p_CoreSession); + } + + result = (int)(arg1)->preAnswer(); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (0) - SWIG_fail; - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_hangup__SWIG_0(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + + SWIG_check_num_args("hangup",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("hangup",1,"CoreSession *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("hangup",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_hangup",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (char *)lua_tostring(L, 2); + (arg1)->hangup(arg2); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_hangup(lua_State * L) { - int argc; - int argv[3] = { - 1, 2, 3 - }; - - argc = lua_gettop(L); - if (argc == 1) { - 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) { - return _wrap_CoreSession_hangup__SWIG_1(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_hangup__SWIG_0(L); - } - } - } - - lua_pushstring(L, "No matching function for overloaded 'CoreSession_hangup'"); - lua_error(L); - return 0; - } +static int _wrap_CoreSession_hangup__SWIG_1(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + + SWIG_check_num_args("hangup",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("hangup",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_hangup",1,SWIGTYPE_p_CoreSession); + } + + (arg1)->hangup(); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_setVariable(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - char *arg2 = (char *) 0; - char *arg3 = (char *) 0; - - SWIG_check_num_args("setVariable", 3, 3) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("setVariable", 1, "CoreSession *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("setVariable", 2, "char *"); - if (!lua_isstring(L, 3)) - SWIG_fail_arg("setVariable", 3, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_setVariable", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (char *) lua_tostring(L, 2); - arg3 = (char *) lua_tostring(L, 3); - (arg1)->setVariable(arg2, arg3); - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_hangup(lua_State* L) { + int argc; + int argv[3]={ + 1,2,3 + }; + + argc = lua_gettop(L); + if (argc == 1) { + 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) { + return _wrap_CoreSession_hangup__SWIG_1(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_hangup__SWIG_0(L); + } + } + } + + lua_pushstring(L,"No matching function for overloaded 'CoreSession_hangup'"); + lua_error(L);return 0; +} - static int _wrap_CoreSession_setPrivate(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - char *arg2 = (char *) 0; - void *arg3 = (void *) 0; - - SWIG_check_num_args("setPrivate", 3, 3) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("setPrivate", 1, "CoreSession *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("setPrivate", 2, "char *"); - if (!SWIG_isptrtype(L, 3)) - SWIG_fail_arg("setPrivate", 3, "void *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_setPrivate", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (char *) lua_tostring(L, 2); - arg3 = (void *) SWIG_MustGetPtr(L, 3, 0, 0, 3, "CoreSession_setPrivate"); - (arg1)->setPrivate(arg2, arg3); - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_setVariable(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + + SWIG_check_num_args("setVariable",3,3) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("setVariable",1,"CoreSession *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("setVariable",2,"char *"); + if(!lua_isstring(L,3)) SWIG_fail_arg("setVariable",3,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_setVariable",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (char *)lua_tostring(L, 2); + arg3 = (char *)lua_tostring(L, 3); + (arg1)->setVariable(arg2,arg3); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_getPrivate(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - char *arg2 = (char *) 0; - void *result = 0; - - SWIG_check_num_args("getPrivate", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("getPrivate", 1, "CoreSession *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("getPrivate", 2, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_getPrivate", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (char *) lua_tostring(L, 2); - result = (void *) (arg1)->getPrivate(arg2); - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_void, 0); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_setPrivate(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + void *arg3 = (void *) 0 ; + + SWIG_check_num_args("setPrivate",3,3) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("setPrivate",1,"CoreSession *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("setPrivate",2,"char *"); + if(!SWIG_isptrtype(L,3)) SWIG_fail_arg("setPrivate",3,"void *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_setPrivate",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (char *)lua_tostring(L, 2); + arg3=(void *)SWIG_MustGetPtr(L,3,0,0,3,"CoreSession_setPrivate"); + (arg1)->setPrivate(arg2,arg3); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_getVariable(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - char *arg2 = (char *) 0; - char *result = 0; - - SWIG_check_num_args("getVariable", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("getVariable", 1, "CoreSession *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("getVariable", 2, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_getVariable", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (char *) lua_tostring(L, 2); - result = (char *) (arg1)->getVariable(arg2); - SWIG_arg = 0; - lua_pushstring(L, (const char *) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } - - - static int _wrap_CoreSession_process_callback_result(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - char *arg2 = (char *) 0; - switch_status_t result; - - SWIG_check_num_args("process_callback_result", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("process_callback_result", 1, "CoreSession *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("process_callback_result", 2, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_process_callback_result", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (char *) lua_tostring(L, 2); - result = (arg1)->process_callback_result(arg2); - SWIG_arg = 0; - { - switch_status_t *resultptr = new switch_status_t ((switch_status_t &) result); - SWIG_NewPointerObj(L, (void *) resultptr, SWIGTYPE_p_switch_status_t, 1); - SWIG_arg++; - } - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } - - - 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; - char *arg2 = (char *) 0; - int arg3; - int arg4; - int arg5; - int result; - - SWIG_check_num_args("recordFile", 5, 5) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("recordFile", 1, "CoreSession *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("recordFile", 2, "char *"); - if (!lua_isnumber(L, 3)) - SWIG_fail_arg("recordFile", 3, "int"); - if (!lua_isnumber(L, 4)) - SWIG_fail_arg("recordFile", 4, "int"); - if (!lua_isnumber(L, 5)) - SWIG_fail_arg("recordFile", 5, "int"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_recordFile", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (char *) lua_tostring(L, 2); - arg3 = (int) lua_tonumber(L, 3); - arg4 = (int) lua_tonumber(L, 4); - arg5 = (int) lua_tonumber(L, 5); - result = (int) (arg1)->recordFile(arg2, arg3, arg4, arg5); - SWIG_arg = 0; - lua_pushnumber(L, (lua_Number) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } - - - static int _wrap_CoreSession_recordFile__SWIG_1(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - char *arg2 = (char *) 0; - int arg3; - int arg4; - int result; - - SWIG_check_num_args("recordFile", 4, 4) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("recordFile", 1, "CoreSession *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("recordFile", 2, "char *"); - if (!lua_isnumber(L, 3)) - SWIG_fail_arg("recordFile", 3, "int"); - if (!lua_isnumber(L, 4)) - SWIG_fail_arg("recordFile", 4, "int"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_recordFile", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (char *) lua_tostring(L, 2); - arg3 = (int) lua_tonumber(L, 3); - arg4 = (int) lua_tonumber(L, 4); - result = (int) (arg1)->recordFile(arg2, arg3, arg4); - SWIG_arg = 0; - lua_pushnumber(L, (lua_Number) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } - - - static int _wrap_CoreSession_recordFile__SWIG_2(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - char *arg2 = (char *) 0; - int arg3; - int result; - - SWIG_check_num_args("recordFile", 3, 3) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("recordFile", 1, "CoreSession *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("recordFile", 2, "char *"); - if (!lua_isnumber(L, 3)) - SWIG_fail_arg("recordFile", 3, "int"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_recordFile", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (char *) lua_tostring(L, 2); - arg3 = (int) lua_tonumber(L, 3); - result = (int) (arg1)->recordFile(arg2, arg3); - SWIG_arg = 0; - lua_pushnumber(L, (lua_Number) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } - - - static int _wrap_CoreSession_recordFile__SWIG_3(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - char *arg2 = (char *) 0; - int result; - - SWIG_check_num_args("recordFile", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("recordFile", 1, "CoreSession *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("recordFile", 2, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_recordFile", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (char *) lua_tostring(L, 2); - result = (int) (arg1)->recordFile(arg2); - SWIG_arg = 0; - lua_pushnumber(L, (lua_Number) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } - - - static int _wrap_CoreSession_recordFile(lua_State * L) { - int argc; - int argv[6] = { - 1, 2, 3, 4, 5, 6 - }; - - 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_recordFile__SWIG_3(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_isnumber(L, argv[2]); - } - if (_v) { - return _wrap_CoreSession_recordFile__SWIG_2(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_isnumber(L, argv[2]); - } - if (_v) { - { - _v = lua_isnumber(L, argv[3]); - } - if (_v) { - return _wrap_CoreSession_recordFile__SWIG_1(L); - } - } - } - } - } - if (argc == 5) { - 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_isnumber(L, argv[2]); - } - if (_v) { - { - _v = lua_isnumber(L, argv[3]); - } - if (_v) { - { - _v = lua_isnumber(L, argv[4]); - } - if (_v) { - return _wrap_CoreSession_recordFile__SWIG_0(L); - } - } - } - } - } - } - - lua_pushstring(L, "No matching function for overloaded 'CoreSession_recordFile'"); - lua_error(L); - return 0; - } - +static int _wrap_CoreSession_getPrivate(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + void *result = 0 ; + + SWIG_check_num_args("getPrivate",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("getPrivate",1,"CoreSession *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("getPrivate",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_getPrivate",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (char *)lua_tostring(L, 2); + result = (void *)(arg1)->getPrivate(arg2); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_void,0); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_setCallerData(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - char *arg2 = (char *) 0; - char *arg3 = (char *) 0; - - SWIG_check_num_args("setCallerData", 3, 3) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("setCallerData", 1, "CoreSession *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("setCallerData", 2, "char *"); - if (!lua_isstring(L, 3)) - SWIG_fail_arg("setCallerData", 3, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_setCallerData", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (char *) lua_tostring(L, 2); - arg3 = (char *) lua_tostring(L, 3); - (arg1)->setCallerData(arg2, arg3); - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_getVariable(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("getVariable",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("getVariable",1,"CoreSession *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("getVariable",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_getVariable",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (char *)lua_tostring(L, 2); + result = (char *)(arg1)->getVariable(arg2); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_originate__SWIG_0(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - CoreSession *arg2 = (CoreSession *) 0; - char *arg3 = (char *) 0; - int arg4; - int result; - - SWIG_check_num_args("originate", 4, 4) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("originate", 1, "CoreSession *"); - if (!SWIG_isptrtype(L, 2)) - SWIG_fail_arg("originate", 2, "CoreSession *"); - if (!lua_isstring(L, 3)) - SWIG_fail_arg("originate", 3, "char *"); - if (!lua_isnumber(L, 4)) - SWIG_fail_arg("originate", 4, "int"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_originate", 1, SWIGTYPE_p_CoreSession); - } - - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 2, (void **) &arg2, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_originate", 2, SWIGTYPE_p_CoreSession); - } - - arg3 = (char *) lua_tostring(L, 3); - arg4 = (int) lua_tonumber(L, 4); - result = (int) (arg1)->originate(arg2, arg3, arg4); - SWIG_arg = 0; - lua_pushnumber(L, (lua_Number) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_process_callback_result(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + switch_status_t result; + + SWIG_check_num_args("process_callback_result",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("process_callback_result",1,"CoreSession *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("process_callback_result",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_process_callback_result",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (char *)lua_tostring(L, 2); + result = (arg1)->process_callback_result(arg2); + SWIG_arg=0; + { + switch_status_t * resultptr = new switch_status_t((switch_status_t &) result); + SWIG_NewPointerObj(L,(void *) resultptr,SWIGTYPE_p_switch_status_t,1); SWIG_arg++; + } + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_originate__SWIG_1(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - CoreSession *arg2 = (CoreSession *) 0; - char *arg3 = (char *) 0; - int result; - - SWIG_check_num_args("originate", 3, 3) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("originate", 1, "CoreSession *"); - if (!SWIG_isptrtype(L, 2)) - SWIG_fail_arg("originate", 2, "CoreSession *"); - if (!lua_isstring(L, 3)) - SWIG_fail_arg("originate", 3, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_originate", 1, SWIGTYPE_p_CoreSession); - } - - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 2, (void **) &arg2, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_originate", 2, SWIGTYPE_p_CoreSession); - } - - arg3 = (char *) lua_tostring(L, 3); - result = (int) (arg1)->originate(arg2, arg3); - SWIG_arg = 0; - lua_pushnumber(L, (lua_Number) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +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_originate(lua_State * L) { - int argc; - int argv[5] = { - 1, 2, 3, 4, 5 - }; - - argc = lua_gettop(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) { - { - void *ptr; - if (SWIG_isptrtype(L, argv[1]) == 0 || SWIG_ConvertPtr(L, argv[1], (void **) &ptr, SWIGTYPE_p_CoreSession, 0)) { - _v = 0; - } else { - _v = 1; - } - } - if (_v) { - { - _v = lua_isstring(L, argv[2]); - } - if (_v) { - return _wrap_CoreSession_originate__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) { - { - void *ptr; - if (SWIG_isptrtype(L, argv[1]) == 0 || SWIG_ConvertPtr(L, argv[1], (void **) &ptr, SWIGTYPE_p_CoreSession, 0)) { - _v = 0; - } else { - _v = 1; - } - } - if (_v) { - { - _v = lua_isstring(L, argv[2]); - } - if (_v) { - { - _v = lua_isnumber(L, argv[3]); - } - if (_v) { - return _wrap_CoreSession_originate__SWIG_0(L); - } - } - } - } - } - - lua_pushstring(L, "No matching function for overloaded 'CoreSession_originate'"); - lua_error(L); - return 0; - } +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_setDTMFCallback(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - void *arg2 = (void *) 0; - char *arg3 = (char *) 0; - - SWIG_check_num_args("setDTMFCallback", 3, 3) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("setDTMFCallback", 1, "CoreSession *"); - if (!SWIG_isptrtype(L, 2)) - SWIG_fail_arg("setDTMFCallback", 2, "void *"); - if (!lua_isstring(L, 3)) - SWIG_fail_arg("setDTMFCallback", 3, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_setDTMFCallback", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (void *) SWIG_MustGetPtr(L, 2, 0, 0, 2, "CoreSession_setDTMFCallback"); - arg3 = (char *) lua_tostring(L, 3); - (arg1)->setDTMFCallback(arg2, arg3); - 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_speak(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - char *arg2 = (char *) 0; - int result; - - SWIG_check_num_args("speak", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("speak", 1, "CoreSession *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("speak", 2, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_speak", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (char *) lua_tostring(L, 2); - result = (int) (arg1)->speak(arg2); - SWIG_arg = 0; - lua_pushnumber(L, (lua_Number) result); - SWIG_arg++; - 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_set_tts_parms(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - char *arg2 = (char *) 0; - char *arg3 = (char *) 0; - - SWIG_check_num_args("set_tts_parms", 3, 3) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("set_tts_parms", 1, "CoreSession *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("set_tts_parms", 2, "char *"); - if (!lua_isstring(L, 3)) - SWIG_fail_arg("set_tts_parms", 3, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_set_tts_parms", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (char *) lua_tostring(L, 2); - arg3 = (char *) lua_tostring(L, 3); - (arg1)->set_tts_parms(arg2, arg3); - 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_collectDigits(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - int arg2; - int result; - - SWIG_check_num_args("collectDigits", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("collectDigits", 1, "CoreSession *"); - if (!lua_isnumber(L, 2)) - SWIG_fail_arg("collectDigits", 2, "int"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_collectDigits", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (int) lua_tonumber(L, 2); - result = (int) (arg1)->collectDigits(arg2); - SWIG_arg = 0; - lua_pushnumber(L, (lua_Number) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_recordFile__SWIG_0(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + int arg4 ; + int arg5 ; + int result; + + SWIG_check_num_args("recordFile",5,5) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("recordFile",1,"CoreSession *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("recordFile",2,"char *"); + if(!lua_isnumber(L,3)) SWIG_fail_arg("recordFile",3,"int"); + if(!lua_isnumber(L,4)) SWIG_fail_arg("recordFile",4,"int"); + if(!lua_isnumber(L,5)) SWIG_fail_arg("recordFile",5,"int"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_recordFile",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (char *)lua_tostring(L, 2); + arg3 = (int)lua_tonumber(L, 3); + arg4 = (int)lua_tonumber(L, 4); + arg5 = (int)lua_tonumber(L, 5); + result = (int)(arg1)->recordFile(arg2,arg3,arg4,arg5); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_getDigits(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - int arg2; - char *arg3 = (char *) 0; - int arg4; - char *result = 0; - - SWIG_check_num_args("getDigits", 4, 4) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("getDigits", 1, "CoreSession *"); - if (!lua_isnumber(L, 2)) - SWIG_fail_arg("getDigits", 2, "int"); - if (!lua_isstring(L, 3)) - SWIG_fail_arg("getDigits", 3, "char *"); - if (!lua_isnumber(L, 4)) - SWIG_fail_arg("getDigits", 4, "int"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_getDigits", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (int) lua_tonumber(L, 2); - arg3 = (char *) lua_tostring(L, 3); - arg4 = (int) lua_tonumber(L, 4); - result = (char *) (arg1)->getDigits(arg2, arg3, arg4); - SWIG_arg = 0; - lua_pushstring(L, (const char *) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_recordFile__SWIG_1(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + int arg4 ; + int result; + + SWIG_check_num_args("recordFile",4,4) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("recordFile",1,"CoreSession *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("recordFile",2,"char *"); + if(!lua_isnumber(L,3)) SWIG_fail_arg("recordFile",3,"int"); + if(!lua_isnumber(L,4)) SWIG_fail_arg("recordFile",4,"int"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_recordFile",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (char *)lua_tostring(L, 2); + arg3 = (int)lua_tonumber(L, 3); + arg4 = (int)lua_tonumber(L, 4); + result = (int)(arg1)->recordFile(arg2,arg3,arg4); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_transfer(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - char *arg2 = (char *) 0; - char *arg3 = (char *) 0; - char *arg4 = (char *) 0; - int result; - - SWIG_check_num_args("transfer", 4, 4) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("transfer", 1, "CoreSession *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("transfer", 2, "char *"); - if (!lua_isstring(L, 3)) - SWIG_fail_arg("transfer", 3, "char *"); - if (!lua_isstring(L, 4)) - SWIG_fail_arg("transfer", 4, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_transfer", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (char *) lua_tostring(L, 2); - arg3 = (char *) lua_tostring(L, 3); - arg4 = (char *) lua_tostring(L, 4); - result = (int) (arg1)->transfer(arg2, arg3, arg4); - SWIG_arg = 0; - lua_pushnumber(L, (lua_Number) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_recordFile__SWIG_2(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + int result; + + SWIG_check_num_args("recordFile",3,3) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("recordFile",1,"CoreSession *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("recordFile",2,"char *"); + if(!lua_isnumber(L,3)) SWIG_fail_arg("recordFile",3,"int"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_recordFile",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (char *)lua_tostring(L, 2); + arg3 = (int)lua_tonumber(L, 3); + result = (int)(arg1)->recordFile(arg2,arg3); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_read(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - int arg2; - int arg3; - char *arg4 = (char *) 0; - int arg5; - char *arg6 = (char *) 0; - char *result = 0; - - SWIG_check_num_args("read", 6, 6) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("read", 1, "CoreSession *"); - if (!lua_isnumber(L, 2)) - SWIG_fail_arg("read", 2, "int"); - if (!lua_isnumber(L, 3)) - SWIG_fail_arg("read", 3, "int"); - if (!lua_isstring(L, 4)) - SWIG_fail_arg("read", 4, "char const *"); - if (!lua_isnumber(L, 5)) - SWIG_fail_arg("read", 5, "int"); - if (!lua_isstring(L, 6)) - SWIG_fail_arg("read", 6, "char const *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_read", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (int) lua_tonumber(L, 2); - arg3 = (int) lua_tonumber(L, 3); - arg4 = (char *) lua_tostring(L, 4); - arg5 = (int) lua_tonumber(L, 5); - arg6 = (char *) lua_tostring(L, 6); - result = (char *) (arg1)->read(arg2, arg3, (char const *) arg4, arg5, (char const *) arg6); - SWIG_arg = 0; - lua_pushstring(L, (const char *) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_recordFile__SWIG_3(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + int result; + + SWIG_check_num_args("recordFile",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("recordFile",1,"CoreSession *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("recordFile",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_recordFile",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (char *)lua_tostring(L, 2); + result = (int)(arg1)->recordFile(arg2); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_playAndGetDigits(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - int arg2; - int arg3; - int arg4; - int arg5; - char *arg6 = (char *) 0; - char *arg7 = (char *) 0; - char *arg8 = (char *) 0; - char *arg9 = (char *) 0; - char *result = 0; - - SWIG_check_num_args("playAndGetDigits", 9, 9) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("playAndGetDigits", 1, "CoreSession *"); - if (!lua_isnumber(L, 2)) - SWIG_fail_arg("playAndGetDigits", 2, "int"); - if (!lua_isnumber(L, 3)) - SWIG_fail_arg("playAndGetDigits", 3, "int"); - if (!lua_isnumber(L, 4)) - SWIG_fail_arg("playAndGetDigits", 4, "int"); - if (!lua_isnumber(L, 5)) - SWIG_fail_arg("playAndGetDigits", 5, "int"); - if (!lua_isstring(L, 6)) - SWIG_fail_arg("playAndGetDigits", 6, "char *"); - if (!lua_isstring(L, 7)) - SWIG_fail_arg("playAndGetDigits", 7, "char *"); - if (!lua_isstring(L, 8)) - SWIG_fail_arg("playAndGetDigits", 8, "char *"); - if (!lua_isstring(L, 9)) - SWIG_fail_arg("playAndGetDigits", 9, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_playAndGetDigits", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (int) lua_tonumber(L, 2); - arg3 = (int) lua_tonumber(L, 3); - arg4 = (int) lua_tonumber(L, 4); - arg5 = (int) lua_tonumber(L, 5); - arg6 = (char *) lua_tostring(L, 6); - arg7 = (char *) lua_tostring(L, 7); - arg8 = (char *) lua_tostring(L, 8); - arg9 = (char *) lua_tostring(L, 9); - result = (char *) (arg1)->playAndGetDigits(arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); - SWIG_arg = 0; - lua_pushstring(L, (const char *) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_recordFile(lua_State* L) { + int argc; + int argv[6]={ + 1,2,3,4,5,6 + }; + + 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_recordFile__SWIG_3(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_isnumber(L,argv[2]); + } + if (_v) { + return _wrap_CoreSession_recordFile__SWIG_2(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_isnumber(L,argv[2]); + } + if (_v) { + { + _v = lua_isnumber(L,argv[3]); + } + if (_v) { + return _wrap_CoreSession_recordFile__SWIG_1(L); + } + } + } + } + } + if (argc == 5) { + 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_isnumber(L,argv[2]); + } + if (_v) { + { + _v = lua_isnumber(L,argv[3]); + } + if (_v) { + { + _v = lua_isnumber(L,argv[4]); + } + if (_v) { + return _wrap_CoreSession_recordFile__SWIG_0(L); + } + } + } + } + } + } + + lua_pushstring(L,"No matching function for overloaded 'CoreSession_recordFile'"); + lua_error(L);return 0; +} - static int _wrap_CoreSession_streamFile__SWIG_0(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - char *arg2 = (char *) 0; - int arg3; - int result; - - SWIG_check_num_args("streamFile", 3, 3) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("streamFile", 1, "CoreSession *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("streamFile", 2, "char *"); - if (!lua_isnumber(L, 3)) - SWIG_fail_arg("streamFile", 3, "int"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_streamFile", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (char *) lua_tostring(L, 2); - arg3 = (int) lua_tonumber(L, 3); - result = (int) (arg1)->streamFile(arg2, arg3); - SWIG_arg = 0; - lua_pushnumber(L, (lua_Number) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_setCallerData(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + + SWIG_check_num_args("setCallerData",3,3) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("setCallerData",1,"CoreSession *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("setCallerData",2,"char *"); + if(!lua_isstring(L,3)) SWIG_fail_arg("setCallerData",3,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_setCallerData",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (char *)lua_tostring(L, 2); + arg3 = (char *)lua_tostring(L, 3); + (arg1)->setCallerData(arg2,arg3); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_streamFile__SWIG_1(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - char *arg2 = (char *) 0; - int result; - - SWIG_check_num_args("streamFile", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("streamFile", 1, "CoreSession *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("streamFile", 2, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_streamFile", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (char *) lua_tostring(L, 2); - result = (int) (arg1)->streamFile(arg2); - SWIG_arg = 0; - lua_pushnumber(L, (lua_Number) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_originate__SWIG_0(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + CoreSession *arg2 = (CoreSession *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 ; + int result; + + SWIG_check_num_args("originate",4,4) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("originate",1,"CoreSession *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("originate",2,"CoreSession *"); + if(!lua_isstring(L,3)) SWIG_fail_arg("originate",3,"char *"); + if(!lua_isnumber(L,4)) SWIG_fail_arg("originate",4,"int"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_originate",1,SWIGTYPE_p_CoreSession); + } + + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&arg2,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_originate",2,SWIGTYPE_p_CoreSession); + } + + arg3 = (char *)lua_tostring(L, 3); + arg4 = (int)lua_tonumber(L, 4); + result = (int)(arg1)->originate(arg2,arg3,arg4); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_streamFile(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_streamFile__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_isnumber(L, argv[2]); - } - if (_v) { - return _wrap_CoreSession_streamFile__SWIG_0(L); - } - } - } - } - - lua_pushstring(L, "No matching function for overloaded 'CoreSession_streamFile'"); - lua_error(L); - return 0; - } +static int _wrap_CoreSession_originate__SWIG_1(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + CoreSession *arg2 = (CoreSession *) 0 ; + char *arg3 = (char *) 0 ; + int result; + + SWIG_check_num_args("originate",3,3) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("originate",1,"CoreSession *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("originate",2,"CoreSession *"); + if(!lua_isstring(L,3)) SWIG_fail_arg("originate",3,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_originate",1,SWIGTYPE_p_CoreSession); + } + + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&arg2,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_originate",2,SWIGTYPE_p_CoreSession); + } + + arg3 = (char *)lua_tostring(L, 3); + result = (int)(arg1)->originate(arg2,arg3); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_flushEvents(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - int result; - - SWIG_check_num_args("flushEvents", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("flushEvents", 1, "CoreSession *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_flushEvents", 1, SWIGTYPE_p_CoreSession); - } - - result = (int) (arg1)->flushEvents(); - SWIG_arg = 0; - lua_pushnumber(L, (lua_Number) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_originate(lua_State* L) { + int argc; + int argv[5]={ + 1,2,3,4,5 + }; + + argc = lua_gettop(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) { + { + void *ptr; + if (SWIG_isptrtype(L,argv[1])==0 || SWIG_ConvertPtr(L,argv[1], (void **) &ptr, SWIGTYPE_p_CoreSession, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + { + _v = lua_isstring(L,argv[2]); + } + if (_v) { + return _wrap_CoreSession_originate__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) { + { + void *ptr; + if (SWIG_isptrtype(L,argv[1])==0 || SWIG_ConvertPtr(L,argv[1], (void **) &ptr, SWIGTYPE_p_CoreSession, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + { + _v = lua_isstring(L,argv[2]); + } + if (_v) { + { + _v = lua_isnumber(L,argv[3]); + } + if (_v) { + return _wrap_CoreSession_originate__SWIG_0(L); + } + } + } + } + } + + lua_pushstring(L,"No matching function for overloaded 'CoreSession_originate'"); + lua_error(L);return 0; +} - static int _wrap_CoreSession_flushDigits(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - int result; - - SWIG_check_num_args("flushDigits", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("flushDigits", 1, "CoreSession *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_flushDigits", 1, SWIGTYPE_p_CoreSession); - } - - result = (int) (arg1)->flushDigits(); - SWIG_arg = 0; - lua_pushnumber(L, (lua_Number) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_setDTMFCallback(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + void *arg2 = (void *) 0 ; + char *arg3 = (char *) 0 ; + + SWIG_check_num_args("setDTMFCallback",3,3) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("setDTMFCallback",1,"CoreSession *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("setDTMFCallback",2,"void *"); + if(!lua_isstring(L,3)) SWIG_fail_arg("setDTMFCallback",3,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_setDTMFCallback",1,SWIGTYPE_p_CoreSession); + } + + arg2=(void *)SWIG_MustGetPtr(L,2,0,0,2,"CoreSession_setDTMFCallback"); + arg3 = (char *)lua_tostring(L, 3); + (arg1)->setDTMFCallback(arg2,arg3); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_setAutoHangup(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - bool arg2; - int result; - - SWIG_check_num_args("setAutoHangup", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("setAutoHangup", 1, "CoreSession *"); - if (!lua_isboolean(L, 2)) - SWIG_fail_arg("setAutoHangup", 2, "bool"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_setAutoHangup", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (lua_toboolean(L, 2) != 0); - result = (int) (arg1)->setAutoHangup(arg2); - SWIG_arg = 0; - lua_pushnumber(L, (lua_Number) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_speak(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + int result; + + SWIG_check_num_args("speak",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("speak",1,"CoreSession *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("speak",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_speak",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (char *)lua_tostring(L, 2); + result = (int)(arg1)->speak(arg2); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_setHangupHook(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - void *arg2 = (void *) 0; - - SWIG_check_num_args("setHangupHook", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("setHangupHook", 1, "CoreSession *"); - if (!SWIG_isptrtype(L, 2)) - SWIG_fail_arg("setHangupHook", 2, "void *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_setHangupHook", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (void *) SWIG_MustGetPtr(L, 2, 0, 0, 2, "CoreSession_setHangupHook"); - (arg1)->setHangupHook(arg2); - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_set_tts_parms(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + + SWIG_check_num_args("set_tts_parms",3,3) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("set_tts_parms",1,"CoreSession *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("set_tts_parms",2,"char *"); + if(!lua_isstring(L,3)) SWIG_fail_arg("set_tts_parms",3,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_set_tts_parms",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (char *)lua_tostring(L, 2); + arg3 = (char *)lua_tostring(L, 3); + (arg1)->set_tts_parms(arg2,arg3); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_ready(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - bool result; - - SWIG_check_num_args("ready", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("ready", 1, "CoreSession *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_ready", 1, SWIGTYPE_p_CoreSession); - } - - result = (bool) (arg1)->ready(); - SWIG_arg = 0; - lua_pushboolean(L, (int) (result == true)); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_collectDigits(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + int result; + + SWIG_check_num_args("collectDigits",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("collectDigits",1,"CoreSession *"); + if(!lua_isnumber(L,2)) SWIG_fail_arg("collectDigits",2,"int"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_collectDigits",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (int)lua_tonumber(L, 2); + result = (int)(arg1)->collectDigits(arg2); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_execute__SWIG_0(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - char *arg2 = (char *) 0; - char *arg3 = (char *) 0; - - SWIG_check_num_args("execute", 3, 3) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("execute", 1, "CoreSession *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("execute", 2, "char *"); - if (!lua_isstring(L, 3)) - SWIG_fail_arg("execute", 3, "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); - arg3 = (char *) lua_tostring(L, 3); - (arg1)->execute(arg2, arg3); - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_getDigits__SWIG_0(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + char *arg3 = (char *) 0 ; + int arg4 ; + char *result = 0 ; + + SWIG_check_num_args("getDigits",4,4) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("getDigits",1,"CoreSession *"); + if(!lua_isnumber(L,2)) SWIG_fail_arg("getDigits",2,"int"); + if(!lua_isstring(L,3)) SWIG_fail_arg("getDigits",3,"char *"); + if(!lua_isnumber(L,4)) SWIG_fail_arg("getDigits",4,"int"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_getDigits",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (int)lua_tonumber(L, 2); + arg3 = (char *)lua_tostring(L, 3); + arg4 = (int)lua_tonumber(L, 4); + result = (char *)(arg1)->getDigits(arg2,arg3,arg4); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - 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_getDigits__SWIG_1(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + char *arg3 = (char *) 0 ; + int arg4 ; + int arg5 ; + char *result = 0 ; + + SWIG_check_num_args("getDigits",5,5) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("getDigits",1,"CoreSession *"); + if(!lua_isnumber(L,2)) SWIG_fail_arg("getDigits",2,"int"); + if(!lua_isstring(L,3)) SWIG_fail_arg("getDigits",3,"char *"); + if(!lua_isnumber(L,4)) SWIG_fail_arg("getDigits",4,"int"); + if(!lua_isnumber(L,5)) SWIG_fail_arg("getDigits",5,"int"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_getDigits",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (int)lua_tonumber(L, 2); + arg3 = (char *)lua_tostring(L, 3); + arg4 = (int)lua_tonumber(L, 4); + arg5 = (int)lua_tonumber(L, 5); + result = (char *)(arg1)->getDigits(arg2,arg3,arg4,arg5); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + 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_getDigits(lua_State* L) { + int argc; + int argv[6]={ + 1,2,3,4,5,6 + }; + + argc = lua_gettop(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_isnumber(L,argv[1]); + } + if (_v) { + { + _v = lua_isstring(L,argv[2]); + } + if (_v) { + { + _v = lua_isnumber(L,argv[3]); + } + if (_v) { + return _wrap_CoreSession_getDigits__SWIG_0(L); + } + } + } + } + } + if (argc == 5) { + 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_isnumber(L,argv[1]); + } + if (_v) { + { + _v = lua_isstring(L,argv[2]); + } + if (_v) { + { + _v = lua_isnumber(L,argv[3]); + } + if (_v) { + { + _v = lua_isnumber(L,argv[4]); + } + if (_v) { + return _wrap_CoreSession_getDigits__SWIG_1(L); + } + } + } + } + } + } + + lua_pushstring(L,"No matching function for overloaded 'CoreSession_getDigits'"); + lua_error(L);return 0; +} - static int _wrap_CoreSession_sendEvent(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - Event *arg2 = (Event *) 0; - SWIG_check_num_args("sendEvent", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("sendEvent", 1, "CoreSession *"); - if (!SWIG_isptrtype(L, 2)) - SWIG_fail_arg("sendEvent", 2, "Event *"); +static int _wrap_CoreSession_transfer(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + char *arg4 = (char *) 0 ; + int result; + + SWIG_check_num_args("transfer",4,4) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("transfer",1,"CoreSession *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("transfer",2,"char *"); + if(!lua_isstring(L,3)) SWIG_fail_arg("transfer",3,"char *"); + if(!lua_isstring(L,4)) SWIG_fail_arg("transfer",4,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_transfer",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (char *)lua_tostring(L, 2); + arg3 = (char *)lua_tostring(L, 3); + arg4 = (char *)lua_tostring(L, 4); + result = (int)(arg1)->transfer(arg2,arg3,arg4); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_sendEvent", 1, SWIGTYPE_p_CoreSession); - } +static int _wrap_CoreSession_read(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + int arg3 ; + char *arg4 = (char *) 0 ; + int arg5 ; + char *arg6 = (char *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("read",6,6) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("read",1,"CoreSession *"); + if(!lua_isnumber(L,2)) SWIG_fail_arg("read",2,"int"); + if(!lua_isnumber(L,3)) SWIG_fail_arg("read",3,"int"); + if(!lua_isstring(L,4)) SWIG_fail_arg("read",4,"char const *"); + if(!lua_isnumber(L,5)) SWIG_fail_arg("read",5,"int"); + if(!lua_isstring(L,6)) SWIG_fail_arg("read",6,"char const *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_read",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (int)lua_tonumber(L, 2); + arg3 = (int)lua_tonumber(L, 3); + arg4 = (char *)lua_tostring(L, 4); + arg5 = (int)lua_tonumber(L, 5); + arg6 = (char *)lua_tostring(L, 6); + result = (char *)(arg1)->read(arg2,arg3,(char const *)arg4,arg5,(char const *)arg6); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 2, (void **) &arg2, SWIGTYPE_p_Event, 0))) { - SWIG_fail_ptr("CoreSession_sendEvent", 2, SWIGTYPE_p_Event); - } - (arg1)->sendEvent(arg2); - SWIG_arg = 0; +static int _wrap_CoreSession_playAndGetDigits(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + int arg3 ; + int arg4 ; + int arg5 ; + char *arg6 = (char *) 0 ; + char *arg7 = (char *) 0 ; + char *arg8 = (char *) 0 ; + char *arg9 = (char *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("playAndGetDigits",9,9) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("playAndGetDigits",1,"CoreSession *"); + if(!lua_isnumber(L,2)) SWIG_fail_arg("playAndGetDigits",2,"int"); + if(!lua_isnumber(L,3)) SWIG_fail_arg("playAndGetDigits",3,"int"); + if(!lua_isnumber(L,4)) SWIG_fail_arg("playAndGetDigits",4,"int"); + if(!lua_isnumber(L,5)) SWIG_fail_arg("playAndGetDigits",5,"int"); + if(!lua_isstring(L,6)) SWIG_fail_arg("playAndGetDigits",6,"char *"); + if(!lua_isstring(L,7)) SWIG_fail_arg("playAndGetDigits",7,"char *"); + if(!lua_isstring(L,8)) SWIG_fail_arg("playAndGetDigits",8,"char *"); + if(!lua_isstring(L,9)) SWIG_fail_arg("playAndGetDigits",9,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_playAndGetDigits",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (int)lua_tonumber(L, 2); + arg3 = (int)lua_tonumber(L, 3); + arg4 = (int)lua_tonumber(L, 4); + arg5 = (int)lua_tonumber(L, 5); + arg6 = (char *)lua_tostring(L, 6); + arg7 = (char *)lua_tostring(L, 7); + arg8 = (char *)lua_tostring(L, 8); + arg9 = (char *)lua_tostring(L, 9); + result = (char *)(arg1)->playAndGetDigits(arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - return SWIG_arg; - if (0) - SWIG_fail; +static int _wrap_CoreSession_streamFile__SWIG_0(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + int arg3 ; + int result; + + SWIG_check_num_args("streamFile",3,3) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("streamFile",1,"CoreSession *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("streamFile",2,"char *"); + if(!lua_isnumber(L,3)) SWIG_fail_arg("streamFile",3,"int"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_streamFile",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (char *)lua_tostring(L, 2); + arg3 = (int)lua_tonumber(L, 3); + result = (int)(arg1)->streamFile(arg2,arg3); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_streamFile__SWIG_1(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + int result; + + SWIG_check_num_args("streamFile",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("streamFile",1,"CoreSession *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("streamFile",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_streamFile",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (char *)lua_tostring(L, 2); + result = (int)(arg1)->streamFile(arg2); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_setEventData(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - Event *arg2 = (Event *) 0; - SWIG_check_num_args("setEventData", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("setEventData", 1, "CoreSession *"); - if (!SWIG_isptrtype(L, 2)) - SWIG_fail_arg("setEventData", 2, "Event *"); +static int _wrap_CoreSession_streamFile(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_streamFile__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_isnumber(L,argv[2]); + } + if (_v) { + return _wrap_CoreSession_streamFile__SWIG_0(L); + } + } + } + } + + lua_pushstring(L,"No matching function for overloaded 'CoreSession_streamFile'"); + lua_error(L);return 0; +} - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_setEventData", 1, SWIGTYPE_p_CoreSession); - } +static int _wrap_CoreSession_sleep(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + int arg2 ; + int result; + + SWIG_check_num_args("sleep",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("sleep",1,"CoreSession *"); + if(!lua_isnumber(L,2)) SWIG_fail_arg("sleep",2,"int"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_sleep",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (int)lua_tonumber(L, 2); + result = (int)(arg1)->sleep(arg2); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 2, (void **) &arg2, SWIGTYPE_p_Event, 0))) { - SWIG_fail_ptr("CoreSession_setEventData", 2, SWIGTYPE_p_Event); - } - (arg1)->setEventData(arg2); - SWIG_arg = 0; +static int _wrap_CoreSession_flushEvents(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + int result; + + SWIG_check_num_args("flushEvents",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("flushEvents",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_flushEvents",1,SWIGTYPE_p_CoreSession); + } + + result = (int)(arg1)->flushEvents(); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - return SWIG_arg; - if (0) - SWIG_fail; +static int _wrap_CoreSession_flushDigits(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + int result; + + SWIG_check_num_args("flushDigits",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("flushDigits",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_flushDigits",1,SWIGTYPE_p_CoreSession); + } + + result = (int)(arg1)->flushDigits(); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_setAutoHangup(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + bool arg2 ; + int result; + + SWIG_check_num_args("setAutoHangup",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("setAutoHangup",1,"CoreSession *"); + if(!lua_isboolean(L,2)) SWIG_fail_arg("setAutoHangup",2,"bool"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_setAutoHangup",1,SWIGTYPE_p_CoreSession); + } + + arg2 = (lua_toboolean(L, 2)!=0); + result = (int)(arg1)->setAutoHangup(arg2); + SWIG_arg=0; + lua_pushnumber(L, (lua_Number) result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_getXMLCDR(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - char *result = 0; - - SWIG_check_num_args("getXMLCDR", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("getXMLCDR", 1, "CoreSession *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_getXMLCDR", 1, SWIGTYPE_p_CoreSession); - } - - result = (char *) (arg1)->getXMLCDR(); - SWIG_arg = 0; - lua_pushstring(L, (const char *) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_setHangupHook(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + void *arg2 = (void *) 0 ; + + SWIG_check_num_args("setHangupHook",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("setHangupHook",1,"CoreSession *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("setHangupHook",2,"void *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_setHangupHook",1,SWIGTYPE_p_CoreSession); + } + + arg2=(void *)SWIG_MustGetPtr(L,2,0,0,2,"CoreSession_setHangupHook"); + (arg1)->setHangupHook(arg2); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_begin_allow_threads(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - bool result; - - SWIG_check_num_args("begin_allow_threads", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("begin_allow_threads", 1, "CoreSession *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_begin_allow_threads", 1, SWIGTYPE_p_CoreSession); - } - - result = (bool) (arg1)->begin_allow_threads(); - SWIG_arg = 0; - lua_pushboolean(L, (int) (result == true)); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_ready(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + bool result; + + SWIG_check_num_args("ready",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("ready",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_ready",1,SWIGTYPE_p_CoreSession); + } + + result = (bool)(arg1)->ready(); + SWIG_arg=0; + lua_pushboolean(L,(int)(result==true)); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_end_allow_threads(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - bool result; - - SWIG_check_num_args("end_allow_threads", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("end_allow_threads", 1, "CoreSession *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_end_allow_threads", 1, SWIGTYPE_p_CoreSession); - } - - result = (bool) (arg1)->end_allow_threads(); - SWIG_arg = 0; - lua_pushboolean(L, (int) (result == true)); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_answered(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + bool result; + + SWIG_check_num_args("answered",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("answered",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_answered",1,SWIGTYPE_p_CoreSession); + } + + result = (bool)(arg1)->answered(); + SWIG_arg=0; + lua_pushboolean(L,(int)(result==true)); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_get_uuid(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - char *result = 0; - - SWIG_check_num_args("get_uuid", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("get_uuid", 1, "CoreSession const *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_get_uuid", 1, SWIGTYPE_p_CoreSession); - } - - result = (char *) ((CoreSession const *) arg1)->get_uuid(); - SWIG_arg = 0; - lua_pushstring(L, (const char *) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_mediaReady(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + bool result; + + SWIG_check_num_args("mediaReady",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("mediaReady",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_mediaReady",1,SWIGTYPE_p_CoreSession); + } + + result = (bool)(arg1)->mediaReady(); + SWIG_arg=0; + lua_pushboolean(L,(int)(result==true)); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_get_cb_args(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - switch_input_args_t *result = 0; - - SWIG_check_num_args("get_cb_args", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("get_cb_args", 1, "CoreSession const *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_get_cb_args", 1, SWIGTYPE_p_CoreSession); - } - - { - switch_input_args_t const &_result_ref = ((CoreSession const *) arg1)->get_cb_args(); - result = (switch_input_args_t *) &_result_ref; - } - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_switch_input_args_t, 0); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_waitForAnswer(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + CoreSession *arg2 = (CoreSession *) 0 ; + + SWIG_check_num_args("waitForAnswer",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("waitForAnswer",1,"CoreSession *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("waitForAnswer",2,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_waitForAnswer",1,SWIGTYPE_p_CoreSession); + } + + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&arg2,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_waitForAnswer",2,SWIGTYPE_p_CoreSession); + } + + (arg1)->waitForAnswer(arg2); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_check_hangup_hook(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - SWIG_check_num_args("check_hangup_hook", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("check_hangup_hook", 1, "CoreSession *"); +static int _wrap_CoreSession_execute__SWIG_0(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + + SWIG_check_num_args("execute",3,3) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("execute",1,"CoreSession *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("execute",2,"char *"); + if(!lua_isstring(L,3)) SWIG_fail_arg("execute",3,"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); + arg3 = (char *)lua_tostring(L, 3); + (arg1)->execute(arg2,arg3); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_check_hangup_hook", 1, SWIGTYPE_p_CoreSession); - } - (arg1)->check_hangup_hook(); - SWIG_arg = 0; +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; +} - return SWIG_arg; - if (0) - SWIG_fail; +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; +} - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_sendEvent(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + Event *arg2 = (Event *) 0 ; + + SWIG_check_num_args("sendEvent",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("sendEvent",1,"CoreSession *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("sendEvent",2,"Event *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_sendEvent",1,SWIGTYPE_p_CoreSession); + } + + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&arg2,SWIGTYPE_p_Event,0))){ + SWIG_fail_ptr("CoreSession_sendEvent",2,SWIGTYPE_p_Event); + } + + (arg1)->sendEvent(arg2); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_CoreSession_run_dtmf_callback(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = (CoreSession *) 0; - void *arg2 = (void *) 0; - switch_input_type_t arg3; - switch_status_t result; - switch_input_type_t *argp3; - - SWIG_check_num_args("run_dtmf_callback", 3, 3) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("run_dtmf_callback", 1, "CoreSession *"); - if (!SWIG_isptrtype(L, 2)) - SWIG_fail_arg("run_dtmf_callback", 2, "void *"); - if (!lua_isuserdata(L, 3)) - SWIG_fail_arg("run_dtmf_callback", 3, "switch_input_type_t"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("CoreSession_run_dtmf_callback", 1, SWIGTYPE_p_CoreSession); - } - - arg2 = (void *) SWIG_MustGetPtr(L, 2, 0, 0, 2, "CoreSession_run_dtmf_callback"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 3, (void **) &argp3, SWIGTYPE_p_switch_input_type_t, 0))) { - SWIG_fail_ptr("CoreSession_run_dtmf_callback", 3, SWIGTYPE_p_switch_input_type_t); - } - arg3 = *argp3; - - result = (arg1)->run_dtmf_callback(arg2, arg3); - SWIG_arg = 0; - { - switch_status_t *resultptr = new switch_status_t ((switch_status_t &) result); - SWIG_NewPointerObj(L, (void *) resultptr, SWIGTYPE_p_switch_status_t, 1); - SWIG_arg++; - } - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_setEventData(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + Event *arg2 = (Event *) 0 ; + + SWIG_check_num_args("setEventData",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("setEventData",1,"CoreSession *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("setEventData",2,"Event *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_setEventData",1,SWIGTYPE_p_CoreSession); + } + + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&arg2,SWIGTYPE_p_Event,0))){ + SWIG_fail_ptr("CoreSession_setEventData",2,SWIGTYPE_p_Event); + } + + (arg1)->setEventData(arg2); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static void swig_delete_CoreSession(void *obj) { - CoreSession *arg1 = (CoreSession *) obj; - delete arg1; - } - static swig_lua_method swig_CoreSession_methods[] = { - {"answer", _wrap_CoreSession_answer}, - {"preAnswer", _wrap_CoreSession_preAnswer}, - {"hangup", _wrap_CoreSession_hangup}, - {"setVariable", _wrap_CoreSession_setVariable}, - {"setPrivate", _wrap_CoreSession_setPrivate}, - {"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}, - {"setDTMFCallback", _wrap_CoreSession_setDTMFCallback}, - {"speak", _wrap_CoreSession_speak}, - {"set_tts_parms", _wrap_CoreSession_set_tts_parms}, - {"collectDigits", _wrap_CoreSession_collectDigits}, - {"getDigits", _wrap_CoreSession_getDigits}, - {"transfer", _wrap_CoreSession_transfer}, - {"read", _wrap_CoreSession_read}, - {"playAndGetDigits", _wrap_CoreSession_playAndGetDigits}, - {"streamFile", _wrap_CoreSession_streamFile}, - {"flushEvents", _wrap_CoreSession_flushEvents}, - {"flushDigits", _wrap_CoreSession_flushDigits}, - {"setAutoHangup", _wrap_CoreSession_setAutoHangup}, - {"setHangupHook", _wrap_CoreSession_setHangupHook}, - {"ready", _wrap_CoreSession_ready}, - {"execute", _wrap_CoreSession_execute}, - {"sendEvent", _wrap_CoreSession_sendEvent}, - {"setEventData", _wrap_CoreSession_setEventData}, - {"getXMLCDR", _wrap_CoreSession_getXMLCDR}, - {"begin_allow_threads", _wrap_CoreSession_begin_allow_threads}, - {"end_allow_threads", _wrap_CoreSession_end_allow_threads}, - {"get_uuid", _wrap_CoreSession_get_uuid}, - {"get_cb_args", _wrap_CoreSession_get_cb_args}, - {"check_hangup_hook", _wrap_CoreSession_check_hangup_hook}, - {"run_dtmf_callback", _wrap_CoreSession_run_dtmf_callback}, - {0, 0} - }; - static swig_lua_attribute swig_CoreSession_attributes[] = { - {"session", _wrap_CoreSession_session_get, _wrap_CoreSession_session_set}, - {"channel", _wrap_CoreSession_channel_get, _wrap_CoreSession_channel_set}, - {"flags", _wrap_CoreSession_flags_get, _wrap_CoreSession_flags_set}, - {"allocated", _wrap_CoreSession_allocated_get, _wrap_CoreSession_allocated_set}, - {"cb_state", _wrap_CoreSession_cb_state_get, _wrap_CoreSession_cb_state_set}, - {"hook_state", _wrap_CoreSession_hook_state_get, _wrap_CoreSession_hook_state_set}, - {0, 0, 0} - }; - static swig_lua_class *swig_CoreSession_bases[] = { 0 }; - static const char *swig_CoreSession_base_names[] = { 0 }; - static swig_lua_class _wrap_class_CoreSession = - { "CoreSession", &SWIGTYPE_p_CoreSession, 0, swig_delete_CoreSession, swig_CoreSession_methods, swig_CoreSession_attributes, -swig_CoreSession_bases, swig_CoreSession_base_names }; - - static int _wrap_console_log(lua_State * L) { - int SWIG_arg = -1; - char *arg1 = (char *) 0; - char *arg2 = (char *) 0; - - SWIG_check_num_args("console_log", 2, 2) - if (!lua_isstring(L, 1)) - SWIG_fail_arg("console_log", 1, "char *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("console_log", 2, "char *"); - arg1 = (char *) lua_tostring(L, 1); - arg2 = (char *) lua_tostring(L, 2); - console_log(arg1, arg2); - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_getXMLCDR(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("getXMLCDR",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("getXMLCDR",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_getXMLCDR",1,SWIGTYPE_p_CoreSession); + } + + result = (char *)(arg1)->getXMLCDR(); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_console_clean_log(lua_State * L) { - int SWIG_arg = -1; - char *arg1 = (char *) 0; - - SWIG_check_num_args("console_clean_log", 1, 1) - if (!lua_isstring(L, 1)) - SWIG_fail_arg("console_clean_log", 1, "char *"); - arg1 = (char *) lua_tostring(L, 1); - console_clean_log(arg1); - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_begin_allow_threads(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + bool result; + + SWIG_check_num_args("begin_allow_threads",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("begin_allow_threads",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_begin_allow_threads",1,SWIGTYPE_p_CoreSession); + } + + result = (bool)(arg1)->begin_allow_threads(); + SWIG_arg=0; + lua_pushboolean(L,(int)(result==true)); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_bridge(lua_State * L) { - int SWIG_arg = -1; - CoreSession *arg1 = 0; - CoreSession *arg2 = 0; - SWIG_check_num_args("bridge", 2, 2) - if (!lua_isuserdata(L, 1)) - SWIG_fail_arg("bridge", 1, "CoreSession &"); - if (!lua_isuserdata(L, 2)) - SWIG_fail_arg("bridge", 2, "CoreSession &"); +static int _wrap_CoreSession_end_allow_threads(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + bool result; + + SWIG_check_num_args("end_allow_threads",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("end_allow_threads",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_end_allow_threads",1,SWIGTYPE_p_CoreSession); + } + + result = (bool)(arg1)->end_allow_threads(); + SWIG_arg=0; + lua_pushboolean(L,(int)(result==true)); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("bridge", 1, SWIGTYPE_p_CoreSession); - } +static int _wrap_CoreSession_get_uuid(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("get_uuid",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("get_uuid",1,"CoreSession const *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_get_uuid",1,SWIGTYPE_p_CoreSession); + } + + result = (char *)((CoreSession const *)arg1)->get_uuid(); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 2, (void **) &arg2, SWIGTYPE_p_CoreSession, 0))) { - SWIG_fail_ptr("bridge", 2, SWIGTYPE_p_CoreSession); - } - bridge(*arg1, *arg2); - SWIG_arg = 0; +static int _wrap_CoreSession_get_cb_args(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + switch_input_args_t *result = 0 ; + + SWIG_check_num_args("get_cb_args",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("get_cb_args",1,"CoreSession const *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_get_cb_args",1,SWIGTYPE_p_CoreSession); + } + + { + switch_input_args_t const &_result_ref = ((CoreSession const *)arg1)->get_cb_args(); + result = (switch_input_args_t *) &_result_ref; + } + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_switch_input_args_t,0); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - return SWIG_arg; - if (0) - SWIG_fail; +static int _wrap_CoreSession_check_hangup_hook(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + + SWIG_check_num_args("check_hangup_hook",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("check_hangup_hook",1,"CoreSession *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_check_hangup_hook",1,SWIGTYPE_p_CoreSession); + } + + (arg1)->check_hangup_hook(); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_CoreSession_run_dtmf_callback(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = (CoreSession *) 0 ; + void *arg2 = (void *) 0 ; + switch_input_type_t arg3 ; + switch_status_t result; + switch_input_type_t *argp3 ; + + SWIG_check_num_args("run_dtmf_callback",3,3) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("run_dtmf_callback",1,"CoreSession *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("run_dtmf_callback",2,"void *"); + if(!lua_isuserdata(L,3)) SWIG_fail_arg("run_dtmf_callback",3,"switch_input_type_t"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("CoreSession_run_dtmf_callback",1,SWIGTYPE_p_CoreSession); + } + + arg2=(void *)SWIG_MustGetPtr(L,2,0,0,2,"CoreSession_run_dtmf_callback"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,3,(void**)&argp3,SWIGTYPE_p_switch_input_type_t,0))){ + SWIG_fail_ptr("CoreSession_run_dtmf_callback",3,SWIGTYPE_p_switch_input_type_t); + } + arg3 = *argp3; + + result = (arg1)->run_dtmf_callback(arg2,arg3); + SWIG_arg=0; + { + switch_status_t * resultptr = new switch_status_t((switch_status_t &) result); + SWIG_NewPointerObj(L,(void *) resultptr,SWIGTYPE_p_switch_status_t,1); SWIG_arg++; + } + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_hanguphook(lua_State * L) { - int SWIG_arg = -1; - switch_core_session_t *arg1 = (switch_core_session_t *) 0; - switch_status_t result; - - SWIG_check_num_args("hanguphook", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("hanguphook", 1, "switch_core_session_t *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_switch_core_session_t, 0))) { - SWIG_fail_ptr("hanguphook", 1, SWIGTYPE_p_switch_core_session_t); - } - - result = hanguphook(arg1); - SWIG_arg = 0; - { - switch_status_t *resultptr = new switch_status_t ((switch_status_t &) result); - SWIG_NewPointerObj(L, (void *) resultptr, SWIGTYPE_p_switch_status_t, 1); - SWIG_arg++; - } - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static void swig_delete_CoreSession(void *obj) { +CoreSession *arg1 = (CoreSession *) obj; +delete arg1; +} +static swig_lua_method swig_CoreSession_methods[] = { + {"answer", _wrap_CoreSession_answer}, + {"preAnswer", _wrap_CoreSession_preAnswer}, + {"hangup", _wrap_CoreSession_hangup}, + {"setVariable", _wrap_CoreSession_setVariable}, + {"setPrivate", _wrap_CoreSession_setPrivate}, + {"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}, + {"setDTMFCallback", _wrap_CoreSession_setDTMFCallback}, + {"speak", _wrap_CoreSession_speak}, + {"set_tts_parms", _wrap_CoreSession_set_tts_parms}, + {"collectDigits", _wrap_CoreSession_collectDigits}, + {"getDigits", _wrap_CoreSession_getDigits}, + {"transfer", _wrap_CoreSession_transfer}, + {"read", _wrap_CoreSession_read}, + {"playAndGetDigits", _wrap_CoreSession_playAndGetDigits}, + {"streamFile", _wrap_CoreSession_streamFile}, + {"sleep", _wrap_CoreSession_sleep}, + {"flushEvents", _wrap_CoreSession_flushEvents}, + {"flushDigits", _wrap_CoreSession_flushDigits}, + {"setAutoHangup", _wrap_CoreSession_setAutoHangup}, + {"setHangupHook", _wrap_CoreSession_setHangupHook}, + {"ready", _wrap_CoreSession_ready}, + {"answered", _wrap_CoreSession_answered}, + {"mediaReady", _wrap_CoreSession_mediaReady}, + {"waitForAnswer", _wrap_CoreSession_waitForAnswer}, + {"execute", _wrap_CoreSession_execute}, + {"sendEvent", _wrap_CoreSession_sendEvent}, + {"setEventData", _wrap_CoreSession_setEventData}, + {"getXMLCDR", _wrap_CoreSession_getXMLCDR}, + {"begin_allow_threads", _wrap_CoreSession_begin_allow_threads}, + {"end_allow_threads", _wrap_CoreSession_end_allow_threads}, + {"get_uuid", _wrap_CoreSession_get_uuid}, + {"get_cb_args", _wrap_CoreSession_get_cb_args}, + {"check_hangup_hook", _wrap_CoreSession_check_hangup_hook}, + {"run_dtmf_callback", _wrap_CoreSession_run_dtmf_callback}, + {0,0} +}; +static swig_lua_attribute swig_CoreSession_attributes[] = { + { "session", _wrap_CoreSession_session_get, _wrap_CoreSession_session_set}, + { "channel", _wrap_CoreSession_channel_get, _wrap_CoreSession_channel_set}, + { "flags", _wrap_CoreSession_flags_get, _wrap_CoreSession_flags_set}, + { "allocated", _wrap_CoreSession_allocated_get, _wrap_CoreSession_allocated_set}, + { "cb_state", _wrap_CoreSession_cb_state_get, _wrap_CoreSession_cb_state_set}, + { "hook_state", _wrap_CoreSession_hook_state_get, _wrap_CoreSession_hook_state_set}, + { "uuid", _wrap_CoreSession_uuid_get, _wrap_CoreSession_uuid_set}, + { "tts_name", _wrap_CoreSession_tts_name_get, _wrap_CoreSession_tts_name_set}, + { "voice_name", _wrap_CoreSession_voice_name_get, _wrap_CoreSession_voice_name_set}, + {0,0,0} +}; +static swig_lua_class *swig_CoreSession_bases[] = {0}; +static const char *swig_CoreSession_base_names[] = {0}; +static swig_lua_class _wrap_class_CoreSession = { "CoreSession", &SWIGTYPE_p_CoreSession,0, swig_delete_CoreSession, swig_CoreSession_methods, swig_CoreSession_attributes, swig_CoreSession_bases, swig_CoreSession_base_names }; + +static int _wrap_console_log(lua_State* L) { + int SWIG_arg = -1; + char *arg1 = (char *) 0 ; + char *arg2 = (char *) 0 ; + + SWIG_check_num_args("console_log",2,2) + if(!lua_isstring(L,1)) SWIG_fail_arg("console_log",1,"char *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("console_log",2,"char *"); + arg1 = (char *)lua_tostring(L, 1); + arg2 = (char *)lua_tostring(L, 2); + console_log(arg1,arg2); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_dtmf_callback(lua_State * L) { - int SWIG_arg = -1; - switch_core_session_t *arg1 = (switch_core_session_t *) 0; - void *arg2 = (void *) 0; - switch_input_type_t arg3; - void *arg4 = (void *) 0; - unsigned int arg5; - switch_status_t result; - switch_input_type_t *argp3; - - SWIG_check_num_args("dtmf_callback", 5, 5) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("dtmf_callback", 1, "switch_core_session_t *"); - if (!SWIG_isptrtype(L, 2)) - SWIG_fail_arg("dtmf_callback", 2, "void *"); - if (!lua_isuserdata(L, 3)) - SWIG_fail_arg("dtmf_callback", 3, "switch_input_type_t"); - if (!SWIG_isptrtype(L, 4)) - SWIG_fail_arg("dtmf_callback", 4, "void *"); - if (!lua_isnumber(L, 5)) - SWIG_fail_arg("dtmf_callback", 5, "unsigned int"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_switch_core_session_t, 0))) { - SWIG_fail_ptr("dtmf_callback", 1, SWIGTYPE_p_switch_core_session_t); - } - - arg2 = (void *) SWIG_MustGetPtr(L, 2, 0, 0, 2, "dtmf_callback"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 3, (void **) &argp3, SWIGTYPE_p_switch_input_type_t, 0))) { - SWIG_fail_ptr("dtmf_callback", 3, SWIGTYPE_p_switch_input_type_t); - } - arg3 = *argp3; - - arg4 = (void *) SWIG_MustGetPtr(L, 4, 0, 0, 4, "dtmf_callback"); - arg5 = (unsigned int) lua_tonumber(L, 5); - result = dtmf_callback(arg1, arg2, arg3, arg4, arg5); - SWIG_arg = 0; - { - switch_status_t *resultptr = new switch_status_t ((switch_status_t &) result); - SWIG_NewPointerObj(L, (void *) resultptr, SWIGTYPE_p_switch_status_t, 1); - SWIG_arg++; - } - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_console_clean_log(lua_State* L) { + int SWIG_arg = -1; + char *arg1 = (char *) 0 ; + + SWIG_check_num_args("console_clean_log",1,1) + if(!lua_isstring(L,1)) SWIG_fail_arg("console_clean_log",1,"char *"); + arg1 = (char *)lua_tostring(L, 1); + console_clean_log(arg1); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_new_Session__SWIG_0(lua_State * L) { - int SWIG_arg = -1; - LUA::Session * result = 0; - - SWIG_check_num_args("LUA::Session", 0, 0) - result = (LUA::Session *) new LUA::Session(); - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_LUA__Session, 1); - SWIG_arg++; - result->setLUA(L); - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_bridge(lua_State* L) { + int SWIG_arg = -1; + CoreSession *arg1 = 0 ; + CoreSession *arg2 = 0 ; + + SWIG_check_num_args("bridge",2,2) + if(!lua_isuserdata(L,1)) SWIG_fail_arg("bridge",1,"CoreSession &"); + if(!lua_isuserdata(L,2)) SWIG_fail_arg("bridge",2,"CoreSession &"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("bridge",1,SWIGTYPE_p_CoreSession); + } + + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&arg2,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("bridge",2,SWIGTYPE_p_CoreSession); + } + + bridge(*arg1,*arg2); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_new_Session__SWIG_1(lua_State * L) { - int SWIG_arg = -1; - char *arg1 = (char *) 0; - LUA::Session * result = 0; - - SWIG_check_num_args("LUA::Session", 1, 1) - if (!lua_isstring(L, 1)) - SWIG_fail_arg("LUA::Session", 1, "char *"); - arg1 = (char *) lua_tostring(L, 1); - result = (LUA::Session *) new LUA::Session(arg1); - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_LUA__Session, 1); - SWIG_arg++; - result->setLUA(L); - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_hanguphook(lua_State* L) { + int SWIG_arg = -1; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + switch_status_t result; + + SWIG_check_num_args("hanguphook",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("hanguphook",1,"switch_core_session_t *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_switch_core_session_t,0))){ + SWIG_fail_ptr("hanguphook",1,SWIGTYPE_p_switch_core_session_t); + } + + result = hanguphook(arg1); + SWIG_arg=0; + { + switch_status_t * resultptr = new switch_status_t((switch_status_t &) result); + SWIG_NewPointerObj(L,(void *) resultptr,SWIGTYPE_p_switch_status_t,1); SWIG_arg++; + } + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_new_Session__SWIG_2(lua_State * L) { - int SWIG_arg = -1; - switch_core_session_t *arg1 = (switch_core_session_t *) 0; - LUA::Session * result = 0; - - SWIG_check_num_args("LUA::Session", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("LUA::Session", 1, "switch_core_session_t *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_switch_core_session_t, 0))) { - SWIG_fail_ptr("new_Session", 1, SWIGTYPE_p_switch_core_session_t); - } - - result = (LUA::Session *) new LUA::Session(arg1); - SWIG_arg = 0; - SWIG_NewPointerObj(L, result, SWIGTYPE_p_LUA__Session, 1); - SWIG_arg++; - result->setLUA(L); - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_dtmf_callback(lua_State* L) { + int SWIG_arg = -1; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + void *arg2 = (void *) 0 ; + switch_input_type_t arg3 ; + void *arg4 = (void *) 0 ; + unsigned int arg5 ; + switch_status_t result; + switch_input_type_t *argp3 ; + + SWIG_check_num_args("dtmf_callback",5,5) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("dtmf_callback",1,"switch_core_session_t *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("dtmf_callback",2,"void *"); + if(!lua_isuserdata(L,3)) SWIG_fail_arg("dtmf_callback",3,"switch_input_type_t"); + if(!SWIG_isptrtype(L,4)) SWIG_fail_arg("dtmf_callback",4,"void *"); + if(!lua_isnumber(L,5)) SWIG_fail_arg("dtmf_callback",5,"unsigned int"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_switch_core_session_t,0))){ + SWIG_fail_ptr("dtmf_callback",1,SWIGTYPE_p_switch_core_session_t); + } + + arg2=(void *)SWIG_MustGetPtr(L,2,0,0,2,"dtmf_callback"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,3,(void**)&argp3,SWIGTYPE_p_switch_input_type_t,0))){ + SWIG_fail_ptr("dtmf_callback",3,SWIGTYPE_p_switch_input_type_t); + } + arg3 = *argp3; + + arg4=(void *)SWIG_MustGetPtr(L,4,0,0,4,"dtmf_callback"); + arg5 = (unsigned int)lua_tonumber(L, 5); + result = dtmf_callback(arg1,arg2,arg3,arg4,arg5); + SWIG_arg=0; + { + switch_status_t * resultptr = new switch_status_t((switch_status_t &) result); + SWIG_NewPointerObj(L,(void *) resultptr,SWIGTYPE_p_switch_status_t,1); SWIG_arg++; + } + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_new_Session(lua_State * L) { - int argc; - int argv[2] = { - 1, 2 - }; - - argc = lua_gettop(L); - if (argc == 0) { - return _wrap_new_Session__SWIG_0(L); - } - if (argc == 1) { - int _v; - { - void *ptr; - if (SWIG_isptrtype(L, argv[0]) == 0 || SWIG_ConvertPtr(L, argv[0], (void **) &ptr, SWIGTYPE_p_switch_core_session_t, 0)) { - _v = 0; - } else { - _v = 1; - } - } - if (_v) { - return _wrap_new_Session__SWIG_2(L); - } - } - if (argc == 1) { - int _v; - { - _v = lua_isstring(L, argv[0]); - } - if (_v) { - return _wrap_new_Session__SWIG_1(L); - } - } - - lua_pushstring(L, "No matching function for overloaded 'new_Session'"); - lua_error(L); - return 0; - } +static int _wrap_new_Session__SWIG_0(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *result = 0 ; + + SWIG_check_num_args("LUA::Session",0,0) + result = (LUA::Session *)new LUA::Session(); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_LUA__Session,1); SWIG_arg++; result->setLUA(L); + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_delete_Session(lua_State * L) { - int SWIG_arg = -1; - LUA::Session * arg1 = (LUA::Session *) 0; - SWIG_check_num_args("LUA::~Session", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("LUA::~Session", 1, "LUA::Session *"); +static int _wrap_new_Session__SWIG_1(lua_State* L) { + int SWIG_arg = -1; + char *arg1 = (char *) 0 ; + CoreSession *arg2 = (CoreSession *) 0 ; + LUA::Session *result = 0 ; + + SWIG_check_num_args("LUA::Session",2,2) + if(!lua_isstring(L,1)) SWIG_fail_arg("LUA::Session",1,"char *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("LUA::Session",2,"CoreSession *"); + arg1 = (char *)lua_tostring(L, 1); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,2,(void**)&arg2,SWIGTYPE_p_CoreSession,0))){ + SWIG_fail_ptr("new_Session",2,SWIGTYPE_p_CoreSession); + } + + result = (LUA::Session *)new LUA::Session(arg1,arg2); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_LUA__Session,1); SWIG_arg++; result->setLUA(L); + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_LUA__Session, SWIG_POINTER_DISOWN))) { - SWIG_fail_ptr("delete_Session", 1, SWIGTYPE_p_LUA__Session); - } - delete arg1; +static int _wrap_new_Session__SWIG_2(lua_State* L) { + int SWIG_arg = -1; + char *arg1 = (char *) 0 ; + LUA::Session *result = 0 ; + + SWIG_check_num_args("LUA::Session",1,1) + if(!lua_isstring(L,1)) SWIG_fail_arg("LUA::Session",1,"char *"); + arg1 = (char *)lua_tostring(L, 1); + result = (LUA::Session *)new LUA::Session(arg1); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_LUA__Session,1); SWIG_arg++; result->setLUA(L); + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - SWIG_arg = 0; - return SWIG_arg; +static int _wrap_new_Session__SWIG_3(lua_State* L) { + int SWIG_arg = -1; + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + LUA::Session *result = 0 ; + + SWIG_check_num_args("LUA::Session",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("LUA::Session",1,"switch_core_session_t *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_switch_core_session_t,0))){ + SWIG_fail_ptr("new_Session",1,SWIGTYPE_p_switch_core_session_t); + } + + result = (LUA::Session *)new LUA::Session(arg1); + SWIG_arg=0; + SWIG_NewPointerObj(L,result,SWIGTYPE_p_LUA__Session,1); SWIG_arg++; result->setLUA(L); + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (0) - SWIG_fail; - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_new_Session(lua_State* L) { + int argc; + int argv[3]={ + 1,2,3 + }; + + argc = lua_gettop(L); + if (argc == 0) { + return _wrap_new_Session__SWIG_0(L); + } + if (argc == 1) { + int _v; + { + void *ptr; + if (SWIG_isptrtype(L,argv[0])==0 || SWIG_ConvertPtr(L,argv[0], (void **) &ptr, SWIGTYPE_p_switch_core_session_t, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + return _wrap_new_Session__SWIG_3(L); + } + } + if (argc == 1) { + int _v; + { + _v = lua_isstring(L,argv[0]); + } + if (_v) { + return _wrap_new_Session__SWIG_2(L); + } + } + if (argc == 2) { + int _v; + { + _v = lua_isstring(L,argv[0]); + } + if (_v) { + { + void *ptr; + if (SWIG_isptrtype(L,argv[1])==0 || SWIG_ConvertPtr(L,argv[1], (void **) &ptr, SWIGTYPE_p_CoreSession, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + return _wrap_new_Session__SWIG_1(L); + } + } + } + + lua_pushstring(L,"No matching function for overloaded 'new_Session'"); + lua_error(L);return 0; +} - static int _wrap_Session_begin_allow_threads(lua_State * L) { - int SWIG_arg = -1; - LUA::Session * arg1 = (LUA::Session *) 0; - bool result; - - SWIG_check_num_args("begin_allow_threads", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("begin_allow_threads", 1, "LUA::Session *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_LUA__Session, 0))) { - SWIG_fail_ptr("Session_begin_allow_threads", 1, SWIGTYPE_p_LUA__Session); - } - - result = (bool) (arg1)->begin_allow_threads(); - SWIG_arg = 0; - lua_pushboolean(L, (int) (result == true)); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_delete_Session(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *arg1 = (LUA::Session *) 0 ; + + SWIG_check_num_args("LUA::~Session",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("LUA::~Session",1,"LUA::Session *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Session,SWIG_POINTER_DISOWN))){ + SWIG_fail_ptr("delete_Session",1,SWIGTYPE_p_LUA__Session); + } + + delete arg1; + + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Session_end_allow_threads(lua_State * L) { - int SWIG_arg = -1; - LUA::Session * arg1 = (LUA::Session *) 0; - bool result; - - SWIG_check_num_args("end_allow_threads", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("end_allow_threads", 1, "LUA::Session *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_LUA__Session, 0))) { - SWIG_fail_ptr("Session_end_allow_threads", 1, SWIGTYPE_p_LUA__Session); - } - - result = (bool) (arg1)->end_allow_threads(); - SWIG_arg = 0; - lua_pushboolean(L, (int) (result == true)); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Session_begin_allow_threads(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *arg1 = (LUA::Session *) 0 ; + bool result; + + SWIG_check_num_args("begin_allow_threads",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("begin_allow_threads",1,"LUA::Session *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Session,0))){ + SWIG_fail_ptr("Session_begin_allow_threads",1,SWIGTYPE_p_LUA__Session); + } + + result = (bool)(arg1)->begin_allow_threads(); + SWIG_arg=0; + lua_pushboolean(L,(int)(result==true)); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Session_check_hangup_hook(lua_State * L) { - int SWIG_arg = -1; - LUA::Session * arg1 = (LUA::Session *) 0; +static int _wrap_Session_end_allow_threads(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *arg1 = (LUA::Session *) 0 ; + bool result; + + SWIG_check_num_args("end_allow_threads",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("end_allow_threads",1,"LUA::Session *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Session,0))){ + SWIG_fail_ptr("Session_end_allow_threads",1,SWIGTYPE_p_LUA__Session); + } + + result = (bool)(arg1)->end_allow_threads(); + SWIG_arg=0; + lua_pushboolean(L,(int)(result==true)); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - SWIG_check_num_args("check_hangup_hook", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("check_hangup_hook", 1, "LUA::Session *"); - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_LUA__Session, 0))) { - SWIG_fail_ptr("Session_check_hangup_hook", 1, SWIGTYPE_p_LUA__Session); - } +static int _wrap_Session_check_hangup_hook(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *arg1 = (LUA::Session *) 0 ; + + SWIG_check_num_args("check_hangup_hook",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("check_hangup_hook",1,"LUA::Session *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Session,0))){ + SWIG_fail_ptr("Session_check_hangup_hook",1,SWIGTYPE_p_LUA__Session); + } + + (arg1)->check_hangup_hook(); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - (arg1)->check_hangup_hook(); - SWIG_arg = 0; - return SWIG_arg; +static int _wrap_Session_run_dtmf_callback(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *arg1 = (LUA::Session *) 0 ; + void *arg2 = (void *) 0 ; + switch_input_type_t arg3 ; + switch_status_t result; + switch_input_type_t *argp3 ; + + SWIG_check_num_args("run_dtmf_callback",3,3) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("run_dtmf_callback",1,"LUA::Session *"); + if(!SWIG_isptrtype(L,2)) SWIG_fail_arg("run_dtmf_callback",2,"void *"); + if(!lua_isuserdata(L,3)) SWIG_fail_arg("run_dtmf_callback",3,"switch_input_type_t"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Session,0))){ + SWIG_fail_ptr("Session_run_dtmf_callback",1,SWIGTYPE_p_LUA__Session); + } + + arg2=(void *)SWIG_MustGetPtr(L,2,0,0,2,"Session_run_dtmf_callback"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,3,(void**)&argp3,SWIGTYPE_p_switch_input_type_t,0))){ + SWIG_fail_ptr("Session_run_dtmf_callback",3,SWIGTYPE_p_switch_input_type_t); + } + arg3 = *argp3; + + result = (arg1)->run_dtmf_callback(arg2,arg3); + SWIG_arg=0; + { + switch_status_t * resultptr = new switch_status_t((switch_status_t &) result); + SWIG_NewPointerObj(L,(void *) resultptr,SWIGTYPE_p_switch_status_t,1); SWIG_arg++; + } + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - if (0) - SWIG_fail; - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Session_setInputCallback__SWIG_0(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *arg1 = (LUA::Session *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + + SWIG_check_num_args("setInputCallback",3,3) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("setInputCallback",1,"LUA::Session *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("setInputCallback",2,"char *"); + if(!lua_isstring(L,3)) SWIG_fail_arg("setInputCallback",3,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Session,0))){ + SWIG_fail_ptr("Session_setInputCallback",1,SWIGTYPE_p_LUA__Session); + } + + arg2 = (char *)lua_tostring(L, 2); + arg3 = (char *)lua_tostring(L, 3); + (arg1)->setInputCallback(arg2,arg3); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Session_run_dtmf_callback(lua_State * L) { - int SWIG_arg = -1; - LUA::Session * arg1 = (LUA::Session *) 0; - void *arg2 = (void *) 0; - switch_input_type_t arg3; - switch_status_t result; - switch_input_type_t *argp3; - - SWIG_check_num_args("run_dtmf_callback", 3, 3) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("run_dtmf_callback", 1, "LUA::Session *"); - if (!SWIG_isptrtype(L, 2)) - SWIG_fail_arg("run_dtmf_callback", 2, "void *"); - if (!lua_isuserdata(L, 3)) - SWIG_fail_arg("run_dtmf_callback", 3, "switch_input_type_t"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_LUA__Session, 0))) { - SWIG_fail_ptr("Session_run_dtmf_callback", 1, SWIGTYPE_p_LUA__Session); - } - - arg2 = (void *) SWIG_MustGetPtr(L, 2, 0, 0, 2, "Session_run_dtmf_callback"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 3, (void **) &argp3, SWIGTYPE_p_switch_input_type_t, 0))) { - SWIG_fail_ptr("Session_run_dtmf_callback", 3, SWIGTYPE_p_switch_input_type_t); - } - arg3 = *argp3; - - result = (arg1)->run_dtmf_callback(arg2, arg3); - SWIG_arg = 0; - { - switch_status_t *resultptr = new switch_status_t ((switch_status_t &) result); - SWIG_NewPointerObj(L, (void *) resultptr, SWIGTYPE_p_switch_status_t, 1); - SWIG_arg++; - } - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Session_setInputCallback__SWIG_1(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *arg1 = (LUA::Session *) 0 ; + char *arg2 = (char *) 0 ; + + SWIG_check_num_args("setInputCallback",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("setInputCallback",1,"LUA::Session *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("setInputCallback",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Session,0))){ + SWIG_fail_ptr("Session_setInputCallback",1,SWIGTYPE_p_LUA__Session); + } + + arg2 = (char *)lua_tostring(L, 2); + (arg1)->setInputCallback(arg2); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Session_setInputCallback(lua_State * L) { - int SWIG_arg = -1; - LUA::Session * arg1 = (LUA::Session *) 0; - char *arg2 = (char *) 0; - char *arg3 = (char *) 0; - - SWIG_check_num_args("setInputCallback", 3, 3) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("setInputCallback", 1, "LUA::Session *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("setInputCallback", 2, "char *"); - if (!lua_isstring(L, 3)) - SWIG_fail_arg("setInputCallback", 3, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_LUA__Session, 0))) { - SWIG_fail_ptr("Session_setInputCallback", 1, SWIGTYPE_p_LUA__Session); - } - - arg2 = (char *) lua_tostring(L, 2); - arg3 = (char *) lua_tostring(L, 3); - (arg1)->setInputCallback(arg2, arg3); - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Session_setInputCallback(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_LUA__Session, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + { + _v = lua_isstring(L,argv[1]); + } + if (_v) { + return _wrap_Session_setInputCallback__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_LUA__Session, 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_Session_setInputCallback__SWIG_0(L); + } + } + } + } + + lua_pushstring(L,"No matching function for overloaded 'Session_setInputCallback'"); + lua_error(L);return 0; +} - static int _wrap_Session_setHangupHook__SWIG_0(lua_State * L) { - int SWIG_arg = -1; - LUA::Session * arg1 = (LUA::Session *) 0; - char *arg2 = (char *) 0; - char *arg3 = (char *) 0; - - SWIG_check_num_args("setHangupHook", 3, 3) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("setHangupHook", 1, "LUA::Session *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("setHangupHook", 2, "char *"); - if (!lua_isstring(L, 3)) - SWIG_fail_arg("setHangupHook", 3, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_LUA__Session, 0))) { - SWIG_fail_ptr("Session_setHangupHook", 1, SWIGTYPE_p_LUA__Session); - } - - arg2 = (char *) lua_tostring(L, 2); - arg3 = (char *) lua_tostring(L, 3); - (arg1)->setHangupHook(arg2, arg3); - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Session_setHangupHook__SWIG_0(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *arg1 = (LUA::Session *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + + SWIG_check_num_args("setHangupHook",3,3) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("setHangupHook",1,"LUA::Session *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("setHangupHook",2,"char *"); + if(!lua_isstring(L,3)) SWIG_fail_arg("setHangupHook",3,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Session,0))){ + SWIG_fail_ptr("Session_setHangupHook",1,SWIGTYPE_p_LUA__Session); + } + + arg2 = (char *)lua_tostring(L, 2); + arg3 = (char *)lua_tostring(L, 3); + (arg1)->setHangupHook(arg2,arg3); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Session_setHangupHook__SWIG_1(lua_State * L) { - int SWIG_arg = -1; - LUA::Session * arg1 = (LUA::Session *) 0; - char *arg2 = (char *) 0; - - SWIG_check_num_args("setHangupHook", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("setHangupHook", 1, "LUA::Session *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("setHangupHook", 2, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_LUA__Session, 0))) { - SWIG_fail_ptr("Session_setHangupHook", 1, SWIGTYPE_p_LUA__Session); - } - - arg2 = (char *) lua_tostring(L, 2); - (arg1)->setHangupHook(arg2); - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Session_setHangupHook__SWIG_1(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *arg1 = (LUA::Session *) 0 ; + char *arg2 = (char *) 0 ; + + SWIG_check_num_args("setHangupHook",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("setHangupHook",1,"LUA::Session *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("setHangupHook",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Session,0))){ + SWIG_fail_ptr("Session_setHangupHook",1,SWIGTYPE_p_LUA__Session); + } + + arg2 = (char *)lua_tostring(L, 2); + (arg1)->setHangupHook(arg2); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Session_setHangupHook(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_LUA__Session, 0)) { - _v = 0; - } else { - _v = 1; - } - } - if (_v) { - { - _v = lua_isstring(L, argv[1]); - } - if (_v) { - return _wrap_Session_setHangupHook__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_LUA__Session, 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_Session_setHangupHook__SWIG_0(L); - } - } - } - } - - lua_pushstring(L, "No matching function for overloaded 'Session_setHangupHook'"); - lua_error(L); - return 0; - } +static int _wrap_Session_setHangupHook(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_LUA__Session, 0)) { + _v = 0; + } else { + _v = 1; + } + } + if (_v) { + { + _v = lua_isstring(L,argv[1]); + } + if (_v) { + return _wrap_Session_setHangupHook__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_LUA__Session, 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_Session_setHangupHook__SWIG_0(L); + } + } + } + } + + lua_pushstring(L,"No matching function for overloaded 'Session_setHangupHook'"); + lua_error(L);return 0; +} - static int _wrap_Session_ready(lua_State * L) { - int SWIG_arg = -1; - LUA::Session * arg1 = (LUA::Session *) 0; - bool result; - - SWIG_check_num_args("ready", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("ready", 1, "LUA::Session *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_LUA__Session, 0))) { - SWIG_fail_ptr("Session_ready", 1, SWIGTYPE_p_LUA__Session); - } - - result = (bool) (arg1)->ready(); - SWIG_arg = 0; - lua_pushboolean(L, (int) (result == true)); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Session_ready(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *arg1 = (LUA::Session *) 0 ; + bool result; + + SWIG_check_num_args("ready",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("ready",1,"LUA::Session *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Session,0))){ + SWIG_fail_ptr("Session_ready",1,SWIGTYPE_p_LUA__Session); + } + + result = (bool)(arg1)->ready(); + SWIG_arg=0; + lua_pushboolean(L,(int)(result==true)); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Session_cb_function_set(lua_State * L) { - int SWIG_arg = -1; - LUA::Session * arg1 = (LUA::Session *) 0; - char *arg2 = (char *) 0; - - SWIG_check_num_args("cb_function", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("cb_function", 1, "LUA::Session *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("cb_function", 2, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_LUA__Session, 0))) { - SWIG_fail_ptr("Session_cb_function_set", 1, SWIGTYPE_p_LUA__Session); - } - - arg2 = (char *) lua_tostring(L, 2); - { - if (arg1->cb_function) - delete[]arg1->cb_function; - if (arg2) { - arg1->cb_function = (char *) (new char[strlen((const char *)arg2) + 1]); - strcpy((char *) arg1->cb_function, (const char *) arg2); - } else { - arg1->cb_function = 0; - } - } - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Session_cb_function_set(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *arg1 = (LUA::Session *) 0 ; + char *arg2 = (char *) 0 ; + + SWIG_check_num_args("cb_function",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("cb_function",1,"LUA::Session *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("cb_function",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Session,0))){ + SWIG_fail_ptr("Session_cb_function_set",1,SWIGTYPE_p_LUA__Session); + } + + arg2 = (char *)lua_tostring(L, 2); + { + if (arg1->cb_function) delete [] arg1->cb_function; + if (arg2) { + arg1->cb_function = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->cb_function, (const char *)arg2); + } else { + arg1->cb_function = 0; + } + } + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Session_cb_function_get(lua_State * L) { - int SWIG_arg = -1; - LUA::Session * arg1 = (LUA::Session *) 0; - char *result = 0; - - SWIG_check_num_args("cb_function", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("cb_function", 1, "LUA::Session *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_LUA__Session, 0))) { - SWIG_fail_ptr("Session_cb_function_get", 1, SWIGTYPE_p_LUA__Session); - } - - result = (char *) ((arg1)->cb_function); - SWIG_arg = 0; - lua_pushstring(L, (const char *) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Session_cb_function_get(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *arg1 = (LUA::Session *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("cb_function",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("cb_function",1,"LUA::Session *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Session,0))){ + SWIG_fail_ptr("Session_cb_function_get",1,SWIGTYPE_p_LUA__Session); + } + + result = (char *) ((arg1)->cb_function); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Session_cb_arg_set(lua_State * L) { - int SWIG_arg = -1; - LUA::Session * arg1 = (LUA::Session *) 0; - char *arg2 = (char *) 0; - - SWIG_check_num_args("cb_arg", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("cb_arg", 1, "LUA::Session *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("cb_arg", 2, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_LUA__Session, 0))) { - SWIG_fail_ptr("Session_cb_arg_set", 1, SWIGTYPE_p_LUA__Session); - } - - arg2 = (char *) lua_tostring(L, 2); - { - if (arg1->cb_arg) - delete[]arg1->cb_arg; - if (arg2) { - arg1->cb_arg = (char *) (new char[strlen((const char *)arg2) + 1]); - strcpy((char *) arg1->cb_arg, (const char *) arg2); - } else { - arg1->cb_arg = 0; - } - } - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Session_cb_arg_set(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *arg1 = (LUA::Session *) 0 ; + char *arg2 = (char *) 0 ; + + SWIG_check_num_args("cb_arg",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("cb_arg",1,"LUA::Session *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("cb_arg",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Session,0))){ + SWIG_fail_ptr("Session_cb_arg_set",1,SWIGTYPE_p_LUA__Session); + } + + arg2 = (char *)lua_tostring(L, 2); + { + if (arg1->cb_arg) delete [] arg1->cb_arg; + if (arg2) { + arg1->cb_arg = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->cb_arg, (const char *)arg2); + } else { + arg1->cb_arg = 0; + } + } + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Session_cb_arg_get(lua_State * L) { - int SWIG_arg = -1; - LUA::Session * arg1 = (LUA::Session *) 0; - char *result = 0; - - SWIG_check_num_args("cb_arg", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("cb_arg", 1, "LUA::Session *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_LUA__Session, 0))) { - SWIG_fail_ptr("Session_cb_arg_get", 1, SWIGTYPE_p_LUA__Session); - } - - result = (char *) ((arg1)->cb_arg); - SWIG_arg = 0; - lua_pushstring(L, (const char *) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Session_cb_arg_get(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *arg1 = (LUA::Session *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("cb_arg",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("cb_arg",1,"LUA::Session *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Session,0))){ + SWIG_fail_ptr("Session_cb_arg_get",1,SWIGTYPE_p_LUA__Session); + } + + result = (char *) ((arg1)->cb_arg); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Session_hangup_func_str_set(lua_State * L) { - int SWIG_arg = -1; - LUA::Session * arg1 = (LUA::Session *) 0; - char *arg2 = (char *) 0; - - SWIG_check_num_args("hangup_func_str", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("hangup_func_str", 1, "LUA::Session *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("hangup_func_str", 2, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_LUA__Session, 0))) { - SWIG_fail_ptr("Session_hangup_func_str_set", 1, SWIGTYPE_p_LUA__Session); - } - - arg2 = (char *) lua_tostring(L, 2); - { - if (arg1->hangup_func_str) - delete[]arg1->hangup_func_str; - if (arg2) { - arg1->hangup_func_str = (char *) (new char[strlen((const char *)arg2) + 1]); - strcpy((char *) arg1->hangup_func_str, (const char *) arg2); - } else { - arg1->hangup_func_str = 0; - } - } - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Session_hangup_func_str_set(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *arg1 = (LUA::Session *) 0 ; + char *arg2 = (char *) 0 ; + + SWIG_check_num_args("hangup_func_str",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("hangup_func_str",1,"LUA::Session *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("hangup_func_str",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Session,0))){ + SWIG_fail_ptr("Session_hangup_func_str_set",1,SWIGTYPE_p_LUA__Session); + } + + arg2 = (char *)lua_tostring(L, 2); + { + if (arg1->hangup_func_str) delete [] arg1->hangup_func_str; + if (arg2) { + arg1->hangup_func_str = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->hangup_func_str, (const char *)arg2); + } else { + arg1->hangup_func_str = 0; + } + } + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Session_hangup_func_str_get(lua_State * L) { - int SWIG_arg = -1; - LUA::Session * arg1 = (LUA::Session *) 0; - char *result = 0; - - SWIG_check_num_args("hangup_func_str", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("hangup_func_str", 1, "LUA::Session *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_LUA__Session, 0))) { - SWIG_fail_ptr("Session_hangup_func_str_get", 1, SWIGTYPE_p_LUA__Session); - } - - result = (char *) ((arg1)->hangup_func_str); - SWIG_arg = 0; - lua_pushstring(L, (const char *) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Session_hangup_func_str_get(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *arg1 = (LUA::Session *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("hangup_func_str",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("hangup_func_str",1,"LUA::Session *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Session,0))){ + SWIG_fail_ptr("Session_hangup_func_str_get",1,SWIGTYPE_p_LUA__Session); + } + + result = (char *) ((arg1)->hangup_func_str); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Session_hangup_func_arg_set(lua_State * L) { - int SWIG_arg = -1; - LUA::Session * arg1 = (LUA::Session *) 0; - char *arg2 = (char *) 0; - - SWIG_check_num_args("hangup_func_arg", 2, 2) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("hangup_func_arg", 1, "LUA::Session *"); - if (!lua_isstring(L, 2)) - SWIG_fail_arg("hangup_func_arg", 2, "char *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_LUA__Session, 0))) { - SWIG_fail_ptr("Session_hangup_func_arg_set", 1, SWIGTYPE_p_LUA__Session); - } - - arg2 = (char *) lua_tostring(L, 2); - { - if (arg1->hangup_func_arg) - delete[]arg1->hangup_func_arg; - if (arg2) { - arg1->hangup_func_arg = (char *) (new char[strlen((const char *)arg2) + 1]); - strcpy((char *) arg1->hangup_func_arg, (const char *) arg2); - } else { - arg1->hangup_func_arg = 0; - } - } - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Session_hangup_func_arg_set(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *arg1 = (LUA::Session *) 0 ; + char *arg2 = (char *) 0 ; + + SWIG_check_num_args("hangup_func_arg",2,2) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("hangup_func_arg",1,"LUA::Session *"); + if(!lua_isstring(L,2)) SWIG_fail_arg("hangup_func_arg",2,"char *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Session,0))){ + SWIG_fail_ptr("Session_hangup_func_arg_set",1,SWIGTYPE_p_LUA__Session); + } + + arg2 = (char *)lua_tostring(L, 2); + { + if (arg1->hangup_func_arg) delete [] arg1->hangup_func_arg; + if (arg2) { + arg1->hangup_func_arg = (char *) (new char[strlen((const char *)arg2)+1]); + strcpy((char *)arg1->hangup_func_arg, (const char *)arg2); + } else { + arg1->hangup_func_arg = 0; + } + } + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Session_hangup_func_arg_get(lua_State * L) { - int SWIG_arg = -1; - LUA::Session * arg1 = (LUA::Session *) 0; - char *result = 0; - - SWIG_check_num_args("hangup_func_arg", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("hangup_func_arg", 1, "LUA::Session *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_LUA__Session, 0))) { - SWIG_fail_ptr("Session_hangup_func_arg_get", 1, SWIGTYPE_p_LUA__Session); - } - - result = (char *) ((arg1)->hangup_func_arg); - SWIG_arg = 0; - lua_pushstring(L, (const char *) result); - SWIG_arg++; - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Session_hangup_func_arg_get(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *arg1 = (LUA::Session *) 0 ; + char *result = 0 ; + + SWIG_check_num_args("hangup_func_arg",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("hangup_func_arg",1,"LUA::Session *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Session,0))){ + SWIG_fail_ptr("Session_hangup_func_arg_get",1,SWIGTYPE_p_LUA__Session); + } + + result = (char *) ((arg1)->hangup_func_arg); + SWIG_arg=0; + lua_pushstring(L,(const char*)result); SWIG_arg++; + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static int _wrap_Session_setLUA(lua_State * L) { - int SWIG_arg = -1; - LUA::Session * arg1 = (LUA::Session *) 0; - lua_State *arg2 = (lua_State *) 0; - - arg2 = L; - SWIG_check_num_args("setLUA", 1, 1) - if (!SWIG_isptrtype(L, 1)) - SWIG_fail_arg("setLUA", 1, "LUA::Session *"); - - if (!SWIG_IsOK(SWIG_ConvertPtr(L, 1, (void **) &arg1, SWIGTYPE_p_LUA__Session, 0))) { - SWIG_fail_ptr("Session_setLUA", 1, SWIGTYPE_p_LUA__Session); - } - - (arg1)->setLUA(arg2); - SWIG_arg = 0; - - return SWIG_arg; - - if (0) - SWIG_fail; - - fail: - lua_error(L); - return SWIG_arg; - } +static int _wrap_Session_setLUA(lua_State* L) { + int SWIG_arg = -1; + LUA::Session *arg1 = (LUA::Session *) 0 ; + lua_State *arg2 = (lua_State *) 0 ; + + arg2 = L; + SWIG_check_num_args("setLUA",1,1) + if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("setLUA",1,"LUA::Session *"); + + if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_LUA__Session,0))){ + SWIG_fail_ptr("Session_setLUA",1,SWIGTYPE_p_LUA__Session); + } + + (arg1)->setLUA(arg2); + SWIG_arg=0; + + return SWIG_arg; + + if(0) SWIG_fail; + +fail: + lua_error(L); + return SWIG_arg; +} - static void swig_delete_Session(void *obj) { - LUA::Session * arg1 = (LUA::Session *) obj; - delete arg1; - } - static swig_lua_method swig_LUA_Session_methods[] = { - {"begin_allow_threads", _wrap_Session_begin_allow_threads}, - {"end_allow_threads", _wrap_Session_end_allow_threads}, - {"check_hangup_hook", _wrap_Session_check_hangup_hook}, - {"run_dtmf_callback", _wrap_Session_run_dtmf_callback}, - {"setInputCallback", _wrap_Session_setInputCallback}, - {"setHangupHook", _wrap_Session_setHangupHook}, - {"ready", _wrap_Session_ready}, - {"setLUA", _wrap_Session_setLUA}, - {0, 0} - }; - static swig_lua_attribute swig_LUA_Session_attributes[] = { - {"cb_function", _wrap_Session_cb_function_get, _wrap_Session_cb_function_set}, - {"cb_arg", _wrap_Session_cb_arg_get, _wrap_Session_cb_arg_set}, - {"hangup_func_str", _wrap_Session_hangup_func_str_get, _wrap_Session_hangup_func_str_set}, - {"hangup_func_arg", _wrap_Session_hangup_func_arg_get, _wrap_Session_hangup_func_arg_set}, - {0, 0, 0} - }; - static swig_lua_class *swig_LUA_Session_bases[] = { 0, 0 }; - static const char *swig_LUA_Session_base_names[] = { "CoreSession *", 0 }; - static swig_lua_class _wrap_class_LUA_Session = - { "Session", &SWIGTYPE_p_LUA__Session, _wrap_new_Session, swig_delete_Session, swig_LUA_Session_methods, swig_LUA_Session_attributes, -swig_LUA_Session_bases, swig_LUA_Session_base_names }; +static void swig_delete_Session(void *obj) { +LUA::Session *arg1 = (LUA::Session *) obj; +delete arg1; +} +static swig_lua_method swig_LUA_Session_methods[] = { + {"begin_allow_threads", _wrap_Session_begin_allow_threads}, + {"end_allow_threads", _wrap_Session_end_allow_threads}, + {"check_hangup_hook", _wrap_Session_check_hangup_hook}, + {"run_dtmf_callback", _wrap_Session_run_dtmf_callback}, + {"setInputCallback", _wrap_Session_setInputCallback}, + {"setHangupHook", _wrap_Session_setHangupHook}, + {"ready", _wrap_Session_ready}, + {"setLUA", _wrap_Session_setLUA}, + {0,0} +}; +static swig_lua_attribute swig_LUA_Session_attributes[] = { + { "cb_function", _wrap_Session_cb_function_get, _wrap_Session_cb_function_set}, + { "cb_arg", _wrap_Session_cb_arg_get, _wrap_Session_cb_arg_set}, + { "hangup_func_str", _wrap_Session_hangup_func_str_get, _wrap_Session_hangup_func_str_set}, + { "hangup_func_arg", _wrap_Session_hangup_func_arg_get, _wrap_Session_hangup_func_arg_set}, + {0,0,0} +}; +static swig_lua_class *swig_LUA_Session_bases[] = {0,0}; +static const char *swig_LUA_Session_base_names[] = {"CoreSession *",0}; +static swig_lua_class _wrap_class_LUA_Session = { "Session", &SWIGTYPE_p_LUA__Session,_wrap_new_Session, swig_delete_Session, swig_LUA_Session_methods, swig_LUA_Session_attributes, swig_LUA_Session_bases, swig_LUA_Session_base_names }; #ifdef __cplusplus } #endif static const struct luaL_reg swig_commands[] = { - {"consoleLog", _wrap_consoleLog}, - {"consoleCleanLog", _wrap_consoleCleanLog}, - {"console_log", _wrap_console_log}, - {"console_clean_log", _wrap_console_clean_log}, - {"bridge", _wrap_bridge}, - {"hanguphook", _wrap_hanguphook}, - {"dtmf_callback", _wrap_dtmf_callback}, - {0, 0} + { "consoleLog", _wrap_consoleLog}, + { "consoleCleanLog", _wrap_consoleCleanLog}, + { "console_log", _wrap_console_log}, + { "console_clean_log", _wrap_console_clean_log}, + { "bridge", _wrap_bridge}, + { "hanguphook", _wrap_hanguphook}, + { "dtmf_callback", _wrap_dtmf_callback}, + {0,0} }; static swig_lua_var_info swig_variables[] = { - {0, 0, 0} + {0,0,0} }; static swig_lua_const_info swig_constants[] = { - {SWIG_LUA_INT, (char *) "S_HUP", (long) S_HUP, 0, 0, 0}, - {SWIG_LUA_INT, (char *) "S_FREE", (long) S_FREE, 0, 0, 0}, - {SWIG_LUA_INT, (char *) "S_RDLOCK", (long) S_RDLOCK, 0, 0, 0}, - {0, 0, 0, 0, 0, 0} +{ SWIG_LUA_INT, (char *)"S_HUP", (long) S_HUP, 0, 0, 0}, +{ SWIG_LUA_INT, (char *)"S_FREE", (long) S_FREE, 0, 0, 0}, +{ SWIG_LUA_INT, (char *)"S_RDLOCK", (long) S_RDLOCK, 0, 0, 0}, + {0,0,0,0,0,0} }; /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ -static void *_p_LUA__SessionTo_p_CoreSession(void *x, int *newmemory) -{ - return (void *) ((CoreSession *) ((LUA::Session *) x)); +static void *_p_LUA__SessionTo_p_CoreSession(void *x, int *newmemory) { + return (void *)((CoreSession *) ((LUA::Session *) x)); } -static swig_type_info _swigt__p_API = { "_p_API", "API *", 0, 0, (void *) &_wrap_class_API, 0 }; -static swig_type_info _swigt__p_CoreSession = { "_p_CoreSession", "CoreSession *", 0, 0, (void *) &_wrap_class_CoreSession, 0 }; -static swig_type_info _swigt__p_Event = { "_p_Event", "Event *", 0, 0, (void *) &_wrap_class_Event, 0 }; -static swig_type_info _swigt__p_IVRMenu = { "_p_IVRMenu", "IVRMenu *", 0, 0, (void *) &_wrap_class_IVRMenu, 0 }; -static swig_type_info _swigt__p_LUA__Session = { "_p_LUA__Session", "LUA::Session *", 0, 0, (void *) &_wrap_class_LUA_Session, 0 }; -static swig_type_info _swigt__p_Stream = { "_p_Stream", "Stream *", 0, 0, (void *) &_wrap_class_Stream, 0 }; -static swig_type_info _swigt__p_input_callback_state = - { "_p_input_callback_state", "input_callback_state_t *|input_callback_state *", 0, 0, (void *) &_wrap_class_input_callback_state_t, 0 }; -static swig_type_info _swigt__p_lua_State = { "_p_lua_State", "lua_State *", 0, 0, (void *) 0, 0 }; -static swig_type_info _swigt__p_session_flag_t = { "_p_session_flag_t", "enum session_flag_t *|session_flag_t *", 0, 0, (void *) 0, 0 }; -static swig_type_info _swigt__p_switch_channel_state_t = { "_p_switch_channel_state_t", "switch_channel_state_t *", 0, 0, (void *) 0, 0 }; -static swig_type_info _swigt__p_switch_channel_t = { "_p_switch_channel_t", "switch_channel_t *", 0, 0, (void *) 0, 0 }; -static swig_type_info _swigt__p_switch_core_session_t = { "_p_switch_core_session_t", "switch_core_session_t *", 0, 0, (void *) 0, 0 }; -static swig_type_info _swigt__p_switch_event_t = { "_p_switch_event_t", "switch_event_t *", 0, 0, (void *) 0, 0 }; -static swig_type_info _swigt__p_switch_input_args_t = { "_p_switch_input_args_t", "switch_input_args_t *", 0, 0, (void *) 0, 0 }; -static swig_type_info _swigt__p_switch_input_type_t = { "_p_switch_input_type_t", "switch_input_type_t *", 0, 0, (void *) 0, 0 }; -static swig_type_info _swigt__p_switch_priority_t = { "_p_switch_priority_t", "switch_priority_t *", 0, 0, (void *) 0, 0 }; -static swig_type_info _swigt__p_switch_status_t = { "_p_switch_status_t", "switch_status_t *", 0, 0, (void *) 0, 0 }; -static swig_type_info _swigt__p_switch_stream_handle_t = { "_p_switch_stream_handle_t", "switch_stream_handle_t *", 0, 0, (void *) 0, 0 }; -static swig_type_info _swigt__p_void = { "_p_void", "void *", 0, 0, (void *) 0, 0 }; +static swig_type_info _swigt__p_API = {"_p_API", "API *", 0, 0, (void*)&_wrap_class_API, 0}; +static swig_type_info _swigt__p_CoreSession = {"_p_CoreSession", "CoreSession *", 0, 0, (void*)&_wrap_class_CoreSession, 0}; +static swig_type_info _swigt__p_DTMF = {"_p_DTMF", "DTMF *", 0, 0, (void*)&_wrap_class_DTMF, 0}; +static swig_type_info _swigt__p_Event = {"_p_Event", "Event *", 0, 0, (void*)&_wrap_class_Event, 0}; +static swig_type_info _swigt__p_EventConsumer = {"_p_EventConsumer", "EventConsumer *", 0, 0, (void*)&_wrap_class_EventConsumer, 0}; +static swig_type_info _swigt__p_IVRMenu = {"_p_IVRMenu", "IVRMenu *", 0, 0, (void*)&_wrap_class_IVRMenu, 0}; +static swig_type_info _swigt__p_LUA__Session = {"_p_LUA__Session", "LUA::Session *", 0, 0, (void*)&_wrap_class_LUA_Session, 0}; +static swig_type_info _swigt__p_Stream = {"_p_Stream", "Stream *", 0, 0, (void*)&_wrap_class_Stream, 0}; +static swig_type_info _swigt__p_input_callback_state = {"_p_input_callback_state", "input_callback_state_t *|input_callback_state *", 0, 0, (void*)&_wrap_class_input_callback_state_t, 0}; +static swig_type_info _swigt__p_lua_State = {"_p_lua_State", "lua_State *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_session_flag_t = {"_p_session_flag_t", "enum session_flag_t *|session_flag_t *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_switch_channel_state_t = {"_p_switch_channel_state_t", "switch_channel_state_t *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_switch_channel_t = {"_p_switch_channel_t", "switch_channel_t *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_switch_core_session_t = {"_p_switch_core_session_t", "switch_core_session_t *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_switch_event_node_t = {"_p_switch_event_node_t", "switch_event_node_t *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_switch_event_t = {"_p_switch_event_t", "switch_event_t *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_switch_event_types_t = {"_p_switch_event_types_t", "switch_event_types_t *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_switch_input_args_t = {"_p_switch_input_args_t", "switch_input_args_t *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_switch_input_type_t = {"_p_switch_input_type_t", "switch_input_type_t *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_switch_priority_t = {"_p_switch_priority_t", "switch_priority_t *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_switch_queue_t = {"_p_switch_queue_t", "switch_queue_t *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_switch_status_t = {"_p_switch_status_t", "switch_status_t *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_switch_stream_handle_t = {"_p_switch_stream_handle_t", "switch_stream_handle_t *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_uint32_t = {"_p_uint32_t", "uint32_t *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_void = {"_p_void", "void *", 0, 0, (void*)0, 0}; static swig_type_info *swig_type_initial[] = { - &_swigt__p_API, - &_swigt__p_CoreSession, - &_swigt__p_Event, - &_swigt__p_IVRMenu, - &_swigt__p_LUA__Session, - &_swigt__p_Stream, - &_swigt__p_input_callback_state, - &_swigt__p_lua_State, - &_swigt__p_session_flag_t, - &_swigt__p_switch_channel_state_t, - &_swigt__p_switch_channel_t, - &_swigt__p_switch_core_session_t, - &_swigt__p_switch_event_t, - &_swigt__p_switch_input_args_t, - &_swigt__p_switch_input_type_t, - &_swigt__p_switch_priority_t, - &_swigt__p_switch_status_t, - &_swigt__p_switch_stream_handle_t, - &_swigt__p_void, + &_swigt__p_API, + &_swigt__p_CoreSession, + &_swigt__p_DTMF, + &_swigt__p_Event, + &_swigt__p_EventConsumer, + &_swigt__p_IVRMenu, + &_swigt__p_LUA__Session, + &_swigt__p_Stream, + &_swigt__p_input_callback_state, + &_swigt__p_lua_State, + &_swigt__p_session_flag_t, + &_swigt__p_switch_channel_state_t, + &_swigt__p_switch_channel_t, + &_swigt__p_switch_core_session_t, + &_swigt__p_switch_event_node_t, + &_swigt__p_switch_event_t, + &_swigt__p_switch_event_types_t, + &_swigt__p_switch_input_args_t, + &_swigt__p_switch_input_type_t, + &_swigt__p_switch_priority_t, + &_swigt__p_switch_queue_t, + &_swigt__p_switch_status_t, + &_swigt__p_switch_stream_handle_t, + &_swigt__p_uint32_t, + &_swigt__p_void, }; -static swig_cast_info _swigc__p_API[] = { {&_swigt__p_API, 0, 0, 0}, {0, 0, 0, 0} }; -static swig_cast_info _swigc__p_CoreSession[] = - { {&_swigt__p_CoreSession, 0, 0, 0}, {&_swigt__p_LUA__Session, _p_LUA__SessionTo_p_CoreSession, 0, 0}, {0, 0, 0, 0} }; -static swig_cast_info _swigc__p_Event[] = { {&_swigt__p_Event, 0, 0, 0}, {0, 0, 0, 0} }; -static swig_cast_info _swigc__p_IVRMenu[] = { {&_swigt__p_IVRMenu, 0, 0, 0}, {0, 0, 0, 0} }; -static swig_cast_info _swigc__p_LUA__Session[] = { {&_swigt__p_LUA__Session, 0, 0, 0}, {0, 0, 0, 0} }; -static swig_cast_info _swigc__p_Stream[] = { {&_swigt__p_Stream, 0, 0, 0}, {0, 0, 0, 0} }; -static swig_cast_info _swigc__p_input_callback_state[] = { {&_swigt__p_input_callback_state, 0, 0, 0}, {0, 0, 0, 0} }; -static swig_cast_info _swigc__p_lua_State[] = { {&_swigt__p_lua_State, 0, 0, 0}, {0, 0, 0, 0} }; -static swig_cast_info _swigc__p_session_flag_t[] = { {&_swigt__p_session_flag_t, 0, 0, 0}, {0, 0, 0, 0} }; -static swig_cast_info _swigc__p_switch_channel_state_t[] = { {&_swigt__p_switch_channel_state_t, 0, 0, 0}, {0, 0, 0, 0} }; -static swig_cast_info _swigc__p_switch_channel_t[] = { {&_swigt__p_switch_channel_t, 0, 0, 0}, {0, 0, 0, 0} }; -static swig_cast_info _swigc__p_switch_core_session_t[] = { {&_swigt__p_switch_core_session_t, 0, 0, 0}, {0, 0, 0, 0} }; -static swig_cast_info _swigc__p_switch_event_t[] = { {&_swigt__p_switch_event_t, 0, 0, 0}, {0, 0, 0, 0} }; -static swig_cast_info _swigc__p_switch_input_args_t[] = { {&_swigt__p_switch_input_args_t, 0, 0, 0}, {0, 0, 0, 0} }; -static swig_cast_info _swigc__p_switch_input_type_t[] = { {&_swigt__p_switch_input_type_t, 0, 0, 0}, {0, 0, 0, 0} }; -static swig_cast_info _swigc__p_switch_priority_t[] = { {&_swigt__p_switch_priority_t, 0, 0, 0}, {0, 0, 0, 0} }; -static swig_cast_info _swigc__p_switch_status_t[] = { {&_swigt__p_switch_status_t, 0, 0, 0}, {0, 0, 0, 0} }; -static swig_cast_info _swigc__p_switch_stream_handle_t[] = { {&_swigt__p_switch_stream_handle_t, 0, 0, 0}, {0, 0, 0, 0} }; -static swig_cast_info _swigc__p_void[] = { {&_swigt__p_void, 0, 0, 0}, {0, 0, 0, 0} }; +static swig_cast_info _swigc__p_API[] = { {&_swigt__p_API, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_CoreSession[] = { {&_swigt__p_CoreSession, 0, 0, 0}, {&_swigt__p_LUA__Session, _p_LUA__SessionTo_p_CoreSession, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_DTMF[] = { {&_swigt__p_DTMF, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_Event[] = { {&_swigt__p_Event, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_EventConsumer[] = { {&_swigt__p_EventConsumer, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_IVRMenu[] = { {&_swigt__p_IVRMenu, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_LUA__Session[] = { {&_swigt__p_LUA__Session, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_Stream[] = { {&_swigt__p_Stream, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_input_callback_state[] = { {&_swigt__p_input_callback_state, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_lua_State[] = { {&_swigt__p_lua_State, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_session_flag_t[] = { {&_swigt__p_session_flag_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_switch_channel_state_t[] = { {&_swigt__p_switch_channel_state_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_switch_channel_t[] = { {&_swigt__p_switch_channel_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_switch_core_session_t[] = { {&_swigt__p_switch_core_session_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_switch_event_node_t[] = { {&_swigt__p_switch_event_node_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_switch_event_t[] = { {&_swigt__p_switch_event_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_switch_event_types_t[] = { {&_swigt__p_switch_event_types_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_switch_input_args_t[] = { {&_swigt__p_switch_input_args_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_switch_input_type_t[] = { {&_swigt__p_switch_input_type_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_switch_priority_t[] = { {&_swigt__p_switch_priority_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_switch_queue_t[] = { {&_swigt__p_switch_queue_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_switch_status_t[] = { {&_swigt__p_switch_status_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_switch_stream_handle_t[] = { {&_swigt__p_switch_stream_handle_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_uint32_t[] = { {&_swigt__p_uint32_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_void[] = { {&_swigt__p_void, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info *swig_cast_initial[] = { - _swigc__p_API, - _swigc__p_CoreSession, - _swigc__p_Event, - _swigc__p_IVRMenu, - _swigc__p_LUA__Session, - _swigc__p_Stream, - _swigc__p_input_callback_state, - _swigc__p_lua_State, - _swigc__p_session_flag_t, - _swigc__p_switch_channel_state_t, - _swigc__p_switch_channel_t, - _swigc__p_switch_core_session_t, - _swigc__p_switch_event_t, - _swigc__p_switch_input_args_t, - _swigc__p_switch_input_type_t, - _swigc__p_switch_priority_t, - _swigc__p_switch_status_t, - _swigc__p_switch_stream_handle_t, - _swigc__p_void, + _swigc__p_API, + _swigc__p_CoreSession, + _swigc__p_DTMF, + _swigc__p_Event, + _swigc__p_EventConsumer, + _swigc__p_IVRMenu, + _swigc__p_LUA__Session, + _swigc__p_Stream, + _swigc__p_input_callback_state, + _swigc__p_lua_State, + _swigc__p_session_flag_t, + _swigc__p_switch_channel_state_t, + _swigc__p_switch_channel_t, + _swigc__p_switch_core_session_t, + _swigc__p_switch_event_node_t, + _swigc__p_switch_event_t, + _swigc__p_switch_event_types_t, + _swigc__p_switch_input_args_t, + _swigc__p_switch_input_type_t, + _swigc__p_switch_priority_t, + _swigc__p_switch_queue_t, + _swigc__p_switch_status_t, + _swigc__p_switch_stream_handle_t, + _swigc__p_uint32_t, + _swigc__p_void, }; @@ -6810,163 +7742,161 @@ #ifdef __cplusplus extern "C" { #if 0 -} /* c-mode */ +} /* c-mode */ #endif #endif + #if 0 #define SWIGRUNTIME_DEBUG #endif -SWIGRUNTIME void SWIG_InitializeModule(void *clientdata) -{ - size_t i; - swig_module_info *module_head, *iter; - int found, init; - - clientdata = clientdata; - - /* check to see if the circular list has been setup, if not, set it up */ - if (swig_module.next == 0) { - /* Initialize the swig_module */ - swig_module.type_initial = swig_type_initial; - swig_module.cast_initial = swig_cast_initial; - swig_module.next = &swig_module; - init = 1; - } else { - init = 0; - } - /* Try and load any already created modules */ - module_head = SWIG_GetModule(clientdata); - if (!module_head) { - /* This is the first module loaded for this interpreter */ - /* so set the swig module into the interpreter */ - SWIG_SetModule(clientdata, &swig_module); - module_head = &swig_module; - } else { - /* the interpreter has loaded a SWIG module, but has it loaded this one? */ - found = 0; - iter = module_head; - do { - if (iter == &swig_module) { - found = 1; - break; - } - iter = iter->next; - } while (iter != module_head); - - /* if the is found in the list, then all is done and we may leave */ - if (found) - return; - /* otherwise we must add out module into the list */ - swig_module.next = module_head->next; - module_head->next = &swig_module; - } - /* When multiple interpeters are used, a module could have already been initialized in - a different interpreter, but not yet have a pointer in this interpreter. - In this case, we do not want to continue adding types... everything should be - set up already */ - if (init == 0) - return; +SWIGRUNTIME void +SWIG_InitializeModule(void *clientdata) { + size_t i; + swig_module_info *module_head, *iter; + int found, init; + + clientdata = clientdata; + + /* check to see if the circular list has been setup, if not, set it up */ + if (swig_module.next==0) { + /* Initialize the swig_module */ + swig_module.type_initial = swig_type_initial; + swig_module.cast_initial = swig_cast_initial; + swig_module.next = &swig_module; + init = 1; + } else { + init = 0; + } + + /* Try and load any already created modules */ + module_head = SWIG_GetModule(clientdata); + if (!module_head) { + /* This is the first module loaded for this interpreter */ + /* so set the swig module into the interpreter */ + SWIG_SetModule(clientdata, &swig_module); + module_head = &swig_module; + } else { + /* the interpreter has loaded a SWIG module, but has it loaded this one? */ + found=0; + iter=module_head; + do { + if (iter==&swig_module) { + found=1; + break; + } + iter=iter->next; + } while (iter!= module_head); + + /* if the is found in the list, then all is done and we may leave */ + if (found) return; + /* otherwise we must add out module into the list */ + swig_module.next = module_head->next; + module_head->next = &swig_module; + } + + /* When multiple interpeters are used, a module could have already been initialized in + a different interpreter, but not yet have a pointer in this interpreter. + In this case, we do not want to continue adding types... everything should be + set up already */ + if (init == 0) return; - /* Now work on filling in swig_module.types */ + /* Now work on filling in swig_module.types */ #ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: size %d\n", swig_module.size); + printf("SWIG_InitializeModule: size %d\n", swig_module.size); #endif - for (i = 0; i < swig_module.size; ++i) { - swig_type_info *type = 0; - swig_type_info *ret; - swig_cast_info *cast; - + for (i = 0; i < swig_module.size; ++i) { + swig_type_info *type = 0; + swig_type_info *ret; + swig_cast_info *cast; + #ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); + printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); #endif - /* if there is another module already loaded */ - if (swig_module.next != &swig_module) { - type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name); - } - if (type) { - /* Overwrite clientdata field */ + /* if there is another module already loaded */ + if (swig_module.next != &swig_module) { + type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name); + } + if (type) { + /* Overwrite clientdata field */ #ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: found type %s\n", type->name); + printf("SWIG_InitializeModule: found type %s\n", type->name); #endif - if (swig_module.type_initial[i]->clientdata) { - type->clientdata = swig_module.type_initial[i]->clientdata; + if (swig_module.type_initial[i]->clientdata) { + type->clientdata = swig_module.type_initial[i]->clientdata; #ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name); + printf("SWIG_InitializeModule: found and overwrite type %s \n", type->name); #endif - } - } else { - type = swig_module.type_initial[i]; - } - - /* Insert casting types */ - cast = swig_module.cast_initial[i]; - while (cast->type) { + } + } else { + type = swig_module.type_initial[i]; + } - /* Don't need to add information already in the list */ - ret = 0; + /* Insert casting types */ + cast = swig_module.cast_initial[i]; + while (cast->type) { + + /* Don't need to add information already in the list */ + ret = 0; #ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: look cast %s\n", cast->type->name); + printf("SWIG_InitializeModule: look cast %s\n", cast->type->name); #endif - if (swig_module.next != &swig_module) { - ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name); + if (swig_module.next != &swig_module) { + ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name); #ifdef SWIGRUNTIME_DEBUG - if (ret) - printf("SWIG_InitializeModule: found cast %s\n", ret->name); + if (ret) printf("SWIG_InitializeModule: found cast %s\n", ret->name); #endif - } - if (ret) { - if (type == swig_module.type_initial[i]) { + } + if (ret) { + if (type == swig_module.type_initial[i]) { #ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: skip old type %s\n", ret->name); + printf("SWIG_InitializeModule: skip old type %s\n", ret->name); #endif - cast->type = ret; - ret = 0; - } else { - /* Check for casting already in the list */ - swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type); + cast->type = ret; + ret = 0; + } else { + /* Check for casting already in the list */ + swig_cast_info *ocast = SWIG_TypeCheck(ret->name, type); #ifdef SWIGRUNTIME_DEBUG - if (ocast) - printf("SWIG_InitializeModule: skip old cast %s\n", ret->name); + if (ocast) printf("SWIG_InitializeModule: skip old cast %s\n", ret->name); #endif - if (!ocast) - ret = 0; - } - } + if (!ocast) ret = 0; + } + } - if (!ret) { + if (!ret) { #ifdef SWIGRUNTIME_DEBUG - printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name); + printf("SWIG_InitializeModule: adding cast %s\n", cast->type->name); #endif - if (type->cast) { - type->cast->prev = cast; - cast->next = type->cast; - } - type->cast = cast; - } - cast++; - } - /* Set entry in modules->types array equal to the type */ - swig_module.types[i] = type; - } - swig_module.types[i] = 0; + if (type->cast) { + type->cast->prev = cast; + cast->next = type->cast; + } + type->cast = cast; + } + cast++; + } + /* Set entry in modules->types array equal to the type */ + swig_module.types[i] = type; + } + swig_module.types[i] = 0; #ifdef SWIGRUNTIME_DEBUG - printf("**** SWIG_InitializeModule: Cast List ******\n"); - for (i = 0; i < swig_module.size; ++i) { - int j = 0; - swig_cast_info *cast = swig_module.cast_initial[i]; - printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); - while (cast->type) { - printf("SWIG_InitializeModule: cast type %s\n", cast->type->name); - cast++; - ++j; - } - printf("---- Total casts: %d\n", j); - } - printf("**** SWIG_InitializeModule: Cast List ******\n"); + printf("**** SWIG_InitializeModule: Cast List ******\n"); + for (i = 0; i < swig_module.size; ++i) { + int j = 0; + swig_cast_info *cast = swig_module.cast_initial[i]; + printf("SWIG_InitializeModule: type %d %s\n", i, swig_module.type_initial[i]->name); + while (cast->type) { + printf("SWIG_InitializeModule: cast type %s\n", cast->type->name); + cast++; + ++j; + } + printf("---- Total casts: %d\n",j); + } + printf("**** SWIG_InitializeModule: Cast List ******\n"); #endif } @@ -6975,33 +7905,32 @@ * of equivalent types. It is like calling * SWIG_TypeClientData(type, clientdata) a second time. */ -SWIGRUNTIME void SWIG_PropagateClientData(void) -{ - size_t i; - swig_cast_info *equiv; - static int init_run = 0; - - if (init_run) - return; - init_run = 1; - - for (i = 0; i < swig_module.size; i++) { - if (swig_module.types[i]->clientdata) { - equiv = swig_module.types[i]->cast; - while (equiv) { - if (!equiv->converter) { - if (equiv->type && !equiv->type->clientdata) - SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata); - } - equiv = equiv->next; - } - } - } +SWIGRUNTIME void +SWIG_PropagateClientData(void) { + size_t i; + swig_cast_info *equiv; + static int init_run = 0; + + if (init_run) return; + init_run = 1; + + for (i = 0; i < swig_module.size; i++) { + if (swig_module.types[i]->clientdata) { + equiv = swig_module.types[i]->cast; + while (equiv) { + if (!equiv->converter) { + if (equiv->type && !equiv->type->clientdata) + SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata); + } + equiv = equiv->next; + } + } + } } #ifdef __cplusplus #if 0 -{ /* c-mode */ +{ /* c-mode */ #endif } #endif @@ -7009,8 +7938,8 @@ /* Forward declaration of where the user's %init{} gets inserted */ -void SWIG_init_user(lua_State * L); - +void SWIG_init_user(lua_State* L ); + #ifdef __cplusplus extern "C" { #endif @@ -7018,58 +7947,61 @@ added at the very end of the code the function is always called SWIG_init, but an eariler #define will rename it */ - SWIGEXPORT int SWIG_init(lua_State * L) { - int i; - /* start with global table */ - lua_pushvalue(L, LUA_GLOBALSINDEX); - /* SWIG's internal initalisation */ - SWIG_InitializeModule((void *) L); - SWIG_PropagateClientData(); - /* add a global fn */ - SWIG_Lua_add_function(L, "swig_type", SWIG_Lua_type); - SWIG_Lua_add_function(L, "swig_equals", SWIG_Lua_equal); - /* begin the module (its a table with the same name as the module) */ - SWIG_Lua_module_begin(L, SWIG_name); - /* add commands/functions */ - for (i = 0; swig_commands[i].name; i++) { - SWIG_Lua_module_add_function(L, swig_commands[i].name, swig_commands[i].func); - } - /* add variables */ for (i = 0; swig_variables[i].name; i++) { - SWIG_Lua_module_add_variable(L, swig_variables[i].name, swig_variables[i].get, swig_variables[i].set); - } - /* set up base class pointers (the hierachy) */ - for (i = 0; swig_types[i]; i++) { - if (swig_types[i]->clientdata) { - SWIG_Lua_init_base_class(L, (swig_lua_class *) (swig_types[i]->clientdata)); - } - } - /* additional registration structs & classes in lua */ - for (i = 0; swig_types[i]; i++) { - if (swig_types[i]->clientdata) { - SWIG_Lua_class_register(L, (swig_lua_class *) (swig_types[i]->clientdata)); - } - } - /* constants */ - SWIG_Lua_InstallConstants(L, swig_constants); - /* invoke user-specific initialization */ - SWIG_init_user(L); - /* end module */ - lua_pop(L, 1); /* tidy stack (remove module table) */ - lua_pop(L, 1); /* tidy stack (remove global table) */ - return 1; - } +SWIGEXPORT int SWIG_init(lua_State* L) +{ + int i; + /* start with global table */ + lua_pushvalue(L,LUA_GLOBALSINDEX); + /* SWIG's internal initalisation */ + SWIG_InitializeModule((void*)L); + SWIG_PropagateClientData(); + /* add a global fn */ + SWIG_Lua_add_function(L,"swig_type",SWIG_Lua_type); + SWIG_Lua_add_function(L,"swig_equals",SWIG_Lua_equal); + /* begin the module (its a table with the same name as the module) */ + SWIG_Lua_module_begin(L,SWIG_name); + /* add commands/functions */ + for (i = 0; swig_commands[i].name; i++){ + SWIG_Lua_module_add_function(L,swig_commands[i].name,swig_commands[i].func); + } + /* add variables */ + for (i = 0; swig_variables[i].name; i++){ + SWIG_Lua_module_add_variable(L,swig_variables[i].name,swig_variables[i].get,swig_variables[i].set); + } + /* set up base class pointers (the hierachy) */ + for (i = 0; swig_types[i]; i++){ + if (swig_types[i]->clientdata){ + SWIG_Lua_init_base_class(L,(swig_lua_class*)(swig_types[i]->clientdata)); + } + } + /* additional registration structs & classes in lua */ + for (i = 0; swig_types[i]; i++){ + if (swig_types[i]->clientdata){ + SWIG_Lua_class_register(L,(swig_lua_class*)(swig_types[i]->clientdata)); + } + } + /* constants */ + SWIG_Lua_InstallConstants(L,swig_constants); + /* invoke user-specific initialization */ + SWIG_init_user(L); + /* end module */ + lua_pop(L,1); /* tidy stack (remove module table)*/ + lua_pop(L,1); /* tidy stack (remove global table)*/ + return 1; +} #ifdef __cplusplus } #endif -const char *SWIG_LUACODE = ""; +const char* SWIG_LUACODE= + ""; -void SWIG_init_user(lua_State * L) +void SWIG_init_user(lua_State* L) { - /* exec Lua code if applicable */ - SWIG_Lua_dostring(L, SWIG_LUACODE); + /* exec Lua code if applicable */ + SWIG_Lua_dostring(L,SWIG_LUACODE); } #include "mod_lua_extra.c" Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/freeswitch.i ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/freeswitch.i (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/freeswitch.i Mon Aug 4 21:29:58 2008 @@ -11,6 +11,35 @@ %typemap(csclassmodifiers) Event "public partial class" %typemap(csclassmodifiers) Stream "public partial class" +// Allow bitwise compare on flag fields +%typemap(csclassmodifiers) session_flag_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_application_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_asr_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_bind_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_caller_profile_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_channel_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_codec_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_core_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_core_session_message_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_directory_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_eavesdrop_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_file_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_frame_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_io_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_media_bug_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_media_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_originate_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_port_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_rtp_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_scheduler_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_speech_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_timer_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_unicast_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_vad_flag_enum_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_xml_flag_t "[System.Flags] public enum" +%typemap(csclassmodifiers) switch_xml_section_enum_t "[System.Flags] public enum" + + // Some things we dont want exposed to managed users directly, since // we're gonna handle them with our own internalcall methods %ignore dtmfDelegateHandle; @@ -23,6 +52,7 @@ %ignore setDTMFCallback; // Rename some things to make them more .NET-like +//%csmethodmodifiers CoreSession::hangup "internal"; %rename (Answer) CoreSession::answer; %rename (Hangup) CoreSession::hangup; %rename (Ready) CoreSession::ready; @@ -44,6 +74,10 @@ %rename (GetUuid) CoreSession::get_uuid; %rename (HookState) CoreSession::hook_state; %rename (InternalSession) CoreSession::session; +%rename (Speak) CoreSession::speak; +%rename (SetTtsParameters) CoreSession::set_tts_parms; +%rename (SetAutoHangup) CoreSession::setAutoHangup; + %rename (Serialize) Event::serialize; %rename (SetPriority) Event::setPriority; Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/freeswitch_mono.cpp ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/freeswitch_mono.cpp (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/freeswitch_mono.cpp Mon Aug 4 21:29:58 2008 @@ -38,71 +38,109 @@ #include #include #include "freeswitch_mono.h" - MonoSession::MonoSession():CoreSession() -{ - } MonoSession::MonoSession(char *uuid):CoreSession(uuid) -{ - } MonoSession::MonoSession(switch_core_session_t *session):CoreSession(session) -{ - } MonoSession::~MonoSession() -{ - mono_thread_attach(globals.domain); - if (dtmfDelegateHandle) - mono_gchandle_free(dtmfDelegateHandle); - if (hangupDelegateHandle) - mono_gchandle_free(hangupDelegateHandle); - } - - bool MonoSession::begin_allow_threads() -{ - return true; - } - - bool MonoSession::end_allow_threads() -{ - return true; - } - void MonoSession::check_hangup_hook() -{ - mono_thread_attach(globals.domain); - if (!hangupDelegateHandle) { - return; - } - MonoObject * hangupDelegate = mono_gchandle_get_target(hangupDelegateHandle); - if (!hangupDelegate) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "hangupDelegateHandle didn't get an object."); - return; - } - MonoObject * ex = NULL; - mono_runtime_delegate_invoke(hangupDelegate, NULL, &ex); - if (ex) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "hangupDelegate threw an exception."); - } - } - switch_status_t MonoSession::run_dtmf_callback(void *input, switch_input_type_t itype) -{ - mono_thread_attach(globals.domain); - if (!dtmfDelegateHandle) { - return SWITCH_STATUS_SUCCESS; - } - MonoObject * dtmfDelegate = mono_gchandle_get_target(dtmfDelegateHandle); - if (!dtmfDelegate) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "dtmfDelegateHandle didn't get an object."); - return SWITCH_STATUS_SUCCESS; - } - void *args[2]; - args[0] = &input; - args[1] = &itype; - MonoObject * ex = NULL; - MonoObject * res = mono_runtime_delegate_invoke(dtmfDelegate, args, &ex); - if (ex) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "dtmfDelegate threw an exception."); - return SWITCH_STATUS_FALSE; - } - char *resPtr = mono_string_to_utf8((MonoString *) res); - switch_status_t status = process_callback_result(resPtr); - g_free(resPtr); - return status; - } - + +MonoSession::MonoSession():CoreSession() +{ + +} + +MonoSession::MonoSession(char *uuid):CoreSession(uuid) +{ + +} + +MonoSession::MonoSession(switch_core_session_t *session):CoreSession(session) +{ + +} + +MonoSession::~MonoSession() +{ + mono_thread_attach(globals.domain); + + if (dtmfDelegateHandle) { + mono_gchandle_free(dtmfDelegateHandle); + } + + if (hangupDelegateHandle) { + mono_gchandle_free(hangupDelegateHandle); + } + + // Do auto-hangup ourselves because CoreSession can't call check_hangup_hook + // after MonoSession destruction (cause at point it's pure virtual) + if (session) { + channel = switch_core_session_get_channel(session); + if (switch_test_flag(this, S_HUP) && !switch_channel_test_flag(channel, CF_TRANSFER)) { + switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING); + setAutoHangup(0); + } + // Don't let any callbacks use this CoreSession anymore + switch_channel_set_private(channel, "CoreSession", NULL); + } +} + + + +bool MonoSession::begin_allow_threads() +{ + return true; +} + + + +bool MonoSession::end_allow_threads() +{ + return true; +} + + +void MonoSession::check_hangup_hook() +{ + mono_thread_attach(globals.domain); + if (!hangupDelegateHandle) { + return; + } + + MonoObject * hangupDelegate = mono_gchandle_get_target(hangupDelegateHandle); + if (!hangupDelegate) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "hangupDelegateHandle didn't get an object."); + return; + } + + MonoObject * ex = NULL; + mono_runtime_delegate_invoke(hangupDelegate, NULL, &ex); + if (ex) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "hangupDelegate threw an exception."); + } +} + + +switch_status_t MonoSession::run_dtmf_callback(void *input, switch_input_type_t itype) +{ + mono_thread_attach(globals.domain); + if (!dtmfDelegateHandle) { + return SWITCH_STATUS_SUCCESS; + } + MonoObject * dtmfDelegate = mono_gchandle_get_target(dtmfDelegateHandle); + if (!dtmfDelegate) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "dtmfDelegateHandle didn't get an object."); + return SWITCH_STATUS_SUCCESS; + } + + void *args[2]; + args[0] = &input; + args[1] = &itype; + MonoObject * ex = NULL; + MonoObject * res = mono_runtime_delegate_invoke(dtmfDelegate, args, &ex); + if (ex) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "dtmfDelegate threw an exception."); + return SWITCH_STATUS_FALSE; + } + + char *resPtr = mono_string_to_utf8((MonoString *) res); + switch_status_t status = process_callback_result(resPtr); + g_free(resPtr); + return status; +} + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/freeswitch_mono.h ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/freeswitch_mono.h (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/freeswitch_mono.h Mon Aug 4 21:29:58 2008 @@ -64,7 +64,7 @@ MonoSession(); MonoSession(char *uuid); MonoSession(switch_core_session_t *session); - ~MonoSession(); + virtual ~MonoSession(); virtual bool begin_allow_threads(); virtual bool end_allow_threads(); Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/freeswitch_wrap.cxx ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/freeswitch_wrap.cxx (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/freeswitch_wrap.cxx Mon Aug 4 21:29:58 2008 @@ -927,6 +927,17 @@ } +SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_CHANNEL_EXECUTE_ON_RING_VARIABLE_get() { + char * jresult ; + char *result = 0 ; + + result = (char *) "execute_on_ring"; + + jresult = SWIG_csharp_string_callback((const char *)result); + return jresult; +} + + SWIGEXPORT char * SWIGSTDCALL CSharp_SWITCH_CALL_TIMEOUT_VARIABLE_get() { char * jresult ; char *result = 0 ; @@ -4052,7 +4063,7 @@ } -SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_message_flags_set(void * jarg1, int jarg2) { +SWIGEXPORT void SWIGSTDCALL CSharp_switch_core_session_message_flags_set(void * jarg1, unsigned long jarg2) { switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; switch_core_session_message_flag_t arg2 ; @@ -4063,14 +4074,14 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_message_flags_get(void * jarg1) { - int jresult ; +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_session_message_flags_get(void * jarg1) { + unsigned long jresult ; switch_core_session_message *arg1 = (switch_core_session_message *) 0 ; switch_core_session_message_flag_t result; arg1 = (switch_core_session_message *)jarg1; result = (switch_core_session_message_flag_t) ((arg1)->flags); - jresult = result; + jresult = (unsigned long)result; return jresult; } @@ -4231,7 +4242,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_media_bug_add(void * jarg1, void * jarg2, void * jarg3, void * jarg4, int jarg5, void * jarg6) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_media_bug_add(void * jarg1, void * jarg2, void * jarg3, void * jarg4, unsigned long jarg5, void * jarg6) { int jresult ; switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; switch_media_bug_callback_t arg2 = (switch_media_bug_callback_t) 0 ; @@ -4393,7 +4404,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_port_allocator_new(unsigned short jarg1, unsigned short jarg2, int jarg3, void * jarg4) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_port_allocator_new(unsigned short jarg1, unsigned short jarg2, unsigned long jarg3, void * jarg4) { int jresult ; switch_port_t arg1 ; switch_port_t arg2 ; @@ -4447,7 +4458,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_init(int jarg1, int jarg2, void * jarg3) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_init(unsigned long jarg1, int jarg2, void * jarg3) { int jresult ; switch_core_flag_t arg1 ; switch_bool_t arg2 ; @@ -4463,7 +4474,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_init_and_modload(int jarg1, int jarg2, void * jarg3) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_init_and_modload(unsigned long jarg1, int jarg2, void * jarg3) { int jresult ; switch_core_flag_t arg1 ; switch_bool_t arg2 ; @@ -5259,7 +5270,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_outgoing_channel(void * jarg1, void * jarg2, char * jarg3, void * jarg4, void * jarg5, void * jarg6, int jarg7) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_outgoing_channel(void * jarg1, void * jarg2, char * jarg3, void * jarg4, void * jarg5, void * jarg6, unsigned long jarg7) { int jresult ; switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; switch_event_t *arg2 = (switch_event_t *) 0 ; @@ -5407,7 +5418,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_read_frame(void * jarg1, void * jarg2, int jarg3, int jarg4) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_read_frame(void * jarg1, void * jarg2, unsigned long jarg3, int jarg4) { int jresult ; switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; switch_frame_t **arg2 = (switch_frame_t **) 0 ; @@ -5425,7 +5436,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_read_video_frame(void * jarg1, void * jarg2, int jarg3, int jarg4) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_read_video_frame(void * jarg1, void * jarg2, unsigned long jarg3, int jarg4) { int jresult ; switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; switch_frame_t **arg2 = (switch_frame_t **) 0 ; @@ -5443,7 +5454,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_write_video_frame(void * jarg1, void * jarg2, int jarg3, int jarg4) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_write_video_frame(void * jarg1, void * jarg2, unsigned long jarg3, int jarg4) { int jresult ; switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; switch_frame_t *arg2 = (switch_frame_t *) 0 ; @@ -5471,7 +5482,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_write_frame(void * jarg1, void * jarg2, int jarg3, int jarg4) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_session_write_frame(void * jarg1, void * jarg2, unsigned long jarg3, int jarg4) { int jresult ; switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; switch_frame_t *arg2 = (switch_frame_t *) 0 ; @@ -6542,12 +6553,12 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_core_flags() { - int jresult ; +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_core_flags() { + unsigned long jresult ; switch_core_flag_t result; result = (switch_core_flag_t)switch_core_flags(); - jresult = result; + jresult = (unsigned long)result; return jresult; } @@ -8118,7 +8129,7 @@ } -SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_flags_set(void * jarg1, int jarg2) { +SWIGEXPORT void SWIGSTDCALL CSharp_switch_caller_profile_flags_set(void * jarg1, unsigned long jarg2) { switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; switch_caller_profile_flag_t arg2 ; @@ -8129,14 +8140,14 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_caller_profile_flags_get(void * jarg1) { - int jresult ; +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_caller_profile_flags_get(void * jarg1) { + unsigned long jresult ; switch_caller_profile *arg1 = (switch_caller_profile *) 0 ; switch_caller_profile_flag_t result; arg1 = (switch_caller_profile *)jarg1; result = (switch_caller_profile_flag_t) ((arg1)->flags); - jresult = result; + jresult = (unsigned long)result; return jresult; } @@ -9069,7 +9080,7 @@ } -SWIGEXPORT void SWIGSTDCALL CSharp_switch_frame_flags_set(void * jarg1, int jarg2) { +SWIGEXPORT void SWIGSTDCALL CSharp_switch_frame_flags_set(void * jarg1, unsigned long jarg2) { switch_frame *arg1 = (switch_frame *) 0 ; switch_frame_flag_t arg2 ; @@ -9080,14 +9091,14 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_frame_flags_get(void * jarg1) { - int jresult ; +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_frame_flags_get(void * jarg1) { + unsigned long jresult ; switch_frame *arg1 = (switch_frame *) 0 ; switch_frame_flag_t result; arg1 = (switch_frame *)jarg1; result = (switch_frame_flag_t) ((arg1)->flags); - jresult = result; + jresult = (unsigned long)result; return jresult; } @@ -15203,7 +15214,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_wait_for_flag(void * jarg1, int jarg2, int jarg3, unsigned long jarg4) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_wait_for_flag(void * jarg1, unsigned long jarg2, int jarg3, unsigned long jarg4) { int jresult ; switch_channel_t *arg1 = (switch_channel_t *) 0 ; switch_channel_flag_t arg2 ; @@ -15541,7 +15552,7 @@ } -SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_channel_test_flag(void * jarg1, int jarg2) { +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_channel_test_flag(void * jarg1, unsigned long jarg2) { unsigned long jresult ; switch_channel_t *arg1 = (switch_channel_t *) 0 ; switch_channel_flag_t arg2 ; @@ -15555,7 +15566,7 @@ } -SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_flag(void * jarg1, int jarg2) { +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_flag(void * jarg1, unsigned long jarg2) { switch_channel_t *arg1 = (switch_channel_t *) 0 ; switch_channel_flag_t arg2 ; @@ -15565,7 +15576,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_set_flag_partner(void * jarg1, int jarg2) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_set_flag_partner(void * jarg1, unsigned long jarg2) { int jresult ; switch_channel_t *arg1 = (switch_channel_t *) 0 ; switch_channel_flag_t arg2 ; @@ -15579,7 +15590,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_clear_flag_partner(void * jarg1, int jarg2) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_channel_clear_flag_partner(void * jarg1, unsigned long jarg2) { int jresult ; switch_channel_t *arg1 = (switch_channel_t *) 0 ; switch_channel_flag_t arg2 ; @@ -15593,7 +15604,7 @@ } -SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_state_flag(void * jarg1, int jarg2) { +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_set_state_flag(void * jarg1, unsigned long jarg2) { switch_channel_t *arg1 = (switch_channel_t *) 0 ; switch_channel_flag_t arg2 ; @@ -15603,7 +15614,7 @@ } -SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_clear_flag(void * jarg1, int jarg2) { +SWIGEXPORT void SWIGSTDCALL CSharp_switch_channel_clear_flag(void * jarg1, unsigned long jarg2) { switch_channel_t *arg1 = (switch_channel_t *) 0 ; switch_channel_flag_t arg2 ; @@ -18357,7 +18368,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_eavesdrop_session(void * jarg1, char * jarg2, char * jarg3, int jarg4) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_eavesdrop_session(void * jarg1, char * jarg2, char * jarg3, unsigned long jarg4) { int jresult ; switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; char *arg2 = (char *) 0 ; @@ -18659,7 +18670,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_originate(void * jarg1, void * jarg2, void * jarg3, char * jarg4, unsigned long jarg5, void * jarg6, char * jarg7, char * jarg8, void * jarg9, int jarg10) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_originate(void * jarg1, void * jarg2, void * jarg3, char * jarg4, unsigned long jarg5, void * jarg6, char * jarg7, char * jarg8, void * jarg9, unsigned long jarg10) { int jresult ; switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; switch_core_session_t **arg2 = (switch_core_session_t **) 0 ; @@ -18805,7 +18816,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_media(char * jarg1, int jarg2) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_media(char * jarg1, unsigned long jarg2) { int jresult ; char *arg1 = (char *) 0 ; switch_media_flag_t arg2 ; @@ -18819,7 +18830,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_nomedia(char * jarg1, int jarg2) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_nomedia(char * jarg1, unsigned long jarg2) { int jresult ; char *arg1 = (char *) 0 ; switch_media_flag_t arg2 ; @@ -18889,7 +18900,7 @@ } -SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_ivr_schedule_broadcast(void * jarg1, char * jarg2, char * jarg3, int jarg4) { +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_ivr_schedule_broadcast(void * jarg1, char * jarg2, char * jarg3, unsigned long jarg4) { unsigned long jresult ; time_t arg1 ; char *arg2 = (char *) 0 ; @@ -18913,7 +18924,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_broadcast(char * jarg1, char * jarg2, int jarg3) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_broadcast(char * jarg1, char * jarg2, unsigned long jarg3) { int jresult ; char *arg1 = (char *) 0 ; char *arg2 = (char *) 0 ; @@ -19357,7 +19368,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_bind_dtmf_meta_session(void * jarg1, unsigned long jarg2, int jarg3, char * jarg4) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_ivr_bind_dtmf_meta_session(void * jarg1, unsigned long jarg2, unsigned long jarg3, char * jarg4) { int jresult ; switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; uint32_t arg2 ; @@ -19746,7 +19757,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_create(void * jarg1, unsigned char jarg2, unsigned long jarg3, unsigned long jarg4, int jarg5, char * jarg6, void * jarg7, void * jarg8) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_create(void * jarg1, unsigned char jarg2, unsigned long jarg3, unsigned long jarg4, unsigned long jarg5, char * jarg6, void * jarg7, void * jarg8) { int jresult ; switch_rtp_t **arg1 = (switch_rtp_t **) 0 ; switch_payload_t arg2 ; @@ -19772,7 +19783,7 @@ } -SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_new(char * jarg1, unsigned short jarg2, char * jarg3, unsigned short jarg4, unsigned char jarg5, unsigned long jarg6, unsigned long jarg7, int jarg8, char * jarg9, void * jarg10, void * jarg11) { +SWIGEXPORT void * SWIGSTDCALL CSharp_switch_rtp_new(char * jarg1, unsigned short jarg2, char * jarg3, unsigned short jarg4, unsigned char jarg5, unsigned long jarg6, unsigned long jarg7, unsigned long jarg8, char * jarg9, void * jarg10, void * jarg11) { void * jresult ; char *arg1 = (char *) 0 ; switch_port_t arg2 ; @@ -19916,7 +19927,7 @@ } -SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_set_flag(void * jarg1, int jarg2) { +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_set_flag(void * jarg1, unsigned long jarg2) { switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; switch_rtp_flag_t arg2 ; @@ -19926,7 +19937,7 @@ } -SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_rtp_test_flag(void * jarg1, int jarg2) { +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_rtp_test_flag(void * jarg1, unsigned long jarg2) { unsigned long jresult ; switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; switch_rtp_flag_t arg2 ; @@ -19940,7 +19951,7 @@ } -SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_clear_flag(void * jarg1, int jarg2) { +SWIGEXPORT void SWIGSTDCALL CSharp_switch_rtp_clear_flag(void * jarg1, unsigned long jarg2) { switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; switch_rtp_flag_t arg2 ; @@ -20016,7 +20027,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_read(void * jarg1, void * jarg2, void * jarg3, void * jarg4, void * jarg5, int jarg6) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_read(void * jarg1, void * jarg2, void * jarg3, void * jarg4, void * jarg5, unsigned long jarg6) { int jresult ; switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; void *arg2 = (void *) 0 ; @@ -20092,7 +20103,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_zerocopy_read(void * jarg1, void * jarg2, void * jarg3, void * jarg4, void * jarg5, int jarg6) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_zerocopy_read(void * jarg1, void * jarg2, void * jarg3, void * jarg4, void * jarg5, unsigned long jarg6) { int jresult ; switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; void **arg2 = (void **) 0 ; @@ -20114,7 +20125,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_zerocopy_read_frame(void * jarg1, void * jarg2, int jarg3) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_zerocopy_read_frame(void * jarg1, void * jarg2, unsigned long jarg3) { int jresult ; switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; switch_frame_t *arg2 = (switch_frame_t *) 0 ; @@ -20130,7 +20141,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_enable_vad(void * jarg1, void * jarg2, void * jarg3, int jarg4) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_rtp_enable_vad(void * jarg1, void * jarg2, void * jarg3, unsigned long jarg4) { int jresult ; switch_rtp_t *arg1 = (switch_rtp_t *) 0 ; switch_core_session_t *arg2 = (switch_core_session_t *) 0 ; @@ -21332,7 +21343,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_bind_search_function(void * jarg1, int jarg2, void * jarg3) { +SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_bind_search_function(void * jarg1, unsigned long jarg2, void * jarg3) { int jresult ; switch_xml_search_function_t arg1 = (switch_xml_search_function_t) 0 ; switch_xml_section_t arg2 ; @@ -21348,14 +21359,14 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_switch_xml_parse_section_string(char * jarg1) { - int jresult ; +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_xml_parse_section_string(char * jarg1) { + unsigned long jresult ; char *arg1 = (char *) 0 ; switch_xml_section_t result; arg1 = (char *)jarg1; result = (switch_xml_section_t)switch_xml_parse_section_string((char const *)arg1); - jresult = result; + jresult = (unsigned long)result; return jresult; } @@ -22935,7 +22946,7 @@ } -SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_scheduler_add_task(void * jarg1, void * jarg2, char * jarg3, char * jarg4, unsigned long jarg5, void * jarg6, int jarg7) { +SWIGEXPORT unsigned long SWIGSTDCALL CSharp_switch_scheduler_add_task(void * jarg1, void * jarg2, char * jarg3, char * jarg4, unsigned long jarg5, void * jarg6, unsigned long jarg7) { unsigned long jresult ; time_t arg1 ; switch_scheduler_func_t arg2 = (switch_scheduler_func_t) 0 ; @@ -24128,7 +24139,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_speak(void * jarg1, char * jarg2) { +SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_Speak(void * jarg1, char * jarg2) { int jresult ; CoreSession *arg1 = (CoreSession *) 0 ; char *arg2 = (char *) 0 ; @@ -24142,7 +24153,7 @@ } -SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_set_tts_parms(void * jarg1, char * jarg2, char * jarg3) { +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_SetTtsParameters(void * jarg1, char * jarg2, char * jarg3) { CoreSession *arg1 = (CoreSession *) 0 ; char *arg2 = (char *) 0 ; char *arg3 = (char *) 0 ; @@ -24294,7 +24305,7 @@ } -SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_setAutoHangup(void * jarg1, unsigned int jarg2) { +SWIGEXPORT int SWIGSTDCALL CSharp_CoreSession_SetAutoHangup(void * jarg1, unsigned int jarg2) { int jresult ; CoreSession *arg1 = (CoreSession *) 0 ; bool arg2 ; @@ -24320,6 +24331,40 @@ } +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_CoreSession_answered(void * jarg1) { + unsigned int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + bool result; + + arg1 = (CoreSession *)jarg1; + result = (bool)(arg1)->answered(); + jresult = result; + return jresult; +} + + +SWIGEXPORT unsigned int SWIGSTDCALL CSharp_CoreSession_mediaReady(void * jarg1) { + unsigned int jresult ; + CoreSession *arg1 = (CoreSession *) 0 ; + bool result; + + arg1 = (CoreSession *)jarg1; + result = (bool)(arg1)->mediaReady(); + jresult = result; + return jresult; +} + + +SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_waitForAnswer(void * jarg1, void * jarg2) { + CoreSession *arg1 = (CoreSession *) 0 ; + CoreSession *arg2 = (CoreSession *) 0 ; + + arg1 = (CoreSession *)jarg1; + arg2 = (CoreSession *)jarg2; + (arg1)->waitForAnswer(arg2); +} + + SWIGEXPORT void SWIGSTDCALL CSharp_CoreSession_Execute(void * jarg1, char * jarg2, char * jarg3) { CoreSession *arg1 = (CoreSession *) 0 ; char *arg2 = (char *) 0 ; Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/mod_mono.cpp ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/mod_mono.cpp (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/mod_mono.cpp Mon Aug 4 21:29:58 2008 @@ -33,7 +33,10 @@ */ #include - SWITCH_BEGIN_EXTERN_C + + +SWITCH_BEGIN_EXTERN_C + #include "freeswitch_mono.h" #include #include @@ -47,272 +50,489 @@ #define EXPORT __declspec(dllexport) #elif #define EXPORT -#endif /* */ +#endif /* + */ #define MOD_MONO_MANAGED_DLL "mod_mono_managed.dll" - mod_mono_globals globals = { -0}; - - SWITCH_MODULE_LOAD_FUNCTION(mod_mono_load); - SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_mono_shutdown); - SWITCH_MODULE_DEFINITION(mod_mono, mod_mono_load, mod_mono_shutdown, NULL); - SWITCH_STANDARD_API(monorun_api_function); /* ExecuteBackground */ - SWITCH_STANDARD_API(mono_api_function); /* Execute */ - SWITCH_STANDARD_APP(mono_app_function); /* Run */ - + +mod_mono_globals globals = { +0}; + + + +SWITCH_MODULE_LOAD_FUNCTION(mod_mono_load); + +SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_mono_shutdown); + +SWITCH_MODULE_DEFINITION(mod_mono, mod_mono_load, mod_mono_shutdown, NULL); + + +SWITCH_STANDARD_API(monorun_api_function); /* ExecuteBackground */ + +SWITCH_STANDARD_API(mono_api_function); /* Execute */ + +SWITCH_STANDARD_APP(mono_app_function); /* Run */ + + // Sets up delegates (and anything else needed) on the MonoSession object // Called via internalcall - SWITCH_MOD_DECLARE(void) InitMonoSession(MonoSession * session, MonoObject * dtmfDelegate, MonoObject * hangupDelegate) -{ - switch_assert(session); - if (!session) - return; - session->setDTMFCallback(NULL, ""); - session->setHangupHook(NULL); - session->dtmfDelegateHandle = mono_gchandle_new(dtmfDelegate, FALSE); - session->hangupDelegateHandle = mono_gchandle_new(hangupDelegate, FALSE); - } - switch_status_t setMonoDirs() -{ +SWITCH_MOD_DECLARE(void) InitMonoSession(MonoSession * session, MonoObject * dtmfDelegate, MonoObject * hangupDelegate) +{ + switch_assert(session); + if (!session) { + return; + } + session->setDTMFCallback(NULL, ""); + session->setHangupHook(NULL); + session->dtmfDelegateHandle = mono_gchandle_new(dtmfDelegate, FALSE); + session->hangupDelegateHandle = mono_gchandle_new(hangupDelegate, FALSE); +} + + +switch_status_t setMonoDirs() +{ #ifdef WIN32 /* Win32 Mono installs can't figure out their own path // Guys in #mono say we should just deploy all the libs we need // I think it's much nicer to let the user deal with installing Mono // and we'll just look for it in program files. */ - HANDLE hFind; - WIN32_FIND_DATA findData; - char progFilesPath[MAX_PATH]; - char findPath[MAX_PATH]; - SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, SHGFP_TYPE_CURRENT, progFilesPath); - switch_snprintf(findPath, MAX_PATH, "%s\\Mono-*", progFilesPath); - hFind = FindFirstFile(findPath, &findData); - if (hFind == INVALID_HANDLE_VALUE) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error looking for Mono in Program Files.\n"); - return SWITCH_STATUS_FALSE; - } - while ((findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY) { - if (FindNextFile(hFind, &findData) == 0) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not find Mono directory in Program Files.\n"); - FindClose(hFind); - return SWITCH_STATUS_FALSE; - } - } + HANDLE hFind; + +WIN32_FIND_DATA findData; + +char progFilesPath[MAX_PATH]; + +char findPath[MAX_PATH]; + +SHGetFolderPath(NULL, CSIDL_PROGRAM_FILES, NULL, SHGFP_TYPE_CURRENT, progFilesPath); + +switch_snprintf(findPath, MAX_PATH, "%s\\Mono-*", progFilesPath); + +hFind = FindFirstFile(findPath, &findData); + +if (hFind == INVALID_HANDLE_VALUE) { + +switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error looking for Mono in Program Files.\n"); + +return SWITCH_STATUS_FALSE; + +} + +while ((findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY) { + +if (FindNextFile(hFind, &findData) == 0) { + +switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not find Mono directory in Program Files.\n"); + +FindClose(hFind); + +return SWITCH_STATUS_FALSE; + +} + +} /* Got it */ - { - char libPath[MAX_PATH]; - char etcPath[MAX_PATH]; - switch_snprintf(libPath, MAX_PATH, "%s\\%s\\lib", progFilesPath, findData.cFileName); - switch_snprintf(etcPath, MAX_PATH, "%s\\%s\\etc", progFilesPath, findData.cFileName); - FindClose(hFind); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Using Mono paths '%s' and '%s'.\n", libPath, etcPath); - mono_set_dirs(libPath, etcPath); - return SWITCH_STATUS_SUCCESS; - } + { + +char libPath[MAX_PATH]; + +char etcPath[MAX_PATH]; + +switch_snprintf(libPath, MAX_PATH, "%s\\%s\\lib", progFilesPath, findData.cFileName); + +switch_snprintf(etcPath, MAX_PATH, "%s\\%s\\etc", progFilesPath, findData.cFileName); + +FindClose(hFind); + +switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Using Mono paths '%s' and '%s'.\n", libPath, etcPath); + +mono_set_dirs(libPath, etcPath); + +return SWITCH_STATUS_SUCCESS; + +} #elif // On other platforms, it should just work if it hasn't been relocated - mono_set_dirs(NULL, NULL); - return SWITCH_STATUS_SUCCESS; + mono_set_dirs(NULL, NULL); + +return SWITCH_STATUS_SUCCESS; -#endif /* */ -} - switch_status_t loadModMonoManaged() -{ +#endif /* + */ +} + + +switch_status_t loadModMonoManaged() +{ /* Find and load mod_mono_managed.exe */ - char filename[256]; - switch_snprintf(filename, 256, "%s%s%s", SWITCH_GLOBAL_dirs.mod_dir, SWITCH_PATH_SEPARATOR, MOD_MONO_MANAGED_DLL); - globals.domain = mono_jit_init(filename); - if (!globals.domain) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "mono_jit_init failed.\n"); - return SWITCH_STATUS_FALSE; - } - + char filename[256]; + +switch_snprintf(filename, 256, "%s%s%s", SWITCH_GLOBAL_dirs.mod_dir, SWITCH_PATH_SEPARATOR, MOD_MONO_MANAGED_DLL); + +globals.domain = mono_jit_init(filename); + + +if (!globals.domain) { + +switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "mono_jit_init failed.\n"); + +return SWITCH_STATUS_FALSE; + +} + + /* Open the assembly */ - globals.mod_mono_asm = mono_domain_assembly_open(globals.domain, filename); - if (!globals.mod_mono_asm) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "mono_domain_assembly_open failed.\n"); - return SWITCH_STATUS_FALSE; - } - return SWITCH_STATUS_SUCCESS; - } - - MonoMethod * getMethod(const char *name, MonoClass * klass) -{ - MonoMethodDesc * desc; - MonoMethod * method; - desc = mono_method_desc_new(name, TRUE); - method = mono_method_desc_search_in_class(desc, klass); - if (!method) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not find %s method.\n", name); - return NULL; - } - return method; - } - switch_status_t findLoader() -{ + globals.mod_mono_asm = mono_domain_assembly_open(globals.domain, filename); + +if (!globals.mod_mono_asm) { + +switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "mono_domain_assembly_open failed.\n"); + +return SWITCH_STATUS_FALSE; + +} + +return SWITCH_STATUS_SUCCESS; + +} + + + +MonoMethod * getMethod(const char *name, MonoClass * klass) +{ + +MonoMethodDesc * desc; + +MonoMethod * method; + +desc = mono_method_desc_new(name, TRUE); + +method = mono_method_desc_search_in_class(desc, klass); + +if (!method) { + +switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not find %s method.\n", name); + +return NULL; + +} + +return method; + +} + + +switch_status_t findLoader() +{ /* Find loader class and methods */ - MonoImage * img; - MonoClass * loaderClass; - img = mono_assembly_get_image(globals.mod_mono_asm); - loaderClass = mono_class_from_name(img, "FreeSWITCH", "Loader"); - if (!loaderClass) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not find FreeSWITCH.Loader class.\n"); - return SWITCH_STATUS_FALSE; - } - globals.loadMethod = getMethod("FreeSWITCH.Loader:Load()", loaderClass); - if (!globals.loadMethod) - return SWITCH_STATUS_FALSE; - globals.unloadMethod = getMethod("FreeSWITCH.Loader:Unload()", loaderClass); - if (!globals.unloadMethod) - return SWITCH_STATUS_FALSE; - globals.runMethod = getMethod("FreeSWITCH.Loader:Run(string,intptr)", loaderClass); - if (!globals.runMethod) - return SWITCH_STATUS_FALSE; - globals.executeMethod = getMethod("FreeSWITCH.Loader:Execute(string,intptr,intptr)", loaderClass); - if (!globals.executeMethod) - return SWITCH_STATUS_FALSE; - globals.executeBackgroundMethod = getMethod("FreeSWITCH.Loader:ExecuteBackground(string)", loaderClass); - if (!globals.executeBackgroundMethod) - return SWITCH_STATUS_FALSE; - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Found all loader functions.\n"); - return SWITCH_STATUS_SUCCESS; - } - - SWITCH_MODULE_LOAD_FUNCTION(mod_mono_load) -{ + MonoImage * img; + +MonoClass * loaderClass; + +img = mono_assembly_get_image(globals.mod_mono_asm); + +loaderClass = mono_class_from_name(img, "FreeSWITCH", "Loader"); + +if (!loaderClass) { + +switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Could not find FreeSWITCH.Loader class.\n"); + +return SWITCH_STATUS_FALSE; + +} + + +globals.loadMethod = getMethod("FreeSWITCH.Loader:Load()", loaderClass); + +if (!globals.loadMethod) + return SWITCH_STATUS_FALSE; + + +globals.unloadMethod = getMethod("FreeSWITCH.Loader:Unload()", loaderClass); + +if (!globals.unloadMethod) + return SWITCH_STATUS_FALSE; + + +globals.runMethod = getMethod("FreeSWITCH.Loader:Run(string,intptr)", loaderClass); + +if (!globals.runMethod) + return SWITCH_STATUS_FALSE; + + +globals.executeMethod = getMethod("FreeSWITCH.Loader:Execute(string,intptr,intptr)", loaderClass); + +if (!globals.executeMethod) + return SWITCH_STATUS_FALSE; + + +globals.executeBackgroundMethod = getMethod("FreeSWITCH.Loader:ExecuteBackground(string)", loaderClass); + +if (!globals.executeBackgroundMethod) + return SWITCH_STATUS_FALSE; + + +switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Found all loader functions.\n"); + +return SWITCH_STATUS_SUCCESS; + +} + + + +SWITCH_MODULE_LOAD_FUNCTION(mod_mono_load) +{ /* connect my internal structure to the blank pointer passed to me */ - *module_interface = switch_loadable_module_create_module_interface(pool, modname); - globals.pool = pool; - if (setMonoDirs() != SWITCH_STATUS_SUCCESS) { - return SWITCH_STATUS_FALSE; - } - if (loadModMonoManaged() != SWITCH_STATUS_SUCCESS) { - return SWITCH_STATUS_FALSE; - } - if (findLoader() != SWITCH_STATUS_SUCCESS) { - return SWITCH_STATUS_FALSE; - } - + *module_interface = switch_loadable_module_create_module_interface(pool, modname); + +globals.pool = pool; + + +if (setMonoDirs() != SWITCH_STATUS_SUCCESS) { + +return SWITCH_STATUS_FALSE; + +} + +if (loadModMonoManaged() != SWITCH_STATUS_SUCCESS) { + +return SWITCH_STATUS_FALSE; + +} + +if (findLoader() != SWITCH_STATUS_SUCCESS) { + +return SWITCH_STATUS_FALSE; + +} + + /* Not sure if this is necesary on the loading thread */ - mono_thread_attach(globals.domain); - mono_add_internal_call("FreeSWITCH.Native.MonoSession::InitMonoSession", InitMonoSession); - + mono_thread_attach(globals.domain); + +mono_add_internal_call("FreeSWITCH.Native.MonoSession::InitMonoSession", InitMonoSession); + + /* Run loader */ - MonoObject * objResult; - MonoObject * exception = NULL; - objResult = mono_runtime_invoke(globals.loadMethod, NULL, NULL, &exception); - if (exception) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Load threw an exception.\n"); - mono_print_unhandled_exception(exception); - return SWITCH_STATUS_FALSE; - } - if (*(int *) mono_object_unbox(objResult)) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Load completed successfully.\n"); - } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Load did not return true.\n"); - return SWITCH_STATUS_FALSE; - } - + MonoObject * objResult; + +MonoObject * exception = NULL; + +objResult = mono_runtime_invoke(globals.loadMethod, NULL, NULL, &exception); + +if (exception) { + +switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Load threw an exception.\n"); + +mono_print_unhandled_exception(exception); + +return SWITCH_STATUS_FALSE; + +} + +if (*(int *) mono_object_unbox(objResult)) { + +switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Load completed successfully.\n"); + +} else { + +switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Load did not return true.\n"); + +return SWITCH_STATUS_FALSE; + +} + + + /* We're good to register */ - switch_api_interface_t *api_interface; - switch_application_interface_t *app_interface; - SWITCH_ADD_API(api_interface, "monorun", "Run a module (ExecuteBackground)", monorun_api_function, " []"); - SWITCH_ADD_API(api_interface, "mono", "Run a module as an API function (Execute)", mono_api_function, " []"); - SWITCH_ADD_APP(app_interface, "mono", "Run Mono IVR", "Run a Mono IVR on a channel", mono_app_function, " []", SAF_NONE); - return SWITCH_STATUS_SUCCESS; - } - - SWITCH_STANDARD_API(monorun_api_function) -{ + switch_api_interface_t *api_interface; + +switch_application_interface_t *app_interface; + + +SWITCH_ADD_API(api_interface, "monorun", "Run a module (ExecuteBackground)", monorun_api_function, " []"); + +SWITCH_ADD_API(api_interface, "mono", "Run a module as an API function (Execute)", mono_api_function, " []"); + +SWITCH_ADD_APP(app_interface, "mono", "Run Mono IVR", "Run a Mono IVR on a channel", mono_app_function, " []", SAF_NONE); + + +return SWITCH_STATUS_SUCCESS; + +} + + + +SWITCH_STANDARD_API(monorun_api_function) +{ // TODO: Should we be detaching after all this? - mono_thread_attach(globals.domain); - if (switch_strlen_zero(cmd)) { - stream->write_function(stream, "-ERR no args specified!\n"); - return SWITCH_STATUS_SUCCESS; - } - + mono_thread_attach(globals.domain); + +if (switch_strlen_zero(cmd)) { + +stream->write_function(stream, "-ERR no args specified!\n"); + +return SWITCH_STATUS_SUCCESS; + +} + + // ExecuteBackground(string command) - void *args[1]; - args[0] = mono_string_new(globals.domain, cmd); - MonoObject * exception = NULL; - MonoObject * objResult = mono_runtime_invoke(globals.executeBackgroundMethod, NULL, args, &exception); - if (exception) { - stream->write_function(stream, "-ERR FreeSWITCH.Loader.ExecuteBackground threw an exception.\n"); - mono_print_unhandled_exception(exception); - return SWITCH_STATUS_SUCCESS; - } - if (*(int *) mono_object_unbox(objResult)) { - stream->write_function(stream, "+OK\n"); - } else { - stream->write_function(stream, "-ERR ExecuteBackground returned false (unknown module?).\n"); - } - return SWITCH_STATUS_SUCCESS; - } - - SWITCH_STANDARD_API(mono_api_function) -{ - mono_thread_attach(globals.domain); - if (switch_strlen_zero(cmd)) { - stream->write_function(stream, "-ERR no args specified!\n"); - return SWITCH_STATUS_SUCCESS; - } - + void *args[1]; + +args[0] = mono_string_new(globals.domain, cmd); + +MonoObject * exception = NULL; + +MonoObject * objResult = mono_runtime_invoke(globals.executeBackgroundMethod, NULL, args, &exception); + +if (exception) { + +stream->write_function(stream, "-ERR FreeSWITCH.Loader.ExecuteBackground threw an exception.\n"); + +mono_print_unhandled_exception(exception); + +return SWITCH_STATUS_SUCCESS; + +} + +if (*(int *) mono_object_unbox(objResult)) { + +stream->write_function(stream, "+OK\n"); + +} else { + +stream->write_function(stream, "-ERR ExecuteBackground returned false (unknown module?).\n"); + +} + +return SWITCH_STATUS_SUCCESS; + +} + + + +SWITCH_STANDARD_API(mono_api_function) +{ + +mono_thread_attach(globals.domain); + +if (switch_strlen_zero(cmd)) { + +stream->write_function(stream, "-ERR no args specified!\n"); + +return SWITCH_STATUS_SUCCESS; + +} + + // Method is: Execute(string command, IntPtr streamPtr, IntPtr eventPtr) - void *args[3]; - args[0] = mono_string_new(globals.domain, cmd); - args[1] = &stream; // Address of the arguments - args[2] = &(stream->param_event); - MonoObject * exception = NULL; - MonoObject * objResult = mono_runtime_invoke(globals.executeMethod, NULL, args, &exception); - if (exception) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Exception trying to execute mono %s.\n", cmd); - mono_print_unhandled_exception(exception); - } - if (!(*(int *) mono_object_unbox(objResult))) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Execute failed for %s (unknown module?).\n", cmd); - } - return SWITCH_STATUS_SUCCESS; - } - - SWITCH_STANDARD_APP(mono_app_function) -{ - mono_thread_attach(globals.domain); - if (switch_strlen_zero(data)) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No args specified!\n"); - } - + void *args[3]; + +args[0] = mono_string_new(globals.domain, cmd); + +args[1] = &stream; // Address of the arguments + args[2] = &(stream->param_event); + + +MonoObject * exception = NULL; + +MonoObject * objResult = mono_runtime_invoke(globals.executeMethod, NULL, args, &exception); + +if (exception) { + +switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Exception trying to execute mono %s.\n", cmd); + +mono_print_unhandled_exception(exception); + +} + +if (!(*(int *) mono_object_unbox(objResult))) { + +switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Execute failed for %s (unknown module?).\n", cmd); + +} + +return SWITCH_STATUS_SUCCESS; + +} + + + +SWITCH_STANDARD_APP(mono_app_function) +{ + +mono_thread_attach(globals.domain); + +if (switch_strlen_zero(data)) { + +switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No args specified!\n"); + +} + + // bool Run(string command, IntPtr sessionHandle) - void *args[2]; - args[0] = mono_string_new(globals.domain, data); - args[1] = &session; - MonoObject * exception = NULL; - MonoObject * objResult = mono_runtime_invoke(globals.runMethod, NULL, args, &exception); - if (exception) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Exception trying to execute application mono %s.\n", data); - mono_print_unhandled_exception(exception); - } - if (!(*(int *) mono_object_unbox(objResult))) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Application run failed for %s (unknown module?).\n", data); - } - } SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_mono_shutdown) -{ - mono_thread_attach(globals.domain); - MonoObject * ex; - mono_runtime_invoke(globals.unloadMethod, NULL, NULL, &ex); - if (ex) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Exception occurred in Loader::Unload.\n"); - mono_print_unhandled_exception(ex); - } - mono_runtime_set_shutting_down(); - mono_runtime_cleanup(globals.domain); - mono_runtime_quit(); - return SWITCH_STATUS_SUCCESS; - } - - SWITCH_END_EXTERN_C + void *args[2]; + +args[0] = mono_string_new(globals.domain, data); + +args[1] = &session; + + +MonoObject * exception = NULL; + +MonoObject * objResult = mono_runtime_invoke(globals.runMethod, NULL, args, &exception); + +if (exception) { + +switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Exception trying to execute application mono %s.\n", data); + +mono_print_unhandled_exception(exception); + +} + +if (!(*(int *) mono_object_unbox(objResult))) { + +switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Application run failed for %s (unknown module?).\n", data); + +} + +} + +SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_mono_shutdown) +{ + +mono_thread_attach(globals.domain); + +MonoObject * ex; + +mono_runtime_invoke(globals.unloadMethod, NULL, NULL, &ex); + +if (ex) { + +switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Exception occurred in Loader::Unload.\n"); + +mono_print_unhandled_exception(ex); + +} + +mono_runtime_set_shutting_down(); + +mono_runtime_cleanup(globals.domain); + +mono_runtime_quit(); + +return SWITCH_STATUS_SUCCESS; + +} + + + +SWITCH_END_EXTERN_C Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/mod_mono.vcproj ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/mod_mono.vcproj (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono/mod_mono.vcproj Mon Aug 4 21:29:58 2008 @@ -211,6 +211,10 @@ RelativePath=".\freeswitch.i" >
+ + Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/AppFunction.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/AppFunction.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/AppFunction.cs Mon Aug 4 21:29:58 2008 @@ -43,53 +43,6 @@ protected static void Unload() { } - void hangupCallback() - { - Log.WriteLine(LogLevel.Debug, "AppFunction is in hangupCallback."); - var f = HangupFunction; - if (f != null) f(); - } - - protected Action HangupFunction { get; set; } - - protected Func DtmfReceivedFunction { get; set; } - - protected Func EventReceivedFunction { get; set; } - - string inputCallback(IntPtr input, Native.switch_input_type_t inputType) - { - switch (inputType) { - case FreeSWITCH.Native.switch_input_type_t.SWITCH_INPUT_TYPE_DTMF: - using (var dtmf = new Native.switch_dtmf_t(input, false)) { - return dtmfCallback(dtmf); - } - case FreeSWITCH.Native.switch_input_type_t.SWITCH_INPUT_TYPE_EVENT: - using (var swevt = new Native.switch_event(input, false)) { - return eventCallback(swevt); - } - default: - return ""; - } - } - - string dtmfCallback(Native.switch_dtmf_t dtmf) - { - var f = DtmfReceivedFunction; - return f == null ? - "-ERR No DtmfReceivedFunction set." : - f(((char)(byte)dtmf.digit), TimeSpan.FromMilliseconds(dtmf.duration)); - } - - string eventCallback(Native.switch_event swevt) - { - using (var evt = new FreeSWITCH.Native.Event(swevt, 0)) { - var f = EventReceivedFunction; - return f == null ? - "-ERR No EventReceivedFunction set." : - f(evt); - } - } - protected Native.MonoSession Session { get; private set; } protected string Arguments { get; private set; } @@ -103,16 +56,51 @@ } } + /// Determines if the thread used for Run will have Abort called on it on hangup. Defaults to false. + protected virtual bool AbortOnHangup { get { return false; } } + bool abortable = false; + readonly object abortLock = new object(); + Thread runThread; + internal void AbortRun() + { + if (!AbortOnHangup) return; + if (runThread == Thread.CurrentThread) { + Log.WriteLine(LogLevel.Warning, "Thread will not be aborted because Hangup was called from the Run thread."); + return; + } + lock (abortLock) { + if (abortable) { + Log.WriteLine(LogLevel.Critical, "Aborting run thread."); + runThread.Abort(); + } + } + } + protected Guid Uuid { get; private set; } internal void RunInternal(FreeSWITCH.Native.MonoSession session, string args) { this.Session = session; this.Arguments = args; - Session.SetDelegates(this.inputCallback, this.hangupCallback); + Session.AppToAbort = this; try { this.Uuid = new Guid(Session.GetUuid()); } catch { } - Run(); + try { + runThread = Thread.CurrentThread; + lock (abortLock) abortable = true; + Run(); + } + catch (ThreadAbortException) { + Log.WriteLine(LogLevel.Critical, "Run thread aborted."); + Thread.ResetAbort(); + } + finally { + lock (abortLock) { abortable = false; } + if (runThread.ThreadState == ThreadState.AbortRequested) { + try { Thread.ResetAbort(); } + catch { } + } + } } protected abstract void Run(); Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/Demo.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/Demo.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/Demo.cs Mon Aug 4 21:29:58 2008 @@ -42,26 +42,25 @@ { new protected static bool Load() { - Log.WriteLine(LogLevel.Debug, "Inside AppDemo::Load."); + Log.WriteLine(LogLevel.Info, "Inside AppDemo::Load."); return true; } new protected static void Unload() { - Log.WriteLine(LogLevel.Debug, "Inside AppDemo::Unload."); + Log.WriteLine(LogLevel.Info, "Inside AppDemo::Unload."); } protected override void Run() { - HangupFunction = hangupHook; Session.Answer(); - this.DtmfReceivedFunction = (d, t) => { + Session.DtmfReceivedFunction = (d, t) => { Log.WriteLine(LogLevel.Info, "Received {0} for {1}.", d, t); return ""; }; - Log.WriteLine(LogLevel.Debug, "Inside AppDemo.Run (args '{0}'); HookState is {1}.", Arguments, Session.HookState); - Session.CollectDigits(5000); - if (!IsAvailable) return; // Hungup + Log.WriteLine(LogLevel.Info, "Inside AppDemo.Run (args '{0}'); HookState is {1}. Now will collect digits.", Arguments, Session.HookState); + Session.CollectDigits(5000); // Hanging up here will cause an abort and the next line won't be written + Log.WriteLine(LogLevel.Info, "AppDemo is finishing its run and will now hang up."); Session.Hangup("USER_BUSY"); } @@ -69,6 +68,8 @@ { Log.WriteLine(LogLevel.Debug, "AppDemo hanging up, UUID: {0}.", this.Uuid); } + + protected override bool AbortOnHangup { get { return true; } } } public class ApiDemo : ApiFunction Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/Loader.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/Loader.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/Loader.cs Mon Aug 4 21:29:58 2008 @@ -227,6 +227,8 @@ if (fType == null) return false; using (var session = new Native.MonoSession(new Native.SWIGTYPE_p_switch_core_session(sessionHandle, false))) { + session.Initialize(); + session.SetAutoHangup(false); try { var f = (AppFunction)Activator.CreateInstance(fType); f.RunInternal(session, args); Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/MonoSession.cs ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/MonoSession.cs (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/MonoSession.cs Mon Aug 4 21:29:58 2008 @@ -35,7 +35,7 @@ namespace FreeSWITCH.Native { - //switch_status_t MonoSession::run_dtmf_callback(void *input, switch_input_type_t itype) + // switch_status_t MonoSession::run_dtmf_callback(void *input, switch_input_type_t itype) // But, process_callback_result is used to turn a string into a switch_status_t using DtmfCallback = Func; public partial class MonoSession @@ -44,9 +44,69 @@ [System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)] static extern void InitMonoSession(IntPtr sessionPtr, DtmfCallback dtmfDelegate, Action hangupDelegate); - internal void SetDelegates(DtmfCallback dtmfCallback, Action hangupHook) + /// Initializes the native MonoSession. Must be called after Originate. + public void Initialize() { - InitMonoSession(MonoSession.getCPtr(this).Handle, dtmfCallback, hangupHook); + InitMonoSession(MonoSession.getCPtr(this).Handle, inputCallback, hangupCallback); } + + /// Function to execute when this session hangs up. + public Action HangupFunction { get; set; } + + /// Sets the application that should have it's run thread aborted (if enabled) when this session is hungup. + internal AppFunction AppToAbort { get; set; } + + void hangupCallback() + { + Log.WriteLine(LogLevel.Debug, "AppFunction is in hangupCallback."); + try { + if (AppToAbort != null) AppToAbort.AbortRun(); + var f = HangupFunction; + if (f != null) f(); + } + catch (Exception ex) { + Log.WriteLine(LogLevel.Warning, "Exception in hangupCallback: {0}", ex.ToString()); + throw; + } + } + + public Func DtmfReceivedFunction { get; set; } + + public Func EventReceivedFunction { get; set; } + + string inputCallback(IntPtr input, Native.switch_input_type_t inputType) + { + switch (inputType) { + case FreeSWITCH.Native.switch_input_type_t.SWITCH_INPUT_TYPE_DTMF: + using (var dtmf = new Native.switch_dtmf_t(input, false)) { + return dtmfCallback(dtmf); + } + case FreeSWITCH.Native.switch_input_type_t.SWITCH_INPUT_TYPE_EVENT: + using (var swevt = new Native.switch_event(input, false)) { + return eventCallback(swevt); + } + default: + return ""; + } + } + + string dtmfCallback(Native.switch_dtmf_t dtmf) + { + var f = DtmfReceivedFunction; + return f == null ? + "-ERR No DtmfReceivedFunction set." : + f(((char)(byte)dtmf.digit), TimeSpan.FromMilliseconds(dtmf.duration)); + } + + string eventCallback(Native.switch_event swevt) + { + using (var evt = new FreeSWITCH.Native.Event(swevt, 0)) { + var f = EventReceivedFunction; + return f == null ? + "-ERR No EventReceivedFunction set." : + f(evt); + } + } + } } Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/mod_mono_managed.csproj ============================================================================== --- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/mod_mono_managed.csproj (original) +++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_mono_managed/mod_mono_managed.csproj Mon Aug 4 21:29:58 2008 @@ -81,28 +81,28 @@ - - - + + - + + - + - + - - + + - + @@ -122,11 +122,11 @@ - - - - + + + + @@ -167,7 +167,6 @@ - @@ -175,7 +174,6 @@ - @@ -192,7 +190,6 @@ - @@ -203,59 +200,59 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -271,36 +268,36 @@ - + - + - - + + - - + + - + - + - + @@ -310,15 +307,15 @@ - + - - + + - +