[Freeswitch-svn] [commit] r8394 - in freeswitch/branches/lukedashjr/syslibs: freeswitch freeswitch/build freeswitch/build/config freeswitch/conf freeswitch/conf/autoload_configs freeswitch/conf/sip_profiles freeswitch/conf/sip_profiles/default freeswitch/conf/sip_profiles/external freeswitch/conf/sip_profiles/internal freeswitch/conf/sip_profiles/nat freeswitch/conf/sip_profiles/outbound freeswitch/debian freeswitch/debian/default freeswitch/docs freeswitch/scripts/contrib/jpalley freeswitch/scripts/contrib/trixter freeswitch/scripts/contrib/verifier/EventSocket/trunk/EventWatcher 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/SipEvents freeswitch/scripts/lua freeswitch/scripts/perl freeswitch/src freeswitch/src/include freeswitch/src/include/private freeswitch/src/mod/applications/mod_conference freeswitch/src/mod/applications/mod_dptools freeswitch/src/mod/applications/mod_esf freeswitch/src/mod/applications/mod_fifo freeswitch/src/mod/applications/mod_fsv freeswitch/src/mod/applications/mod_limit freeswitch/src/mod/applications/mod_rss freeswitch/src/mod/applications/mod_voicemail freeswitch/src/mod/endpoints/mod_alsa freeswitch/src/mod/endpoints/mod_dingaling freeswitch/src/mod/endpoints/mod_iax freeswitch/src/mod/endpoints/mod_portaudio freeswitch/src/mod/endpoints/mod_reference freeswitch/src/mod/endpoints/mod_sofia freeswitch/src/mod/endpoints/mod_wanpipe freeswitch/src/mod/endpoints/mod_wanpipe/libsangoma freeswitch/src/mod/endpoints/mod_woomera freeswitch/src/mod/event_handlers/mod_cdr_csv freeswitch/src/mod/event_handlers/mod_radius_cdr freeswitch/src/mod/formats/mod_local_stream freeswitch/src/mod/formats/mod_shout freeswitch/src/mod/languages/mod_java freeswitch/src/mod/languages/mod_java/src/org/freeswitch/swig freeswitch/src/mod/languages/mod_lua freeswitch/src/mod/languages/mod_perl freeswitch/src/mod/languages/mod_python freeswitch/src/mod/languages/mod_spidermonkey freeswitch/src/mod/languages/mod_spidermonkey_teletone freeswitch/src/mod/xml_int/mod_xml_cdr freeswitch/src/mod/xml_int/mod_xml_ldap freeswitch/w32/Setup libs/apr-iconv-1.1.1 libs/apr-util libs/apr-util/crypto libs/iax libs/sofia-sip libs/sofia-sip/libsofia-sip-ua/nta libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip libs/sofia-sip/libsofia-sip-ua/nua libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip libs/sofia-sip/libsofia-sip-ua/soa libs/sofia-sip/libsofia-sip-ua/su libs/sofia-sip/libsofia-sip-ua/tport libs/voipcodecs/src libs/win32/apr-iconv libs/win32/apr-util

Freeswitch SVN lukedashjr at freeswitch.org
Tue May 13 23:37:38 EDT 2008


Author: lukedashjr
Date: Tue May 13 23:37:33 2008
New Revision: 8394

Added:
   freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/external/
      - copied from r8393, /freeswitch/tags/1.0.rc5/conf/sip_profiles/external/
   freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/external.xml
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/conf/sip_profiles/external.xml
   freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/external/example.xml
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/conf/sip_profiles/external/example.xml
   freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/internal/
      - copied from r8393, /freeswitch/tags/1.0.rc5/conf/sip_profiles/internal/
   freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/internal.xml
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/conf/sip_profiles/internal.xml
   freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/internal/example.xml
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/conf/sip_profiles/internal/example.xml
   freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch-lang-it.install
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/debian/freeswitch-lang-it.install
   freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch-lua.conffiles
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/debian/freeswitch-lua.conffiles
   freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch-lua.install
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/debian/freeswitch-lua.install
   freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch-perl.conffiles
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/debian/freeswitch-perl.conffiles
   freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch-perl.install
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/debian/freeswitch-perl.install
   freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/jpalley/
      - copied from r8393, /freeswitch/tags/1.0.rc5/scripts/contrib/jpalley/
   freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/DeflectCmd.cs
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/DeflectCmd.cs
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/answer.h
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/src/mod/endpoints/mod_iax/answer.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/frame.h
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/src/mod/endpoints/mod_iax/frame.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/iax-client.h
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/src/mod/endpoints/mod_iax/iax-client.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/iax-mutex.c
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/src/mod/endpoints/mod_iax/iax-mutex.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/iax-mutex.h
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/src/mod/endpoints/mod_iax/iax-mutex.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/iax.c
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/src/mod/endpoints/mod_iax/iax.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/iax.h
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/src/mod/endpoints/mod_iax/iax.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/iax2-parser.c
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/src/mod/endpoints/mod_iax/iax2-parser.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/iax2-parser.h
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/src/mod/endpoints/mod_iax/iax2-parser.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/iax2.h
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/src/mod/endpoints/mod_iax/iax2.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/jitterbuf.c
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/src/mod/endpoints/mod_iax/jitterbuf.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/jitterbuf.h
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/src/mod/endpoints/mod_iax/jitterbuf.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/md5.c
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/src/mod/endpoints/mod_iax/md5.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/md5.h
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/src/mod/endpoints/mod_iax/md5.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/winpoop.h
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/src/mod/endpoints/mod_iax/winpoop.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/mod_lua.cpp
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/src/mod/languages/mod_lua/mod_lua.cpp
   freeswitch/branches/lukedashjr/syslibs/libs/voipcodecs/src/bit_operations.c
      - copied unchanged from r8393, /freeswitch/tags/1.0.rc5/libs/voipcodecs/src/bit_operations.c
Removed:
   freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/default/
   freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/default.xml
   freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/outbound/
   freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/outbound.xml
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/mod_lua.c
   freeswitch/branches/lukedashjr/syslibs/libs/apr-iconv-1.1.1/
   freeswitch/branches/lukedashjr/syslibs/libs/iax/
   freeswitch/branches/lukedashjr/syslibs/libs/win32/apr-iconv/
Modified:
   freeswitch/branches/lukedashjr/syslibs/freeswitch/Freeswitch.2008.sln
   freeswitch/branches/lukedashjr/syslibs/freeswitch/Freeswitch.sln
   freeswitch/branches/lukedashjr/syslibs/freeswitch/Makefile.am
   freeswitch/branches/lukedashjr/syslibs/freeswitch/build/config/ax_check_java.m4
   freeswitch/branches/lukedashjr/syslibs/freeswitch/build/modmake.rules.in
   freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/ivr.conf.xml
   freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/autoload_configs/switch.conf.xml
   freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/freeswitch.xml
   freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/nat/example.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/default/freeswitch
   freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/files
   freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch.conffiles
   freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/freeswitch.install
   freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/rules
   freeswitch/branches/lukedashjr/syslibs/freeswitch/docs/ChangeLog
   freeswitch/branches/lukedashjr/syslibs/freeswitch/freeswitch.spec
   freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/trixter/call-progress.pl
   freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/EventWatcher/CallManager.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/ChannelInfo.cs
   freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SendMsg.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/SipEvents/EventPresence.cs
   freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/lua/mwi_event.lua
   freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/perl/mwi_event.pl
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/private/switch_core_pvt.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_core.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_core_event_hook.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_cpp.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_event.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_ivr.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_module_interfaces.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_rtp.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_stun.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_types.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_conference/mod_conference.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_dptools/mod_dptools.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_esf/mod_esf.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_fifo/mod_fifo.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/applications/mod_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/endpoints/mod_alsa/mod_alsa.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_dingaling/mod_dingaling.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/Makefile
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/mod_iax.2008.vcproj
   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.vcproj
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_portaudio/mod_portaudio.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_portaudio/pa_ringbuffer.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_portaudio/pablio.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_reference/mod_reference.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/mod_sofia.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/mod_sofia.h
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/sofia.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/sofia_presence.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_sofia/sofia_reg.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_wanpipe/libsangoma/libsangoma.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_wanpipe/libsangoma/sangoma_pri.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_woomera/mod_woomera.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_cdr_csv/mod_cdr_csv.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/event_handlers/mod_radius_cdr/mod_radius_cdr.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_shout/layer3.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/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/mod_lua.2008.vcproj
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/mod_lua.vcproj
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/mod_lua_wrap.cpp
   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/freeswitch.py
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/mod_python_wrap.cpp
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/switch_swig_wrap.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_spidermonkey_teletone/mod_spidermonkey_teletone.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_ldap/Makefile
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_channel.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_event_hook.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_io.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_sqldb.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_state_machine.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_cpp.cpp
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_event.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_async.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_bridge.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_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_rtp.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_stun.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_time.c
   freeswitch/branches/lukedashjr/syslibs/freeswitch/w32/Setup/Setup.2008.vdproj
   freeswitch/branches/lukedashjr/syslibs/freeswitch/w32/Setup/Setup.vdproj
   freeswitch/branches/lukedashjr/syslibs/libs/apr-util/.update
   freeswitch/branches/lukedashjr/syslibs/libs/apr-util/build-outputs.mk
   freeswitch/branches/lukedashjr/syslibs/libs/apr-util/crypto/getuuid.c
   freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/.update
   freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nta/nta.c
   freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nta/nta_internal.h
   freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta.h
   freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua.c
   freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_notifier.c
   freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c
   freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.c
   freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.h
   freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c
   freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c
   freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua.h
   freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_simple.c
   freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_sip_events.c
   freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/soa/soa_static.c
   freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/soa/test_soa.c
   freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/su/su_log.c
   freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/tport/tport_tls.c
   freeswitch/branches/lukedashjr/syslibs/libs/voipcodecs/src/Makefile.am
   freeswitch/branches/lukedashjr/syslibs/libs/win32/apr-util/libaprutil.2008.vcproj
   freeswitch/branches/lukedashjr/syslibs/libs/win32/apr-util/libaprutil.vcproj

Log:
MERGE to: http://svn.freeswitch.org/svn/freeswitch/tags/1.0.rc5

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	Tue May 13 23:37:33 2008
@@ -125,9 +125,7 @@
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sip_profiles", "sip_profiles", "{8E2E8798-8B6F-4A55-8E4F-4E6FDE40ED26}"
 	ProjectSection(SolutionItems) = preProject
-		conf\sip_profiles\default.xml = conf\sip_profiles\default.xml
 		conf\sip_profiles\nat.xml = conf\sip_profiles\nat.xml
-		conf\sip_profiles\outbound.xml = conf\sip_profiles\outbound.xml
 	EndProjectSection
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lang", "lang", "{09455AA9-C243-4F16-A1A1-A016881A2765}"
@@ -390,7 +388,6 @@
 		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
 		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
 		{EEF031CB-FED8-451E-A471-91EC8D4F6750} = {EEF031CB-FED8-451E-A471-91EC8D4F6750}
-		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
 		{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}
 	EndProjectSection
 EndProject
@@ -410,7 +407,6 @@
 	ProjectSection(ProjectDependencies) = postProject
 		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
 		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
-		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E} = {5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}
 	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_PortAudio", "src\mod\endpoints\mod_portaudio\mod_PortAudio.2008.vcproj", "{5FD31A25-5D83-4794-8BEE-904DAD84CE71}"
@@ -542,8 +538,6 @@
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libilbc", "libs\codec\ilbc\libilbc.2008.vcproj", "{989BB874-7AF1-44CB-8E5C-CC8113D267E8}"
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libiax2", "libs\iax\libiax2.2008.vcproj", "{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}"
-EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdingaling", "libs\libdingaling\libdingaling.2008.vcproj", "{1906D736-08BD-4EE1-924F-B536249B9A54}"
 	ProjectSection(ProjectDependencies) = postProject
 		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
@@ -565,15 +559,9 @@
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libapr", "libs\win32\apr\libapr.2008.vcproj", "{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}"
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libapriconv", "libs\win32\apr-iconv\libapriconv.2008.vcproj", "{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}"
-	ProjectSection(ProjectDependencies) = postProject
-		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
-	EndProjectSection
-EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libaprutil", "libs\win32\apr-util\libaprutil.2008.vcproj", "{F057DA7F-79E5-4B00-845C-EF446EF055E3}"
 	ProjectSection(ProjectDependencies) = postProject
 		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
-		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
 	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libspeex", "libs\win32\speex\libspeex.2008.vcproj", "{1C469CDD-A3AF-4A94-A592-B2CF12F2D918}"
@@ -1043,12 +1031,6 @@
 		{989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Win32.ActiveCfg = Release|Win32
 		{989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Win32.Build.0 = Release|Win32
 		{989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|x64.ActiveCfg = Release|Win32
-		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}.Debug|Win32.ActiveCfg = Debug|Win32
-		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}.Debug|Win32.Build.0 = Debug|Win32
-		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}.Debug|x64.ActiveCfg = Debug|Win32
-		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}.Release|Win32.ActiveCfg = Release|Win32
-		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}.Release|Win32.Build.0 = Release|Win32
-		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}.Release|x64.ActiveCfg = Release|Win32
 		{1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Win32.ActiveCfg = Debug|Win32
 		{1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Win32.Build.0 = Debug|Win32
 		{1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|x64.ActiveCfg = Debug|Win32
@@ -1091,12 +1073,6 @@
 		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Win32.ActiveCfg = Release|Win32
 		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Win32.Build.0 = Release|Win32
 		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|x64.ActiveCfg = Release|Win32
-		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}.Debug|Win32.ActiveCfg = Debug|Win32
-		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}.Debug|Win32.Build.0 = Debug|Win32
-		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}.Debug|x64.ActiveCfg = Debug|Win32
-		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}.Release|Win32.ActiveCfg = Release|Win32
-		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}.Release|Win32.Build.0 = Release|Win32
-		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}.Release|x64.ActiveCfg = Release|Win32
 		{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Win32.ActiveCfg = Debug|Win32
 		{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Win32.Build.0 = Debug|Win32
 		{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|x64.ActiveCfg = Debug|Win32
@@ -1515,7 +1491,6 @@
 		{ACFD96F2-58AA-491D-B4C0-33BD0BD57FDE} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{89385C74-5860-4174-9CAF-A39E7C48909C} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{989BB874-7AF1-44CB-8E5C-CC8113D267E8} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
-		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{1906D736-08BD-4EE1-924F-B536249B9A54} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{EEF031CB-FED8-451E-A471-91EC8D4F6750} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
@@ -1523,7 +1498,6 @@
 		{1CED5987-A529-46DC-B30F-870D85FF9C94} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{50AD0E28-B8D7-4FCC-8FC3-599F6AC69761} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
-		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{1C469CDD-A3AF-4A94-A592-B2CF12F2D918} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{E727E8F6-935D-46FE-8B0E-37834748A0E3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/Freeswitch.sln
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/Freeswitch.sln	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/Freeswitch.sln	Tue May 13 23:37:33 2008
@@ -15,7 +15,6 @@
 		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
 		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
 		{EEF031CB-FED8-451E-A471-91EC8D4F6750} = {EEF031CB-FED8-451E-A471-91EC8D4F6750}
-		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
 		{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3}
 	EndProjectSection
 EndProject
@@ -35,7 +34,6 @@
 	ProjectSection(ProjectDependencies) = postProject
 		{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
 		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
-		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E} = {5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}
 	EndProjectSection
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_PortAudio", "src\mod\endpoints\mod_portaudio\mod_PortAudio.vcproj", "{5FD31A25-5D83-4794-8BEE-904DAD84CE71}"
@@ -193,8 +191,6 @@
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libilbc", "libs\codec\ilbc\libilbc.vcproj", "{989BB874-7AF1-44CB-8E5C-CC8113D267E8}"
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libiax2", "libs\iax\libiax2.vcproj", "{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}"
-EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libdingaling", "libs\libdingaling\libdingaling.vcproj", "{1906D736-08BD-4EE1-924F-B536249B9A54}"
 	ProjectSection(ProjectDependencies) = postProject
 		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3}
@@ -216,15 +212,9 @@
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libapr", "libs\win32\apr\libapr.vcproj", "{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}"
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libapriconv", "libs\win32\apr-iconv\libapriconv.vcproj", "{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}"
-	ProjectSection(ProjectDependencies) = postProject
-		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
-	EndProjectSection
-EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libaprutil", "libs\win32\apr-util\libaprutil.vcproj", "{F057DA7F-79E5-4B00-845C-EF446EF055E3}"
 	ProjectSection(ProjectDependencies) = postProject
 		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
-		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED}
 	EndProjectSection
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Downloads", "_Downloads", "{C120A020-773F-4EA3-923F-B67AF28B750D}"
@@ -1046,12 +1036,6 @@
 		{989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Win32.ActiveCfg = Release|Win32
 		{989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|Win32.Build.0 = Release|Win32
 		{989BB874-7AF1-44CB-8E5C-CC8113D267E8}.Release|x64.ActiveCfg = Release|Win32
-		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}.Debug|Win32.ActiveCfg = Debug|Win32
-		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}.Debug|Win32.Build.0 = Debug|Win32
-		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}.Debug|x64.ActiveCfg = Debug|Win32
-		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}.Release|Win32.ActiveCfg = Release|Win32
-		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}.Release|Win32.Build.0 = Release|Win32
-		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E}.Release|x64.ActiveCfg = Release|Win32
 		{1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Win32.ActiveCfg = Debug|Win32
 		{1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|Win32.Build.0 = Debug|Win32
 		{1906D736-08BD-4EE1-924F-B536249B9A54}.Debug|x64.ActiveCfg = Debug|Win32
@@ -1094,12 +1078,6 @@
 		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Win32.ActiveCfg = Release|Win32
 		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|Win32.Build.0 = Release|Win32
 		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF}.Release|x64.ActiveCfg = Release|Win32
-		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}.Debug|Win32.ActiveCfg = Debug|Win32
-		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}.Debug|Win32.Build.0 = Debug|Win32
-		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}.Debug|x64.ActiveCfg = Debug|Win32
-		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}.Release|Win32.ActiveCfg = Release|Win32
-		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}.Release|Win32.Build.0 = Release|Win32
-		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}.Release|x64.ActiveCfg = Release|Win32
 		{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Win32.ActiveCfg = Debug|Win32
 		{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|Win32.Build.0 = Debug|Win32
 		{F057DA7F-79E5-4B00-845C-EF446EF055E3}.Debug|x64.ActiveCfg = Debug|Win32
@@ -1503,7 +1481,6 @@
 		{EC3E5C7F-EE09-47E2-80FE-546363D14A98} = {B8F5B47B-8568-46EB-B320-64C17D2A98BC}
 		{89385C74-5860-4174-9CAF-A39E7C48909C} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{989BB874-7AF1-44CB-8E5C-CC8113D267E8} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
-		{5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{1906D736-08BD-4EE1-924F-B536249B9A54} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{EEF031CB-FED8-451E-A471-91EC8D4F6750} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
@@ -1511,7 +1488,6 @@
 		{1CED5987-A529-46DC-B30F-870D85FF9C94} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{50AD0E28-B8D7-4FCC-8FC3-599F6AC69761} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
-		{101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{F057DA7F-79E5-4B00-845C-EF446EF055E3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{1C469CDD-A3AF-4A94-A592-B2CF12F2D918} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}
 		{E727E8F6-935D-46FE-8B0E-37834748A0E3} = {EB910B0D-F27D-4B62-B67B-DE834C99AC5B}

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/Makefile.am
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/Makefile.am	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/Makefile.am	Tue May 13 23:37:33 2008
@@ -250,6 +250,10 @@
 
 sync:
 	svn update
+	$(MAKE) install
+
+speedy-sync:
+	svn update
 	$(MAKE) -j install
 
 update-clean: clean modwipe uninstall

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/build/config/ax_check_java.m4
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/build/config/ax_check_java.m4	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/build/config/ax_check_java.m4	Tue May 13 23:37:33 2008
@@ -9,9 +9,9 @@
 AC_DEFUN([AX_CHECK_JAVA],
 [
 AC_ARG_WITH([java],
-            AC_HELP_STRING([  --with-java=PFX], [prefix where 'java' is installed.]),
-            [with_java_prefix=$withval], 
-	    [with_java_prefix=${JAVA_INSTALL_PATH:-/usr/java/j2sdk1.4.1_01}])
+            [AC_HELP_STRING([--with-java=PFX], [prefix where 'java' is installed.])],
+            [with_java_prefix="$withval"], 
+	    [with_java_prefix="${JAVA_INSTALL_PATH:-/usr/java/j2sdk1.4.1_01}"])
 have_java='no'
 LIB_JAVA=''
 JAVA_FLAGS=''

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	Tue May 13 23:37:33 2008
@@ -87,7 +87,7 @@
 	@if test ! -f $@; then \
 	  if ! pwd | grep $(switch_srcdir)/src/mod ; then rulesdir=$(switch_srcdir) ; else rulesdir=../../../.. ; fi ; \
 	  echo BASE=$$rulesdir > Makefile ; \
-	  echo "include $(BASE)/build/modmake.rules" >> Makefile ; \
+	  echo 'include $$(BASE)/build/modmake.rules' >> Makefile ; \
 	fi ;
 
 LINK_OUTPUT_REDIR=> .libs/$(MODNAME).log || error="yes" ; \

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	Tue May 13 23:37:33 2008
@@ -10,11 +10,7 @@
           timeout ="10000"
 	  inter-digit-timeout="2000"
 	  max-failures="3"
-	  confirm-macro="demo_ivr_count"
-	  confirm-key="1"
-	  confirm-attempts="3"
-	  digit-len="4"
-	  >
+	  digit-len="4">
       <entry action="menu-exec-app" digits="1" param="bridge sofia/$${domain}/888 at conference.freeswitch.org"/>
       <entry action="menu-exec-app" digits="2" param="transfer 9996 XML default"/>    <!-- FS echo -->
       <entry action="menu-exec-app" digits="3" param="transfer 9999 XML default"/>    <!-- MOH -->
@@ -28,7 +24,8 @@
         greet-long="phrase:demo_ivr_sub_menu"
         greet-short="phrase:demo_ivr_sub_menu_short"
         invalid-sound="voicemail/vm-hello.wav"
-        exit-sound="voicemail/vm-goodbye.wav" timeout="15"
+        exit-sound="voicemail/vm-goodbye.wav"
+        timeout="15000"
         max-failures="3">
       <entry action="menu-top" digits="*"/>
      </menu>
@@ -45,7 +42,8 @@
           greet-long="say:Press 1 to join the conference, Press 2 to join the other conference"
           greet-short="say:Press 1 to join the conference, Press 2 to join the other conference"
           invalid-sound="say:invalid extension"
-          exit-sound="say:exit sound" timeout ="15"
+          exit-sound="say:exit sound"
+          timeout ="15000"
           max-failures="3">
       <entry action="menu-exit" digits="*"/>
       <entry action="menu-playback" digits="1" param="say:You pressed 1"/>

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	Tue May 13 23:37:33 2008
@@ -9,7 +9,7 @@
     <key name="6" value="reloadxml"/>
     <key name="7" value="console loglevel 0"/>
     <key name="8" value="console loglevel 7"/>
-    <key name="9" value="sofia status profile default"/>
+    <key name="9" value="sofia status profile internal"/>
     <key name="10" value="fsctl pause"/>
     <key name="11" value="fsctl resume"/>
     <key name="12" value="version"/>

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/freeswitch.xml
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/freeswitch.xml	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/freeswitch.xml	Tue May 13 23:37:33 2008
@@ -37,7 +37,7 @@
   <!-- phrases section (under development still) -->
   <section name="phrases" description="Speech Phrase Management">
     <macros>
-      <X-PRE-PROCESS cmd="include" data="lang/*/*.xml"/>
+      <X-PRE-PROCESS cmd="include" data="lang/en/*.xml"/>
     </macros>
   </section>
 

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/nat/example.xml
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/nat/example.xml	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/conf/sip_profiles/nat/example.xml	Tue May 13 23:37:33 2008
@@ -10,8 +10,6 @@
   <!--<param name="from-domain" value="asterlink.com"/>-->
   <!--/// account password *required* ///-->
   <!--<param name="password" value="2007"/>--> 
-  <!--/// replace the INVITE from user with the channel's caller-id ///-->
-  <!--<param name="caller-id-in-from" value="false"/>-->
   <!--/// extension for inbound calls: *optional* same as username, if blank ///-->
   <!--<param name="extension" value="cluecon"/>-->
   <!--/// proxy host: *optional* same as realm, if blank ///-->

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/configure.in
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/configure.in	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/configure.in	Tue May 13 23:37:33 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.rc4], BUG-REPORT-ADDRESS)
+AC_INIT([freeswitch], [1.0.rc5], BUG-REPORT-ADDRESS)
 AC_SUBST(SWITCH_VERSION_MAJOR, [1])
 AC_SUBST(SWITCH_VERSION_MINOR, [0])
-AC_SUBST(SWITCH_VERSION_MICRO, [rc4])
-AC_SUBST(SWITCH_VERSION_REVISION, [8261])
+AC_SUBST(SWITCH_VERSION_MICRO, [rc5])
+AC_SUBST(SWITCH_VERSION_REVISION, [8381])
 
 AC_CONFIG_FILES([src/include/switch_version.h.in:src/include/switch_version.h.template])
 
@@ -31,7 +31,8 @@
 AC_SUBST(switch_builddir)
 
 # Where to install the modules
-AC_ARG_WITH(modinstdir, [   --with-modinstdir (default=$prefix/mod)], modinstdir=$withval, modinstdir="${prefix}/mod")
+AC_ARG_WITH([modinstdir],
+	[AS_HELP_STRING([--with-modinstdir=DIR], [Install modules into this location (default: $prefix/mod)])], [modinstdir="$withval"], [modinstdir="${prefix}/mod"])
 
 AC_SUBST(modinstdir)
 AC_DEFINE_UNQUOTED([SWITCH_MOD_DIR],"${modinstdir}",[where to install the modules to])
@@ -64,12 +65,10 @@
 fi
 
 
-AM_CONDITIONAL([WANT_DEBUG],[test "${enable_debug}" = "yes"])
-
 # Optional Features
 
 AC_ARG_ENABLE(resample,
-[AC_HELP_STRING([--enable-resample],[build with embedded resampler])],[enable_resample="$enable_resample"],[enable_resample="yes"])
+[AC_HELP_STRING([--disable-resample],[build without embedded resampler])],[enable_resample="$enableval"],[enable_resample="yes"])
 
 # We should add checking for out of tree libresample here
 RESAMPLE_LIB=
@@ -142,9 +141,10 @@
     APR_ADDTO(SWITCH_AM_CFLAGS, -Werror)
 fi
 
-#  Enable debugging
+# Enable debugging (default: on)
+# (rename option if the default is changed)
 AC_ARG_ENABLE(debug,
-[AC_HELP_STRING([--enable-debug],[build with debug information])],[enable_debug="$enable_debug"],[enable_debug="yes"])
+[AC_HELP_STRING([--disable-debug],[build without debug information])],[enable_debug="$enableval"],[enable_debug="yes"])
 
 if test "${enable_debug}" = "yes"; then
         AC_DEFINE([DEBUG],[],[Enable extra debugging.])
@@ -157,6 +157,8 @@
 
 fi
 
+AM_CONDITIONAL([WANT_DEBUG],[test "${enable_debug}" = "yes"])
+
 
 # tweak platform specific flags
 case "$host" in
@@ -546,10 +548,10 @@
 
 
 AC_ARG_ENABLE(core-odbc-support,     
-	[  --enable-core-odbc-support         Compile with ODBC Support],,[enable_core_odbc_support="no"])
+	[AS_HELP_STRING([--enable-core-odbc-support], [Compile with ODBC Support])],,[enable_core_odbc_support="no"])
 
 AC_ARG_ENABLE(core-libedit-support,     
-	[  --disable-core-libedit-support         Compile without libedit Support],,[enable_core_libedit_support="yes"])
+	[AS_HELP_STRING([--disable-core-libedit-support], [Compile without libedit Support])], [enable_core_libedit_support="$enableval"], [enable_core_libedit_support="yes"])
 
 if test "$enable_core_libedit_support" = "yes" ; then
     AC_CHECK_LIB(ncurses, tgetent,,

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/changelog
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/changelog	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/changelog	Tue May 13 23:37:33 2008
@@ -1,3 +1,45 @@
+freeswitch (1.0~rc5-1) unstable; urgency=low
+
+   * 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
+
+ -- Michael Jerris <mike at jerris.com>  Tue, 13 May 2008 02:01:00 -0400
+
+freeswitch (1.0~8327) unstable; urgency=low
+
+  * Adding perl and lua separate packages
+  * Adding mod_voipcodecs
+
+ -- root <root at fs.navynet.it>  Tue,  6 May 2008 09:46:26 +0000
+
 freeswitch (1.0~rc4-1) unstable; urgency=low
    * Add tab completion in cli
      Add "inline" dialplan
@@ -31,6 +73,16 @@
      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"
 
  -- Michael Jerris <mike at jerris.com>  Wed, 23 Apr 2008 12:58:00 -0400
 

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/control
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/control	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/control	Tue May 13 23:37:33 2008
@@ -2,7 +2,7 @@
 Maintainer: Michal Bielicki <michal.bielicki at voiceworks.pl>
 Section: net
 Priority: extra
-Build-Depends: debhelper (>= 5), automake1.9, autoconf, libtool, unixodbc-dev, libasound2-dev, libcurl3-dev, libssl-dev, ncurses-dev
+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
 
 Package: freeswitch
@@ -17,18 +17,34 @@
  control the callflow.
 Homepage: http://www.freeswitch.org/
 
+Package: freeswitch-dev
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch
+Description: Development Package for the FreeSwitch open source telephony platform
+Homepage: http://www.freeswitch.org/
+
+
 Package: freeswitch-spidermonkey
 Architecture: any
 Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch
 Description: A Javascript engine for freeswitch
 Homepage: http://www.freeswitch.org/
 
-Package: freeswitch-dev
+Package: freeswitch-perl
 Architecture: any
 Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch
-Description: Development Package for the FreeSwitch open source telephony platform
+Description: A perl engine for freeswitch
 Homepage: http://www.freeswitch.org/
 
+Package: freeswitch-lua
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch
+Description: A lua engine for freeswitch
+Homepage: http://www.freeswitch.org/
+
+
+
+
 Package: freeswitch-codec-passthru-g7231
 Architecture: any
 Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch
@@ -47,6 +63,9 @@
 Description: Pass through g729 Codec support for the FreeSWITCH open source telephony platform
 Homepage: http://www.freeswitch.org/
 
+
+
+
 Package: freeswitch-lang-en
 Architecture: any
 Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch
@@ -64,3 +83,9 @@
 Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch
 Description: French language files for the FreeSWITCH open source telephony platform
 Homepage: http://www.freeswitch.org/
+
+Package: freeswitch-lang-it
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, freeswitch
+Description: Italian language files for the FreeSWITCH open source telephony platform
+Homepage: http://www.freeswitch.org/

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/default/freeswitch
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/default/freeswitch	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/default/freeswitch	Tue May 13 23:37:33 2008
@@ -3,4 +3,5 @@
 # start and stop of freeswitch
 
 # Enable initd (let init handle start and stop of freeswitch)
+
 USE_INIT="false"

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/files
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/files	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/files	Tue May 13 23:37:33 2008
@@ -1,9 +1,10 @@
-freeswitch_1.0~rc4-1_i386.deb net extra
-freeswitch-spidermonkey_1.0~rc4-1_i386.deb net extra
-freeswitch-dev_1.0~rc4-1_i386.deb net extra
-freeswitch-codec-passthru-g7231_1.0~rc4-1_i386.deb net extra
-freeswitch-codec-passthru-amr_1.0~rc4-1_i386.deb net extra
-freeswitch-codec-passthru-g729_1.0~rc4-1_i386.deb net extra
-freeswitch-lang-en_1.0~rc4-1_i386.deb net extra
-freeswitch-lang-de_1.0~rc4-1_i386.deb net extra
-freeswitch-lang-fr_1.0~rc4-1_i386.deb net extra
+freeswitch_1.0~rc5-1_i386.deb net extra
+freeswitch-spidermonkey_1.0~rc5-1_i386.deb net extra
+freeswitch-dev_1.0~rc5-1_i386.deb net extra
+freeswitch-codec-passthru-g7231_1.0~rc5-1_i386.deb net extra
+freeswitch-codec-passthru-amr_1.0~rc5-1_i386.deb net extra
+freeswitch-codec-passthru-g729_1.0~rc5-1_i386.deb net extra
+freeswitch-lang-en_1.0~rc5-1_i386.deb net extra
+freeswitch-lang-de_1.0~rc5-1_i386.deb net extra
+freeswitch-lang-fr_1.0~rc5-1_i386.deb net extra
+freeswitch-lang-it_1.0~rc5-1_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	Tue May 13 23:37:33 2008
@@ -1,15 +1,20 @@
-/opt/freeswitch/conf/dialplan/public.xml
-/opt/freeswitch/conf/dialplan/default.xml
 /opt/freeswitch/conf/vars.xml
 /opt/freeswitch/conf/mime.types
 /opt/freeswitch/conf/web-vm.tpl
 /opt/freeswitch/conf/tetris.ttml
-/opt/freeswitch/conf/sip_profiles/outbound.xml
+/opt/freeswitch/conf/fur_elise.ttml
+/opt/freeswitch/conf/voicemail.tpl
+/opt/freeswitch/conf/freeswitch.xml
+/opt/freeswitch/conf/extensions.conf
+/opt/freeswitch/conf/dialplan/public.xml
+/opt/freeswitch/conf/dialplan/default.xml
+/opt/freeswitch/conf/dialplan/features.xml
+/opt/freeswitch/conf/sip_profiles/external.xml
 /opt/freeswitch/conf/sip_profiles/nat.xml
 /opt/freeswitch/conf/sip_profiles/nat/example.xml
-/opt/freeswitch/conf/sip_profiles/default/example.xml
-/opt/freeswitch/conf/sip_profiles/default.xml
-/opt/freeswitch/conf/sip_profiles/outbound/example.xml
+/opt/freeswitch/conf/sip_profiles/internal/example.xml
+/opt/freeswitch/conf/sip_profiles/internal.xml
+/opt/freeswitch/conf/sip_profiles/external/example.xml
 /opt/freeswitch/conf/directory/default/1007.xml
 /opt/freeswitch/conf/directory/default/1001.xml
 /opt/freeswitch/conf/directory/default/1008.xml
@@ -33,10 +38,6 @@
 /opt/freeswitch/conf/directory/default/1016.xml
 /opt/freeswitch/conf/directory/default/1012.xml
 /opt/freeswitch/conf/directory/default.xml
-/opt/freeswitch/conf/fur_elise.ttml
-/opt/freeswitch/conf/voicemail.tpl
-/opt/freeswitch/conf/freeswitch.xml
-/opt/freeswitch/conf/extensions.conf
 /opt/freeswitch/conf/autoload_configs/ivr.conf.xml
 /opt/freeswitch/conf/autoload_configs/voicemail.conf.xml
 /opt/freeswitch/conf/autoload_configs/switch.conf.xml

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	Tue May 13 23:37:33 2008
@@ -2,6 +2,7 @@
 opt/freeswitch/bin/freeswitch
 opt/freeswitch/bin/scripts/*
 opt/freeswitch/lib/libfreeswitch*.so*
+opt/freeswitch/mod/mod_shout*
 opt/freeswitch/mod/mod_console.so*
 opt/freeswitch/mod/mod_expr.so*
 opt/freeswitch/mod/mod_rss.so*
@@ -35,19 +36,21 @@
 opt/freeswitch/mod/mod_xml_*.so*
 opt/freeswitch/mod/mod_fsv.so*
 opt/freeswitch/mod/mod_tone_stream.so*
-opt/freeswitch/conf/dialplan/public.xml
-opt/freeswitch/conf/dialplan/default.xml
-opt/freeswitch/conf/dialplan/extensions
 opt/freeswitch/conf/vars.xml
 opt/freeswitch/conf/mime.types
 opt/freeswitch/conf/web-vm.tpl
 opt/freeswitch/conf/tetris.ttml
-opt/freeswitch/conf/sip_profiles/outbound.xml
+opt/freeswitch/conf/fur_elise.ttml
+opt/freeswitch/conf/dialplan/public.xml
+opt/freeswitch/conf/dialplan/default.xml
+opt/freeswitch/conf/dialplan/features.xml
+opt/freeswitch/conf/dialplan/extensions
+opt/freeswitch/conf/sip_profiles/external.xml
 opt/freeswitch/conf/sip_profiles/nat.xml
 opt/freeswitch/conf/sip_profiles/nat/example.xml
-opt/freeswitch/conf/sip_profiles/default/example.xml
-opt/freeswitch/conf/sip_profiles/default.xml
-opt/freeswitch/conf/sip_profiles/outbound/example.xml
+opt/freeswitch/conf/sip_profiles/internal/example.xml
+opt/freeswitch/conf/sip_profiles/internal.xml
+opt/freeswitch/conf/sip_profiles/external/example.xml
 opt/freeswitch/conf/directory/default/1007.xml
 opt/freeswitch/conf/directory/default/1001.xml
 opt/freeswitch/conf/directory/default/1008.xml
@@ -71,7 +74,6 @@
 opt/freeswitch/conf/directory/default/1016.xml
 opt/freeswitch/conf/directory/default/1012.xml
 opt/freeswitch/conf/directory/default.xml
-opt/freeswitch/conf/fur_elise.ttml
 opt/freeswitch/conf/voicemail.tpl
 opt/freeswitch/conf/freeswitch.xml
 opt/freeswitch/conf/extensions.conf

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/rules
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/rules	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/debian/rules	Tue May 13 23:37:33 2008
@@ -9,20 +9,20 @@
 export DEB_DH_INSTALL_SOURCEDIR=debian/tmp
 export PASSTHRU_CODEC_MODULES=codecs/mod_g729 codecs/mod_g723_1 codecs/mod_amr
 export SPIDERMONKEY_MODULES=languages/mod_spidermonkey languages/mod_spidermonkey_core_db languages/mod_spidermonkey_odbc languages/mod_spidermonkey_socket languages/mod_spidermonkey_teletone
-export 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
+export 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 
 export ASR_TTS_MODULES=asr_tts/mod_openmrcp
-export CODECS_MODULES=codecs/mod_ilbc codecs/mod_h26x codecs/mod_speex mod_voipcodecs
+export CODECS_MODULES=codecs/mod_ilbc codecs/mod_h26x codecs/mod_speex codecs/mod_voipcodecs
 export DIALPLANS_MODULES=dialplans/mod_dialplan_asterisk dialplans/mod_dialplan_directory dialplans/mod_dialplan_xml
 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 FORMATS_MODULES=formats/mod_local_stream formats/mod_native_file formats/mod_sndfile formats/mod_tone_stream
-export LANGUAGES_MODULES=
+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
+export SAY_MODULES=say/mod_say_de say/mod_say_en say/mod_say_fr say/mod_say_it
 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 formats/mod_shout say/mod_say_it 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 say/mod_say_es say/mod_say_nl
 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)
@@ -53,10 +53,7 @@
 	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) \
-		CFLAGS="-D__VIA_HACK__" ${FEATURES}
+	./configure --prefix=/opt/freeswitch --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) ${FEATURES}
 
 configure: bootstrap.sh
 	AUTOCONF=${AUTOCONF} ./bootstrap.sh

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/docs/ChangeLog
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/docs/ChangeLog	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/docs/ChangeLog	Tue May 13 23:37:33 2008
@@ -1,3 +1,36 @@
+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
@@ -32,6 +65,16 @@
 	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)
 

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/freeswitch.spec
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/freeswitch.spec	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/freeswitch.spec	Tue May 13 23:37:33 2008
@@ -5,7 +5,7 @@
 Summary:      FreeSWITCH open source telephony platform
 License:      MPL
 Group:        Productivity/Telephony/Servers
-Version:      1.0.rc4
+Version:      1.0.rc5
 Release:      1
 URL:          http://www.freeswitch.org/
 Packager:     Michal Bielicki
@@ -250,7 +250,6 @@
 
 %postun
 %{?run_ldconfig:%run_ldconfig}
-%{__rm} -rf %{prefix}
 userdel freeswitch
 
 %clean

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/trixter/call-progress.pl
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/trixter/call-progress.pl	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/trixter/call-progress.pl	Tue May 13 23:37:33 2008
@@ -138,7 +138,7 @@
 	    } elsif (watchedChannel($myhash->{'channel-name'})) {
           if ($myhash->{'event-name'} eq "CHANNEL_ANSWER") {   ## deal with answers
             do_answer($myhash);
-          } elsif ($myhash->{'event-name'} eq "CHANNEL_STATE" && $myhash->{'channel-state'} eq "CS_RING") {
+          } elsif ($myhash->{'event-name'} eq "CHANNEL_STATE" && $myhash->{'channel-state'} eq "CS_ROUTING") {
             do_ring($myhash);
           } elsif ($myhash->{'event-name'} eq "CHANNEL_HANGUP") { ## last thing done on a channel
             do_hangup($myhash);

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/EventWatcher/CallManager.cs
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/EventWatcher/CallManager.cs	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/EventWatcher/CallManager.cs	Tue May 13 23:37:33 2008
@@ -60,7 +60,7 @@
             if (theEvent is EventPresenceIn)
             {
                 EventPresenceIn ep = (EventPresenceIn) theEvent;
-                //Channel-State: CS_RING
+                //Channel-State: CS_ROUTING
                 //Channel-Name: sofia/default/jonas%40192.168.1.102%3A5070
                 //Unique-ID: 2f87ba27-2f71-d64d-8c64-9966ee894eac
                 //Call-Direction: inbound
@@ -68,7 +68,7 @@
                 //Event-Name: PRESENCE_IN
                 CallState state = CallState.Unknown;
                 string destination = string.Empty;
-                if (ep.ChannelState.ChannelInfo.State == ChannelState.Ring)
+                if (ep.ChannelState.ChannelInfo.State == ChannelState.Routing)
                 {
                     if (IsInbound(ep))
                     {

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	Tue May 13 23:37:33 2008
@@ -1,77 +1,16 @@
 using System;
-using System.Collections.Generic;
-using System.Text;
 
 namespace FreeSwitch.EventSocket
 {
     public class EventChannelHangup : EventChannelState
     {
-        private Causes m_hangupCause;
+        private HangupCause _hangupCause;
 
-        public enum Causes
-        {
-            Success,
-            NoRouteTransitNet,
-            NoRouteDestination,
-            ChannelUnacceptable,
-            CallAwardedDelivered,
-            NormalClearing,
-            UserBusy,
-            NoUserResponse,
-            NoAnswer,
-            SubscriberAbsent,
-            CallRejected,
-            NumberChanged,
-            RedirectionToNewDestination,
-            ExchangeRoutingError,
-            DestinationOutOfOrder,
-            InvalidNumberFormat,
-            FacilityRejected,
-            ResponseToStatusEnquiry,
-            NormalUnspecified,
-            NormalCircuitCongestion,
-            NetworkOutOfOrder,
-            NormalTemporaryFailure,
-            SwitchCongestion,
-            AccessInfoDiscarded,
-            RequestedChanUnavail,
-            PreEmpted,
-            FacilityNotSubscribed,
-            OutgoingCallBarred,
-            IncomingCallBarred,
-            BearercapabilityNotauth,
-            BearercapabilityNotavail,
-            ServiceUnavailable,
-            ChanNotImplemented,
-            FacilityNotImplemented,
-            ServiceNotImplemented,
-            InvalidCallReference,
-            IncompatibleDestination,
-            InvalidMsgUnspecified,
-            MandatoryIeMissing,
-            MessageTypeNonexist,
-            WrongMessage,
-            IeNonexist,
-            InvalidIeContents,
-            WrongCallState,
-            RecoveryOnTimerExpire,
-            MandatoryIeLengthError,
-            ProtocolError,
-            Interworking,
-            OriginatorCancel,
-            Crash,
-            SystemShutdown,
-            LoseRace,
-            ManagerRequest,
-            BlindTransfer,
-            AttendedTransfer,
-            AllottedTimeout            
-        }
 
-        public Causes Cause
+        public HangupCause Cause
         {
-            get { return m_hangupCause; }
-            set { m_hangupCause = value; }
+            get { return _hangupCause; }
+            set { _hangupCause = value; }
         }
 
         public override bool ParseCommand(string name, string value)
@@ -79,7 +18,14 @@
             if (name == "hangupcause" || name == "hangup-cause")
             {
                 string cause = StringHelper.UpperCaseToCamelCase(value);
-                m_hangupCause = (Causes)Enum.Parse(typeof(Causes), cause);
+                try
+                {
+                    _hangupCause = (HangupCause)Enum.Parse(typeof(HangupCause), cause, true);
+                }
+                catch(ArgumentException)
+                {
+                    _hangupCause = HangupCause.Unknown;
+                }
             }
             else 
                 return base.ParseCommand(name, value);
@@ -88,4 +34,67 @@
         }
 
     }
+
+    public enum HangupCause
+    {
+        Success,
+        NoRouteTransitNet,
+        NoRouteDestination,
+        ChannelUnacceptable,
+        CallAwardedDelivered,
+        NormalClearing,
+        UserBusy,
+        NoUserResponse,
+        NoAnswer,
+        SubscriberAbsent,
+        CallRejected,
+        NumberChanged,
+        RedirectionToNewDestination,
+        ExchangeRoutingError,
+        DestinationOutOfOrder,
+        InvalidNumberFormat,
+        FacilityRejected,
+        ResponseToStatusEnquiry,
+        NormalUnspecified,
+        NormalCircuitCongestion,
+        NetworkOutOfOrder,
+        NormalTemporaryFailure,
+        SwitchCongestion,
+        AccessInfoDiscarded,
+        RequestedChanUnavail,
+        PreEmpted,
+        FacilityNotSubscribed,
+        OutgoingCallBarred,
+        IncomingCallBarred,
+        BearercapabilityNotauth,
+        BearercapabilityNotavail,
+        ServiceUnavailable,
+        ChanNotImplemented,
+        FacilityNotImplemented,
+        ServiceNotImplemented,
+        InvalidCallReference,
+        IncompatibleDestination,
+        InvalidMsgUnspecified,
+        MandatoryIeMissing,
+        MessageTypeNonexist,
+        WrongMessage,
+        IeNonexist,
+        InvalidIeContents,
+        WrongCallState,
+        RecoveryOnTimerExpire,
+        MandatoryIeLengthError,
+        ProtocolError,
+        Interworking,
+        OriginatorCancel,
+        Crash,
+        SystemShutdown,
+        LoseRace,
+        ManagerRequest,
+        BlindTransfer,
+        AttendedTransfer,
+        AllottedTimeout,
+        UnAllocated,
+        Unknown
+    }
+
 }

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	Tue May 13 23:37:33 2008
@@ -3,32 +3,32 @@
     #region enum ChannelState
     public enum ChannelState
     {
-        New,       // Channel is newly created 
-        Init,      // Channel has been initilized
-        Ring,      // Channel is looking for a dialplan
-        Transmit,  // Channel is in a passive transmit state
-        Execute,   // Channel is executing it's dialplan 
-        Loopback,  // Channel is in loopback
-        Hold,	  // Channel is on hold
-        Hibernate, // Channel is in a sleep state
-        Hangup,    // Channel is flagged for hangup and ready to end
-        Done,      // Channel is ready to be destroyed and out of the state machine
+        New,           // Channel is newly created 
+        Init,          // Channel has been initilized
+        Routing,       // Channel is looking for a dialplan
+        SoftExecute,   // Channel is in a passive transmit state
+        Execute,       // Channel is executing it's dialplan 
+        ExchangeMedia, // Channel is exchanging media
+        ConsumeMedia,  // Channel is consuming media
+        Hibernate,     // Channel is in a sleep state
+        Hangup,        // Channel is flagged for hangup and ready to end
+        Done,          // Channel is ready to be destroyed and out of the state machine
         Unknown
     }
     #endregion
 
     public class ChannelInfo
     {
-        private ChannelState m_state;
-        private int m_stateNumber;
+        private ChannelState _state;
+        private int _stateNumber;
         private string _profile;
-        private string m_address;
+        private string _address;
         private string _hostName;
-        private string m_protocol = string.Empty;
-        private string m_readCodecName;
-        private int m_readCodecRate;
-        private string m_writeCodecName;
-        private int m_writeCodecRate;
+        private string _protocol = string.Empty;
+        private string _readCodecName;
+        private int _readCodecRate;
+        private string _writeCodecName;
+        private int _writeCodecRate;
 
         /// <summary>
         /// Coded used to read information from the channel.
@@ -36,8 +36,8 @@
         /// </summary>
         public string ReadCodecName
         {
-            get { return m_readCodecName; }
-            set { m_readCodecName = value; }
+            get { return _readCodecName; }
+            set { _readCodecName = value; }
         }
 
         /// <summary>
@@ -46,8 +46,8 @@
         /// </summary>
         public int ReadCodecRate
         {
-            get { return m_readCodecRate; }
-            set { m_readCodecRate = value; }
+            get { return _readCodecRate; }
+            set { _readCodecRate = value; }
         }
 
         /// <summary>
@@ -56,8 +56,8 @@
         /// </summary>
         public string WriteCodecName
         {
-            get { return m_writeCodecName; }
-            set { m_writeCodecName = value; }
+            get { return _writeCodecName; }
+            set { _writeCodecName = value; }
         }
 
         /// <summary>
@@ -66,8 +66,8 @@
         /// </summary>
         public int WriteCodecRate
         {
-            get { return m_writeCodecRate; }
-            set { m_writeCodecRate = value; }
+            get { return _writeCodecRate; }
+            set { _writeCodecRate = value; }
         }
 
         /// <summary>
@@ -75,8 +75,8 @@
         /// </summary>
         public ChannelState State
         {
-            get { return m_state; }
-            set { m_state = value; }
+            get { return _state; }
+            set { _state = value; }
         }
 
         /// <summary>
@@ -84,8 +84,8 @@
         /// </summary>
         public int StateNumber
         {
-            get { return m_stateNumber; }
-            set { m_stateNumber = value; }
+            get { return _stateNumber; }
+            set { _stateNumber = value; }
         }
 
         /// <summary>
@@ -98,22 +98,22 @@
         /// <seealso cref="HostName"/>
         public string Name
         {
-            get { return m_protocol + "/" + _profile + "/" + m_address + "@" + _hostName; }
+            get { return _protocol + "/" + _profile + "/" + _address + "@" + _hostName; }
             set 
             { 
                 string[] bits = value.Split('/');
                 if (bits.Length == 3)
                 {
-                    m_protocol = bits[0];
+                    _protocol = bits[0];
                     _profile = bits[1];
                     string[] userParts = bits[2].Split('@');
                     if (userParts.Length == 2)
                     {
-                        m_address = userParts[0];
+                        _address = userParts[0];
                         HostName = userParts[1];
                     }
                     else
-                        m_address = bits[2];
+                        _address = bits[2];
                 }
                 
             }
@@ -133,8 +133,8 @@
         /// </summary>
         public string Address
         {
-            get { return m_address; }
-            set { m_address = value; }
+            get { return _address; }
+            set { _address = value; }
         }
 
         /// <summary>
@@ -165,7 +165,7 @@
         /// </summary>
         public string Protocol
         {
-            get { return m_protocol;  }
+            get { return _protocol;  }
         }
 
         public bool Parse(string name, string value)
@@ -173,25 +173,25 @@
             switch (name)
             {
                 case "channel-state":
-                    m_state = StateFromString(value);
+                    _state = StateFromString(value);
                     break;
                 case "channel-state-number":
-                    int.TryParse(value, out m_stateNumber);
+                    int.TryParse(value, out _stateNumber);
                     break;
                 case "channel-name":
                     Name = value;
                     break;
                 case "channel-read-codec-name":
-                    m_readCodecName = value;
+                    _readCodecName = value;
                     break;
                 case "channel-read-codec-rate":
-                    int.TryParse(value, out m_readCodecRate);
+                    int.TryParse(value, out _readCodecRate);
                     break;
                 case "channel-write-codec-name":
-                    m_writeCodecName = value;
+                    _writeCodecName = value;
                     break;
                 case "channel-write-codec-rate":
-                    int.TryParse(value, out m_writeCodecRate);
+                    int.TryParse(value, out _writeCodecRate);
                     break;
                 default:
                     return false;
@@ -205,11 +205,11 @@
             {
                 case "CS_NEW": return ChannelState.New;
                 case "CS_INIT": return ChannelState.Init;
-                case "CS_RING": return ChannelState.Ring;
-                case "CS_TRANSMIT": return ChannelState.Transmit;
+                case "CS_ROUTING": return ChannelState.Routing;
+                case "CS_SOFT_EXECUTE": return ChannelState.SoftExecute;
                 case "CS_EXECUTE": return ChannelState.Execute;
-                case "CS_LOOPBACK": return ChannelState.Loopback;
-                case "CS_HOLD": return ChannelState.Hold;
+                case "CS_EXCHANGE_MEDIA": return ChannelState.ExchangeMedia;
+                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;

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SendMsg.cs
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SendMsg.cs	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/contrib/verifier/EventSocket/trunk/FreeSwitchEventSocket/Commands/SendMsg.cs	Tue May 13 23:37:33 2008
@@ -1,3 +1,5 @@
+using System;
+
 namespace FreeSwitch.EventSocket.Commands
 {
     public abstract class SendMsg : CmdBase
@@ -7,11 +9,18 @@
 
         public SendMsg(string uuid)
         {
+            if (string.IsNullOrEmpty(uuid))
+                throw new ArgumentNullException("uuid");
             _uuid = uuid;
         }
 
         public SendMsg(string uuid, string callCommand)
         {
+            if (string.IsNullOrEmpty(uuid))
+                throw new ArgumentNullException("uuid");
+            if (string.IsNullOrEmpty(callCommand))
+                throw new ArgumentNullException("callCommand");
+
             _callCommand = callCommand;
             _uuid = uuid;
         }

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	Tue May 13 23:37:33 2008
@@ -54,6 +54,7 @@
     <Compile Include="Commands\AuthCommand.cs" />
     <Compile Include="Commands\CmdBase.cs" />
     <Compile Include="Commands\CommandReply.cs" />
+    <Compile Include="Commands\DeflectCmd.cs" />
     <Compile Include="Commands\ExecuteJavascript.cs" />
     <Compile Include="Commands\GetVariable.cs" />
     <Compile Include="Commands\HoldCmd.cs" />

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	Tue May 13 23:37:33 2008
@@ -34,7 +34,7 @@
         }
 
         /// <summary>
-        /// Caller is only specified on state CS_RING
+        /// Caller is only specified on state CS_ROUTING
         /// and not on CS_HANGUP
         /// </summary>
         public PartyInfo Caller

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/lua/mwi_event.lua
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/lua/mwi_event.lua	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/lua/mwi_event.lua	Tue May 13 23:37:33 2008
@@ -5,4 +5,5 @@
 local event = freeswitch.Event("message_waiting");
 event:addHeader("MWI-Messages-Waiting", "no");
 event:addHeader("MWI-Message-Account", "sip:1000 at 10.0.1.100");
+-- event:addHeader("Sofia-Profile", "internal");
 event:fire();

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/perl/mwi_event.pl
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/perl/mwi_event.pl	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/scripts/perl/mwi_event.pl	Tue May 13 23:37:33 2008
@@ -3,6 +3,9 @@
 freeswitch::console_log("info", "Perl in da house!!!\n");
 
 $event = new freeswitch::Event("message_waiting");
-$event->add_header("MWI-Messages-Waiting", "yes");
-$event->add_header("MWI-Message-Account", 'sip:1002 at 10.0.1.100');
+$event->addHeader("MWI-Messages-Waiting", "yes");
+$event->addHeader("MWI-Message-Account", 'sip:1002 at 10.0.1.100');
+
+#$event->addHeader("Sofia-Profile", 'internal');
+
 $event->fire();

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	Tue May 13 23:37:33 2008
@@ -186,6 +186,8 @@
 	char *mailer_app_args;
 	uint32_t max_dtmf_duration;
 	uint32_t default_dtmf_duration;
+	switch_frame_t dummy_cng_frame;
+	char dummy_data[5];
 };
 
 extern struct switch_runtime runtime;

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	Tue May 13 23:37:33 2008
@@ -809,10 +809,10 @@
   \param stream_id which logical media channel to use
   \return SWITCH_STATUS_SUCCESS a the frame was read
 */
-SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(_In_ switch_core_session_t *session, switch_frame_t **frame, int timeout, int stream_id);
+SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(_In_ switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id);
 
-SWITCH_DECLARE(switch_status_t) switch_core_session_read_video_frame(_In_ switch_core_session_t *session, switch_frame_t **frame, int timeout, int stream_id);
-SWITCH_DECLARE(switch_status_t) switch_core_session_write_video_frame(_In_ switch_core_session_t *session, switch_frame_t *frame, int timeout, int stream_id);
+SWITCH_DECLARE(switch_status_t) switch_core_session_read_video_frame(_In_ switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id);
+SWITCH_DECLARE(switch_status_t) switch_core_session_write_video_frame(_In_ switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id);
 
 /*! 
   \brief Reset the buffers and resampler on a session
@@ -828,7 +828,7 @@
   \param stream_id which logical media channel to use
   \return SWITCH_STATUS_SUCCESS a the frame was written
 */
-SWITCH_DECLARE(switch_status_t) switch_core_session_write_frame(_In_ switch_core_session_t *session, switch_frame_t *frame, int timeout, int stream_id);
+SWITCH_DECLARE(switch_status_t) switch_core_session_write_frame(_In_ switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id);
 
 
 SWITCH_DECLARE(switch_status_t) switch_core_session_perform_kill_channel(_In_ switch_core_session_t *session,
@@ -842,24 +842,6 @@
 #define switch_core_session_kill_channel(session, sig) switch_core_session_perform_kill_channel(session, __FILE__, __SWITCH_FUNC__, __LINE__, sig)
 
 /*! 
-  \brief Wait for a session to be ready for input
-  \param session session to wait for
-  \param timeout number of milliseconds to wait for data
-  \param stream_id which logical media channel to use
-  \return SWITCH_STATUS_SUCCESS if data is available for read within timeframe specified
-*/
-SWITCH_DECLARE(switch_status_t) switch_core_session_waitfor_read(_In_ switch_core_session_t *session, int timeout, int stream_id);
-
-/*! 
-  \brief Wait for a session to be ready for output
-  \param session session to wait for
-  \param timeout number of milliseconds to wait for data
-  \param stream_id which logical media channel to use
-  \return SWITCH_STATUS_SUCCESS if the session is available for write within timeframe specified
-*/
-SWITCH_DECLARE(switch_status_t) switch_core_session_waitfor_write(_In_ switch_core_session_t *session, int timeout, int stream_id);
-
-/*! 
   \brief Send DTMF to a session
   \param session session to send DTMF to
   \param dtmf string to send to the session

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_core_event_hook.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_core_event_hook.h	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/include/switch_core_event_hook.h	Tue May 13 23:37:33 2008
@@ -43,8 +43,6 @@
 typedef struct switch_io_event_hook_write_frame switch_io_event_hook_write_frame_t;
 typedef struct switch_io_event_hook_video_write_frame switch_io_event_hook_video_write_frame_t;
 typedef struct switch_io_event_hook_kill_channel switch_io_event_hook_kill_channel_t;
-typedef struct switch_io_event_hook_waitfor_read switch_io_event_hook_waitfor_read_t;
-typedef struct switch_io_event_hook_waitfor_write switch_io_event_hook_waitfor_write_t;
 typedef struct switch_io_event_hook_send_dtmf switch_io_event_hook_send_dtmf_t;
 typedef struct switch_io_event_hook_recv_dtmf switch_io_event_hook_recv_dtmf_t;
 typedef struct switch_io_event_hook_state_change switch_io_event_hook_state_change_t;
@@ -53,13 +51,11 @@
 (switch_core_session_t *, switch_caller_profile_t *, switch_core_session_t *, switch_originate_flag_t);
 typedef switch_status_t (*switch_receive_message_hook_t) (switch_core_session_t *, switch_core_session_message_t *);
 typedef switch_status_t (*switch_receive_event_hook_t) (switch_core_session_t *, switch_event_t *);
-typedef switch_status_t (*switch_read_frame_hook_t) (switch_core_session_t *, switch_frame_t **, int, switch_io_flag_t, int);
-typedef switch_status_t (*switch_video_read_frame_hook_t) (switch_core_session_t *, switch_frame_t **, int, switch_io_flag_t, int);
-typedef switch_status_t (*switch_write_frame_hook_t) (switch_core_session_t *, switch_frame_t *, int, switch_io_flag_t, int);
-typedef switch_status_t (*switch_video_write_frame_hook_t) (switch_core_session_t *, switch_frame_t *, int, switch_io_flag_t, int);
+typedef switch_status_t (*switch_read_frame_hook_t) (switch_core_session_t *, switch_frame_t **, switch_io_flag_t, int);
+typedef switch_status_t (*switch_video_read_frame_hook_t) (switch_core_session_t *, switch_frame_t **, switch_io_flag_t, int);
+typedef switch_status_t (*switch_write_frame_hook_t) (switch_core_session_t *, switch_frame_t *, switch_io_flag_t, int);
+typedef switch_status_t (*switch_video_write_frame_hook_t) (switch_core_session_t *, switch_frame_t *, switch_io_flag_t, int);
 typedef switch_status_t (*switch_kill_channel_hook_t) (switch_core_session_t *, int);
-typedef switch_status_t (*switch_waitfor_read_hook_t) (switch_core_session_t *, int, int);
-typedef switch_status_t (*switch_waitfor_write_hook_t) (switch_core_session_t *, int, int);
 typedef switch_status_t (*switch_send_dtmf_hook_t) (switch_core_session_t *, const switch_dtmf_t *);
 typedef switch_status_t (*switch_recv_dtmf_hook_t) (switch_core_session_t *, const switch_dtmf_t *);
 typedef switch_status_t (*switch_state_change_hook_t) (switch_core_session_t *);
@@ -120,20 +116,6 @@
 	struct switch_io_event_hook_kill_channel *next;
 };
 
-/*! \brief Node in which to store custom waitfor read channel callback hooks */
-struct switch_io_event_hook_waitfor_read {
-	/*! the waitfor read channel callback hook */
-	switch_waitfor_read_hook_t waitfor_read;
-	struct switch_io_event_hook_waitfor_read *next;
-};
-
-/*! \brief Node in which to store custom waitfor write channel callback hooks */
-struct switch_io_event_hook_waitfor_write {
-	/*! the waitfor write channel callback hook */
-	switch_waitfor_write_hook_t waitfor_write;
-	struct switch_io_event_hook_waitfor_write *next;
-};
-
 /*! \brief Node in which to store custom send dtmf channel callback hooks */
 struct switch_io_event_hook_send_dtmf {
 	/*! the send dtmf channel callback hook */
@@ -179,10 +161,6 @@
 	switch_io_event_hook_video_write_frame_t *video_write_frame;
 	/*! a list of kill channel hooks */
 	switch_io_event_hook_kill_channel_t *kill_channel;
-	/*! a list of wait for read hooks */
-	switch_io_event_hook_waitfor_read_t *waitfor_read;
-	/*! a list of wait for write hooks */
-	switch_io_event_hook_waitfor_write_t *waitfor_write;
 	/*! a list of send dtmf hooks */
 	switch_io_event_hook_send_dtmf_t *send_dtmf;
 	/*! a list of recv dtmf hooks */
@@ -244,8 +222,6 @@
 NEW_HOOK_DECL_ADD_P(video_read_frame);
 NEW_HOOK_DECL_ADD_P(video_write_frame);
 NEW_HOOK_DECL_ADD_P(kill_channel);
-NEW_HOOK_DECL_ADD_P(waitfor_read);
-NEW_HOOK_DECL_ADD_P(waitfor_write);
 NEW_HOOK_DECL_ADD_P(send_dtmf);
 NEW_HOOK_DECL_ADD_P(recv_dtmf);
 NEW_HOOK_DECL_ADD_P(resurrect_session);
@@ -259,8 +235,6 @@
 NEW_HOOK_DECL_REM_P(video_read_frame);
 NEW_HOOK_DECL_REM_P(video_write_frame);
 NEW_HOOK_DECL_REM_P(kill_channel);
-NEW_HOOK_DECL_REM_P(waitfor_read);
-NEW_HOOK_DECL_REM_P(waitfor_write);
 NEW_HOOK_DECL_REM_P(send_dtmf);
 NEW_HOOK_DECL_REM_P(recv_dtmf);
 NEW_HOOK_DECL_REM_P(resurrect_session);

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	Tue May 13 23:37:33 2008
@@ -14,7 +14,7 @@
 
 #define sanity_check(x) do { if (!(session && allocated)) { switch_log_printf(SWITCH_CHANNEL_LOG,SWITCH_LOG_ERROR, "session is not initalized\n"); return x;}} while(0)
 #define sanity_check_noreturn do { if (!(session && allocated)) { switch_log_printf(SWITCH_CHANNEL_LOG,SWITCH_LOG_ERROR, "session is not initalized\n"); return;}} while(0)
-#define init_vars() do { session = NULL; channel = NULL; uuid = NULL; tts_name = NULL; voice_name = NULL; memset(&args, 0, sizeof(args)); ap = NULL; caller_profile.source = "mod_unknown";  caller_profile.dialplan = ""; caller_profile.context = ""; caller_profile.caller_id_name = ""; caller_profile.caller_id_number = ""; caller_profile.network_addr = ""; caller_profile.ani = ""; caller_profile.aniii = ""; caller_profile.rdnis = "";  caller_profile.username = ""; on_hangup = NULL; memset(&cb_state, 0, sizeof(cb_state)); hook_state = CS_NEW; } while(0)
+#define init_vars() do { 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)
 
 
 //
@@ -144,7 +144,7 @@
 	SWITCH_DECLARE(bool) setPriority(switch_priority_t priority = SWITCH_PRIORITY_NORMAL);
 	SWITCH_DECLARE(char *)getHeader(char *header_name);
 	SWITCH_DECLARE(char *)getBody(void);
-	SWITCH_DECLARE(char *)getType(void);
+	SWITCH_DECLARE(const char *)getType(void);
 	SWITCH_DECLARE(bool) addBody(const char *value);
 	SWITCH_DECLARE(bool) addHeader(const char *header_name, const char *value);
 	SWITCH_DECLARE(bool) delHeader(const char *header_name);
@@ -160,6 +160,7 @@
 	switch_input_args_t *ap;  // ptr to args .. (is this really needed?)
 	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;
@@ -168,12 +169,12 @@
 	switch_file_handle_t local_fh;
 	switch_file_handle_t *fhp;
 	char dtmf_buf[512];
-	SWITCH_DECLARE(switch_status_t) process_callback_result(char *ret);
+
  public:
 	SWITCH_DECLARE_CONSTRUCTOR CoreSession();
 	SWITCH_DECLARE_CONSTRUCTOR CoreSession(char *uuid);
 	SWITCH_DECLARE_CONSTRUCTOR CoreSession(switch_core_session_t *new_session);
-	virtual SWITCH_DECLARE_CONSTRUCTOR ~CoreSession();
+	SWITCH_DECLARE_CONSTRUCTOR ~CoreSession();
 	switch_core_session_t *session;
 	switch_channel_t *channel;
 	unsigned int flags;
@@ -184,12 +185,12 @@
 
 	SWITCH_DECLARE(int) answer();
 	SWITCH_DECLARE(int) preAnswer();
-	virtual SWITCH_DECLARE(void) hangup(char *cause = "normal_clearing");
+	SWITCH_DECLARE(void) hangup(char *cause = "normal_clearing");
 	SWITCH_DECLARE(void) setVariable(char *var, char *val);
 	SWITCH_DECLARE(void) setPrivate(char *var, void *val);
 	SWITCH_DECLARE(void *)getPrivate(char *var);
 	SWITCH_DECLARE(const char *)getVariable(char *var);
-	
+	SWITCH_DECLARE(switch_status_t) process_callback_result(char *ret);	
 
 	/** \brief Record to a file
 	 * \param filename 
@@ -309,6 +310,9 @@
 
 	SWITCH_DECLARE(void) sendEvent(Event *sendME);
 
+	SWITCH_DECLARE(void) setEventData(Event *e);
+	SWITCH_DECLARE(char *) getXMLCDR();
+
 	virtual bool begin_allow_threads() = 0;
 	virtual bool end_allow_threads() = 0;
 

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	Tue May 13 23:37:33 2008
@@ -158,6 +158,8 @@
 */
 _Ret_opt_z_ SWITCH_DECLARE(char *) switch_event_get_header(switch_event_t *event, char *header_name);
 
+#define switch_event_get_header_nil(e, h) switch_str_nil(switch_event_get_header(e,h))
+
 /*!
   \brief Retrieve the body value from an event
   \param event the event to read the body from
@@ -230,7 +232,7 @@
   \param event the event id to render the name of
   \return the rendered name
 */
-SWITCH_DECLARE(char *) switch_event_name(switch_event_types_t event);
+SWITCH_DECLARE(const char *) switch_event_name(switch_event_types_t event);
 
 /*!
   \brief return the event id that matches a given event name

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	Tue May 13 23:37:33 2008
@@ -756,7 +756,10 @@
 																  switch_bool_t dial_b, switch_bool_t exec_b, const char *app);
 SWITCH_DECLARE(switch_status_t) switch_ivr_unbind_dtmf_meta_session(switch_core_session_t *session);
 SWITCH_DECLARE(switch_status_t) switch_ivr_soft_hold(switch_core_session_t *session, const char *unhold_key, const char *moh_a, const char *moh_b);
+SWITCH_DECLARE(switch_status_t) switch_ivr_say(switch_core_session_t *session, const char *tosay, const char *module_name, const char *say_type, const char *say_method, switch_input_args_t *args);
 
+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);
 
 /** @} */
 

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	Tue May 13 23:37:33 2008
@@ -48,12 +48,12 @@
 
 typedef enum {
 	SWITCH_SHN_ON_INIT,
-	SWITCH_SHN_ON_RING,
+	SWITCH_SHN_ON_ROUTING,
 	SWITCH_SHN_ON_EXECUTE,
 	SWITCH_SHN_ON_HANGUP,
-	SWITCH_SHN_ON_LOOPBACK,
-	SWITCH_SHN_ON_TRANSMIT,
-	SWITCH_SHN_ON_HOLD,
+	SWITCH_SHN_ON_EXCHANGE_MEDIA,
+	SWITCH_SHN_ON_SOFT_EXECUTE,
+	SWITCH_SHN_ON_CONSUME_MEDIA,
 	SWITCH_SHN_ON_HIBERNATE,
 	SWITCH_SHN_ON_RESET,
 	SWITCH_SHN_ON_PARK
@@ -62,18 +62,18 @@
 struct switch_state_handler_table {
 	/*! executed when the state changes to init */
 	switch_state_handler_t on_init;
-	/*! executed when the state changes to ring */
-	switch_state_handler_t on_ring;
+	/*! executed when the state changes to routing */
+	switch_state_handler_t on_routing;
 	/*! executed when the state changes to execute */
 	switch_state_handler_t on_execute;
 	/*! executed when the state changes to hangup */
 	switch_state_handler_t on_hangup;
-	/*! executed when the state changes to loopback */
-	switch_state_handler_t on_loopback;
-	/*! executed when the state changes to transmit */
-	switch_state_handler_t on_transmit;
-	/*! executed when the state changes to hold */
-	switch_state_handler_t on_hold;
+	/*! executed when the state changes to exchange_media */
+	switch_state_handler_t on_exchange_media;
+	/*! executed when the state changes to soft_execute */
+	switch_state_handler_t on_soft_execute;
+	/*! executed when the state changes to consume_media */
+	switch_state_handler_t on_consume_media;
 	/*! executed when the state changes to hibernate */
 	switch_state_handler_t on_hibernate;
 	/*! executed when the state changes to reset */
@@ -101,17 +101,15 @@
 
 typedef switch_call_cause_t (*switch_io_outgoing_channel_t)
 (switch_core_session_t *, switch_caller_profile_t *, switch_core_session_t **, switch_memory_pool_t **, switch_originate_flag_t);
-typedef switch_status_t (*switch_io_read_frame_t) (switch_core_session_t *, switch_frame_t **, int, switch_io_flag_t, int);
-typedef switch_status_t (*switch_io_write_frame_t) (switch_core_session_t *, switch_frame_t *, int, switch_io_flag_t, int);
+typedef switch_status_t (*switch_io_read_frame_t) (switch_core_session_t *, switch_frame_t **, switch_io_flag_t, int);
+typedef switch_status_t (*switch_io_write_frame_t) (switch_core_session_t *, switch_frame_t *, switch_io_flag_t, int);
 typedef switch_status_t (*switch_io_kill_channel_t) (switch_core_session_t *, int);
-typedef switch_status_t (*switch_io_waitfor_read_t) (switch_core_session_t *, int, int);
-typedef switch_status_t (*switch_io_waitfor_write_t) (switch_core_session_t *, int, int);
 typedef switch_status_t (*switch_io_send_dtmf_t) (switch_core_session_t *, const switch_dtmf_t *);
 typedef switch_status_t (*switch_io_receive_message_t) (switch_core_session_t *, switch_core_session_message_t *);
 typedef switch_status_t (*switch_io_receive_event_t) (switch_core_session_t *, switch_event_t *);
 typedef switch_status_t (*switch_io_state_change_t) (switch_core_session_t *);
-typedef	switch_status_t (*switch_io_read_video_frame_t) (switch_core_session_t *, switch_frame_t **, int, switch_io_flag_t, int);
-typedef switch_status_t (*switch_io_write_video_frame_t) (switch_core_session_t *, switch_frame_t *, int, switch_io_flag_t, int);
+typedef	switch_status_t (*switch_io_read_video_frame_t) (switch_core_session_t *, switch_frame_t **, switch_io_flag_t, int);
+typedef switch_status_t (*switch_io_write_video_frame_t) (switch_core_session_t *, switch_frame_t *, switch_io_flag_t, int);
 typedef switch_call_cause_t (*switch_io_resurrect_session_t)(switch_core_session_t **, switch_memory_pool_t **, void *);
 
 typedef enum {
@@ -119,8 +117,6 @@
 	SWITCH_IO_READ_FRAME,
 	SWITCH_IO_WRITE_FRAME,
 	SWITCH_IO_KILL_CHANNEL,
-	SWITCH_IO_WAITFOR_READ,
-	SWITCH_IO_WAITFOR_WRITE,
 	SWITCH_IO_SEND_DTMF,
 	SWITCH_IO_RECEIVE_MESSAGE,
 	SWITCH_IO_RECEIVE_EVENT,
@@ -140,10 +136,6 @@
 	switch_io_write_frame_t write_frame;
 	/*! send a kill signal to the session's channel */
 	switch_io_kill_channel_t kill_channel;
-	/*! wait for the session's channel to be ready to read audio */
-	switch_io_waitfor_read_t waitfor_read;
-	/*! wait for the session's channel to be ready to write audio */
-	switch_io_waitfor_write_t waitfor_write;
 	/*! send a string of DTMF digits to a session's channel */
 	switch_io_send_dtmf_t send_dtmf;
 	/*! receive a message from another session */

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	Tue May 13 23:37:33 2008
@@ -296,7 +296,7 @@
   \return the number of bytes read
 */
 SWITCH_DECLARE(switch_status_t) switch_rtp_read(switch_rtp_t *rtp_session, void *data, uint32_t * datalen,
-												switch_payload_t *payload_type, switch_frame_flag_t *flags);
+												switch_payload_t *payload_type, switch_frame_flag_t *flags, switch_io_flag_t io_flags);
 
 /*! 
   \brief Queue RFC2833 DTMF data into an RTP Session
@@ -332,7 +332,7 @@
   \return the number of bytes read
 */
 SWITCH_DECLARE(switch_status_t) switch_rtp_zerocopy_read(switch_rtp_t *rtp_session,
-														 void **data, uint32_t * datalen, switch_payload_t *payload_type, switch_frame_flag_t *flags);
+														 void **data, uint32_t * datalen, switch_payload_t *payload_type, switch_frame_flag_t *flags, switch_io_flag_t io_flags);
 
 /*! 
   \brief Read data from a given RTP session without copying
@@ -340,7 +340,7 @@
   \param frame a frame to populate with information
   \return the number of bytes read
 */
-SWITCH_DECLARE(switch_status_t) switch_rtp_zerocopy_read_frame(switch_rtp_t *rtp_session, switch_frame_t *frame);
+SWITCH_DECLARE(switch_status_t) switch_rtp_zerocopy_read_frame(switch_rtp_t *rtp_session, switch_frame_t *frame, switch_io_flag_t io_flagsm);
 
 /*!
   \brief Enable VAD on an RTP Session

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	Tue May 13 23:37:33 2008
@@ -40,6 +40,7 @@
 SWITCH_BEGIN_EXTERN_C
 #define SWITCH_STUN_DEFAULT_PORT 3478
 #define SWITCH_STUN_PACKET_MIN_LEN 20
+#define SWITCH_STUN_ATTRIBUTE_MIN_LEN 8
 	typedef enum {
 	SWITCH_STUN_BINDING_REQUEST = 0x0001,
 	SWITCH_STUN_BINDING_RESPONSE = 0x0101,
@@ -98,13 +99,13 @@
 } switch_stun_type_t;
 
 typedef struct {
-	int16_t type;
-	int16_t length;
+	uint16_t type;
+	uint16_t length;
 	char id[16];
 } switch_stun_packet_header_t;
 
 typedef struct {
-	int16_t type;
+	uint16_t type;
 	uint16_t length;
 	char value[];
 } switch_stun_packet_attribute_t;
@@ -115,10 +116,10 @@
 } switch_stun_packet_t;
 
 typedef struct {
-	int8_t wasted;
-	int8_t family;
-	int16_t port;
-	int32_t address;
+	uint8_t wasted;
+	uint8_t family;
+	uint16_t port;
+	uint32_t address;
 } switch_stun_ip_t;
 
 
@@ -208,6 +209,12 @@
 												   switch_port_t *port, char *stunip, switch_port_t stunport, char **err, switch_memory_pool_t *pool);
 
 
+/*!
+  \brief Obtain the padded length of an attribute's value
+  \param attribute the attribute
+  \return the padded size in bytes
+*/
+#define switch_stun_attribute_padded_length(attribute) ((uint16_t)(attribute->length + (sizeof(uint32_t)-1)) & ~sizeof(uint32_t))
 
 /*!
   \brief set a switch_stun_packet_attribute_t pointer to point at the first attribute in a packet
@@ -221,7 +228,7 @@
   \param attribute the pointer to increment
   \return true or false depending on if there are any more attributes
 */
-#define switch_stun_packet_next_attribute(attribute) (attribute = (switch_stun_packet_attribute_t *) (attribute->value + attribute->length)) && attribute->length
+#define switch_stun_packet_next_attribute(attribute, end) (attribute && (attribute = (switch_stun_packet_attribute_t *) (attribute->value +  switch_stun_attribute_padded_length(attribute))) && ((void *)attribute < end) && attribute->length && ((void *)(attribute +  switch_stun_attribute_padded_length(attribute)) < end))
 
 /*!
   \brief Obtain the correct length in bytes of a stun packet

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	Tue May 13 23:37:33 2008
@@ -628,16 +628,16 @@
 
 /*!
   \enum switch_channel_state_t
-  \brief Channel States
+  \brief Channel States (these are the defaults, CS_SOFT_EXECUTE, CS_EXCHANGE_MEDIA, and CS_CONSUME_MEDIA are often overridden by specific apps)
 <pre>
 CS_NEW       - Channel is newly created 
 CS_INIT      - Channel has been initilized
-CS_RING      - Channel is looking for a dialplan
-CS_TRANSMIT  - Channel is in a passive transmit state
+CS_ROUTING   - Channel is looking for an extension to execute
+CS_SOFT_EXECUTE  - Channel is ready to execute from 3rd party control
 CS_EXECUTE   - Channel is executing it's dialplan 
-CS_LOOPBACK  - Channel is in loopback
-CS_PARK      - Channel is parked
-CS_HOLD		 - Channel is on hold
+CS_EXCHANGE_MEDIA  - Channel is exchanging media with another channel.
+CS_PARK      - Channel is accepting media awaiting commands.
+CS_CONSUME_MEDIA		 - Channel is consuming all media and dropping it.
 CS_HIBERNATE - Channel is in a sleep state
 CS_RESET 	 - Channel is in a reset state
 CS_HANGUP    - Channel is flagged for hangup and ready to end
@@ -647,12 +647,12 @@
 typedef enum {
 	CS_NEW,
 	CS_INIT,
-	CS_RING,
-	CS_TRANSMIT,
+	CS_ROUTING,
+	CS_SOFT_EXECUTE,
 	CS_EXECUTE,
-	CS_LOOPBACK,
+	CS_EXCHANGE_MEDIA,
 	CS_PARK,
-	CS_HOLD,
+	CS_CONSUME_MEDIA,
 	CS_HIBERNATE,
 	CS_RESET,
 	CS_HANGUP,
@@ -943,7 +943,8 @@
 } switch_file_flag_t;
 
 typedef enum {
-	SWITCH_IO_FLAG_NOOP = 0
+	SWITCH_IO_FLAG_NONE = 0,
+	SWITCH_IO_FLAG_NOBLOCK = (1 << 0)
 } switch_io_flag_t;
 
 /* make sure this is synced with the EVENT_NAMES array in switch_event.c

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	Tue May 13 23:37:33 2008
@@ -302,6 +302,7 @@
     uint32_t resample_out_len;
 	conference_file_node_t *fnode;
 	conference_relationship_t *relationships;
+	switch_ivr_digit_stream_parser_t *dtmf_parser;
 	switch_ivr_digit_stream_t *digit_stream;
 	switch_speech_handle_t lsh;
 	switch_speech_handle_t *sh;
@@ -348,7 +349,7 @@
 static switch_status_t conference_say(conference_obj_t * conference, const char *text, uint32_t leadin);
 static void conference_list(conference_obj_t * conference, switch_stream_handle_t *stream, char *delim);
 SWITCH_STANDARD_API(conf_api_main);
-static switch_status_t audio_bridge_on_ring(switch_core_session_t *session);
+static switch_status_t audio_bridge_on_routing(switch_core_session_t *session);
 static switch_status_t conference_outcall(conference_obj_t * conference,
 										  char *conference_name,
 										  switch_core_session_t *session,
@@ -581,7 +582,7 @@
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++);
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "unique-id", "%s", conference->name);
-			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "channel-state", "%s", "CS_RING");
+			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "channel-state", "%s", "CS_ROUTING");
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "answer-state", "%s", conference->count == 1 ? "early" : "confirmed");
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "call-direction", "%s", conference->count == 1 ? "outbound" : "inbound");
 			switch_event_fire(&event);
@@ -723,7 +724,7 @@
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++);
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "unique-id", "%s", conference->name);
-			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "channel-state", "%s", "CS_RING");
+			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "channel-state", "%s", "CS_ROUTING");
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "answer-state", "%s", conference->count == 1 ? "early" : "confirmed");
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "call-direction", "%s", conference->count == 1 ? "outbound" : "inbound");
 			switch_event_fire(&event);
@@ -783,7 +784,7 @@
 		} 
 		
 		if (switch_channel_test_flag(switch_core_session_get_channel(conference->floor_holder->session), CF_VIDEO)) {
-			status = switch_core_session_read_video_frame(conference->floor_holder->session, &vid_frame, -1, 0);
+			status = switch_core_session_read_video_frame(conference->floor_holder->session, &vid_frame, SWITCH_IO_FLAG_NONE, 0);
 			
 			if (!SWITCH_READ_ACCEPTABLE(status)) {
 				conference->floor_holder = NULL;
@@ -835,7 +836,7 @@
 			for (imember = conference->members; imember; imember = imember->next) {
 				if (switch_channel_test_flag(switch_core_session_get_channel(imember->session), CF_VIDEO)) {
 					has_vid++;
-					switch_core_session_write_video_frame(imember->session, vid_frame, -1, 0);
+					switch_core_session_write_video_frame(imember->session, vid_frame, SWITCH_IO_FLAG_NONE, 0);
 				}
 			}
 			switch_mutex_unlock(conference->member_mutex);
@@ -1497,7 +1498,7 @@
 
 	while (switch_test_flag(member, MFLAG_RUNNING) && switch_channel_ready(channel)) {
 		/* Read a frame. */
-		status = switch_core_session_read_frame(member->session, &read_frame, -1, 0);
+		status = switch_core_session_read_frame(member->session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 
 		/* end the loop, if appropriate */
 		if (!SWITCH_READ_ACCEPTABLE(status) || !switch_test_flag(member, MFLAG_RUNNING)) {
@@ -1890,7 +1891,7 @@
 							switch_change_sln_volume(write_frame.data, write_frame.samples, member->volume_out_level);
 						}
 						write_frame.timestamp = timer.samplecount;
-						switch_core_session_write_frame(member->session, &write_frame, -1, 0);
+						switch_core_session_write_frame(member->session, &write_frame, SWITCH_IO_FLAG_NONE, 0);
 						switch_core_timer_next(&timer);
 
                             
@@ -1933,7 +1934,7 @@
 							switch_change_sln_volume(write_frame.data, write_frame.samples, member->volume_out_level);
 						}
 						write_frame.timestamp = timer.samplecount;
-						switch_core_session_write_frame(member->session, &write_frame, -1, 0);
+						switch_core_session_write_frame(member->session, &write_frame, SWITCH_IO_FLAG_NONE, 0);
 					}
 				}
 
@@ -1948,7 +1949,7 @@
 					write_frame.datalen = bytes;
 					write_frame.samples = samples;
 					write_frame.timestamp = timer.samplecount;
-					switch_core_session_write_frame(member->session, &write_frame, -1, 0);
+					switch_core_session_write_frame(member->session, &write_frame, SWITCH_IO_FLAG_NONE, 0);
 				}
 			}
 		}
@@ -3726,27 +3727,27 @@
 }
 
 /* outbound call bridge progress call state callback handler */
-static switch_status_t audio_bridge_on_ring(switch_core_session_t *session)
+static switch_status_t audio_bridge_on_routing(switch_core_session_t *session)
 {
 	switch_channel_t *channel = NULL;
 
 	channel = switch_core_session_get_channel(session);
 
-	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CUSTOM RING\n");
+	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CUSTOM ROUTING\n");
 
 	/* put the channel in a passive state so we can loop audio to it */
-	switch_channel_set_state(channel, CS_TRANSMIT);
+	switch_channel_set_state(channel, CS_SOFT_EXECUTE);
 	return SWITCH_STATUS_FALSE;
 }
 
 static switch_state_handler_table_t audio_bridge_peer_state_handlers = {
 	/*.on_init */ NULL,
-	/*.on_ring */ audio_bridge_on_ring,
+	/*.on_routing */ audio_bridge_on_routing,
 	/*.on_execute */ NULL,
 	/*.on_hangup */ NULL,
-	/*.on_loopback */ NULL,
-	/*.on_transmit */ NULL,
-	/*.on_hold */ NULL,
+	/*.on_exchange_media */ NULL,
+	/*.on_soft_execute */ NULL,
+	/*.on_consume_media */ NULL,
 };
 
 
@@ -3961,7 +3962,7 @@
 	/* generate some space infront of the file to be played */
 	for (x = 0; x < leadin; x++) {
 		switch_frame_t *read_frame;
-		status = switch_core_session_read_frame(session, &read_frame, 1000, 0);
+		status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 
 		if (!SWITCH_READ_ACCEPTABLE(status)) {
 			break;
@@ -4195,6 +4196,14 @@
 		profile_name = "default";
 	}
 
+#if 0
+	if (0) {
+		member.dtmf_parser = conference->dtmf_parser;
+	} else {
+		
+	}
+#endif
+
 	switch_event_create(&params, SWITCH_EVENT_MESSAGE);
 	switch_assert(params);
 	switch_event_add_header_string(params, SWITCH_STACK_BOTTOM, "conf_name", conf_name);
@@ -4514,6 +4523,9 @@
 	switch_buffer_destroy(&member.resample_buffer);
 	switch_buffer_destroy(&member.audio_buffer);
 	switch_buffer_destroy(&member.mux_buffer);
+	if (conference && member.dtmf_parser != conference->dtmf_parser) {
+		switch_ivr_digit_stream_parser_destroy(member.dtmf_parser);
+	}
 
 	if (conference) {
 		switch_mutex_lock(conference->mutex);
@@ -5124,7 +5136,7 @@
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", EC++);
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "unique-id", "%s", conf_name);
-			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "channel-state", "%s", "CS_RING");
+			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "channel-state", "%s", "CS_ROUTING");
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "answer-state", "%s", conference->count == 1 ? "early" : "confirmed");
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "call-direction", "%s", conference->count == 1 ? "outbound" : "inbound");
 			switch_event_fire(&event);

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	Tue May 13 23:37:33 2008
@@ -128,6 +128,23 @@
 	}
 }
 
+
+#define SAY_SYNTAX "<module_name> <say_type> <say_method> <text>"
+SWITCH_STANDARD_APP(say_function)
+{
+	char *argv[4] = { 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])))) == 4) {
+		switch_ivr_say(session, argv[3], argv[0], argv[1], argv[2], NULL);
+	} else {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Usage: %s\n", SAY_SYNTAX);
+	}	
+
+}
+
 #define SOFT_HOLD_SYNTAX "<unhold key> [<moh_a>] [<moh_b>]"
 SWITCH_STANDARD_APP(soft_hold_function)
 {
@@ -1341,7 +1358,7 @@
 	switch_channel_state_t state = switch_channel_get_state(channel);
 	const char *id = NULL;
 
-	if (state == CS_HANGUP || state == CS_RING) {
+	if (state == CS_HANGUP || state == CS_ROUTING) {
 		if ((id = switch_channel_get_variable(channel, "xfer_uuids"))) {
 			switch_stream_handle_t stream = { 0 };
 			SWITCH_STANDARD_STREAM(stream);
@@ -1671,8 +1688,13 @@
 			&& !switch_channel_test_flag(caller_channel, CF_EARLY_MEDIA)) {
 			switch_channel_set_flag(caller_channel, CF_PROXY_MODE);
 		} else {
-			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Channel is already up, delaying proxy mode 'till both legs are up.\n");
-			no_media_bridge = 1;
+			if (switch_channel_test_flag(caller_channel, CF_PROXY_MODE)) {
+				switch_ivr_media(switch_core_session_get_uuid(session), SMF_REBRIDGE);
+				switch_channel_set_flag(caller_channel, CF_PROXY_MODE);
+			} else {
+				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Channel is already up, delaying proxy mode 'till both legs are up.\n");
+				no_media_bridge = 1;
+			}
 		}
 	}
 
@@ -1703,7 +1725,7 @@
 			}
 
 		}
-		if (!switch_channel_test_flag(caller_channel, CF_TRANSFER) && switch_channel_get_state(caller_channel) != CS_RING) {
+		if (!switch_channel_test_flag(caller_channel, CF_TRANSFER) && switch_channel_get_state(caller_channel) != CS_ROUTING) {
 			switch_channel_hangup(caller_channel, cause);
 		}
 		return;
@@ -1714,11 +1736,11 @@
 			/* SIP won't let us redir media until the call has been answered #$^#%& so we will proxy any early media until they do */
 			while (switch_channel_ready(caller_channel) && switch_channel_ready(peer_channel)
 				   && !switch_channel_test_flag(peer_channel, CF_ANSWERED)) {
-				switch_status_t status = switch_core_session_read_frame(peer_session, &read_frame, -1, 0);
+				switch_status_t status = switch_core_session_read_frame(peer_session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 				uint8_t bad = 1;
 
 				if (SWITCH_READ_ACCEPTABLE(status)
-					&& switch_core_session_write_frame(session, read_frame, -1, 0) == SWITCH_STATUS_SUCCESS) {
+					&& switch_core_session_write_frame(session, read_frame, SWITCH_IO_FLAG_NONE, 0) == SWITCH_STATUS_SUCCESS) {
 					bad = 0;
 				}
 				if (bad) {
@@ -2007,6 +2029,7 @@
 	SWITCH_ADD_APP(app_interface, "clear_speech_cache", "Clear Speech Handle Cache", "Clear Speech Handle Cache", clear_speech_cache_function, "", SAF_NONE);
 	SWITCH_ADD_APP(app_interface, "bridge", "Bridge Audio", "Bridge the audio between two sessions", audio_bridge_function, "<channel_url>", SAF_SUPPORT_NOMEDIA);
 	SWITCH_ADD_APP(app_interface, "system", "Execute a system command", "Execute a system command", system_session_function, "<command>", SAF_SUPPORT_NOMEDIA);
+	SWITCH_ADD_APP(app_interface, "say", "say", "say", say_function, SAY_SYNTAX, SAF_NONE);
 
 	SWITCH_ADD_DIALPLAN(dp_interface, "inline", inline_dialplan_hunt);
 

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	Tue May 13 23:37:33 2008
@@ -130,7 +130,7 @@
 
 
 	while(!ready) {
-		status = switch_core_session_read_frame(session, &read_frame, -1, 0);
+		status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 		if (read_frame && switch_test_flag(read_frame, SFF_CNG)) {
 			continue;
 		}
@@ -206,7 +206,7 @@
 
 	for(;;) {
 
-		status = switch_core_session_read_frame(session, &read_frame, -1, 0);
+		status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 
         if (!SWITCH_READ_ACCEPTABLE(status)) {
             break;

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	Tue May 13 23:37:33 2008
@@ -294,7 +294,7 @@
 		switch_event_add_header(event, SWITCH_STACK_BOTTOM, "alt_event_type", "dialog");
 		switch_event_add_header(event, SWITCH_STACK_BOTTOM, "event_count", "%d", 0);
 
-        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "channel-state", "%s", wait_count > 0 ? "CS_RING" : "CS_HANGUP");
+        switch_event_add_header(event, SWITCH_STACK_BOTTOM, "channel-state", "%s", wait_count > 0 ? "CS_ROUTING" : "CS_HANGUP");
         switch_event_add_header(event, SWITCH_STACK_BOTTOM, "unique-id", "%s", node->name);
         switch_event_add_header(event, SWITCH_STACK_BOTTOM, "answer-state", "%s", wait_count > 0 ? "early" : "terminated");
         switch_event_add_header(event, SWITCH_STACK_BOTTOM, "call-direction", "%s", "inbound");
@@ -452,7 +452,7 @@
     if (!consumer && node) {
         switch_core_session_t *other_session;
 		switch_channel_t *other_channel;
-        const char *uuid = strdup(switch_core_session_get_uuid(session));
+        const char *uuid = switch_core_session_get_uuid(session);
 		const char *pri;
 		char tmp[25] = "";
 		int p = 0;
@@ -510,7 +510,7 @@
 			node->start_waiting = switch_timestamp_now();
 		}
 		
-        switch_queue_push(node->fifo_list[p], (void *)uuid);
+        switch_queue_push(node->fifo_list[p], (void *)strdup(uuid));
 
 		if (!pri) {
 			switch_snprintf(tmp, sizeof(tmp), "%d", p);
@@ -804,7 +804,7 @@
                     break;
                 }
 
-                status = switch_core_session_read_frame(session, &read_frame, -1, 0);
+                status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 
                 if (!SWITCH_READ_ACCEPTABLE(status)) {
                     break;
@@ -854,7 +854,7 @@
 				switch_channel_set_flag(other_channel, CF_BREAK);
 
 				while (switch_channel_ready(channel) && switch_channel_ready(other_channel) && switch_channel_test_flag(other_channel, CF_TAGGED)) {
-					status = switch_core_session_read_frame(session, &read_frame, -1, 0);
+					status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 					if (!SWITCH_READ_ACCEPTABLE(status)) {
 						break;
 					}

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	Tue May 13 23:37:33 2008
@@ -64,7 +64,7 @@
 	
 	eh->up = 1;	
 	while(switch_channel_ready(channel)) {
-		status = switch_core_session_read_video_frame(session, &read_frame, -1, 0);
+		status = switch_core_session_read_video_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 
 		if (!SWITCH_READ_ACCEPTABLE(status)) {
 			break;
@@ -90,7 +90,7 @@
 
 		switch_mutex_unlock(eh->mutex);
         
-		switch_core_session_write_video_frame(session, read_frame, -1, 0);
+		switch_core_session_write_video_frame(session, read_frame, SWITCH_IO_FLAG_NONE, 0);
 	}
 	eh->up = 0;
 	return NULL;
@@ -165,7 +165,7 @@
 	
 	while(switch_channel_ready(channel)) {
 
-		status = switch_core_session_read_frame(session, &read_frame, -1, 0);
+		status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 		
 		if (!SWITCH_READ_ACCEPTABLE(status)) {
 			break;
@@ -315,7 +315,7 @@
 				hdr->pt = pt;
 			}
 			if (switch_channel_test_flag(channel, CF_VIDEO)) {
-				switch_core_session_write_video_frame(session, &vid_frame, -1, 0);
+				switch_core_session_write_video_frame(session, &vid_frame, SWITCH_IO_FLAG_NONE, 0);
 			}
 			if (ts && last && last != ts) {
 				switch_yield(1000);
@@ -328,7 +328,7 @@
 			if ((write_frame.datalen = read(fd, write_frame.data, bytes)) <= 0) {
 				break;
 			}
-			switch_core_session_write_frame(session, &write_frame, -1, 0);
+			switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0);
 			switch_core_timer_next(&timer);
 		}
 

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	Tue May 13 23:37:33 2008
@@ -281,7 +281,7 @@
 	const char *id = NULL;
 	char *sql = NULL;
 
-	if (state == CS_HANGUP || state == CS_RING) {
+	if (state == CS_HANGUP || state == CS_ROUTING) {
 		id = switch_channel_get_variable(channel, "limit_id");
 		realm = switch_channel_get_variable(channel, "limit_realm");
 		sql = switch_mprintf("delete from limit_data where uuid='%q' and hostname='%q' and realm='%q'and id='%q';", 

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	Tue May 13 23:37:33 2008
@@ -171,7 +171,6 @@
 	switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_NONE;
 	switch_core_thread_session_t thread_session;
 	uint32_t rate, interval = 20;
-	int stream_id = 0;
 	switch_timer_t timer = { 0 }, *timerp = NULL;
 	uint32_t last;
 	char *mydata = NULL;
@@ -292,9 +291,7 @@
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "setup timer success %u bytes per %d ms!\n", (rate / 50) * 2, interval);
 
 		/* start a thread to absorb incoming audio */
-		for (stream_id = 0; stream_id < switch_core_session_get_stream_count(session); stream_id++) {
-			switch_core_service_session(session, &thread_session, stream_id);
-		}
+		switch_core_service_session(session, &thread_session, 0);
 		timerp = &timer;
 	}
 

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	Tue May 13 23:37:33 2008
@@ -2156,7 +2156,7 @@
 static void  message_query_handler(switch_event_t *event)
 {
 	char *account = switch_event_get_header(event, "message-account");
-	int sent = 0;
+	int created = 0;
 	switch_event_t *new_event = NULL;
 
 	if (account) {
@@ -2194,8 +2194,7 @@
 						switch_event_add_header(new_event, SWITCH_STACK_BOTTOM, "MWI-Message-Account", account);
 						switch_event_add_header(new_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(&new_event);
-						sent++;
+						created++;
 					}
 				}
 			}
@@ -2205,13 +2204,26 @@
 
 	}
 
-	if (!sent) {
+	if (!created) {
 		if (switch_event_create(&new_event, SWITCH_EVENT_MESSAGE_WAITING) == SWITCH_STATUS_SUCCESS) {
 			switch_event_add_header(new_event, SWITCH_STACK_BOTTOM, "MWI-Messages-Waiting", "no");
 			switch_event_add_header(new_event, SWITCH_STACK_BOTTOM, "MWI-Message-Account", account);
-			switch_event_fire(&new_event);
 		}
 	}
+
+	if (new_event) {
+		switch_event_header_t *hp;
+
+		for (hp = event->headers; hp; hp = hp->next) {
+			if (!strncasecmp(hp->name, "vm-", 3)) {
+				switch_event_add_header(new_event, SWITCH_STACK_BOTTOM, hp->name + 3, hp->value);
+			}
+		}
+
+		switch_event_fire(&new_event);
+	}
+
+
 }
 
 #define VOICEMAIL_SYNTAX "rss [<host> <port> <uri> <user> <domain>]"

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_alsa/mod_alsa.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_alsa/mod_alsa.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_alsa/mod_alsa.c	Tue May 13 23:37:33 2008
@@ -143,14 +143,14 @@
 static void remove_pvt(private_t * tech_pvt);
 static switch_status_t channel_on_init(switch_core_session_t *session);
 static switch_status_t channel_on_hangup(switch_core_session_t *session);
-static switch_status_t channel_on_ring(switch_core_session_t *session);
-static switch_status_t channel_on_loopback(switch_core_session_t *session);
-static switch_status_t channel_on_transmit(switch_core_session_t *session);
+static switch_status_t channel_on_routing(switch_core_session_t *session);
+static switch_status_t channel_on_exchange_media(switch_core_session_t *session);
+static switch_status_t channel_on_soft_execute(switch_core_session_t *session);
 static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session,
 													switch_caller_profile_t *outbound_profile,
 													switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags);
-static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, switch_io_flag_t flags, int stream_id);
-static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, switch_io_flag_t flags, int stream_id);
+static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id);
+static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id);
 static switch_status_t channel_kill_channel(switch_core_session_t *session, int sig);
 static switch_status_t engage_device(unsigned int samplerate, int codec_ms);
 static switch_status_t load_config(void);
@@ -293,14 +293,14 @@
 
 	switch_set_flag_locked(tech_pvt, TFLAG_IO);
 
-	/* Move Channel's State Machine to RING */
-	switch_channel_set_state(channel, CS_RING);
+	/* Move channel's state machine to ROUTING */
+	switch_channel_set_state(channel, CS_ROUTING);
 
 	return SWITCH_STATUS_SUCCESS;
 
 }
 
-static switch_status_t channel_on_ring(switch_core_session_t *session)
+static switch_status_t channel_on_routing(switch_core_session_t *session)
 {
 	switch_channel_t *channel = NULL;
 	private_t *tech_pvt = NULL;
@@ -311,7 +311,7 @@
 	tech_pvt = switch_core_session_get_private(session);
 	assert(tech_pvt != NULL);
 
-	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s CHANNEL RING\n", switch_channel_get_name(channel));
+	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s CHANNEL ROUTING\n", switch_channel_get_name(channel));
 
 	return SWITCH_STATUS_SUCCESS;
 }
@@ -478,13 +478,13 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_on_transmit(switch_core_session_t *session)
+static switch_status_t channel_on_soft_execute(switch_core_session_t *session)
 {
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CHANNEL TRANSMIT\n");
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_on_loopback(switch_core_session_t *session)
+static switch_status_t channel_on_exchange_media(switch_core_session_t *session)
 {
 	switch_channel_t *channel = NULL;
 	private_t *tech_pvt = NULL;
@@ -501,27 +501,6 @@
 }
 
 
-static switch_status_t channel_waitfor_read(switch_core_session_t *session, int ms, int stream_id)
-{
-	private_t *tech_pvt = NULL;
-
-	tech_pvt = switch_core_session_get_private(session);
-	assert(tech_pvt != NULL);
-
-	return SWITCH_STATUS_SUCCESS;
-}
-
-static switch_status_t channel_waitfor_write(switch_core_session_t *session, int ms, int stream_id)
-{
-	private_t *tech_pvt = NULL;
-
-	tech_pvt = switch_core_session_get_private(session);
-	assert(tech_pvt != NULL);
-
-	return SWITCH_STATUS_SUCCESS;
-
-}
-
 static switch_status_t channel_send_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf)
 {
 	private_t *tech_pvt = NULL;
@@ -534,7 +513,7 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, switch_io_flag_t flags, int stream_id)
+static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id)
 {
 	switch_channel_t *channel = NULL;
 	private_t *tech_pvt = NULL;
@@ -584,7 +563,7 @@
 										  globals.read_codec.implementation->number_of_channels,
 										  globals.read_codec.implementation->actual_samples_per_second,
 										  SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT,
-										  switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) {
+										  NULL) != SWITCH_STATUS_SUCCESS) {
 					switch_core_codec_destroy(&tech_pvt->write_codec);
 					tech_pvt->hold_file = NULL;
 					goto cng;
@@ -652,7 +631,7 @@
 	return status;
 }
 
-static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, switch_io_flag_t flags, int stream_id)
+static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id)
 {
 	switch_channel_t *channel = NULL;
 	private_t *tech_pvt = NULL;
@@ -737,11 +716,11 @@
 
 static switch_state_handler_table_t channel_event_handlers = {
 	/*.on_init */ channel_on_init,
-	/*.on_ring */ channel_on_ring,
+	/*.on_routing */ channel_on_routing,
 	/*.on_execute */ channel_on_execute,
 	/*.on_hangup */ channel_on_hangup,
-	/*.on_loopback */ channel_on_loopback,
-	/*.on_transmit */ channel_on_transmit
+	/*.on_exchange_media */ channel_on_exchange_media,
+	/*.on_soft_execute */ channel_on_soft_execute
 };
 
 static switch_io_routines_t channel_io_routines = {
@@ -749,8 +728,6 @@
 	/*.read_frame */ channel_read_frame,
 	/*.write_frame */ channel_write_frame,
 	/*.kill_channel */ channel_kill_channel,
-	/*.waitfor_read */ channel_waitfor_read,
-	/*.waitfor_write */ channel_waitfor_write,
 	/*.send_dtmf */ channel_send_dtmf,
 	/*.receive_message */ channel_receive_message
 };

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	Tue May 13 23:37:33 2008
@@ -205,14 +205,14 @@
 SWITCH_STANDARD_API(dl_debug);
 static switch_status_t channel_on_init(switch_core_session_t *session);
 static switch_status_t channel_on_hangup(switch_core_session_t *session);
-static switch_status_t channel_on_ring(switch_core_session_t *session);
-static switch_status_t channel_on_loopback(switch_core_session_t *session);
-static switch_status_t channel_on_transmit(switch_core_session_t *session);
+static switch_status_t channel_on_routing(switch_core_session_t *session);
+static switch_status_t channel_on_exchange_media(switch_core_session_t *session);
+static switch_status_t channel_on_soft_execute(switch_core_session_t *session);
 static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session,
 													switch_caller_profile_t *outbound_profile,
 													switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags);
-static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, switch_io_flag_t flags, int stream_id);
-static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, switch_io_flag_t flags, int stream_id);
+static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id);
+static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id);
 static switch_status_t channel_kill_channel(switch_core_session_t *session, int sig);
 
 static ldl_status handle_signalling(ldl_handle_t * handle, ldl_session_t * dlsession, ldl_signal_t dl_signal,
@@ -1165,14 +1165,14 @@
 	switch_set_flag(tech_pvt, TFLAG_READY);
 
 	if (negotiate_media(session) == SWITCH_STATUS_SUCCESS) {
-		/* Move Channel's State Machine to RING */
-		switch_channel_set_state(channel, CS_RING);
+		/* Move channel's state machine to ROUTING */
+		switch_channel_set_state(channel, CS_ROUTING);
 	}
 
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_on_ring(switch_core_session_t *session)
+static switch_status_t channel_on_routing(switch_core_session_t *session)
 {
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 	struct private_object *tech_pvt = NULL;
@@ -1180,7 +1180,7 @@
 	tech_pvt = switch_core_session_get_private(session);
 	switch_assert(tech_pvt != NULL);
 
-	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s CHANNEL RING\n", switch_channel_get_name(channel));
+	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s CHANNEL ROUTING\n", switch_channel_get_name(channel));
 
 	return SWITCH_STATUS_SUCCESS;
 }
@@ -1294,38 +1294,18 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_on_loopback(switch_core_session_t *session)
+static switch_status_t channel_on_exchange_media(switch_core_session_t *session)
 {
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CHANNEL LOOPBACK\n");
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_on_transmit(switch_core_session_t *session)
+static switch_status_t channel_on_soft_execute(switch_core_session_t *session)
 {
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CHANNEL TRANSMIT\n");
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_waitfor_read(switch_core_session_t *session, int ms, int stream_id)
-{
-	struct private_object *tech_pvt = NULL;
-
-	tech_pvt = switch_core_session_get_private(session);
-	switch_assert(tech_pvt != NULL);
-
-	return SWITCH_STATUS_SUCCESS;
-}
-
-static switch_status_t channel_waitfor_write(switch_core_session_t *session, int ms, int stream_id)
-{
-	struct private_object *tech_pvt = NULL;
-
-	tech_pvt = switch_core_session_get_private(session);
-	switch_assert(tech_pvt != NULL);
-
-	return SWITCH_STATUS_SUCCESS;
-
-}
 
 static switch_status_t channel_send_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf)
 {
@@ -1340,7 +1320,7 @@
 
 }
 
-static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, switch_io_flag_t flags, int stream_id)
+static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id)
 {
 	struct private_object *tech_pvt = NULL;
 	switch_channel_t *channel = switch_core_session_get_channel(session);
@@ -1381,7 +1361,7 @@
 		while (switch_test_flag(tech_pvt, TFLAG_IO) && tech_pvt->read_frame.datalen == 0) {
 			tech_pvt->read_frame.flags = SFF_NONE;
 
-			status = switch_rtp_zerocopy_read_frame(tech_pvt->rtp_session, &tech_pvt->read_frame);
+			status = switch_rtp_zerocopy_read_frame(tech_pvt->rtp_session, &tech_pvt->read_frame, flags);
 			if (status != SWITCH_STATUS_SUCCESS && status != SWITCH_STATUS_BREAK) {
 				return SWITCH_STATUS_FALSE;
 			}
@@ -1438,7 +1418,7 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, switch_io_flag_t flags, int stream_id)
+static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id)
 {
 	struct private_object *tech_pvt;
 	switch_channel_t *channel = switch_core_session_get_channel(session);
@@ -1564,11 +1544,11 @@
 
 switch_state_handler_table_t dingaling_event_handlers = {
 	/*.on_init */ channel_on_init,
-	/*.on_ring */ channel_on_ring,
+	/*.on_routing */ channel_on_routing,
 	/*.on_execute */ channel_on_execute,
 	/*.on_hangup */ channel_on_hangup,
-	/*.on_loopback */ channel_on_loopback,
-	/*.on_transmit */ channel_on_transmit
+	/*.on_exchange_media */ channel_on_exchange_media,
+	/*.on_soft_execute */ channel_on_soft_execute
 };
 
 switch_io_routines_t dingaling_io_routines = {
@@ -1576,8 +1556,6 @@
 	/*.read_frame */ channel_read_frame,
 	/*.write_frame */ channel_write_frame,
 	/*.kill_channel */ channel_kill_channel,
-	/*.waitfor_read */ channel_waitfor_read,
-	/*.waitfor_write */ channel_waitfor_write,
 	/*.send_dtmf */ channel_send_dtmf,
 	/*.receive_message */ channel_receive_message,
 	/*.receive_event */ channel_receive_event

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/Makefile
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/Makefile	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/Makefile	Tue May 13 23:37:33 2008
@@ -1,3 +1,5 @@
-LOCAL_CFLAGS=$(libiax_CFLAGS)
-LOCAL_LDFLAGS=$(libiax_LIBS)
+BASE=../../../..
+LOCAL_CFLAGS=-I. -DNEWJB -DLIBIAX -DDEBUG_SUPPORT
+LOCAL_OBJS=iax2-parser.o iax.o md5.o jitterbuf.o iax-mutex.o
+
 include $(BASE)/build/modmake.rules

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/mod_iax.2008.vcproj
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/mod_iax.2008.vcproj	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/mod_iax.2008.vcproj	Tue May 13 23:37:33 2008
@@ -40,10 +40,10 @@
 			<Tool
 				Name="VCCLCompilerTool"
 				Optimization="0"
-				AdditionalIncludeDirectories="&quot;$(InputDir)..\..\..\..\libs\iax\src&quot;"
-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS"
+				AdditionalIncludeDirectories="."
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS;WIN32_TIME_GET_TIME;LIBIAX;NEWJB;_CRT_SECURE_NO_DEPRECATE;DEBUG_SUPPORT"
 				UsePrecompiledHeader="0"
-				DisableSpecificWarnings="4201"
+				DisableSpecificWarnings="4201;4200;4100;4127;6246;6053;6031;6262;4706"
 			/>
 			<Tool
 				Name="VCManagedResourceCompilerTool"
@@ -105,9 +105,10 @@
 			/>
 			<Tool
 				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="&quot;$(InputDir)..\..\..\..\libs\iax\src&quot;"
+				AdditionalIncludeDirectories="."
+				PreprocessorDefinitions="WIN32;_WINDOWS;_USRDLL;MOD_EXPORTS;LIBIAX;WIN32_TIME_GET_TIME;DEBUG_SUPPORT;NEWJB;_CRT_SECURE_NO_DEPRECATE"
 				UsePrecompiledHeader="0"
-				DisableSpecificWarnings="4201"
+				DisableSpecificWarnings="4201;4200;4100;4127;6246;6053;6031;6262;4706"
 			/>
 			<Tool
 				Name="VCManagedResourceCompilerTool"
@@ -151,6 +152,26 @@
 	</References>
 	<Files>
 		<File
+			RelativePath=".\iax-mutex.c"
+			>
+		</File>
+		<File
+			RelativePath=".\iax.c"
+			>
+		</File>
+		<File
+			RelativePath=".\iax2-parser.c"
+			>
+		</File>
+		<File
+			RelativePath=".\jitterbuf.c"
+			>
+		</File>
+		<File
+			RelativePath=".\md5.c"
+			>
+		</File>
+		<File
 			RelativePath=".\mod_iax.c"
 			>
 		</File>

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	Tue May 13 23:37:33 2008
@@ -416,14 +416,14 @@
 
 static switch_status_t channel_on_init(switch_core_session_t *session);
 static switch_status_t channel_on_hangup(switch_core_session_t *session);
-static switch_status_t channel_on_ring(switch_core_session_t *session);
-static switch_status_t channel_on_loopback(switch_core_session_t *session);
-static switch_status_t channel_on_transmit(switch_core_session_t *session);
+static switch_status_t channel_on_routing(switch_core_session_t *session);
+static switch_status_t channel_on_exchange_media(switch_core_session_t *session);
+static switch_status_t channel_on_soft_execute(switch_core_session_t *session);
 static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session,
 													switch_caller_profile_t *outbound_profile,
 													switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags);
-static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, switch_io_flag_t flags, int stream_id);
-static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, switch_io_flag_t flags, int stream_id);
+static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id);
+static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id);
 static switch_status_t channel_kill_channel(switch_core_session_t *session, int sig);
 
 
@@ -467,8 +467,8 @@
 
 	switch_set_flag_locked(tech_pvt, TFLAG_IO);
 
-	/* Move Channel's State Machine to RING */
-	switch_channel_set_state(switch_core_session_get_channel(session), CS_RING);
+	/* Move channel's state machine to ROUTING */
+	switch_channel_set_state(switch_core_session_get_channel(session), CS_ROUTING);
 	switch_mutex_lock(globals.mutex);
 	globals.calls++;
 	switch_mutex_unlock(globals.mutex);
@@ -476,9 +476,9 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_on_ring(switch_core_session_t *session)
+static switch_status_t channel_on_routing(switch_core_session_t *session)
 {
-	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s CHANNEL RING\n", switch_channel_get_name(switch_core_session_get_channel(session)));
+	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s CHANNEL ROUTING\n", switch_channel_get_name(switch_core_session_get_channel(session)));
 	return SWITCH_STATUS_SUCCESS;
 }
 
@@ -545,32 +545,18 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_on_loopback(switch_core_session_t *session)
+static switch_status_t channel_on_exchange_media(switch_core_session_t *session)
 {
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CHANNEL LOOPBACK\n");
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_on_transmit(switch_core_session_t *session)
+static switch_status_t channel_on_soft_execute(switch_core_session_t *session)
 {
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CHANNEL TRANSMIT\n");
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_waitfor_read(switch_core_session_t *session, int ms, int stream_id)
-{
-	assert(switch_core_session_get_private(session));
-
-	return SWITCH_STATUS_SUCCESS;
-}
-
-static switch_status_t channel_waitfor_write(switch_core_session_t *session, int ms, int stream_id)
-{
-	assert(switch_core_session_get_private(session));
-
-	return SWITCH_STATUS_SUCCESS;
-}
-
 static switch_status_t channel_send_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf)
 {
 	private_t *tech_pvt = switch_core_session_get_private(session);
@@ -584,11 +570,9 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, switch_io_flag_t flags, int stream_id)
+static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id)
 {
 	private_t *tech_pvt = switch_core_session_get_private(session);
-	switch_time_t started = switch_timestamp_now();
-	unsigned int elapsed;
 	switch_byte_t *data;
 
 	switch_assert(tech_pvt != NULL);
@@ -630,12 +614,6 @@
 			return SWITCH_STATUS_SUCCESS;
 		}
 
-		if (timeout > -1) {
-			elapsed = (unsigned int) ((switch_timestamp_now() - started) / 1000);
-			if (elapsed >= (unsigned int) timeout) {
-				return SWITCH_STATUS_SUCCESS;
-			}
-		}
 		switch_yield(1000);
 	}
 
@@ -651,7 +629,7 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, switch_io_flag_t flags, int stream_id)
+static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id)
 {
 	private_t *tech_pvt = switch_core_session_get_private(session);
 	switch_assert(tech_pvt != NULL);
@@ -800,11 +778,11 @@
 
 switch_state_handler_table_t iax_state_handlers = {
 	/*.on_init */ channel_on_init,
-	/*.on_ring */ channel_on_ring,
+	/*.on_routing */ channel_on_routing,
 	/*.on_execute */ channel_on_execute,
 	/*.on_hangup */ channel_on_hangup,
-	/*.on_loopback */ channel_on_loopback,
-	/*.on_transmit */ channel_on_transmit
+	/*.on_exchange_media */ channel_on_exchange_media,
+	/*.on_soft_execute */ channel_on_soft_execute
 };
 
 switch_io_routines_t iax_io_routines = {
@@ -812,8 +790,6 @@
 	/*.read_frame */ channel_read_frame,
 	/*.write_frame */ channel_write_frame,
 	/*.kill_channel */ channel_kill_channel,
-	/*.waitfor_read */ channel_waitfor_read,
-	/*.waitfor_write */ channel_waitfor_write,
 	/*.send_dtmf */ channel_send_dtmf,
 	/*.receive_message*/ channel_receive_message,
 	/*.receive_event */ channel_receive_event

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/mod_iax.vcproj
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/mod_iax.vcproj	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_iax/mod_iax.vcproj	Tue May 13 23:37:33 2008
@@ -6,6 +6,7 @@
 	ProjectGUID="{3A5B9131-F20C-4A85-9447-6C1610941CEE}"
 	RootNamespace="mod_iax"
 	Keyword="Win32Proj"
+	TargetFrameworkVersion="131072"
 	>
 	<Platforms>
 		<Platform
@@ -22,16 +23,63 @@
 			CharacterSet="2"
 			>
 			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
 				Name="VCCLCompilerTool"
 				Optimization="0"
-				AdditionalIncludeDirectories="&quot;$(InputDir)..\..\..\..\libs\iax\src&quot;"
-				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS"
+				AdditionalIncludeDirectories="."
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS;WIN32_TIME_GET_TIME;LIBIAX;NEWJB;_CRT_SECURE_NO_DEPRECATE;DEBUG_SUPPORT"
 				UsePrecompiledHeader="0"
-				DisableSpecificWarnings="4201"
+				DisableSpecificWarnings="4201;4200;4100;4127;6246;6053;6031;6262;4706"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
 			/>
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalLibraryDirectories="&quot;..\..\..\..\libs\iax\$(OutDir)&quot;"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
 			/>
 		</Configuration>
 		<Configuration
@@ -41,14 +89,62 @@
 			CharacterSet="2"
 			>
 			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
 				Name="VCCLCompilerTool"
-				AdditionalIncludeDirectories="&quot;$(InputDir)..\..\..\..\libs\iax\src&quot;"
+				AdditionalIncludeDirectories="."
+				PreprocessorDefinitions="WIN32;_WINDOWS;_USRDLL;MOD_EXPORTS;LIBIAX;WIN32_TIME_GET_TIME;DEBUG_SUPPORT;NEWJB;_CRT_SECURE_NO_DEPRECATE"
 				UsePrecompiledHeader="0"
-				DisableSpecificWarnings="4201"
+				DisableSpecificWarnings="4201;4200;4100;4127;6246;6053;6031;6262;4706"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
 			/>
 			<Tool
 				Name="VCLinkerTool"
 				AdditionalLibraryDirectories="&quot;..\..\..\..\libs\iax\$(OutDir)&quot;"
+				RandomizedBaseAddress="1"
+				DataExecutionPrevention="0"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
 			/>
 		</Configuration>
 	</Configurations>
@@ -56,6 +152,26 @@
 	</References>
 	<Files>
 		<File
+			RelativePath=".\iax-mutex.c"
+			>
+		</File>
+		<File
+			RelativePath=".\iax.c"
+			>
+		</File>
+		<File
+			RelativePath=".\iax2-parser.c"
+			>
+		</File>
+		<File
+			RelativePath=".\jitterbuf.c"
+			>
+		</File>
+		<File
+			RelativePath=".\md5.c"
+			>
+		</File>
+		<File
 			RelativePath=".\mod_iax.c"
 			>
 		</File>

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	Tue May 13 23:37:33 2008
@@ -140,14 +140,14 @@
 static void remove_pvt(private_t * tech_pvt);
 static switch_status_t channel_on_init(switch_core_session_t *session);
 static switch_status_t channel_on_hangup(switch_core_session_t *session);
-static switch_status_t channel_on_ring(switch_core_session_t *session);
-static switch_status_t channel_on_loopback(switch_core_session_t *session);
-static switch_status_t channel_on_transmit(switch_core_session_t *session);
+static switch_status_t channel_on_routing(switch_core_session_t *session);
+static switch_status_t channel_on_exchange_media(switch_core_session_t *session);
+static switch_status_t channel_on_soft_execute(switch_core_session_t *session);
 static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session,
 													switch_caller_profile_t *outbound_profile,
 													switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags);
-static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, switch_io_flag_t flags, int stream_id);
-static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, switch_io_flag_t flags, int stream_id);
+static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id);
+static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id);
 static switch_status_t channel_kill_channel(switch_core_session_t *session, int sig);
 static switch_status_t engage_device(int samplerate, int codec_ms);
 static switch_status_t engage_ring_device(int sample_rate, int channels);
@@ -283,15 +283,15 @@
 
 	switch_set_flag_locked(tech_pvt, TFLAG_IO);
 
-	/* Move Channel's State Machine to RING */
-	switch_channel_set_state(channel, CS_RING);
+	/* Move channel's state machine to ROUTING */
+	switch_channel_set_state(channel, CS_ROUTING);
 
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_on_ring(switch_core_session_t *session)
+static switch_status_t channel_on_routing(switch_core_session_t *session)
 {
-	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s CHANNEL RING\n", switch_channel_get_name(switch_core_session_get_channel(session)));
+	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s CHANNEL ROUTING\n", switch_channel_get_name(switch_core_session_get_channel(session)));
 	return SWITCH_STATUS_SUCCESS;
 }
 
@@ -435,29 +435,19 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_on_transmit(switch_core_session_t *session)
+static switch_status_t channel_on_soft_execute(switch_core_session_t *session)
 {
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CHANNEL TRANSMIT\n");
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_on_loopback(switch_core_session_t *session)
+static switch_status_t channel_on_exchange_media(switch_core_session_t *session)
 {
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CHANNEL LOOPBACK\n");
 	return SWITCH_STATUS_SUCCESS;
 }
 
 
-static switch_status_t channel_waitfor_read(switch_core_session_t *session, int ms, int stream_id)
-{
-	return SWITCH_STATUS_SUCCESS;
-}
-
-static switch_status_t channel_waitfor_write(switch_core_session_t *session, int ms, int stream_id)
-{
-	return SWITCH_STATUS_SUCCESS;
-}
-
 static switch_status_t channel_send_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf)
 {
 	private_t *tech_pvt = switch_core_session_get_private(session);
@@ -468,7 +458,7 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, switch_io_flag_t flags, int stream_id)
+static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id)
 {
 	private_t *tech_pvt = switch_core_session_get_private(session);
 	int samples = 0;
@@ -496,7 +486,7 @@
 										  globals.read_codec.implementation->number_of_channels,
 										  globals.read_codec.implementation->actual_samples_per_second,
 										  SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT,
-										  switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) {
+										  NULL) != SWITCH_STATUS_SUCCESS) {
 					tech_pvt->hold_file = NULL;
 					goto cng;
 				}
@@ -552,7 +542,7 @@
 		globals.read_frame.datalen = samples * 2;
 		globals.read_frame.samples = samples;
 
-		switch_core_timer_check(&globals.timer, SWITCH_TRUE);
+		//switch_core_timer_check(&globals.timer, SWITCH_TRUE);
 		*frame = &globals.read_frame;
 
 		if (!switch_test_flag((&globals), GFLAG_MOUTH)) {
@@ -566,7 +556,7 @@
 	return status;
 }
 
-static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, switch_io_flag_t flags, int stream_id)
+static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id)
 {
 	switch_status_t status = SWITCH_STATUS_FALSE;
 	private_t *tech_pvt = switch_core_session_get_private(session);
@@ -622,11 +612,11 @@
 
 switch_state_handler_table_t portaudio_event_handlers = {
 	/*.on_init */ channel_on_init,
-	/*.on_ring */ channel_on_ring,
+	/*.on_routing */ channel_on_routing,
 	/*.on_execute */ channel_on_execute,
 	/*.on_hangup */ channel_on_hangup,
-	/*.on_loopback */ channel_on_loopback,
-	/*.on_transmit */ channel_on_transmit
+	/*.on_exchange_media */ channel_on_exchange_media,
+	/*.on_soft_execute */ channel_on_soft_execute
 };
 
 switch_io_routines_t portaudio_io_routines = {
@@ -634,8 +624,6 @@
 	/*.read_frame */ channel_read_frame,
 	/*.write_frame */ channel_write_frame,
 	/*.kill_channel */ channel_kill_channel,
-	/*.waitfor_read */ channel_waitfor_read,
-	/*.waitfor_write */ channel_waitfor_write,
 	/*.send_dtmf */ channel_send_dtmf,
 	/*.receive_message */ channel_receive_message
 };

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_portaudio/pa_ringbuffer.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_portaudio/pa_ringbuffer.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_portaudio/pa_ringbuffer.c	Tue May 13 23:37:33 2008
@@ -70,7 +70,7 @@
  * PaUtil_WriteMemoryBarrier()
  *
  ****************/
-
+#define __VIA_HACK__
 #if defined(__VIA_HACK__)
 #define NO_BARRIER
 #endif

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	Tue May 13 23:37:33 2008
@@ -143,22 +143,37 @@
  */
 long ReadAudioStream(PABLIO_Stream * aStream, void *data, long numFrames, switch_timer_t *timer)
 {
-	long bytesRead;
+	long bytesRead = 0;
 	char *p = (char *) data;
-	long numBytes = aStream->bytesPerFrame * numFrames;
+	long avail, totalBytes = 0, neededBytes = aStream->bytesPerFrame * numFrames;
 	
-	while (numBytes > 0) {
-		bytesRead = PaUtil_ReadRingBuffer(&aStream->inFIFO, p, numBytes);
-		numBytes -= bytesRead;
-		if (numBytes > 0) {
-			if (switch_core_timer_check(timer, SWITCH_TRUE) == SWITCH_STATUS_SUCCESS) {
-				PaUtil_FlushRingBuffer(&aStream->inFIFO);
-				return 0;
-			}
+	for(;;) {
+		avail = PaUtil_GetRingBufferReadAvailable(&aStream->inFIFO);
+		
+		if (switch_core_timer_check(timer, SWITCH_TRUE) == SWITCH_STATUS_SUCCESS) {
+			break;
+		}
+		
+		if (avail >= neededBytes * 6) { 
+			PaUtil_FlushRingBuffer(&aStream->inFIFO);
+			avail = 0;
+		}
+		
+		bytesRead = 0;
+
+		if (totalBytes < neededBytes && avail >= neededBytes) {
+			bytesRead = PaUtil_ReadRingBuffer(&aStream->inFIFO, p, neededBytes);
+			totalBytes += bytesRead;
+		}
+		
+		if (bytesRead) {
+			p += bytesRead;
+		} else {
 			switch_yield(1000);
 		}
 	}
-	return numFrames;
+
+	return totalBytes / aStream->bytesPerFrame;
 }
 
 /************************************************************

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_reference/mod_reference.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_reference/mod_reference.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_reference/mod_reference.c	Tue May 13 23:37:33 2008
@@ -100,14 +100,14 @@
 
 static switch_status_t channel_on_init(switch_core_session_t *session);
 static switch_status_t channel_on_hangup(switch_core_session_t *session);
-static switch_status_t channel_on_ring(switch_core_session_t *session);
-static switch_status_t channel_on_loopback(switch_core_session_t *session);
-static switch_status_t channel_on_transmit(switch_core_session_t *session);
+static switch_status_t channel_on_routing(switch_core_session_t *session);
+static switch_status_t channel_on_exchange_media(switch_core_session_t *session);
+static switch_status_t channel_on_soft_execute(switch_core_session_t *session);
 static switch_call_cause_t channel_outgoing_channel(switch_core_session_t *session,
 													switch_caller_profile_t *outbound_profile,
 													switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags);
-static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, switch_io_flag_t flags, int stream_id);
-static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, switch_io_flag_t flags, int stream_id);
+static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id);
+static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id);
 static switch_status_t channel_kill_channel(switch_core_session_t *session, int sig);
 
 
@@ -139,8 +139,11 @@
 	assert(channel != NULL);
 	switch_set_flag_locked(tech_pvt, TFLAG_IO);
 
-	/* Move Channel's State Machine to RING */
-	switch_channel_set_state(channel, CS_RING);
+	/* Move channel's state machine to ROUTING. This means the call is trying
+       to get from the initial start where the call because, to the point
+       where a destination has been identified. If the channel is simply
+       left in the initial state, nothing will happen. */
+	switch_channel_set_state(channel, CS_ROUTING);
 	switch_mutex_lock(globals.mutex);
 	globals.calls++;
 	switch_mutex_unlock(globals.mutex);
@@ -148,7 +151,7 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_on_ring(switch_core_session_t *session)
+static switch_status_t channel_on_routing(switch_core_session_t *session)
 {
 	switch_channel_t *channel = NULL;
 	private_t *tech_pvt = NULL;
@@ -159,7 +162,7 @@
 	tech_pvt = switch_core_session_get_private(session);
 	assert(tech_pvt != NULL);
 
-	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s CHANNEL RING\n", switch_channel_get_name(channel));
+	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s CHANNEL ROUTING\n", switch_channel_get_name(channel));
 
 	return SWITCH_STATUS_SUCCESS;
 }
@@ -245,39 +248,18 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_on_loopback(switch_core_session_t *session)
+static switch_status_t channel_on_exchange_media(switch_core_session_t *session)
 {
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CHANNEL LOOPBACK\n");
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_on_transmit(switch_core_session_t *session)
+static switch_status_t channel_on_soft_execute(switch_core_session_t *session)
 {
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CHANNEL TRANSMIT\n");
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_waitfor_read(switch_core_session_t *session, int ms, int stream_id)
-{
-	private_t *tech_pvt = NULL;
-
-	tech_pvt = switch_core_session_get_private(session);
-	assert(tech_pvt != NULL);
-
-	return SWITCH_STATUS_SUCCESS;
-}
-
-static switch_status_t channel_waitfor_write(switch_core_session_t *session, int ms, int stream_id)
-{
-	private_t *tech_pvt = NULL;
-
-	tech_pvt = switch_core_session_get_private(session);
-	assert(tech_pvt != NULL);
-
-	return SWITCH_STATUS_SUCCESS;
-
-}
-
 static switch_status_t channel_send_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf)
 {
 	private_t *tech_pvt = switch_core_session_get_private(session);
@@ -286,7 +268,7 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, switch_io_flag_t flags, int stream_id)
+static switch_status_t channel_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id)
 {
 	switch_channel_t *channel = NULL;
 	private_t *tech_pvt = NULL;
@@ -319,17 +301,14 @@
 				continue;
 			}
 			*frame = &tech_pvt->read_frame;
-			return SWITCH_STATUS_SUCCESS;
-		}
-
-		if (timeout > -1) {
-			elapsed = (unsigned int) ((switch_time_now() - started) / 1000);
-			if (elapsed >= (unsigned int) timeout) {
-				return SWITCH_STATUS_SUCCESS;
+#ifdef BIGENDIAN
+			if (switch_test_flag(tech_pvt, TFLAG_LINEAR)) {
+				switch_swap_linear((*frame)->data, (int) (*frame)->datalen / 2);
 			}
+#endif
+			return SWITCH_STATUS_SUCCESS;
 		}
 
-
 		switch_yield(1000);
 	}
 
@@ -347,7 +326,7 @@
 
 }
 
-static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, switch_io_flag_t flags, int stream_id)
+static switch_status_t channel_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id)
 {
 	switch_channel_t *channel = NULL;
 	private_t *tech_pvt = NULL;
@@ -479,11 +458,11 @@
 
 switch_state_handler_table_t reference_state_handlers = {
 	/*.on_init */ channel_on_init,
-	/*.on_ring */ channel_on_ring,
+	/*.on_routing */ channel_on_routing,
 	/*.on_execute */ channel_on_execute,
 	/*.on_hangup */ channel_on_hangup,
-	/*.on_loopback */ channel_on_loopback,
-	/*.on_transmit */ channel_on_transmit
+	/*.on_exchange_media */ channel_on_exchange_media,
+	/*.on_soft_execute */ channel_on_soft_execute
 };
 
 switch_io_routines_t reference_io_routines = {
@@ -491,8 +470,6 @@
 	/*.read_frame */ channel_read_frame,
 	/*.write_frame */ channel_write_frame,
 	/*.kill_channel */ channel_kill_channel,
-	/*.waitfor_read */ channel_waitfor_read,
-	/*.waitfor_write */ channel_waitfor_write,
 	/*.send_dtmf */ channel_send_dtmf,
 	/*.receive_message*/ channel_receive_message,
 	/*.receive_event */ channel_receive_event

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	Tue May 13 23:37:33 2008
@@ -50,15 +50,15 @@
 
 static switch_status_t sofia_on_init(switch_core_session_t *session);
 
-static switch_status_t sofia_on_loopback(switch_core_session_t *session);
-static switch_status_t sofia_on_transmit(switch_core_session_t *session);
+static switch_status_t sofia_on_exchange_media(switch_core_session_t *session);
+static switch_status_t sofia_on_soft_execute(switch_core_session_t *session);
 static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session,
 												  switch_caller_profile_t *outbound_profile, switch_core_session_t **new_session,
 												  switch_memory_pool_t **pool, switch_originate_flag_t flags);
-static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, switch_io_flag_t flags, int stream_id);
-static switch_status_t sofia_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, switch_io_flag_t flags, int stream_id);
-static switch_status_t sofia_read_video_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, switch_io_flag_t flags, int stream_id);
-static switch_status_t sofia_write_video_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, switch_io_flag_t flags, int stream_id);
+static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id);
+static switch_status_t sofia_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id);
+static switch_status_t sofia_read_video_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id);
+static switch_status_t sofia_write_video_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id);
 static switch_status_t sofia_kill_channel(switch_core_session_t *session, int sig);
 
 /* BODY OF THE MODULE */
@@ -103,20 +103,20 @@
 		}
 	}
 
-	/* Move Channel's State Machine to RING */
-	switch_channel_set_state(channel, CS_RING);
+	/* Move channel's state machine to ROUTING */
+	switch_channel_set_state(channel, CS_ROUTING);
 	assert( switch_channel_get_state(channel) != CS_INIT);
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t sofia_on_ring(switch_core_session_t *session)
+static switch_status_t sofia_on_routing(switch_core_session_t *session)
 {
 	private_object_t *tech_pvt = (private_object_t *) switch_core_session_get_private(session);
 	switch_assert(tech_pvt != NULL);
 
 	switch_clear_flag_locked(tech_pvt, TFLAG_SIP_HOLD);
 	
-	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s SOFIA RING\n", switch_channel_get_name(switch_core_session_get_channel(session)));
+	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s SOFIA ROUTING\n", switch_channel_get_name(switch_core_session_get_channel(session)));
 
 	return SWITCH_STATUS_SUCCESS;
 }
@@ -226,9 +226,11 @@
 	
 	if (!switch_strlen_zero(ps_cause) && !strncasecmp(ps_cause, "sip:", 4)) {
 		int new_cause = atoi(ps_cause + 4);
-		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);
-		sip_cause = new_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);
+			sip_cause = new_cause;
+		}
 	}
 
 	if (switch_test_flag(tech_pvt, TFLAG_SIP_HOLD) && cause != SWITCH_CAUSE_ATTENDED_TRANSFER) {
@@ -316,13 +318,13 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t sofia_on_loopback(switch_core_session_t *session)
+static switch_status_t sofia_on_exchange_media(switch_core_session_t *session)
 {
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "SOFIA LOOPBACK\n");
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t sofia_on_transmit(switch_core_session_t *session)
+static switch_status_t sofia_on_soft_execute(switch_core_session_t *session)
 {
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "SOFIA TRANSMIT\n");
 	return SWITCH_STATUS_SUCCESS;
@@ -335,6 +337,8 @@
 	switch_status_t status;
 	uint32_t session_timeout = tech_pvt->profile->session_timeout;
 	const char *val;
+	const char *b_sdp = NULL;
+	int is_proxy = 0;
 
 	if (switch_test_flag(tech_pvt, TFLAG_ANS) || switch_channel_test_flag(channel, CF_OUTBOUND)) {
 		return SWITCH_STATUS_SUCCESS;
@@ -342,11 +346,12 @@
 
 	switch_set_flag_locked(tech_pvt, TFLAG_ANS);
 
-	if (switch_channel_test_flag(channel, CF_PROXY_MODE) || switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {
-		const char *sdp = NULL;
-		if ((sdp = switch_channel_get_variable(channel, SWITCH_B_SDP_VARIABLE))) {
-			tech_pvt->local_sdp_str = switch_core_session_strdup(session, sdp);
-		}
+	b_sdp = switch_channel_get_variable(channel, SWITCH_B_SDP_VARIABLE);
+	is_proxy = (switch_channel_test_flag(channel, CF_PROXY_MODE) || switch_channel_test_flag(channel, CF_PROXY_MEDIA));
+	
+	if (b_sdp && is_proxy) {
+		tech_pvt->local_sdp_str = switch_core_session_strdup(session, b_sdp);
+
 		if (switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {
 			sofia_glue_tech_patch_sdp(tech_pvt);
 			if (sofia_glue_activate_rtp(tech_pvt, 0) != SWITCH_STATUS_SUCCESS) {
@@ -354,12 +359,20 @@
 			}
 		}
 	} else {
-		if (switch_test_flag(tech_pvt, TFLAG_LATE_NEGOTIATION)) {
+		if ((is_proxy && !b_sdp) || switch_test_flag(tech_pvt, TFLAG_LATE_NEGOTIATION)) {
 			switch_clear_flag_locked(tech_pvt, TFLAG_LATE_NEGOTIATION);
+
+			if (is_proxy) {
+				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Disabling proxy mode due to call answer with no bridge\n");
+				switch_channel_clear_flag(channel, CF_PROXY_MEDIA);
+				switch_channel_clear_flag(channel, CF_PROXY_MODE);
+			}
+
 			if (!switch_channel_test_flag(tech_pvt->channel, CF_OUTBOUND)) {
 				const char *r_sdp = switch_channel_get_variable(channel, SWITCH_R_SDP_VARIABLE);
 				tech_pvt->num_codecs = 0;
 				sofia_glue_tech_prepare_codecs(tech_pvt);
+				
 				if (sofia_glue_tech_media(tech_pvt, r_sdp) != SWITCH_STATUS_SUCCESS) {
 					switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "CODEC NEGOTIATION ERROR");
 					//nua_respond(tech_pvt->nh, SIP_488_NOT_ACCEPTABLE, TAG_END());
@@ -407,7 +420,7 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t sofia_read_video_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, switch_io_flag_t flags, int stream_id)
+static switch_status_t sofia_read_video_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id)
 {
 	private_object_t *tech_pvt = (private_object_t *) switch_core_session_get_private(session);
 	switch_channel_t *channel = switch_core_session_get_channel(session);
@@ -442,7 +455,7 @@
 		while (switch_test_flag(tech_pvt, TFLAG_IO) && tech_pvt->video_read_frame.datalen == 0) {
 			tech_pvt->video_read_frame.flags = SFF_NONE;
 
-			status = switch_rtp_zerocopy_read_frame(tech_pvt->video_rtp_session, &tech_pvt->video_read_frame);
+			status = switch_rtp_zerocopy_read_frame(tech_pvt->video_rtp_session, &tech_pvt->video_read_frame, flags);
 			if (status != SWITCH_STATUS_SUCCESS && status != SWITCH_STATUS_BREAK) {
 				if (status == SWITCH_STATUS_TIMEOUT) {
 					switch_channel_hangup(tech_pvt->channel, SWITCH_CAUSE_MEDIA_TIMEOUT);
@@ -468,7 +481,7 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t sofia_write_video_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, switch_io_flag_t flags, int stream_id)
+static switch_status_t sofia_write_video_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id)
 {
 	private_object_t *tech_pvt = (private_object_t *) switch_core_session_get_private(session);
 	switch_channel_t *channel = switch_core_session_get_channel(session);
@@ -503,7 +516,7 @@
 	return status;
 }
 
-static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, switch_io_flag_t flags, int stream_id)
+static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id)
 {
 	private_object_t *tech_pvt =  switch_core_session_get_private(session);
 	switch_channel_t *channel = switch_core_session_get_channel(session);
@@ -544,7 +557,7 @@
 		while (switch_test_flag(tech_pvt, TFLAG_IO) && tech_pvt->read_frame.datalen == 0) {
 			tech_pvt->read_frame.flags = SFF_NONE;
 
-			status = switch_rtp_zerocopy_read_frame(tech_pvt->rtp_session, &tech_pvt->read_frame);
+			status = switch_rtp_zerocopy_read_frame(tech_pvt->rtp_session, &tech_pvt->read_frame, flags);
 			
 			if (status != SWITCH_STATUS_SUCCESS && status != SWITCH_STATUS_BREAK) {
 				if (status == SWITCH_STATUS_TIMEOUT) {
@@ -588,7 +601,7 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t sofia_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, switch_io_flag_t flags, int stream_id)
+static switch_status_t sofia_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id)
 {
 	private_object_t *tech_pvt = switch_core_session_get_private(session);
 	switch_channel_t *channel = switch_core_session_get_channel(session);
@@ -673,16 +686,6 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t sofia_waitfor_read(switch_core_session_t *session, int ms, int stream_id)
-{
-	return SWITCH_STATUS_SUCCESS;
-}
-
-static switch_status_t sofia_waitfor_write(switch_core_session_t *session, int ms, int stream_id)
-{
-	return SWITCH_STATUS_SUCCESS;
-}
-
 static switch_status_t sofia_send_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf)
 {
 	private_object_t *tech_pvt;
@@ -1114,7 +1117,7 @@
 		msg_nh = nua_handle(tech_pvt->profile->nua, NULL,
 							SIPTAG_FROM_STR(tech_pvt->chat_from),
 							NUTAG_URL(tech_pvt->chat_to), SIPTAG_TO_STR(tech_pvt->chat_to), SIPTAG_CONTACT_STR(tech_pvt->profile->url), TAG_END());
-
+		nua_handle_bind(msg_nh, &mod_sofia_globals.destroy_private);
 		nua_message(msg_nh, SIPTAG_CONTENT_TYPE_STR("text/html"), SIPTAG_PAYLOAD_STR(body), TAG_END());
 	}
 
@@ -1623,8 +1626,6 @@
 	/*.read_frame */ sofia_read_frame,
 	/*.write_frame */ sofia_write_frame,
 	/*.kill_channel */ sofia_kill_channel,
-	/*.waitfor_read */ sofia_waitfor_read,
-	/*.waitfor_read */ sofia_waitfor_write,
 	/*.send_dtmf */ sofia_send_dtmf,
 	/*.receive_message */ sofia_receive_message,
 	/*.receive_event */ sofia_receive_event,
@@ -1635,12 +1636,12 @@
 
 switch_state_handler_table_t sofia_event_handlers = {
 	/*.on_init */ sofia_on_init,
-	/*.on_ring */ sofia_on_ring,
+	/*.on_routing */ sofia_on_routing,
 	/*.on_execute */ sofia_on_execute,
 	/*.on_hangup */ sofia_on_hangup,
-	/*.on_loopback */ sofia_on_loopback,
-	/*.on_transmit */ sofia_on_transmit,
-	/*.on_hold */ NULL,
+	/*.on_exchange_media */ sofia_on_exchange_media,
+	/*.on_soft_execute */ sofia_on_soft_execute,
+	/*.on_consume_media */ NULL,
 	/*.on_hibernate*/ sofia_on_hibernate,
 	/*.on_reset*/ sofia_on_reset
 };
@@ -1899,6 +1900,7 @@
 	silence_frame.flags = SFF_CNG;
 
 	memset(&mod_sofia_globals, 0, sizeof(mod_sofia_globals));
+	mod_sofia_globals.destroy_private.destroy_nh = 1;
 	mod_sofia_globals.pool = pool;
 	switch_mutex_init(&mod_sofia_globals.mutex, SWITCH_MUTEX_NESTED, mod_sofia_globals.pool);
 

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	Tue May 13 23:37:33 2008
@@ -100,6 +100,8 @@
 	char uuid[SWITCH_UUID_FORMATTED_LENGTH + 1];
 	sofia_gateway_t *gateway;
 	char gateway_name[512];
+	int destroy_nh;
+	int destroy_me;
 };
 
 #define set_param(ptr,val) if (ptr) {free(ptr) ; ptr = NULL;} if (val) {ptr = strdup(val);}
@@ -194,6 +196,8 @@
 	char guess_ip[80];
 	switch_queue_t *presence_queue;
 	switch_queue_t *mwi_queue;
+	struct sofia_private destroy_private;
+	struct sofia_private keep_private;
 };
 extern struct mod_sofia_globals mod_sofia_globals;
 
@@ -307,7 +311,6 @@
 	switch_mutex_t *gateway_mutex;
 	sofia_gateway_t *gateways;
 	su_home_t *home;
-	switch_hash_t *sub_hash;
 	switch_hash_t *chat_hash;
 	switch_core_db_t *master_db;
 	switch_thread_rwlock_t *rwlock;

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	Tue May 13 23:37:33 2008
@@ -74,15 +74,12 @@
 							   char const *phrase,
 							   nua_t *nua, sofia_profile_t *profile, nua_handle_t *nh, sofia_private_t *sofia_private, sip_t const *sip, tagi_t tags[])
 {
-	if (status >= 300 && sip) {
-		const char *call_id = sip->sip_call_id->i_id;
+	if (status >= 300 && sip && sip->sip_call_id) {
 		char *sql;
-		switch_core_hash_delete(profile->sub_hash, call_id);
-		
-		sql = switch_mprintf("delete from sip_subscriptions where call_id='%q'", call_id);
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "delete subscriptions for failed notify\n");
+		sql = switch_mprintf("delete from sip_subscriptions where call_id='%q'", sip->sip_call_id->i_id);
 		switch_assert(sql != NULL);
 		sofia_glue_execute_sql(profile, &sql, SWITCH_TRUE);
-		nua_handle_destroy(nh);
 	}
 }
 
@@ -166,21 +163,6 @@
 
 void sofia_handle_sip_r_message(int status, sofia_profile_t *profile, nua_handle_t *nh, sip_t const *sip)
 {
-	if (status == 503) {
-		const char *user = NULL, *host = NULL;
-		char *sql;
-
-		if (sip->sip_to && sip->sip_to->a_url) {
-			user = sip->sip_to->a_url->url_user;
-			host = sip->sip_to->a_url->url_host;
-
-			sql = switch_mprintf("delete from sip_registrations where sip_user='%q' and sip_host='%q'", user, host);
-			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Deleting registration for %s@%s\n", user, host);
-			sofia_glue_execute_sql(profile, &sql, SWITCH_TRUE);
-		}
-	}
-
-	nua_handle_destroy(nh);
 }
 
 void sofia_event_callback(nua_event_t event,
@@ -199,7 +181,7 @@
 	switch_channel_t *channel = NULL;
 	sofia_gateway_t *gateway = NULL;
 
-	if (sofia_private) {
+	if (sofia_private && sofia_private != &mod_sofia_globals.destroy_private && sofia_private != &mod_sofia_globals.keep_private) {
 		if ((gateway = sofia_private->gateway)) {
 			if (switch_thread_rwlock_tryrdlock(gateway->profile->rwlock) != SWITCH_STATUS_SUCCESS) {
 				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Profile %s is locked\n", gateway->profile->name);
@@ -361,6 +343,30 @@
 
   done:
 
+	switch (event) {
+	case nua_i_subscribe:
+		break;
+	default:
+		if (nh && ((sofia_private && sofia_private->destroy_nh) || !nua_handle_magic(nh))) {
+			//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Destroy handle [%s]\n", nua_event_name(event));
+			if (sofia_private) {
+				nua_handle_bind(nh, NULL);
+			}
+			nua_handle_destroy(nh);
+			nh = NULL;
+		}
+		break;
+	}
+
+	if (sofia_private && sofia_private->destroy_me) {
+		if (nh) {
+			nua_handle_bind(nh, NULL);
+		}
+		sofia_private->destroy_me = 12;
+		free(sofia_private);
+		sofia_private = NULL;
+	}
+
 	if (gateway) {
 		sofia_reg_release_gateway(gateway);
 	}
@@ -689,7 +695,6 @@
 
 	sofia_glue_del_profile(profile);
 	switch_core_hash_destroy(&profile->chat_hash);
-	switch_core_hash_destroy(&profile->sub_hash);
 
 	switch_thread_rwlock_unlock(profile->rwlock);
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Write unlock %s\n", profile->name);
@@ -1068,7 +1073,6 @@
 
 				profile->dbname = switch_core_strdup(profile->pool, url);
 				switch_core_hash_init(&profile->chat_hash, profile->pool);
-				switch_core_hash_init(&profile->sub_hash, profile->pool);
 				switch_thread_rwlock_create(&profile->rwlock, profile->pool);
 				switch_mutex_init(&profile->flag_mutex, SWITCH_MUTEX_NESTED, profile->pool);
 				profile->dtmf_duration = 100;
@@ -1524,11 +1528,12 @@
 
 	if (sofia_private && !switch_strlen_zero(sofia_private->gateway_name)) {
 		gateway = sofia_reg_find_gateway(sofia_private->gateway_name);
+		sofia_private->destroy_me = 1;
 	}
 
 	if (gateway) {
 		if (status == 200 || status == 404) {
-			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "ping success %s\n", gateway->name);
+			//switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "ping success %s\n", gateway->name);
 			gateway->status = SOFIA_GATEWAY_UP;
 		} else {
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "ping failed %s\n", gateway->name);
@@ -1540,8 +1545,6 @@
 		}
 		gateway->ping = switch_timestamp(NULL) + gateway->ping_freq;
 		sofia_reg_release_gateway(gateway);
-		nua_handle_bind(nh, NULL);
-		free(sofia_private);
 		gateway->pinging = 0;
 	} else if ((profile->pflags & PFLAG_UNREG_OPTIONS_FAIL) && status != 200 && sip && sip->sip_to) {
 		char *sql;
@@ -1558,7 +1561,6 @@
 								   );
 		sofia_glue_execute_sql(profile, &sql, SWITCH_TRUE);
 	}
-	nua_handle_destroy(nh);
 }
 
 
@@ -2109,10 +2111,12 @@
                     } else {
                         cause = sofia_glue_sip_cause_to_freeswitch(status);
                     }
-					switch_snprintf(st, sizeof(st), "%d", status);
-					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 (status) {
+						switch_snprintf(st, sizeof(st), "%d", status);
+						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);
+					}
 					switch_snprintf(st, sizeof(st), "%d", cause);
 					switch_channel_set_variable(channel, "sip_term_cause", st);
 					switch_channel_hangup(channel, cause);
@@ -2122,14 +2126,14 @@
 			if (tech_pvt->sofia_private) {
 				sofia_private = tech_pvt->sofia_private;
 				tech_pvt->sofia_private = NULL;
-				free(sofia_private);
+				sofia_private->destroy_me = 1;
 			}
 
 			tech_pvt->nh = NULL;		
 
 
 		} else if (sofia_private) {
-			free(sofia_private);
+			sofia_private->destroy_me = 1;
 		}
 
 		if (nh) {
@@ -2168,13 +2172,6 @@
 		goto done;
 	}
 
-	if (switch_channel_test_flag(channel_a, CF_PROXY_MODE)) {
-		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Transfer on bypass media not allowed.\n");
-		nua_notify(tech_pvt->nh, NUTAG_NEWSUB(1), SIPTAG_CONTENT_TYPE_STR("message/sipfrag"),
-				   NUTAG_SUBSTATE(nua_substate_terminated), SIPTAG_PAYLOAD_STR("SIP/2.0 403 Forbidden"), SIPTAG_EVENT_STR(etmp), TAG_END());
-		goto done;
-	}
-
 	from = sip->sip_from;
 	to = sip->sip_to;
 	
@@ -2200,6 +2197,15 @@
 			sip_replaces_t *replaces;
 			nua_handle_t *bnh;
 			char *rep;
+			
+			if (switch_channel_test_flag(channel_a, CF_PROXY_MODE)) {
+				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot Attended Transfer BYPASS MEDIA CALLS!\n");
+				switch_channel_set_variable(channel_a, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "ATTENDED_TRANSFER_ERROR");
+				nua_notify(tech_pvt->nh, NUTAG_NEWSUB(1), SIPTAG_CONTENT_TYPE_STR("message/sipfrag"),
+						   NUTAG_SUBSTATE(nua_substate_terminated), SIPTAG_PAYLOAD_STR("SIP/2.0 403 Forbidden"), SIPTAG_EVENT_STR(etmp),
+						   TAG_END());
+				goto done;
+			}
 
 			if ((rep = strchr(refer_to->r_url->url_headers, '='))) {
 				const char *br_a = NULL, *br_b = NULL;
@@ -2220,6 +2226,7 @@
 					sofia_private_t *b_private = NULL;
 					private_object_t *b_tech_pvt = NULL;
 					switch_core_session_t *b_session = NULL;
+					
 
 					switch_channel_set_variable(channel_a, SOFIA_REPLACES_HEADER, rep);
 					if ((b_private = nua_handle_magic(bnh))) {
@@ -2358,7 +2365,7 @@
 														  &tsession, &cause, exten, timeout, &noop_state_handler, NULL, NULL, NULL, SOF_NONE);
 
 							switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot Create Outgoing Channel! [%s]\n", exten);
-							nua_notify(tech_pvt->nh, NUTAG_NEWSUB(1), SIPTAG_CONTENT_TYPE_STR("message/sipfrag"),
+							nua_notify(tech_pvt->nh, NUTAG_NEWSUB(1), SIPTAG_CONTENT_TYPE_STR("messsage/sipfrag"),
 									   NUTAG_SUBSTATE(nua_substate_terminated),
 									   SIPTAG_PAYLOAD_STR("SIP/2.0 403 Forbidden"), SIPTAG_EVENT_STR(etmp), TAG_END());
 							
@@ -2415,6 +2422,9 @@
 				if (!switch_strlen_zero(full_ref_to)) {
 					switch_channel_set_variable(b_channel, SOFIA_REFER_TO_VARIABLE, full_ref_to);
 				}
+
+
+
 				switch_ivr_session_transfer(b_session, exten, NULL, NULL);
 				switch_core_session_rwunlock(b_session);
 			}
@@ -3143,7 +3153,6 @@
 	nua_respond(nh, SIP_200_OK,
 				NUTAG_WITH_THIS(nua),
 				TAG_END());
-	nua_handle_destroy(nh);
 }
 
 static void sofia_info_send_sipfrag(switch_core_session_t *aleg, switch_core_session_t *bleg)

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	Tue May 13 23:37:33 2008
@@ -107,7 +107,6 @@
 						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());
 
 	switch_safe_free(ffrom);
@@ -189,6 +188,11 @@
 	return r;
 }
 
+struct mwi_helper {
+	sofia_profile_t *profile;
+	int total;
+};
+
 static void actual_sofia_presence_mwi_event_handler(switch_event_t *event)
 {
 	char *account, *dup_account, *yn, *host, *user;
@@ -196,8 +200,9 @@
 	sofia_profile_t *profile = NULL;
 	switch_stream_handle_t stream = { 0 };
 	switch_event_header_t *hp;
-	int count = 0;
-	
+	struct mwi_helper h = { 0 };
+	char *pname = NULL;
+
 	switch_assert(event != NULL);
 
 	if (!(account = switch_event_get_header(event, "mwi-message-account"))) {
@@ -214,11 +219,29 @@
 	switch_assert(dup_account != NULL);
 	sofia_glue_get_user_host(dup_account, &user, &host);
 
-	if (!host || !(profile = sofia_glue_find_profile(host))) {
-		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot find profile for host %s\n", switch_str_nil(host));
-		return;
+
+	if ((pname = switch_event_get_header(event, "sofia-profile"))) {
+		if (!(profile = sofia_glue_find_profile(pname))) {
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "no profile %s\n", pname);
+		}
+	}
+
+	if (!profile) {
+		if (!host || !(profile = sofia_glue_find_profile(host))) {
+			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot find profile %s\n", switch_str_nil(host));
+			switch_safe_free(dup_account);
+			return;
+		}
 	}
 	
+	if (profile->domain_name && profile->domain_name != host) {
+		host = profile->domain_name;
+	}
+
+	h.profile = profile;
+	h.total = 0;
+
+
 	SWITCH_STANDARD_STREAM(stream);
 
 	for (hp = event->headers; hp; hp = hp->next) {
@@ -240,19 +263,18 @@
 						 stream.data, user, host);
 	
 
-
 	switch_assert (sql != NULL);
 	sofia_glue_execute_sql_callback(profile,
 									SWITCH_FALSE,
 									profile->ireg_mutex,
 									sql,
 									sofia_presence_mwi_callback,
-									&count);
+									&h);
 
 	switch_safe_free(sql);
 
 	
-	if (!count) {
+	if (h.total) {
 		sql = switch_mprintf("select sip_user,sip_host,contact,'%q' from sip_registrations where sip_user='%q' and sip_host='%q'", 
 							 stream.data, user, host);
 	
@@ -264,7 +286,7 @@
 										profile->ireg_mutex,
 										sql,
 										sofia_presence_mwi_callback2,
-										profile);
+										&h);
 		
 		switch_safe_free(sql);
 	}
@@ -641,6 +663,7 @@
 	if (!strcasecmp(event_name, "message-summary")) {
 		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", user, host);
+			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "VM-Sofia-Profile", "%s", profile->name);
 			switch_event_fire(&event);
 		}
 		return 0;
@@ -701,7 +724,7 @@
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "channel-state", "%s", "CS_HANGUP");
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "answer-state", "%s", "resubscribe");
 		} else {
-			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "channel-state", "%s", "CS_RING");
+			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "channel-state", "%s", "CS_ROUTING");
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "unique-id", "%s", uuid);
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "answer-state", "%s", state);
 			switch_event_add_header(event, SWITCH_STACK_BOTTOM, "astate", "%s", state);
@@ -781,8 +804,8 @@
 			exptime = tmp - switch_timestamp(NULL); 
 		}
 	}
-
-	if (!(nh = (nua_handle_t *) switch_core_hash_find(profile->sub_hash, call_id))) {
+	
+	if (!(nh = nua_handle_by_call_id(profile->nua, call_id))) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot find handle for %s\n", call_id);
 		return 0;
 	}
@@ -1043,16 +1066,11 @@
 	}
 
 	switch_snprintf(exp, sizeof(exp), "active;expires=%ld", (long) exptime); 
-
+	nua_handle_bind(nh, &mod_sofia_globals.keep_private);
 	nua_notify(nh,
-			   NUTAG_NEWSUB(1),
 			   SIPTAG_SUBSCRIPTION_STATE_STR(exp),
 			   SIPTAG_EVENT_STR(event), SIPTAG_CONTENT_TYPE_STR(ct), SIPTAG_PAYLOAD_STR(pl), TAG_END());
 
-	if (done) {
-		switch_core_hash_delete(profile->sub_hash, call_id);
-	}
-
  end:
 
 	switch_safe_free(id);
@@ -1079,18 +1097,15 @@
 	char *expires = argv[10];
 	char *body = argv[13];
 	char *exp;
-	sofia_profile_t *profile = NULL;
+	//sofia_profile_t *profile = NULL;
 	char *id = NULL;
 	nua_handle_t *nh;
 	int expire_sec = atoi(expires);
-	int *total = (int *) pArg;
+	//int *total = (int *) pArg;
+	struct mwi_helper *h = (struct mwi_helper *) pArg;
 	
-	if (!(profile = sofia_glue_find_profile(sub_to_host))) {
-		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot find profile for host %s\n", sub_to_host);
-		return 0;
-	}
 	
-	if (!(nh = (nua_handle_t *) switch_core_hash_find(profile->sub_hash, call_id))) {
+	if (!(nh = nua_handle_by_call_id(h->profile->nua, call_id))) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot find handle for %s\n", call_id);
 		return 0;
 	}
@@ -1101,17 +1116,15 @@
 		expire_sec = 3600;
 	}
 	exp = switch_mprintf("active;expires=%ld", expire_sec);
-
+	nua_handle_bind(nh, &mod_sofia_globals.keep_private);
 	nua_notify(nh,
-			   NUTAG_NEWSUB(1),
 			   SIPTAG_SUBSCRIPTION_STATE_STR(exp),
 			   SIPTAG_EVENT_STR(event), SIPTAG_CONTENT_TYPE_STR("application/simple-message-summary"), SIPTAG_PAYLOAD_STR(body), TAG_END());
 	
 	switch_safe_free(id);
 	switch_safe_free(exp);
 
-	sofia_glue_release_profile(profile);
-	(*total)++;
+	h->total++;
 	return 0;
 }
 
@@ -1125,25 +1138,20 @@
 	char *event = "message-summary";
 	char *contact = argv[2];
 	char *body = argv[3];
-	sofia_profile_t *profile = NULL;
 	char *id = NULL;
 	nua_handle_t *nh;
-
+	struct mwi_helper *h = (struct mwi_helper *) pArg;
+	
 	
-	if (!(profile = sofia_glue_find_profile(sub_to_host))) {
-		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot find profile for host %s\n", sub_to_host);
-		return 0;
-	}
-
 	id = switch_mprintf("sip:%s@%s", sub_to_user, sub_to_host);
 
 	contact = sofia_glue_get_url_from_contact(contact, 0);
 	
-	nh = nua_handle(profile->nua, NULL,
+	nh = nua_handle(h->profile->nua, NULL,
 					NUTAG_URL(contact),
 					SIPTAG_FROM_STR(id),
 					SIPTAG_TO_STR(id),
-					SIPTAG_CONTACT_STR(profile->url),
+					SIPTAG_CONTACT_STR(h->profile->url),
 					TAG_END());
 	
 	nua_notify(nh,
@@ -1152,8 +1160,6 @@
 
 	switch_safe_free(id);
 	
-	sofia_glue_release_profile(profile);
-	
 	return 0;
 }
 
@@ -1310,7 +1316,6 @@
 
 		if (sub_state == nua_substate_terminated) {
 			sstr = switch_mprintf("terminated");
-			switch_core_hash_delete(profile->sub_hash, call_id);
 		} else {
 			sip_accept_t *ap = sip->sip_accept;
 			char accept[256] = "";
@@ -1327,9 +1332,6 @@
 			sofia_glue_execute_sql(profile, &sql, SWITCH_TRUE);
 
 			sstr = switch_mprintf("active;expires=%ld", exp_raw);
-			if (status < 200) {
-				switch_core_hash_insert(profile->sub_hash, call_id, nh);
-			}
 		}
 	
 		switch_mutex_unlock(profile->ireg_mutex);
@@ -1347,6 +1349,7 @@
 		sent_reply++;
 
 #if 0
+
 		nua_notify(nh, 
 				   NUTAG_NEWSUB(1),
 				   SIPTAG_SUBSCRIPTION_STATE_STR(sstr), SIPTAG_EVENT_STR(event), 

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	Tue May 13 23:37:33 2008
@@ -87,7 +87,7 @@
 			pvt = malloc(sizeof(*pvt));
 			switch_assert(pvt);
 			memset(pvt, 0, sizeof(*pvt));
-			
+			pvt->destroy_nh = 1;
 			switch_copy_string(pvt->gateway_name, gateway_ptr->name, sizeof(pvt->gateway_name));
 			nua_handle_bind(nh, pvt);
 
@@ -97,6 +97,7 @@
 		
 		switch (ostate) {
 		case REG_STATE_NOREG:
+			gateway_ptr->status = SOFIA_GATEWAY_UP;
 			break;
 		case REG_STATE_REGISTER:
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "registered %s\n", gateway_ptr->name);
@@ -110,7 +111,7 @@
 			gateway_ptr->state = REG_STATE_NOREG;
 			break;
 		case REG_STATE_UNREGED:
-
+			gateway_ptr->status = SOFIA_GATEWAY_DOWN;
             sofia_reg_kill_reg(gateway_ptr, 1);
 
 			if ((gateway_ptr->nh = nua_handle(gateway_ptr->profile->nua, NULL,
@@ -196,7 +197,7 @@
 	contact = sofia_glue_get_url_from_contact(argv[3], 1);
 
 	nh = nua_handle(profile->nua, NULL, SIPTAG_FROM_STR(profile->url), SIPTAG_TO_STR(to), NUTAG_URL(contact), SIPTAG_CONTACT_STR(profile->url), TAG_END());
-
+	nua_handle_bind(nh, &mod_sofia_globals.destroy_private);
 	nua_options(nh, TAG_END());
 
 	switch_safe_free(contact);
@@ -204,6 +205,20 @@
 	return 0;
 }
 
+
+int sofia_sub_del_callback(void *pArg, int argc, char **argv, char **columnNames)
+{
+	sofia_profile_t *profile = (sofia_profile_t *) pArg;
+	nua_handle_t *nh;
+
+	if (argv[0]) {
+		if ((nh = nua_handle_by_call_id(profile->nua, argv[0]))) {
+			nua_handle_destroy(nh);
+		}
+	}
+	return 0;
+}
+
 int sofia_reg_del_callback(void *pArg, int argc, char **argv, char **columnNames)
 {
 	switch_event_t *s_event;
@@ -262,13 +277,15 @@
     }
 #endif
 
+
+	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);
 	} else {
 		switch_snprintf(sql, sizeof(sql), "select *,'%s' from sip_registrations where expires > 0", profile->name);
 	}
 
-	switch_mutex_lock(profile->ireg_mutex);
 	sofia_glue_execute_sql_callback(profile,
 									SWITCH_TRUE,
 									NULL,
@@ -291,6 +308,21 @@
 
 	sofia_glue_actually_execute_sql(profile, SWITCH_FALSE, sql, NULL);
 	
+
+
+	if (now) {
+		switch_snprintf(sql, sizeof(sql), "select call_id from sip_subscriptions where expires > 0 and expires <= %ld", (long) now);
+	} else {
+		switch_snprintf(sql, sizeof(sql), "select call_id from sip_subscriptions where expires > 0");
+	}
+
+	sofia_glue_execute_sql_callback(profile,
+									SWITCH_TRUE,
+									NULL,
+									sql,
+									sofia_sub_del_callback,
+									profile);
+
 	if (now) {
 		switch_snprintf(sql, sizeof(sql), "delete from sip_subscriptions where expires > 0 and expires <= %ld", (long) now);
 	} else {
@@ -656,12 +688,14 @@
 
 	if (regtype == REG_REGISTER) {
 		char *new_contact = NULL;
+
 		if (exptime) {
 			new_contact = switch_mprintf("%s;expires=%ld", contact_str, (long)exptime);
 			nua_respond(nh, SIP_200_OK, SIPTAG_CONTACT_STR(new_contact), NUTAG_WITH_THIS(nua), TAG_END());
 			switch_safe_free(new_contact);
 			if (switch_event_create(&event, SWITCH_EVENT_MESSAGE_QUERY) == SWITCH_STATUS_SUCCESS) {
 				switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Message-Account", "sip:%s@%s", to_user, to_host);
+				switch_event_add_header(event, SWITCH_STACK_BOTTOM, "VM-Sofia-Profile", "%s", profile->name);
 				switch_event_fire(&event);
 			}
 		} else {

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_wanpipe/libsangoma/libsangoma.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_wanpipe/libsangoma/libsangoma.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_wanpipe/libsangoma/libsangoma.c	Tue May 13 23:37:33 2008
@@ -826,7 +826,7 @@
 		break;
 
 	case WP_TDM_EVENT_RING_TRIP:
-		printf("%d: GOT RING TRIP EVENT\n",(int)fd);
+		printf("%d: GOT ROUTING TRIP EVENT\n",(int)fd);
 		if (tdm_api->wp_tdm_event.wp_ringtrip_event) {
 			tdm_api->wp_tdm_event.wp_ringtrip_event(fd,
 						rx_event->wp_tdm_api_event_ring_state);

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_wanpipe/libsangoma/sangoma_pri.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_wanpipe/libsangoma/sangoma_pri.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_wanpipe/libsangoma/sangoma_pri.c	Tue May 13 23:37:33 2008
@@ -52,7 +52,7 @@
 	{2, SANGOMA_PRI_EVENT_DCHAN_DOWN, "DCHAN_DOWN"},
 	{3, SANGOMA_PRI_EVENT_RESTART, "RESTART"},
 	{4, SANGOMA_PRI_EVENT_CONFIG_ERR, "CONFIG_ERR"},
-	{5, SANGOMA_PRI_EVENT_RING, "RING"},
+	{5, SANGOMA_PRI_EVENT_RING, "ROUTING"},
 	{6, SANGOMA_PRI_EVENT_HANGUP, "HANGUP"},
 	{7, SANGOMA_PRI_EVENT_RINGING, "RINGING"},
 	{8, SANGOMA_PRI_EVENT_ANSWER, "ANSWER"},

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c	Tue May 13 23:37:33 2008
@@ -464,13 +464,13 @@
 static int str2switch(char *swtype);
 static switch_status_t wanpipe_on_init(switch_core_session_t *session);
 static switch_status_t wanpipe_on_hangup(switch_core_session_t *session);
-static switch_status_t wanpipe_on_loopback(switch_core_session_t *session);
-static switch_status_t wanpipe_on_transmit(switch_core_session_t *session);
+static switch_status_t wanpipe_on_exchange_media(switch_core_session_t *session);
+static switch_status_t wanpipe_on_soft_execute(switch_core_session_t *session);
 static switch_call_cause_t wanpipe_outgoing_channel(switch_core_session_t *session, switch_caller_profile_t *outbound_profile,
 													switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags);
-static switch_status_t wanpipe_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout,
+static switch_status_t wanpipe_read_frame(switch_core_session_t *session, switch_frame_t **frame,
 										switch_io_flag_t flags, int stream_id);
-static switch_status_t wanpipe_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout,
+static switch_status_t wanpipe_write_frame(switch_core_session_t *session, switch_frame_t *frame,
 										 switch_io_flag_t flags, int stream_id);
 static int on_info(struct sangoma_pri *spri, sangoma_pri_event_t event_type, pri_event *pevent);
 static int on_hangup(struct sangoma_pri *spri, sangoma_pri_event_t event_type, pri_event *pevent);
@@ -613,12 +613,12 @@
 
  done:
 
-	/* Move Channel's State Machine to RING */
-	switch_channel_set_state(channel, CS_RING);
+	/* Move channel's state machine to ROUTING */
+	switch_channel_set_state(channel, CS_ROUTING);
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t wanpipe_on_ring(switch_core_session_t *session)
+static switch_status_t wanpipe_on_routing(switch_core_session_t *session)
 {
 	switch_channel_t *channel = NULL;
 	private_object_t *tech_pvt = NULL;
@@ -629,7 +629,7 @@
 	tech_pvt = switch_core_session_get_private(session);
 	assert(tech_pvt != NULL);
 
-	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "WANPIPE RING\n");
+	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "WANPIPE ROUTING\n");
 
 	
 
@@ -694,13 +694,13 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t wanpipe_on_loopback(switch_core_session_t *session)
+static switch_status_t wanpipe_on_exchange_media(switch_core_session_t *session)
 {
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "WANPIPE LOOPBACK\n");
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t wanpipe_on_transmit(switch_core_session_t *session)
+static switch_status_t wanpipe_on_soft_execute(switch_core_session_t *session)
 {
 	private_object_t *tech_pvt;
 	switch_channel_t *channel;
@@ -751,7 +751,7 @@
 
 
 
-static switch_status_t wanpipe_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout,
+static switch_status_t wanpipe_read_frame(switch_core_session_t *session, switch_frame_t **frame,
 										switch_io_flag_t flags, int stream_id)
 {
 	private_object_t *tech_pvt;
@@ -838,7 +838,7 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t wanpipe_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout,
+static switch_status_t wanpipe_write_frame(switch_core_session_t *session, switch_frame_t *frame,
 										 switch_io_flag_t flags, int stream_id)
 {
 	private_object_t *tech_pvt;
@@ -993,19 +993,17 @@
 	/*.read_frame */ wanpipe_read_frame,
 	/*.write_frame */ wanpipe_write_frame,
 	/*.kill_channel */ wanpipe_kill_channel,
-	/*.waitfor_read */ NULL,
-	/*.waitfor_read */ NULL,
 	/*.send_dtmf*/ wanpipe_send_dtmf,
 	/*.receive_message*/ wanpipe_receive_message
 };
 
 switch_state_handler_table_t wanpipe_state_handlers = {
 	/*.on_init */ wanpipe_on_init,
-	/*.on_ring */ wanpipe_on_ring,
+	/*.on_routing */ wanpipe_on_routing,
 	/*.on_execute */ NULL,
 	/*.on_hangup */ wanpipe_on_hangup,
-	/*.on_loopback */ wanpipe_on_loopback,
-	/*.on_transmit */ wanpipe_on_transmit
+	/*.on_exchange_media */ wanpipe_on_exchange_media,
+	/*.on_soft_execute */ wanpipe_on_soft_execute
 };
 
 static switch_call_cause_t wanpipe_outgoing_channel(switch_core_session_t *session, switch_caller_profile_t *outbound_profile,

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	Tue May 13 23:37:33 2008
@@ -170,14 +170,14 @@
 
 static switch_status_t woomera_on_init(switch_core_session_t *session);
 static switch_status_t woomera_on_hangup(switch_core_session_t *session);
-static switch_status_t woomera_on_ring(switch_core_session_t *session);
-static switch_status_t woomera_on_loopback(switch_core_session_t *session);
-static switch_status_t woomera_on_transmit(switch_core_session_t *session);
+static switch_status_t woomera_on_routing(switch_core_session_t *session);
+static switch_status_t woomera_on_exchange_media(switch_core_session_t *session);
+static switch_status_t woomera_on_soft_execute(switch_core_session_t *session);
 static switch_call_cause_t woomera_outgoing_channel(switch_core_session_t *session,
 													switch_caller_profile_t *outbound_profile,
 													switch_core_session_t **new_session, switch_memory_pool_t **pool, switch_originate_flag_t flags);
-static switch_status_t woomera_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, switch_io_flag_t flags, int stream_id);
-static switch_status_t woomera_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, switch_io_flag_t flags, int stream_id);
+static switch_status_t woomera_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id);
+static switch_status_t woomera_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id);
 static switch_status_t woomera_kill_channel(switch_core_session_t *session, int sig);
 static void tech_destroy(private_object * tech_pvt);
 static void woomera_printf(woomera_profile * profile, switch_socket_t * socket, char *fmt, ...);
@@ -238,9 +238,9 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t woomera_on_ring(switch_core_session_t *session)
+static switch_status_t woomera_on_routing(switch_core_session_t *session)
 {
-	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s WOOMERA RING\n", switch_channel_get_name(switch_core_session_get_channel(session)));
+	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s WOOMERA ROUTING\n", switch_channel_get_name(switch_core_session_get_channel(session)));
 	return SWITCH_STATUS_SUCCESS;
 }
 
@@ -310,40 +310,19 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t woomera_on_loopback(switch_core_session_t *session)
+static switch_status_t woomera_on_exchange_media(switch_core_session_t *session)
 {
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "WOOMERA LOOPBACK\n");
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t woomera_on_transmit(switch_core_session_t *session)
+static switch_status_t woomera_on_soft_execute(switch_core_session_t *session)
 {
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "WOOMERA TRANSMIT\n");
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t woomera_waitfor_read(switch_core_session_t *session, int ms, int stream_id)
-{
-	struct private_object *tech_pvt = NULL;
-
-	tech_pvt = switch_core_session_get_private(session);
-	switch_assert(tech_pvt != NULL);
-
-	return switch_socket_waitfor(tech_pvt->read_poll, ms) ? SWITCH_STATUS_FALSE : SWITCH_STATUS_SUCCESS;
-}
-
-static switch_status_t woomera_waitfor_write(switch_core_session_t *session, int ms, int stream_id)
-{
-	struct private_object *tech_pvt = NULL;
-
-	tech_pvt = switch_core_session_get_private(session);
-	switch_assert(tech_pvt != NULL);
-
-	return SWITCH_STATUS_SUCCESS;
-//  return switch_socket_waitfor(tech_pvt->write_poll, ms);
-}
-
-static switch_status_t woomera_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, switch_io_flag_t flags, int stream_id)
+static switch_status_t woomera_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id)
 {
 	struct private_object *tech_pvt = switch_core_session_get_private(session);
 	switch_frame_t *pframe;
@@ -379,7 +358,7 @@
 	return SWITCH_STATUS_FALSE;
 }
 
-static switch_status_t woomera_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, switch_io_flag_t flags, int stream_id)
+static switch_status_t woomera_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id)
 {
 	struct private_object *tech_pvt = switch_core_session_get_private(session);
 	switch_size_t len;
@@ -405,11 +384,11 @@
 
 static switch_state_handler_table_t woomera_event_handlers = {
 	/*.on_init */ woomera_on_init,
-	/*.on_ring */ woomera_on_ring,
+	/*.on_routing */ woomera_on_routing,
 	/*.on_execute */ woomera_on_execute,
 	/*.on_hangup */ woomera_on_hangup,
-	/*.on_loopback */ woomera_on_loopback,
-	/*.on_transmit */ woomera_on_transmit
+	/*.on_exchange_media */ woomera_on_exchange_media,
+	/*.on_soft_execute */ woomera_on_soft_execute
 };
 
 static switch_io_routines_t woomera_io_routines = {
@@ -417,8 +396,6 @@
 	/*.read_frame */ woomera_read_frame,
 	/*.write_frame */ woomera_write_frame,
 	/*.kill_channel */ woomera_kill_channel,
-	/*.waitfor_read */ woomera_waitfor_read,
-	/*.waitfor_write */ woomera_waitfor_write
 };
 
 /* Make sure when you have 2 sessions in the same scope that you pass the appropriate one to the routines
@@ -1042,9 +1019,9 @@
 						ptr++;
 						port = (switch_port_t) atoi(ptr);
 					}
-					/* Move Channel's State Machine to RING */
+					/* Move channel's state machine to ROUTING */
 					switch_channel_answer(channel);
-					switch_channel_set_state(channel, CS_RING);
+					switch_channel_set_state(channel, CS_ROUTING);
 
 					if (switch_sockaddr_info_get(&tech_pvt->udpwrite,
 												 ip, SWITCH_UNSPEC, port, 0, switch_core_session_get_pool(tech_pvt->session)) != SWITCH_STATUS_SUCCESS) {

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	Tue May 13 23:37:33 2008
@@ -255,11 +255,11 @@
 
 static switch_state_handler_table_t state_handlers = {
 	/*.on_init */ NULL,
-	/*.on_ring */ NULL,
+	/*.on_routing */ NULL,
 	/*.on_execute */ NULL,
 	/*.on_hangup */ my_on_hangup,
-	/*.on_loopback */ NULL,
-	/*.on_transmit */ NULL
+	/*.on_exchange_media */ NULL,
+	/*.on_soft_execute */ NULL
 };
 
 

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	Tue May 13 23:37:33 2008
@@ -130,7 +130,7 @@
 	return rad_config;
 }
 
-static switch_status_t my_on_ring(switch_core_session_t *session)
+static switch_status_t my_on_routing(switch_core_session_t *session)
 {
 	switch_xml_t 	cdr;
 	switch_channel_t *channel = switch_core_session_get_channel(session);
@@ -149,7 +149,7 @@
 	switch_time_exp_t tm;
 	char buffer[32];
 
-	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "[mod_radius_cdr] Entering my_on_ring\n");
+	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "[mod_radius_cdr] Entering my_on_routing\n");
 
 	rad_config = my_radius_init();
 
@@ -716,11 +716,11 @@
 
 static const switch_state_handler_table_t state_handlers = {
 	/*.on_init */ NULL,
-	/*.on_ring */ my_on_ring,
+	/*.on_routing */ my_on_routing,
 	/*.on_execute */ NULL,
 	/*.on_hangup */ my_on_hangup,
-	/*.on_loopback */ NULL,
-	/*.on_transmit */ NULL
+	/*.on_exchange_media */ NULL,
+	/*.on_soft_execute */ NULL
 };
 
 SWITCH_MODULE_LOAD_FUNCTION(mod_radius_cdr_load)

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	Tue May 13 23:37:33 2008
@@ -170,7 +170,7 @@
 									  (char *)fname,
 									  source->channels,
 									  source->rate,
-									  SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT, source->pool) != SWITCH_STATUS_SUCCESS) {
+									  SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT, NULL) != SWITCH_STATUS_SUCCESS) {
 				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't open %s\n", fname);
 				switch_yield(1000000);
 				continue;
@@ -252,7 +252,7 @@
 		return SWITCH_STATUS_FALSE;
 	}
 	
-	alt_path = switch_mprintf("%s/%d", path, handle->samplerate);
+	alt_path = switch_mprintf("%s%s%d", path, SWITCH_PATH_SEPARATOR, handle->samplerate);
 
 	switch_mutex_lock(globals.mutex);
 	if ((source = switch_core_hash_find(globals.source_hash, alt_path))) {

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	Tue May 13 23:37:33 2008
@@ -609,6 +609,7 @@
 {
 	int shift = 1 + gr_info->scalefac_scale;
 	real *xrpnt = (real *) xr;
+	real *toomuch = (real *) xr + (SBLIMIT * SBLIMIT * sizeof(real));
 	int l[3], l3;
 	int part2remain = gr_info->part2_3_length - part2bits;
 	int *me;
@@ -668,7 +669,9 @@
 				register int x, y;
 				if ((!mc)) {
 					mc = *m++;
-					xrpnt = ((real *) xr) + (*m++);
+					if ((xrpnt = ((real *) xr) + (*m++)) > toomuch) {
+						return 1;
+					}
 					lwin = *m++;
 					cb = *m++;
 					if (lwin == 3) {
@@ -707,7 +710,9 @@
 					part2remain--;
 				} else
 					*xrpnt = 0.0;
-				xrpnt += step;
+				if ((xrpnt += step) > toomuch) {
+					return 1;
+				}
 				if (y == 15) {
 					max[lwin] = cb;
 					part2remain -= h->linbits + 1;
@@ -725,7 +730,9 @@
 					part2remain--;
 				} else
 					*xrpnt = 0.0;
-				xrpnt += step;
+				if ((xrpnt += step) > toomuch) {
+					return 1;
+				}
 			}
 		}
 		for (; l3 && (part2remain > 0); l3--) {
@@ -747,7 +754,9 @@
 				if (!(i & 1)) {
 					if (!mc) {
 						mc = *m++;
-						xrpnt = ((real *) xr) + (*m++);
+						if ((xrpnt = ((real *) xr) + (*m++)) > toomuch) {
+							return 1;
+						}
 						lwin = *m++;
 						cb = *m++;
 						if (lwin == 3) {
@@ -773,14 +782,18 @@
 						*xrpnt = v;
 				} else
 					*xrpnt = 0.0;
-				xrpnt += step;
+				if ((xrpnt += step) > toomuch) {
+					return 1;
+				}
 			}
 		}
 
 		while (m < me) {
 			if (!mc) {
 				mc = *m++;
-				xrpnt = ((real *) xr) + *m++;
+				if ((xrpnt = ((real *) xr) + *m++) > toomuch) {
+					return 1;
+				}
 				if ((*m++) == 3)
 					step = 1;
 				else
@@ -789,9 +802,13 @@
 			}
 			mc--;
 			*xrpnt = 0.0;
-			xrpnt += step;
+			if ((xrpnt += step) > toomuch) {
+				return 1;
+			}
 			*xrpnt = 0.0;
-			xrpnt += step;
+			if ((xrpnt += step) > toomuch) {
+				return 1;
+			}
 /* we could add a little opt. here:
  * if we finished a band for window 3 or a long band
  * further bands could copied in a simple loop without a
@@ -863,6 +880,11 @@
 					x = y >> 4;
 					y &= 0xf;
 				}
+
+				if (xrpnt >= toomuch) {
+					return 1;
+				}
+
 				if (x == 15) {
 					max = cb;
 					part2remain -= h->linbits + 1;
@@ -971,7 +993,7 @@
 
 #if 0
 static int III_dequantize_sample_ms(real xr[2][SBLIMIT][SSLIMIT], int *scf, struct gr_info_s *gr_info, int sfreq, int part2bits)
-{
+{ma
 	int shift = 1 + gr_info->scalefac_scale;
 	real *xrpnt = (real *) xr[1];
 	real *xr0pnt = (real *) xr[0];

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	Tue May 13 23:37:33 2008
@@ -117,6 +117,10 @@
     return freeswitchJNI.CoreSession_getVariable(swigCPtr, this, var);
   }
 
+  public SWIGTYPE_p_switch_status_t process_callback_result(String ret) {
+    return new SWIGTYPE_p_switch_status_t(freeswitchJNI.CoreSession_process_callback_result(swigCPtr, this, ret), true);
+  }
+
   public int recordFile(String file_name, int max_len, int silence_threshold, int silence_secs) {
     return freeswitchJNI.CoreSession_recordFile__SWIG_0(swigCPtr, this, file_name, max_len, silence_threshold, silence_secs);
   }
@@ -213,6 +217,14 @@
     freeswitchJNI.CoreSession_sendEvent(swigCPtr, this, Event.getCPtr(sendME), sendME);
   }
 
+  public void setEventData(Event e) {
+    freeswitchJNI.CoreSession_setEventData(swigCPtr, this, Event.getCPtr(e), e);
+  }
+
+  public String getXMLCDR() {
+    return freeswitchJNI.CoreSession_getXMLCDR(swigCPtr, this);
+  }
+
   public boolean begin_allow_threads() {
     return freeswitchJNI.CoreSession_begin_allow_threads(swigCPtr, this);
   }

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	Tue May 13 23:37:33 2008
@@ -80,6 +80,7 @@
   public final static native void CoreSession_setPrivate(long jarg1, CoreSession jarg1_, String jarg2, long jarg3);
   public final static native long CoreSession_getPrivate(long jarg1, CoreSession jarg1_, String jarg2);
   public final static native String CoreSession_getVariable(long jarg1, CoreSession jarg1_, String jarg2);
+  public final static native long CoreSession_process_callback_result(long jarg1, CoreSession jarg1_, String jarg2);
   public final static native int CoreSession_recordFile__SWIG_0(long jarg1, CoreSession jarg1_, String jarg2, int jarg3, int jarg4, int jarg5);
   public final static native int CoreSession_recordFile__SWIG_1(long jarg1, CoreSession jarg1_, String jarg2, int jarg3, int jarg4);
   public final static native int CoreSession_recordFile__SWIG_2(long jarg1, CoreSession jarg1_, String jarg2, int jarg3);
@@ -104,6 +105,8 @@
   public final static native boolean CoreSession_ready(long jarg1, CoreSession jarg1_);
   public final static native void CoreSession_execute(long jarg1, CoreSession jarg1_, String jarg2, String jarg3);
   public final static native void CoreSession_sendEvent(long jarg1, CoreSession jarg1_, long jarg2, Event jarg2_);
+  public final static native void CoreSession_setEventData(long jarg1, CoreSession jarg1_, long jarg2, Event jarg2_);
+  public final static native String CoreSession_getXMLCDR(long jarg1, CoreSession jarg1_);
   public final static native boolean CoreSession_begin_allow_threads(long jarg1, CoreSession jarg1_);
   public final static native boolean CoreSession_end_allow_threads(long jarg1, CoreSession jarg1_);
   public final static native String CoreSession_get_uuid(long jarg1, CoreSession jarg1_);

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/switch_swig_wrap.cpp
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/switch_swig_wrap.cpp	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_java/switch_swig_wrap.cpp	Tue May 13 23:37:33 2008
@@ -1453,6 +1453,28 @@
 }
 
 
+SWIGEXPORT jlong JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1process_1callback_1result(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2) {
+  jlong jresult = 0 ;
+  CoreSession *arg1 = (CoreSession *) 0 ;
+  char *arg2 = (char *) 0 ;
+  switch_status_t result;
+  
+  (void)jenv;
+  (void)jcls;
+  (void)jarg1_;
+  arg1 = *(CoreSession **)&jarg1; 
+  arg2 = 0;
+  if (jarg2) {
+    arg2 = (char *)jenv->GetStringUTFChars(jarg2, 0);
+    if (!arg2) return 0;
+  }
+  result = (arg1)->process_callback_result(arg2);
+  *(switch_status_t **)&jresult = new switch_status_t((switch_status_t &)result); 
+  if (arg2) jenv->ReleaseStringUTFChars(jarg2, (const char *)arg2);
+  return jresult;
+}
+
+
 SWIGEXPORT jint JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1recordFile_1_1SWIG_10(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jint jarg3, jint jarg4, jint jarg5) {
   jint jresult = 0 ;
   CoreSession *arg1 = (CoreSession *) 0 ;
@@ -2022,6 +2044,35 @@
 }
 
 
+SWIGEXPORT void JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1setEventData(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jlong jarg2, jobject jarg2_) {
+  CoreSession *arg1 = (CoreSession *) 0 ;
+  Event *arg2 = (Event *) 0 ;
+  
+  (void)jenv;
+  (void)jcls;
+  (void)jarg1_;
+  (void)jarg2_;
+  arg1 = *(CoreSession **)&jarg1; 
+  arg2 = *(Event **)&jarg2; 
+  (arg1)->setEventData(arg2);
+}
+
+
+SWIGEXPORT jstring JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1getXMLCDR(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)->getXMLCDR();
+  if(result) jresult = jenv->NewStringUTF((const char *)result);
+  return jresult;
+}
+
+
 SWIGEXPORT jboolean JNICALL Java_org_freeswitch_swig_freeswitchJNI_CoreSession_1begin_1allow_1threads(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) {
   jboolean jresult = 0 ;
   CoreSession *arg1 = (CoreSession *) 0 ;

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	Tue May 13 23:37:33 2008
@@ -1,21 +1,23 @@
+
 #include <switch.h>
 #include "freeswitch_lua.h"
+using namespace LUA;
 
 Session::Session() : CoreSession()
 {
-	cb_function = cb_arg = hangup_func_str = NULL;
+	cb_function = cb_arg = hangup_func_str = hangup_func_arg = NULL;
 	hh = mark = 0;
 }
 
 Session::Session(char *uuid) : CoreSession(uuid)
 {
-	cb_function = cb_arg = hangup_func_str = NULL;
+	cb_function = cb_arg = hangup_func_str = hangup_func_arg = NULL;
 	hh = mark = 0;
 }
 
 Session::Session(switch_core_session_t *new_session) : CoreSession(new_session)
 {
-	cb_function = cb_arg = hangup_func_str = NULL;
+	cb_function = cb_arg = hangup_func_str = hangup_func_arg = NULL;
 	hh = mark = 0;
 }
 static switch_status_t lua_hanguphook(switch_core_session_t *session_hungup);
@@ -29,6 +31,7 @@
 		free(hangup_func_str);
 	}
 	
+	switch_safe_free(hangup_func_arg);
 	switch_safe_free(cb_function);
 	switch_safe_free(cb_arg);
 }
@@ -71,7 +74,7 @@
 
 void Session::check_hangup_hook() 
 {
-	if (hangup_func_str && (hook_state == CS_HANGUP || hook_state == CS_RING)) {
+	if (hangup_func_str && (hook_state == CS_HANGUP || hook_state == CS_ROUTING)) {
 		hh++;
 	}
 }
@@ -80,6 +83,7 @@
 {
 	if (hh && !mark) {
 		const char *err = NULL;
+		int arg_count = 1;
 		mark++;
 
 		if (!getLUA()) {
@@ -89,7 +93,13 @@
 		lua_getfield(L, LUA_GLOBALSINDEX, (char *)hangup_func_str);
 		
 		lua_pushstring(L, hook_state == CS_HANGUP ? "hangup" : "transfer");
-		lua_call(L, 1, 1);
+
+		if (hangup_func_arg) {
+			lua_getfield(L, LUA_GLOBALSINDEX, (char *)hangup_func_arg);
+			arg_count++;
+		}
+		
+		lua_call(L, arg_count, 1);
 		err = lua_tostring(L, -1);
 
 		if (!switch_strlen_zero(err)) {
@@ -115,14 +125,18 @@
 }
 
 
-void Session::setHangupHook(char *func) {
+void Session::setHangupHook(char *func, char *arg) {
 
 	sanity_check_noreturn;
 
 	switch_safe_free(hangup_func_str);
-
+	switch_safe_free(hangup_func_arg);
+	
 	if (func) {
 		hangup_func_str = strdup(func);
+		if (!switch_strlen_zero(arg)) {
+			hangup_func_arg = strdup(arg);
+		}
 		switch_channel_set_private(channel, "CoreSession", this);
 		hook_state = switch_channel_get_state(channel);
 		switch_core_event_hook_add_state_change(session, lua_hanguphook);

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	Tue May 13 23:37:33 2008
@@ -10,6 +10,7 @@
 
 #include <switch_cpp.h>
 
+namespace LUA {
 class Session : public CoreSession {
  private:
 	virtual void do_hangup_hook();
@@ -29,13 +30,14 @@
 
 	virtual switch_status_t run_dtmf_callback(void *input, switch_input_type_t itype);
 	void setInputCallback(char *cbfunc, char *funcargs);
-	void setHangupHook(char *func);
+	void setHangupHook(char *func, char *arg = NULL);
 	bool ready();
 	
 	char *cb_function;
 	char *cb_arg;
 	char *hangup_func_str;
+	char *hangup_func_arg;
 	void setLUA(lua_State *state);
 };
-
+}
 #endif

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	Tue May 13 23:37:33 2008
@@ -1,29 +1,29 @@
---- hack.cpp	2008-04-29 13:49:22.000000000 -0400
-+++ mod_lua_wrap.cpp	2008-04-29 13:49:10.000000000 -0400
-@@ -4028,7 +4028,7 @@
-   SWIG_check_num_args("Session",0,0)
-   result = (Session *)new Session();
+--- 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 @@
+   SWIG_check_num_args("LUA::Session",0,0)
+   result = (LUA::Session *)new LUA::Session();
    SWIG_arg=0;
--  SWIG_NewPointerObj(L,result,SWIGTYPE_p_Session,1); SWIG_arg++; 
-+  SWIG_NewPointerObj(L,result,SWIGTYPE_p_Session,1); SWIG_arg++; result->setLUA(L);
+-  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;
-@@ -4049,7 +4049,7 @@
+@@ -5179,7 +5179,7 @@
    arg1 = (char *)lua_tostring(L, 1);
-   result = (Session *)new Session(arg1);
+   result = (LUA::Session *)new LUA::Session(arg1);
    SWIG_arg=0;
--  SWIG_NewPointerObj(L,result,SWIGTYPE_p_Session,1); SWIG_arg++; 
-+  SWIG_NewPointerObj(L,result,SWIGTYPE_p_Session,1); SWIG_arg++; result->setLUA(L);
+-  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;
-@@ -4074,7 +4074,7 @@
+@@ -5204,7 +5204,7 @@
    
-   result = (Session *)new Session(arg1);
+   result = (LUA::Session *)new LUA::Session(arg1);
    SWIG_arg=0;
--  SWIG_NewPointerObj(L,result,SWIGTYPE_p_Session,1); SWIG_arg++; 
-+  SWIG_NewPointerObj(L,result,SWIGTYPE_p_Session,1); SWIG_arg++; result->setLUA(L);
+-  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;

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/mod_lua.2008.vcproj
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/mod_lua.2008.vcproj	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/mod_lua.2008.vcproj	Tue May 13 23:37:33 2008
@@ -270,7 +270,7 @@
 			>
 		</File>
 		<File
-			RelativePath=".\mod_lua.c"
+			RelativePath=".\mod_lua.cpp"
 			>
 		</File>
 		<File

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/mod_lua.vcproj
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/mod_lua.vcproj	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_lua/mod_lua.vcproj	Tue May 13 23:37:33 2008
@@ -270,7 +270,7 @@
 			>
 		</File>
 		<File
-			RelativePath=".\mod_lua.c"
+			RelativePath=".\mod_lua.cpp"
 			>
 		</File>
 		<File

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	Tue May 13 23:37:33 2008
@@ -1488,7 +1488,7 @@
 #define SWIGTYPE_p_CoreSession swig_types[1]
 #define SWIGTYPE_p_Event swig_types[2]
 #define SWIGTYPE_p_IVRMenu swig_types[3]
-#define SWIGTYPE_p_Session swig_types[4]
+#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]
@@ -3719,6 +3719,37 @@
 }
 
 
+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_recordFile__SWIG_0(lua_State* L) {
   int SWIG_arg = -1;
   CoreSession *arg1 = (CoreSession *) 0 ;
@@ -4726,6 +4757,62 @@
 }
 
 
+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 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_begin_allow_threads(lua_State* L) {
   int SWIG_arg = -1;
   CoreSession *arg1 = (CoreSession *) 0 ;
@@ -4905,6 +4992,7 @@
     {"setPrivate", _wrap_CoreSession_setPrivate}, 
     {"getPrivate", _wrap_CoreSession_getPrivate}, 
     {"getVariable", _wrap_CoreSession_getVariable}, 
+    {"process_callback_result", _wrap_CoreSession_process_callback_result}, 
     {"recordFile", _wrap_CoreSession_recordFile}, 
     {"setCallerData", _wrap_CoreSession_setCallerData}, 
     {"originate", _wrap_CoreSession_originate}, 
@@ -4924,6 +5012,8 @@
     {"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}, 
@@ -5095,12 +5185,12 @@
 
 static int _wrap_new_Session__SWIG_0(lua_State* L) {
   int SWIG_arg = -1;
-  Session *result = 0 ;
+  LUA::Session *result = 0 ;
   
-  SWIG_check_num_args("Session",0,0)
-  result = (Session *)new Session();
+  SWIG_check_num_args("LUA::Session",0,0)
+  result = (LUA::Session *)new LUA::Session();
   SWIG_arg=0;
-  SWIG_NewPointerObj(L,result,SWIGTYPE_p_Session,1); SWIG_arg++; result->setLUA(L);
+  SWIG_NewPointerObj(L,result,SWIGTYPE_p_LUA__Session,1); SWIG_arg++; result->setLUA(L);
   return SWIG_arg;
   
   if(0) SWIG_fail;
@@ -5114,14 +5204,14 @@
 static int _wrap_new_Session__SWIG_1(lua_State* L) {
   int SWIG_arg = -1;
   char *arg1 = (char *) 0 ;
-  Session *result = 0 ;
+  LUA::Session *result = 0 ;
   
-  SWIG_check_num_args("Session",1,1)
-  if(!lua_isstring(L,1)) SWIG_fail_arg("Session",1,"char *");
+  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 = (Session *)new Session(arg1);
+  result = (LUA::Session *)new LUA::Session(arg1);
   SWIG_arg=0;
-  SWIG_NewPointerObj(L,result,SWIGTYPE_p_Session,1); SWIG_arg++; result->setLUA(L);
+  SWIG_NewPointerObj(L,result,SWIGTYPE_p_LUA__Session,1); SWIG_arg++; result->setLUA(L);
   return SWIG_arg;
   
   if(0) SWIG_fail;
@@ -5135,18 +5225,18 @@
 static int _wrap_new_Session__SWIG_2(lua_State* L) {
   int SWIG_arg = -1;
   switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;
-  Session *result = 0 ;
+  LUA::Session *result = 0 ;
   
-  SWIG_check_num_args("Session",1,1)
-  if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("Session",1,"switch_core_session_t *");
+  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 = (Session *)new Session(arg1);
+  result = (LUA::Session *)new LUA::Session(arg1);
   SWIG_arg=0;
-  SWIG_NewPointerObj(L,result,SWIGTYPE_p_Session,1); SWIG_arg++; result->setLUA(L);
+  SWIG_NewPointerObj(L,result,SWIGTYPE_p_LUA__Session,1); SWIG_arg++; result->setLUA(L);
   return SWIG_arg;
   
   if(0) SWIG_fail;
@@ -5198,13 +5288,13 @@
 
 static int _wrap_delete_Session(lua_State* L) {
   int SWIG_arg = -1;
-  Session *arg1 = (Session *) 0 ;
+  LUA::Session *arg1 = (LUA::Session *) 0 ;
   
-  SWIG_check_num_args("Session",1,1)
-  if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("Session",1,"Session *");
+  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_Session,SWIG_POINTER_DISOWN))){
-    SWIG_fail_ptr("delete_Session",1,SWIGTYPE_p_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;
@@ -5223,14 +5313,14 @@
 
 static int _wrap_Session_begin_allow_threads(lua_State* L) {
   int SWIG_arg = -1;
-  Session *arg1 = (Session *) 0 ;
+  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,"Session *");
+  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_Session,0))){
-    SWIG_fail_ptr("Session_begin_allow_threads",1,SWIGTYPE_p_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();
@@ -5248,14 +5338,14 @@
 
 static int _wrap_Session_end_allow_threads(lua_State* L) {
   int SWIG_arg = -1;
-  Session *arg1 = (Session *) 0 ;
+  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,"Session *");
+  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_Session,0))){
-    SWIG_fail_ptr("Session_end_allow_threads",1,SWIGTYPE_p_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();
@@ -5273,13 +5363,13 @@
 
 static int _wrap_Session_check_hangup_hook(lua_State* L) {
   int SWIG_arg = -1;
-  Session *arg1 = (Session *) 0 ;
+  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,"Session *");
+  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_Session,0))){
-    SWIG_fail_ptr("Session_check_hangup_hook",1,SWIGTYPE_p_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();
@@ -5297,19 +5387,19 @@
 
 static int _wrap_Session_run_dtmf_callback(lua_State* L) {
   int SWIG_arg = -1;
-  Session *arg1 = (Session *) 0 ;
+  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,"Session *");
+  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_Session,0))){
-    SWIG_fail_ptr("Session_run_dtmf_callback",1,SWIGTYPE_p_Session);
+  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");
@@ -5337,17 +5427,17 @@
 
 static int _wrap_Session_setInputCallback(lua_State* L) {
   int SWIG_arg = -1;
-  Session *arg1 = (Session *) 0 ;
+  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,"Session *");
+  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_Session,0))){
-    SWIG_fail_ptr("Session_setInputCallback",1,SWIGTYPE_p_Session);
+  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);
@@ -5365,17 +5455,47 @@
 }
 
 
-static int _wrap_Session_setHangupHook(lua_State* L) {
+static int _wrap_Session_setHangupHook__SWIG_0(lua_State* L) {
   int SWIG_arg = -1;
-  Session *arg1 = (Session *) 0 ;
+  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,"Session *");
+  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_Session,0))){
-    SWIG_fail_ptr("Session_setHangupHook",1,SWIGTYPE_p_Session);
+  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);
@@ -5392,16 +5512,72 @@
 }
 
 
+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;
-  Session *arg1 = (Session *) 0 ;
+  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,"Session *");
+  if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("ready",1,"LUA::Session *");
   
-  if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Session,0))){
-    SWIG_fail_ptr("Session_ready",1,SWIGTYPE_p_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();
@@ -5419,15 +5595,15 @@
 
 static int _wrap_Session_cb_function_set(lua_State* L) {
   int SWIG_arg = -1;
-  Session *arg1 = (Session *) 0 ;
+  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,"Session *");
+  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_Session,0))){
-    SWIG_fail_ptr("Session_cb_function_set",1,SWIGTYPE_p_Session);
+  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);
@@ -5454,14 +5630,14 @@
 
 static int _wrap_Session_cb_function_get(lua_State* L) {
   int SWIG_arg = -1;
-  Session *arg1 = (Session *) 0 ;
+  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,"Session *");
+  if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("cb_function",1,"LUA::Session *");
   
-  if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Session,0))){
-    SWIG_fail_ptr("Session_cb_function_get",1,SWIGTYPE_p_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);
@@ -5479,15 +5655,15 @@
 
 static int _wrap_Session_cb_arg_set(lua_State* L) {
   int SWIG_arg = -1;
-  Session *arg1 = (Session *) 0 ;
+  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,"Session *");
+  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_Session,0))){
-    SWIG_fail_ptr("Session_cb_arg_set",1,SWIGTYPE_p_Session);
+  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);
@@ -5514,14 +5690,14 @@
 
 static int _wrap_Session_cb_arg_get(lua_State* L) {
   int SWIG_arg = -1;
-  Session *arg1 = (Session *) 0 ;
+  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,"Session *");
+  if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("cb_arg",1,"LUA::Session *");
   
-  if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Session,0))){
-    SWIG_fail_ptr("Session_cb_arg_get",1,SWIGTYPE_p_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);
@@ -5539,15 +5715,15 @@
 
 static int _wrap_Session_hangup_func_str_set(lua_State* L) {
   int SWIG_arg = -1;
-  Session *arg1 = (Session *) 0 ;
+  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,"Session *");
+  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_Session,0))){
-    SWIG_fail_ptr("Session_hangup_func_str_set",1,SWIGTYPE_p_Session);
+  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);
@@ -5574,14 +5750,14 @@
 
 static int _wrap_Session_hangup_func_str_get(lua_State* L) {
   int SWIG_arg = -1;
-  Session *arg1 = (Session *) 0 ;
+  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,"Session *");
+  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_Session,0))){
-    SWIG_fail_ptr("Session_hangup_func_str_get",1,SWIGTYPE_p_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);
@@ -5597,17 +5773,77 @@
 }
 
 
+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_setLUA(lua_State* L) {
   int SWIG_arg = -1;
-  Session *arg1 = (Session *) 0 ;
+  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,"Session *");
+  if(!SWIG_isptrtype(L,1)) SWIG_fail_arg("setLUA",1,"LUA::Session *");
   
-  if (!SWIG_IsOK(SWIG_ConvertPtr(L,1,(void**)&arg1,SWIGTYPE_p_Session,0))){
-    SWIG_fail_ptr("Session_setLUA",1,SWIGTYPE_p_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);
@@ -5624,10 +5860,10 @@
 
 
 static void swig_delete_Session(void *obj) {
-Session *arg1 = (Session *) obj;
+LUA::Session *arg1 = (LUA::Session *) obj;
 delete arg1;
 }
-static swig_lua_method swig_Session_methods[] = {
+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}, 
@@ -5638,15 +5874,16 @@
     {"setLUA", _wrap_Session_setLUA}, 
     {0,0}
 };
-static swig_lua_attribute swig_Session_attributes[] = {
+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_Session_bases[] = {0,0};
-static const char *swig_Session_base_names[] = {"CoreSession *",0};
-static swig_lua_class _wrap_class_Session = { "Session", &SWIGTYPE_p_Session,_wrap_new_Session, swig_delete_Session, swig_Session_methods, swig_Session_attributes, swig_Session_bases, swig_Session_base_names };
+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
 }
@@ -5676,14 +5913,14 @@
 
 /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
 
-static void *_p_SessionTo_p_CoreSession(void *x, int *newmemory) {
-    return (void *)((CoreSession *)  ((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_Session = {"_p_Session", "Session *", 0, 0, (void*)&_wrap_class_Session, 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};
@@ -5704,7 +5941,7 @@
   &_swigt__p_CoreSession,
   &_swigt__p_Event,
   &_swigt__p_IVRMenu,
-  &_swigt__p_Session,
+  &_swigt__p_LUA__Session,
   &_swigt__p_Stream,
   &_swigt__p_input_callback_state,
   &_swigt__p_lua_State,
@@ -5722,10 +5959,10 @@
 };
 
 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_Session, _p_SessionTo_p_CoreSession, 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_Session[] = {  {&_swigt__p_Session, 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}};
@@ -5746,7 +5983,7 @@
   _swigc__p_CoreSession,
   _swigc__p_Event,
   _swigc__p_IVRMenu,
-  _swigc__p_Session,
+  _swigc__p_LUA__Session,
   _swigc__p_Stream,
   _swigc__p_input_callback_state,
   _swigc__p_lua_State,

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/Makefile
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/Makefile	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/Makefile	Tue May 13 23:37:33 2008
@@ -16,7 +16,7 @@
 mod_perl_wrap.cpp:
 	swig -static -shadow -perl5 -c++ -DMULTIPLICITY -I../../../../src/include -o mod_perl_wrap.cpp freeswitch.i
 	echo "#include \"mod_perl_extra.c\"" >> mod_perl_wrap.cpp
-	patch -s -p0 -i hack.diff
+	#	patch -s -p0 -i hack.diff
 
 
 
@@ -34,6 +34,6 @@
 	rm -fr *~ .perlok freeswitch.$(DYNAMIC_LIB_EXTEN)
 
 depend_install:
-	mkdir -p $(PREFIX)/perl
-	$(LTINSTALL) freeswitch.$(DYNAMIC_LIB_EXTEN) freeswitch.pm $(PREFIX)/perl
-	if [ ! -f $(PREFIX)/perl/freeswitch.pm ] ; then $(LTINSTALL) freeswitch.pm $(PREFIX)/perl ; fi
+	mkdir -p $(DESTDIR)$(PREFIX)/perl
+	$(LTINSTALL) freeswitch.$(DYNAMIC_LIB_EXTEN) freeswitch.pm $(DESTDIR)$(PREFIX)/perl
+	if [ ! -f $(DESTDIR)$(PREFIX)/perl/freeswitch.pm ] ; then $(LTINSTALL) freeswitch.pm $(DESTDIR)$(PREFIX)/perl ; fi

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/freeswitch.pm
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/freeswitch.pm	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/freeswitch.pm	Tue May 13 23:37:33 2008
@@ -307,6 +307,7 @@
 *setPrivate = *freeswitchc::CoreSession_setPrivate;
 *getPrivate = *freeswitchc::CoreSession_getPrivate;
 *getVariable = *freeswitchc::CoreSession_getVariable;
+*process_callback_result = *freeswitchc::CoreSession_process_callback_result;
 *recordFile = *freeswitchc::CoreSession_recordFile;
 *setCallerData = *freeswitchc::CoreSession_setCallerData;
 *originate = *freeswitchc::CoreSession_originate;
@@ -326,6 +327,8 @@
 *ready = *freeswitchc::CoreSession_ready;
 *execute = *freeswitchc::CoreSession_execute;
 *sendEvent = *freeswitchc::CoreSession_sendEvent;
+*setEventData = *freeswitchc::CoreSession_setEventData;
+*getXMLCDR = *freeswitchc::CoreSession_getXMLCDR;
 *begin_allow_threads = *freeswitchc::CoreSession_begin_allow_threads;
 *end_allow_threads = *freeswitchc::CoreSession_end_allow_threads;
 *get_uuid = *freeswitchc::CoreSession_get_uuid;
@@ -382,6 +385,8 @@
 *swig_cb_arg_set = *freeswitchc::Session_cb_arg_set;
 *swig_hangup_func_str_get = *freeswitchc::Session_hangup_func_str_get;
 *swig_hangup_func_str_set = *freeswitchc::Session_hangup_func_str_set;
+*swig_hangup_func_arg_get = *freeswitchc::Session_hangup_func_arg_get;
+*swig_hangup_func_arg_set = *freeswitchc::Session_hangup_func_arg_set;
 *setPERL = *freeswitchc::Session_setPERL;
 sub DISOWN {
     my $self = shift;

Modified: 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.cpp	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/freeswitch_perl.cpp	Tue May 13 23:37:33 2008
@@ -4,7 +4,9 @@
 
 static STRLEN n_a;
 
-#define init_me() cb_function = hangup_func_str = NULL; hh = mark = 0; my_perl = NULL; cb_arg = NULL
+#define init_me() cb_function = hangup_func_str = NULL; hangup_func_arg = NULL; hh = mark = 0; my_perl = NULL; cb_arg = NULL
+
+using namespace PERL;
 
 Session::Session() : CoreSession()
 {
@@ -25,8 +27,14 @@
 {
 	switch_safe_free(cb_function);
 	switch_safe_free(cb_arg);
+
+	if (session && hangup_func_str) {
+		switch_core_event_hook_remove_state_change(session, perl_hanguphook);
+	}
+
 	switch_safe_free(hangup_func_str);
-	switch_core_event_hook_remove_state_change(session, perl_hanguphook);
+	switch_safe_free(hangup_func_arg);
+
 }
 
 bool Session::begin_allow_threads() 
@@ -67,7 +75,7 @@
 
 void Session::check_hangup_hook() 
 {
-	if (hangup_func_str && (hook_state == CS_HANGUP || hook_state == CS_RING)) {
+	if (hangup_func_str && (hook_state == CS_HANGUP || hook_state == CS_ROUTING)) {
 		hh++;
 	}
 }
@@ -82,7 +90,12 @@
 			return;
 		}
 
-		code = switch_mprintf("%s(%s)", hangup_func_str, hook_state == CS_HANGUP ? "hangup" : "transfer");
+		if (hangup_func_arg) {
+			code = switch_mprintf("%s(%s,%s)", hangup_func_str, hook_state == CS_HANGUP ? "hangup" : "transfer", hangup_func_arg);
+		} else {
+			code = switch_mprintf("%s(%s)", hangup_func_str, hook_state == CS_HANGUP ? "hangup" : "transfer");
+		}
+
 		Perl_eval_pv(my_perl, code, TRUE);
 		free(code);
 	}
@@ -105,7 +118,7 @@
 }
 
 
-void Session::setHangupHook(char *func) {
+void Session::setHangupHook(char *func, char *arg) {
 
 	sanity_check_noreturn;
 
@@ -116,6 +129,9 @@
 		switch_channel_set_private(channel, "CoreSession", this);
 		hook_state = switch_channel_get_state(channel);
 		switch_core_event_hook_add_state_change(session, perl_hanguphook);
+		if (arg) {
+			hangup_func_arg = strdup(func);
+		}
 	}
 }
 

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/freeswitch_perl.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/freeswitch_perl.h	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/freeswitch_perl.h	Tue May 13 23:37:33 2008
@@ -17,6 +17,7 @@
 
 #include <switch_cpp.h>
 
+namespace PERL {
 class Session : public CoreSession {
  private:
 	virtual void do_hangup_hook();
@@ -36,13 +37,14 @@
 
 	virtual switch_status_t run_dtmf_callback(void *input, switch_input_type_t itype);
 	void setInputCallback(char *cbfunc, char *funcargs);
-	void setHangupHook(char *func);
+	void setHangupHook(char *func, char *arg=NULL);
 	bool ready();
 	
 	char *cb_function;
 	char *cb_arg;
 	char *hangup_func_str;
+	char *hangup_func_arg;
 	void setPERL(PerlInterpreter *pi);
 };
-
+}
 #endif

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/hack.diff
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/hack.diff	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/hack.diff	Tue May 13 23:37:33 2008
@@ -1,30 +1,29 @@
---- mod_perl_wrap.cpp	2008-05-01 18:05:28.000000000 -0400
-+++ old.cpp	2008-05-01 18:05:51.000000000 -0400
-
-@@ -6293,7 +6293,7 @@
+--- mod_perl_wrap2.cpp	2008-05-11 20:28:24.000000000 -0400
++++ mod_perl_wrap.cpp	2008-05-11 20:26:06.000000000 -0400
+@@ -6754,7 +6754,7 @@
      if ((items < 0) || (items > 0)) {
        SWIG_croak("Usage: new_Session();");
      }
--    result = (Session *)new Session();
-+    result = (Session *)new Session(); result->setPERL(my_perl);
-     ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+-    result = (PERL::Session *)new PERL::Session(); result->setPERL(my_perl);
++    result = (PERL::Session *)new PERL::Session();
+     ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
      XSRETURN(argvi);
    fail:
-@@ -6320,7 +6320,7 @@
+@@ -6781,7 +6781,7 @@
        SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Session" "', argument " "1"" of type '" "char *""'");
      }
      arg1 = reinterpret_cast< char * >(buf1);
--    result = (Session *)new Session(arg1);
-+    result = (Session *)new Session(arg1); result->setPERL(my_perl);
-     ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+-    result = (PERL::Session *)new PERL::Session(arg1); result->setPERL(my_perl);
++    result = (PERL::Session *)new PERL::Session(arg1);
+     ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
      if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
      XSRETURN(argvi);
-@@ -6348,7 +6348,7 @@
+@@ -6809,7 +6809,7 @@
        SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Session" "', argument " "1"" of type '" "switch_core_session_t *""'"); 
      }
      arg1 = reinterpret_cast< switch_core_session_t * >(argp1);
--    result = (Session *)new Session(arg1);
-+    result = (Session *)new Session(arg1); result->setPERL(my_perl);
-     ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+-    result = (PERL::Session *)new PERL::Session(arg1); result->setPERL(my_perl);
++    result = (PERL::Session *)new PERL::Session(arg1);
+     ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
      
      XSRETURN(argvi);

Modified: 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.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/mod_perl.c	Tue May 13 23:37:33 2008
@@ -311,6 +311,12 @@
 }
 
 SWITCH_STANDARD_API(perlrun_api_function) {
+
+	if (switch_strlen_zero(cmd)) {
+		stream->write_function(stream, "-ERR Missing args.\n");
+		return SWITCH_STATUS_SUCCESS;
+	}
+
 	perl_thread(cmd);
 	stream->write_function(stream, "+OK\n");
 	return SWITCH_STATUS_SUCCESS;
@@ -319,6 +325,12 @@
 SWITCH_STANDARD_API(perl_api_function) {
 
 	struct perl_o po = { 0 };
+
+	if (switch_strlen_zero(cmd)) {
+		stream->write_function(stream, "-ERR Missing args.\n");
+		return SWITCH_STATUS_SUCCESS;
+	}
+
 	po.cmd = strdup(cmd);
 	po.stream = stream;
 	po.session = session;
@@ -411,10 +423,14 @@
 						);
 		Perl_safe_eval(my_perl, code);
 
+		if (params) {
+			mod_perl_conjure_event(my_perl, params, "params");
+		}
+
 		perl_run(my_perl);
-		str = SvPV(get_sv("XML_STRING", FALSE), n_a);
+		str = SvPV(get_sv("XML_STRING", TRUE), n_a);
 
-		if (str) {
+		if (!switch_strlen_zero(str)) {
 			if (switch_strlen_zero(str)) {
 				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No Result\n");
 			} else if (!(xml = switch_xml_parse_str(str, strlen(str)))) {

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/mod_perl_wrap.cpp
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/mod_perl_wrap.cpp	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_perl/mod_perl_wrap.cpp	Tue May 13 23:37:33 2008
@@ -1450,8 +1450,8 @@
 #define SWIGTYPE_p_CoreSession swig_types[1]
 #define SWIGTYPE_p_Event swig_types[2]
 #define SWIGTYPE_p_IVRMenu swig_types[3]
-#define SWIGTYPE_p_PerlInterpreter swig_types[4]
-#define SWIGTYPE_p_Session swig_types[5]
+#define SWIGTYPE_p_PERL__Session swig_types[4]
+#define SWIGTYPE_p_PerlInterpreter swig_types[5]
 #define SWIGTYPE_p_Stream swig_types[6]
 #define SWIGTYPE_p_char swig_types[7]
 #define SWIGTYPE_p_input_callback_state swig_types[8]
@@ -4661,6 +4661,45 @@
 }
 
 
+XS(_wrap_CoreSession_process_callback_result) {
+  {
+    CoreSession *arg1 = (CoreSession *) 0 ;
+    char *arg2 = (char *) 0 ;
+    switch_status_t result;
+    void *argp1 = 0 ;
+    int res1 = 0 ;
+    int res2 ;
+    char *buf2 = 0 ;
+    int alloc2 = 0 ;
+    int argvi = 0;
+    dXSARGS;
+    
+    if ((items < 2) || (items > 2)) {
+      SWIG_croak("Usage: CoreSession_process_callback_result(self,ret);");
+    }
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CoreSession, 0 |  0 );
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_process_callback_result" "', argument " "1"" of type '" "CoreSession *""'"); 
+    }
+    arg1 = reinterpret_cast< CoreSession * >(argp1);
+    res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_process_callback_result" "', argument " "2"" of type '" "char *""'");
+    }
+    arg2 = reinterpret_cast< char * >(buf2);
+    result = (arg1)->process_callback_result(arg2);
+    ST(argvi) = SWIG_NewPointerObj((new switch_status_t(static_cast< const switch_status_t& >(result))), SWIGTYPE_p_switch_status_t, SWIG_POINTER_OWN | 0); argvi++ ;
+    
+    if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+    XSRETURN(argvi);
+  fail:
+    
+    if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+    SWIG_croak_null();
+  }
+}
+
+
 XS(_wrap_CoreSession_recordFile__SWIG_0) {
   {
     CoreSession *arg1 = (CoreSession *) 0 ;
@@ -6243,6 +6282,71 @@
 }
 
 
+XS(_wrap_CoreSession_setEventData) {
+  {
+    CoreSession *arg1 = (CoreSession *) 0 ;
+    Event *arg2 = (Event *) 0 ;
+    void *argp1 = 0 ;
+    int res1 = 0 ;
+    void *argp2 = 0 ;
+    int res2 = 0 ;
+    int argvi = 0;
+    dXSARGS;
+    
+    if ((items < 2) || (items > 2)) {
+      SWIG_croak("Usage: CoreSession_setEventData(self,e);");
+    }
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CoreSession, 0 |  0 );
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_setEventData" "', argument " "1"" of type '" "CoreSession *""'"); 
+    }
+    arg1 = reinterpret_cast< CoreSession * >(argp1);
+    res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_Event, 0 |  0 );
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_setEventData" "', argument " "2"" of type '" "Event *""'"); 
+    }
+    arg2 = reinterpret_cast< Event * >(argp2);
+    (arg1)->setEventData(arg2);
+    
+    
+    
+    XSRETURN(argvi);
+  fail:
+    
+    
+    SWIG_croak_null();
+  }
+}
+
+
+XS(_wrap_CoreSession_getXMLCDR) {
+  {
+    CoreSession *arg1 = (CoreSession *) 0 ;
+    char *result = 0 ;
+    void *argp1 = 0 ;
+    int res1 = 0 ;
+    int argvi = 0;
+    dXSARGS;
+    
+    if ((items < 1) || (items > 1)) {
+      SWIG_croak("Usage: CoreSession_getXMLCDR(self);");
+    }
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_CoreSession, 0 |  0 );
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_getXMLCDR" "', argument " "1"" of type '" "CoreSession *""'"); 
+    }
+    arg1 = reinterpret_cast< CoreSession * >(argp1);
+    result = (char *)(arg1)->getXMLCDR();
+    ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+    
+    XSRETURN(argvi);
+  fail:
+    
+    SWIG_croak_null();
+  }
+}
+
+
 XS(_wrap_CoreSession_begin_allow_threads) {
   {
     CoreSession *arg1 = (CoreSession *) 0 ;
@@ -6643,15 +6747,15 @@
 
 XS(_wrap_new_Session__SWIG_0) {
   {
-    Session *result = 0 ;
+    PERL::Session *result = 0 ;
     int argvi = 0;
     dXSARGS;
     
     if ((items < 0) || (items > 0)) {
       SWIG_croak("Usage: new_Session();");
     }
-    result = (Session *)new Session(); result->setPERL(my_perl);
-    ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+    result = (PERL::Session *)new PERL::Session();
+    ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
     XSRETURN(argvi);
   fail:
     SWIG_croak_null();
@@ -6662,7 +6766,7 @@
 XS(_wrap_new_Session__SWIG_1) {
   {
     char *arg1 = (char *) 0 ;
-    Session *result = 0 ;
+    PERL::Session *result = 0 ;
     int res1 ;
     char *buf1 = 0 ;
     int alloc1 = 0 ;
@@ -6677,8 +6781,8 @@
       SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Session" "', argument " "1"" of type '" "char *""'");
     }
     arg1 = reinterpret_cast< char * >(buf1);
-    result = (Session *)new Session(arg1); result->setPERL(my_perl);
-    ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+    result = (PERL::Session *)new PERL::Session(arg1);
+    ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
     if (alloc1 == SWIG_NEWOBJ) delete[] buf1;
     XSRETURN(argvi);
   fail:
@@ -6691,7 +6795,7 @@
 XS(_wrap_new_Session__SWIG_2) {
   {
     switch_core_session_t *arg1 = (switch_core_session_t *) 0 ;
-    Session *result = 0 ;
+    PERL::Session *result = 0 ;
     void *argp1 = 0 ;
     int res1 = 0 ;
     int argvi = 0;
@@ -6705,8 +6809,8 @@
       SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_Session" "', argument " "1"" of type '" "switch_core_session_t *""'"); 
     }
     arg1 = reinterpret_cast< switch_core_session_t * >(argp1);
-    result = (Session *)new Session(arg1); result->setPERL(my_perl);
-    ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
+    result = (PERL::Session *)new PERL::Session(arg1);
+    ST(argvi) = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_PERL__Session, SWIG_OWNER | SWIG_SHADOW); argvi++ ;
     
     XSRETURN(argvi);
   fail:
@@ -6789,7 +6893,7 @@
 
 XS(_wrap_delete_Session) {
   {
-    Session *arg1 = (Session *) 0 ;
+    PERL::Session *arg1 = (PERL::Session *) 0 ;
     void *argp1 = 0 ;
     int res1 = 0 ;
     int argvi = 0;
@@ -6798,11 +6902,11 @@
     if ((items < 1) || (items > 1)) {
       SWIG_croak("Usage: delete_Session(self);");
     }
-    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_Session, SWIG_POINTER_DISOWN |  0 );
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_PERL__Session, SWIG_POINTER_DISOWN |  0 );
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Session" "', argument " "1"" of type '" "Session *""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_Session" "', argument " "1"" of type '" "PERL::Session *""'"); 
     }
-    arg1 = reinterpret_cast< Session * >(argp1);
+    arg1 = reinterpret_cast< PERL::Session * >(argp1);
     delete arg1;
     
     
@@ -6817,7 +6921,7 @@
 
 XS(_wrap_Session_begin_allow_threads) {
   {
-    Session *arg1 = (Session *) 0 ;
+    PERL::Session *arg1 = (PERL::Session *) 0 ;
     bool result;
     void *argp1 = 0 ;
     int res1 = 0 ;
@@ -6827,11 +6931,11 @@
     if ((items < 1) || (items > 1)) {
       SWIG_croak("Usage: Session_begin_allow_threads(self);");
     }
-    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_Session, 0 |  0 );
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_PERL__Session, 0 |  0 );
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_begin_allow_threads" "', argument " "1"" of type '" "Session *""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_begin_allow_threads" "', argument " "1"" of type '" "PERL::Session *""'"); 
     }
-    arg1 = reinterpret_cast< Session * >(argp1);
+    arg1 = reinterpret_cast< PERL::Session * >(argp1);
     result = (bool)(arg1)->begin_allow_threads();
     ST(argvi) = SWIG_From_bool  SWIG_PERL_CALL_ARGS_1(static_cast< bool >(result)); argvi++ ;
     
@@ -6845,7 +6949,7 @@
 
 XS(_wrap_Session_end_allow_threads) {
   {
-    Session *arg1 = (Session *) 0 ;
+    PERL::Session *arg1 = (PERL::Session *) 0 ;
     bool result;
     void *argp1 = 0 ;
     int res1 = 0 ;
@@ -6855,11 +6959,11 @@
     if ((items < 1) || (items > 1)) {
       SWIG_croak("Usage: Session_end_allow_threads(self);");
     }
-    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_Session, 0 |  0 );
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_PERL__Session, 0 |  0 );
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_end_allow_threads" "', argument " "1"" of type '" "Session *""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_end_allow_threads" "', argument " "1"" of type '" "PERL::Session *""'"); 
     }
-    arg1 = reinterpret_cast< Session * >(argp1);
+    arg1 = reinterpret_cast< PERL::Session * >(argp1);
     result = (bool)(arg1)->end_allow_threads();
     ST(argvi) = SWIG_From_bool  SWIG_PERL_CALL_ARGS_1(static_cast< bool >(result)); argvi++ ;
     
@@ -6873,7 +6977,7 @@
 
 XS(_wrap_Session_check_hangup_hook) {
   {
-    Session *arg1 = (Session *) 0 ;
+    PERL::Session *arg1 = (PERL::Session *) 0 ;
     void *argp1 = 0 ;
     int res1 = 0 ;
     int argvi = 0;
@@ -6882,11 +6986,11 @@
     if ((items < 1) || (items > 1)) {
       SWIG_croak("Usage: Session_check_hangup_hook(self);");
     }
-    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_Session, 0 |  0 );
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_PERL__Session, 0 |  0 );
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_check_hangup_hook" "', argument " "1"" of type '" "Session *""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_check_hangup_hook" "', argument " "1"" of type '" "PERL::Session *""'"); 
     }
-    arg1 = reinterpret_cast< Session * >(argp1);
+    arg1 = reinterpret_cast< PERL::Session * >(argp1);
     (arg1)->check_hangup_hook();
     
     
@@ -6900,7 +7004,7 @@
 
 XS(_wrap_Session_run_dtmf_callback) {
   {
-    Session *arg1 = (Session *) 0 ;
+    PERL::Session *arg1 = (PERL::Session *) 0 ;
     void *arg2 = (void *) 0 ;
     switch_input_type_t arg3 ;
     switch_status_t result;
@@ -6915,11 +7019,11 @@
     if ((items < 3) || (items > 3)) {
       SWIG_croak("Usage: Session_run_dtmf_callback(self,input,itype);");
     }
-    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_Session, 0 |  0 );
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_PERL__Session, 0 |  0 );
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_run_dtmf_callback" "', argument " "1"" of type '" "Session *""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_run_dtmf_callback" "', argument " "1"" of type '" "PERL::Session *""'"); 
     }
-    arg1 = reinterpret_cast< Session * >(argp1);
+    arg1 = reinterpret_cast< PERL::Session * >(argp1);
     res2 = SWIG_ConvertPtr(ST(1),SWIG_as_voidptrptr(&arg2), 0, 0);
     if (!SWIG_IsOK(res2)) {
       SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Session_run_dtmf_callback" "', argument " "2"" of type '" "void *""'"); 
@@ -6950,7 +7054,7 @@
 
 XS(_wrap_Session_setInputCallback) {
   {
-    Session *arg1 = (Session *) 0 ;
+    PERL::Session *arg1 = (PERL::Session *) 0 ;
     char *arg2 = (char *) 0 ;
     char *arg3 = (char *) 0 ;
     void *argp1 = 0 ;
@@ -6967,11 +7071,11 @@
     if ((items < 3) || (items > 3)) {
       SWIG_croak("Usage: Session_setInputCallback(self,cbfunc,funcargs);");
     }
-    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_Session, 0 |  0 );
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_PERL__Session, 0 |  0 );
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_setInputCallback" "', argument " "1"" of type '" "Session *""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_setInputCallback" "', argument " "1"" of type '" "PERL::Session *""'"); 
     }
-    arg1 = reinterpret_cast< Session * >(argp1);
+    arg1 = reinterpret_cast< PERL::Session * >(argp1);
     res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
     if (!SWIG_IsOK(res2)) {
       SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Session_setInputCallback" "', argument " "2"" of type '" "char *""'");
@@ -6997,9 +7101,58 @@
 }
 
 
-XS(_wrap_Session_setHangupHook) {
+XS(_wrap_Session_setHangupHook__SWIG_0) {
   {
-    Session *arg1 = (Session *) 0 ;
+    PERL::Session *arg1 = (PERL::Session *) 0 ;
+    char *arg2 = (char *) 0 ;
+    char *arg3 = (char *) 0 ;
+    void *argp1 = 0 ;
+    int res1 = 0 ;
+    int res2 ;
+    char *buf2 = 0 ;
+    int alloc2 = 0 ;
+    int res3 ;
+    char *buf3 = 0 ;
+    int alloc3 = 0 ;
+    int argvi = 0;
+    dXSARGS;
+    
+    if ((items < 3) || (items > 3)) {
+      SWIG_croak("Usage: Session_setHangupHook(self,func,arg);");
+    }
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_PERL__Session, 0 |  0 );
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_setHangupHook" "', argument " "1"" of type '" "PERL::Session *""'"); 
+    }
+    arg1 = reinterpret_cast< PERL::Session * >(argp1);
+    res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Session_setHangupHook" "', argument " "2"" of type '" "char *""'");
+    }
+    arg2 = reinterpret_cast< char * >(buf2);
+    res3 = SWIG_AsCharPtrAndSize(ST(2), &buf3, NULL, &alloc3);
+    if (!SWIG_IsOK(res3)) {
+      SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "Session_setHangupHook" "', argument " "3"" of type '" "char *""'");
+    }
+    arg3 = reinterpret_cast< char * >(buf3);
+    (arg1)->setHangupHook(arg2,arg3);
+    
+    
+    if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+    if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+    XSRETURN(argvi);
+  fail:
+    
+    if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+    if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
+    SWIG_croak_null();
+  }
+}
+
+
+XS(_wrap_Session_setHangupHook__SWIG_1) {
+  {
+    PERL::Session *arg1 = (PERL::Session *) 0 ;
     char *arg2 = (char *) 0 ;
     void *argp1 = 0 ;
     int res1 = 0 ;
@@ -7012,11 +7165,11 @@
     if ((items < 2) || (items > 2)) {
       SWIG_croak("Usage: Session_setHangupHook(self,func);");
     }
-    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_Session, 0 |  0 );
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_PERL__Session, 0 |  0 );
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_setHangupHook" "', argument " "1"" of type '" "Session *""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_setHangupHook" "', argument " "1"" of type '" "PERL::Session *""'"); 
     }
-    arg1 = reinterpret_cast< Session * >(argp1);
+    arg1 = reinterpret_cast< PERL::Session * >(argp1);
     res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
     if (!SWIG_IsOK(res2)) {
       SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Session_setHangupHook" "', argument " "2"" of type '" "char *""'");
@@ -7035,9 +7188,95 @@
 }
 
 
+XS(_wrap_Session_setHangupHook) {
+  dXSARGS;
+  
+  {
+    unsigned long _index = 0;
+    SWIG_TypeRank _rank = 0; 
+    if (items == 2) {
+      SWIG_TypeRank _ranki = 0;
+      SWIG_TypeRank _rankm = 0;
+      SWIG_TypeRank _pi = 1;
+      int _v = 0;
+      {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(ST(0), &vptr, SWIGTYPE_p_PERL__Session, 0);
+        _v = SWIG_CheckState(res);
+      }
+      if (!_v) goto check_1;
+      _ranki += _v*_pi;
+      _rankm += _pi;
+      _pi *= SWIG_MAXCASTRANK;
+      {
+        int res = SWIG_AsCharPtrAndSize(ST(1), 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+      }
+      if (!_v) goto check_1;
+      _ranki += _v*_pi;
+      _rankm += _pi;
+      _pi *= SWIG_MAXCASTRANK;
+      if (!_index || (_ranki < _rank)) {
+        _rank = _ranki; _index = 1;
+        if (_rank == _rankm) goto dispatch;
+      }
+    }
+  check_1:
+    
+    if (items == 3) {
+      SWIG_TypeRank _ranki = 0;
+      SWIG_TypeRank _rankm = 0;
+      SWIG_TypeRank _pi = 1;
+      int _v = 0;
+      {
+        void *vptr = 0;
+        int res = SWIG_ConvertPtr(ST(0), &vptr, SWIGTYPE_p_PERL__Session, 0);
+        _v = SWIG_CheckState(res);
+      }
+      if (!_v) goto check_2;
+      _ranki += _v*_pi;
+      _rankm += _pi;
+      _pi *= SWIG_MAXCASTRANK;
+      {
+        int res = SWIG_AsCharPtrAndSize(ST(1), 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+      }
+      if (!_v) goto check_2;
+      _ranki += _v*_pi;
+      _rankm += _pi;
+      _pi *= SWIG_MAXCASTRANK;
+      {
+        int res = SWIG_AsCharPtrAndSize(ST(2), 0, NULL, 0);
+        _v = SWIG_CheckState(res);
+      }
+      if (!_v) goto check_2;
+      _ranki += _v*_pi;
+      _rankm += _pi;
+      _pi *= SWIG_MAXCASTRANK;
+      if (!_index || (_ranki < _rank)) {
+        _rank = _ranki; _index = 2;
+        if (_rank == _rankm) goto dispatch;
+      }
+    }
+  check_2:
+    
+  dispatch:
+    switch(_index) {
+    case 1:
+      ++PL_markstack_ptr; SWIG_CALLXS(_wrap_Session_setHangupHook__SWIG_1); return;
+    case 2:
+      ++PL_markstack_ptr; SWIG_CALLXS(_wrap_Session_setHangupHook__SWIG_0); return;
+    }
+  }
+  
+  croak("No matching function for overloaded 'Session_setHangupHook'");
+  XSRETURN(0);
+}
+
+
 XS(_wrap_Session_ready) {
   {
-    Session *arg1 = (Session *) 0 ;
+    PERL::Session *arg1 = (PERL::Session *) 0 ;
     bool result;
     void *argp1 = 0 ;
     int res1 = 0 ;
@@ -7047,11 +7286,11 @@
     if ((items < 1) || (items > 1)) {
       SWIG_croak("Usage: Session_ready(self);");
     }
-    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_Session, 0 |  0 );
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_PERL__Session, 0 |  0 );
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_ready" "', argument " "1"" of type '" "Session *""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_ready" "', argument " "1"" of type '" "PERL::Session *""'"); 
     }
-    arg1 = reinterpret_cast< Session * >(argp1);
+    arg1 = reinterpret_cast< PERL::Session * >(argp1);
     result = (bool)(arg1)->ready();
     ST(argvi) = SWIG_From_bool  SWIG_PERL_CALL_ARGS_1(static_cast< bool >(result)); argvi++ ;
     
@@ -7065,7 +7304,7 @@
 
 XS(_wrap_Session_cb_function_set) {
   {
-    Session *arg1 = (Session *) 0 ;
+    PERL::Session *arg1 = (PERL::Session *) 0 ;
     char *arg2 = (char *) 0 ;
     void *argp1 = 0 ;
     int res1 = 0 ;
@@ -7078,11 +7317,11 @@
     if ((items < 2) || (items > 2)) {
       SWIG_croak("Usage: Session_cb_function_set(self,cb_function);");
     }
-    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_Session, 0 |  0 );
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_PERL__Session, 0 |  0 );
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_cb_function_set" "', argument " "1"" of type '" "Session *""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_cb_function_set" "', argument " "1"" of type '" "PERL::Session *""'"); 
     }
-    arg1 = reinterpret_cast< Session * >(argp1);
+    arg1 = reinterpret_cast< PERL::Session * >(argp1);
     res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
     if (!SWIG_IsOK(res2)) {
       SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Session_cb_function_set" "', argument " "2"" of type '" "char *""'");
@@ -7109,7 +7348,7 @@
 
 XS(_wrap_Session_cb_function_get) {
   {
-    Session *arg1 = (Session *) 0 ;
+    PERL::Session *arg1 = (PERL::Session *) 0 ;
     char *result = 0 ;
     void *argp1 = 0 ;
     int res1 = 0 ;
@@ -7119,11 +7358,11 @@
     if ((items < 1) || (items > 1)) {
       SWIG_croak("Usage: Session_cb_function_get(self);");
     }
-    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_Session, 0 |  0 );
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_PERL__Session, 0 |  0 );
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_cb_function_get" "', argument " "1"" of type '" "Session *""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_cb_function_get" "', argument " "1"" of type '" "PERL::Session *""'"); 
     }
-    arg1 = reinterpret_cast< Session * >(argp1);
+    arg1 = reinterpret_cast< PERL::Session * >(argp1);
     result = (char *) ((arg1)->cb_function);
     ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
     
@@ -7137,7 +7376,7 @@
 
 XS(_wrap_Session_cb_arg_set) {
   {
-    Session *arg1 = (Session *) 0 ;
+    PERL::Session *arg1 = (PERL::Session *) 0 ;
     char *arg2 = (char *) 0 ;
     void *argp1 = 0 ;
     int res1 = 0 ;
@@ -7150,11 +7389,11 @@
     if ((items < 2) || (items > 2)) {
       SWIG_croak("Usage: Session_cb_arg_set(self,cb_arg);");
     }
-    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_Session, 0 |  0 );
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_PERL__Session, 0 |  0 );
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_cb_arg_set" "', argument " "1"" of type '" "Session *""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_cb_arg_set" "', argument " "1"" of type '" "PERL::Session *""'"); 
     }
-    arg1 = reinterpret_cast< Session * >(argp1);
+    arg1 = reinterpret_cast< PERL::Session * >(argp1);
     res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
     if (!SWIG_IsOK(res2)) {
       SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Session_cb_arg_set" "', argument " "2"" of type '" "char *""'");
@@ -7181,7 +7420,7 @@
 
 XS(_wrap_Session_cb_arg_get) {
   {
-    Session *arg1 = (Session *) 0 ;
+    PERL::Session *arg1 = (PERL::Session *) 0 ;
     char *result = 0 ;
     void *argp1 = 0 ;
     int res1 = 0 ;
@@ -7191,11 +7430,11 @@
     if ((items < 1) || (items > 1)) {
       SWIG_croak("Usage: Session_cb_arg_get(self);");
     }
-    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_Session, 0 |  0 );
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_PERL__Session, 0 |  0 );
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_cb_arg_get" "', argument " "1"" of type '" "Session *""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_cb_arg_get" "', argument " "1"" of type '" "PERL::Session *""'"); 
     }
-    arg1 = reinterpret_cast< Session * >(argp1);
+    arg1 = reinterpret_cast< PERL::Session * >(argp1);
     result = (char *) ((arg1)->cb_arg);
     ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
     
@@ -7209,7 +7448,7 @@
 
 XS(_wrap_Session_hangup_func_str_set) {
   {
-    Session *arg1 = (Session *) 0 ;
+    PERL::Session *arg1 = (PERL::Session *) 0 ;
     char *arg2 = (char *) 0 ;
     void *argp1 = 0 ;
     int res1 = 0 ;
@@ -7222,11 +7461,11 @@
     if ((items < 2) || (items > 2)) {
       SWIG_croak("Usage: Session_hangup_func_str_set(self,hangup_func_str);");
     }
-    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_Session, 0 |  0 );
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_PERL__Session, 0 |  0 );
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_hangup_func_str_set" "', argument " "1"" of type '" "Session *""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_hangup_func_str_set" "', argument " "1"" of type '" "PERL::Session *""'"); 
     }
-    arg1 = reinterpret_cast< Session * >(argp1);
+    arg1 = reinterpret_cast< PERL::Session * >(argp1);
     res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
     if (!SWIG_IsOK(res2)) {
       SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Session_hangup_func_str_set" "', argument " "2"" of type '" "char *""'");
@@ -7253,7 +7492,7 @@
 
 XS(_wrap_Session_hangup_func_str_get) {
   {
-    Session *arg1 = (Session *) 0 ;
+    PERL::Session *arg1 = (PERL::Session *) 0 ;
     char *result = 0 ;
     void *argp1 = 0 ;
     int res1 = 0 ;
@@ -7263,11 +7502,11 @@
     if ((items < 1) || (items > 1)) {
       SWIG_croak("Usage: Session_hangup_func_str_get(self);");
     }
-    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_Session, 0 |  0 );
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_PERL__Session, 0 |  0 );
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_hangup_func_str_get" "', argument " "1"" of type '" "Session *""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_hangup_func_str_get" "', argument " "1"" of type '" "PERL::Session *""'"); 
     }
-    arg1 = reinterpret_cast< Session * >(argp1);
+    arg1 = reinterpret_cast< PERL::Session * >(argp1);
     result = (char *) ((arg1)->hangup_func_str);
     ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
     
@@ -7279,9 +7518,81 @@
 }
 
 
+XS(_wrap_Session_hangup_func_arg_set) {
+  {
+    PERL::Session *arg1 = (PERL::Session *) 0 ;
+    char *arg2 = (char *) 0 ;
+    void *argp1 = 0 ;
+    int res1 = 0 ;
+    int res2 ;
+    char *buf2 = 0 ;
+    int alloc2 = 0 ;
+    int argvi = 0;
+    dXSARGS;
+    
+    if ((items < 2) || (items > 2)) {
+      SWIG_croak("Usage: Session_hangup_func_arg_set(self,hangup_func_arg);");
+    }
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_PERL__Session, 0 |  0 );
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_hangup_func_arg_set" "', argument " "1"" of type '" "PERL::Session *""'"); 
+    }
+    arg1 = reinterpret_cast< PERL::Session * >(argp1);
+    res2 = SWIG_AsCharPtrAndSize(ST(1), &buf2, NULL, &alloc2);
+    if (!SWIG_IsOK(res2)) {
+      SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Session_hangup_func_arg_set" "', argument " "2"" of type '" "char *""'");
+    }
+    arg2 = reinterpret_cast< char * >(buf2);
+    if (arg1->hangup_func_arg) delete[] arg1->hangup_func_arg;
+    if (arg2) {
+      size_t size = strlen(reinterpret_cast< const char * >(arg2)) + 1;
+      arg1->hangup_func_arg = (char *)reinterpret_cast< char* >(memcpy((new char[size]), reinterpret_cast< const char * >(arg2), sizeof(char)*(size)));
+    } else {
+      arg1->hangup_func_arg = 0;
+    }
+    
+    
+    if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+    XSRETURN(argvi);
+  fail:
+    
+    if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+    SWIG_croak_null();
+  }
+}
+
+
+XS(_wrap_Session_hangup_func_arg_get) {
+  {
+    PERL::Session *arg1 = (PERL::Session *) 0 ;
+    char *result = 0 ;
+    void *argp1 = 0 ;
+    int res1 = 0 ;
+    int argvi = 0;
+    dXSARGS;
+    
+    if ((items < 1) || (items > 1)) {
+      SWIG_croak("Usage: Session_hangup_func_arg_get(self);");
+    }
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_PERL__Session, 0 |  0 );
+    if (!SWIG_IsOK(res1)) {
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_hangup_func_arg_get" "', argument " "1"" of type '" "PERL::Session *""'"); 
+    }
+    arg1 = reinterpret_cast< PERL::Session * >(argp1);
+    result = (char *) ((arg1)->hangup_func_arg);
+    ST(argvi) = SWIG_FromCharPtr((const char *)result); argvi++ ;
+    
+    XSRETURN(argvi);
+  fail:
+    
+    SWIG_croak_null();
+  }
+}
+
+
 XS(_wrap_Session_setPERL) {
   {
-    Session *arg1 = (Session *) 0 ;
+    PERL::Session *arg1 = (PERL::Session *) 0 ;
     PerlInterpreter *arg2 = (PerlInterpreter *) 0 ;
     void *argp1 = 0 ;
     int res1 = 0 ;
@@ -7293,11 +7604,11 @@
     if ((items < 2) || (items > 2)) {
       SWIG_croak("Usage: Session_setPERL(self,pi);");
     }
-    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_Session, 0 |  0 );
+    res1 = SWIG_ConvertPtr(ST(0), &argp1,SWIGTYPE_p_PERL__Session, 0 |  0 );
     if (!SWIG_IsOK(res1)) {
-      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_setPERL" "', argument " "1"" of type '" "Session *""'"); 
+      SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Session_setPERL" "', argument " "1"" of type '" "PERL::Session *""'"); 
     }
-    arg1 = reinterpret_cast< Session * >(argp1);
+    arg1 = reinterpret_cast< PERL::Session * >(argp1);
     res2 = SWIG_ConvertPtr(ST(1), &argp2,SWIGTYPE_p_PerlInterpreter, 0 |  0 );
     if (!SWIG_IsOK(res2)) {
       SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Session_setPERL" "', argument " "2"" of type '" "PerlInterpreter *""'"); 
@@ -7319,15 +7630,15 @@
 
 /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
 
-static void *_p_SessionTo_p_CoreSession(void *x, int *newmemory) {
-    return (void *)((CoreSession *)  ((Session *) x));
+static void *_p_PERL__SessionTo_p_CoreSession(void *x, int *newmemory) {
+    return (void *)((CoreSession *)  ((PERL::Session *) x));
 }
 static swig_type_info _swigt__p_API = {"_p_API", "API *", 0, 0, (void*)"freeswitch::API", 0};
 static swig_type_info _swigt__p_CoreSession = {"_p_CoreSession", "CoreSession *", 0, 0, (void*)"freeswitch::CoreSession", 0};
 static swig_type_info _swigt__p_Event = {"_p_Event", "Event *", 0, 0, (void*)"freeswitch::Event", 0};
 static swig_type_info _swigt__p_IVRMenu = {"_p_IVRMenu", "IVRMenu *", 0, 0, (void*)"freeswitch::IVRMenu", 0};
+static swig_type_info _swigt__p_PERL__Session = {"_p_PERL__Session", "PERL::Session *", 0, 0, (void*)"freeswitch::Session", 0};
 static swig_type_info _swigt__p_PerlInterpreter = {"_p_PerlInterpreter", "PerlInterpreter *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_Session = {"_p_Session", "Session *", 0, 0, (void*)"freeswitch::Session", 0};
 static swig_type_info _swigt__p_Stream = {"_p_Stream", "Stream *", 0, 0, (void*)"freeswitch::Stream", 0};
 static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_input_callback_state = {"_p_input_callback_state", "input_callback_state_t *|input_callback_state *", 0, 0, (void*)"freeswitch::input_callback_state_t", 0};
@@ -7348,8 +7659,8 @@
   &_swigt__p_CoreSession,
   &_swigt__p_Event,
   &_swigt__p_IVRMenu,
+  &_swigt__p_PERL__Session,
   &_swigt__p_PerlInterpreter,
-  &_swigt__p_Session,
   &_swigt__p_Stream,
   &_swigt__p_char,
   &_swigt__p_input_callback_state,
@@ -7367,11 +7678,11 @@
 };
 
 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_Session, _p_SessionTo_p_CoreSession, 0, 0},{0, 0, 0, 0}};
+static swig_cast_info _swigc__p_CoreSession[] = {  {&_swigt__p_CoreSession, 0, 0, 0},  {&_swigt__p_PERL__Session, _p_PERL__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_PERL__Session[] = {  {&_swigt__p_PERL__Session, 0, 0, 0},{0, 0, 0, 0}};
 static swig_cast_info _swigc__p_PerlInterpreter[] = {  {&_swigt__p_PerlInterpreter, 0, 0, 0},{0, 0, 0, 0}};
-static swig_cast_info _swigc__p_Session[] = {  {&_swigt__p_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_char[] = {  {&_swigt__p_char, 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}};
@@ -7392,8 +7703,8 @@
   _swigc__p_CoreSession,
   _swigc__p_Event,
   _swigc__p_IVRMenu,
+  _swigc__p_PERL__Session,
   _swigc__p_PerlInterpreter,
-  _swigc__p_Session,
   _swigc__p_Stream,
   _swigc__p_char,
   _swigc__p_input_callback_state,
@@ -7484,6 +7795,7 @@
 {"freeswitchc::CoreSession_setPrivate", _wrap_CoreSession_setPrivate},
 {"freeswitchc::CoreSession_getPrivate", _wrap_CoreSession_getPrivate},
 {"freeswitchc::CoreSession_getVariable", _wrap_CoreSession_getVariable},
+{"freeswitchc::CoreSession_process_callback_result", _wrap_CoreSession_process_callback_result},
 {"freeswitchc::CoreSession_recordFile", _wrap_CoreSession_recordFile},
 {"freeswitchc::CoreSession_setCallerData", _wrap_CoreSession_setCallerData},
 {"freeswitchc::CoreSession_originate", _wrap_CoreSession_originate},
@@ -7503,6 +7815,8 @@
 {"freeswitchc::CoreSession_ready", _wrap_CoreSession_ready},
 {"freeswitchc::CoreSession_execute", _wrap_CoreSession_execute},
 {"freeswitchc::CoreSession_sendEvent", _wrap_CoreSession_sendEvent},
+{"freeswitchc::CoreSession_setEventData", _wrap_CoreSession_setEventData},
+{"freeswitchc::CoreSession_getXMLCDR", _wrap_CoreSession_getXMLCDR},
 {"freeswitchc::CoreSession_begin_allow_threads", _wrap_CoreSession_begin_allow_threads},
 {"freeswitchc::CoreSession_end_allow_threads", _wrap_CoreSession_end_allow_threads},
 {"freeswitchc::CoreSession_get_uuid", _wrap_CoreSession_get_uuid},
@@ -7529,6 +7843,8 @@
 {"freeswitchc::Session_cb_arg_get", _wrap_Session_cb_arg_get},
 {"freeswitchc::Session_hangup_func_str_set", _wrap_Session_hangup_func_str_set},
 {"freeswitchc::Session_hangup_func_str_get", _wrap_Session_hangup_func_str_get},
+{"freeswitchc::Session_hangup_func_arg_set", _wrap_Session_hangup_func_arg_set},
+{"freeswitchc::Session_hangup_func_arg_get", _wrap_Session_hangup_func_arg_get},
 {"freeswitchc::Session_setPERL", _wrap_Session_setPERL},
 {0,0}
 };
@@ -7845,7 +8161,7 @@
   SWIG_TypeClientData(SWIGTYPE_p_Stream, (void*) "freeswitch::Stream");
   SWIG_TypeClientData(SWIGTYPE_p_Event, (void*) "freeswitch::Event");
   SWIG_TypeClientData(SWIGTYPE_p_CoreSession, (void*) "freeswitch::CoreSession");
-  SWIG_TypeClientData(SWIGTYPE_p_Session, (void*) "freeswitch::Session");
+  SWIG_TypeClientData(SWIGTYPE_p_PERL__Session, (void*) "freeswitch::Session");
   ST(0) = &PL_sv_yes;
   XSRETURN(1);
 }

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/freeswitch.py
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/freeswitch.py	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/freeswitch.py	Tue May 13 23:37:33 2008
@@ -1,5 +1,5 @@
 # This file was automatically generated by SWIG (http://www.swig.org).
-# Version 1.3.31
+# Version 1.3.35
 #
 # Don't modify this file, modify the SWIG interface instead.
 # This file is compatible with both classic and new-style classes.
@@ -169,7 +169,7 @@
     __setattr__ = lambda self, name, value: _swig_setattr(self, CoreSession, name, value)
     __swig_getmethods__ = {}
     __getattr__ = lambda self, name: _swig_getattr(self, CoreSession, name)
-    def __init__(self): raise AttributeError, "No constructor defined"
+    def __init__(self, *args, **kwargs): raise AttributeError, "No constructor defined"
     __repr__ = _swig_repr
     __swig_destroy__ = _freeswitch.delete_CoreSession
     __del__ = lambda self : None;
@@ -198,6 +198,7 @@
     def setPrivate(*args): return _freeswitch.CoreSession_setPrivate(*args)
     def getPrivate(*args): return _freeswitch.CoreSession_getPrivate(*args)
     def getVariable(*args): return _freeswitch.CoreSession_getVariable(*args)
+    def process_callback_result(*args): return _freeswitch.CoreSession_process_callback_result(*args)
     def recordFile(*args): return _freeswitch.CoreSession_recordFile(*args)
     def setCallerData(*args): return _freeswitch.CoreSession_setCallerData(*args)
     def originate(*args): return _freeswitch.CoreSession_originate(*args)
@@ -217,6 +218,8 @@
     def ready(*args): return _freeswitch.CoreSession_ready(*args)
     def execute(*args): return _freeswitch.CoreSession_execute(*args)
     def sendEvent(*args): return _freeswitch.CoreSession_sendEvent(*args)
+    def setEventData(*args): return _freeswitch.CoreSession_setEventData(*args)
+    def getXMLCDR(*args): return _freeswitch.CoreSession_getXMLCDR(*args)
     def begin_allow_threads(*args): return _freeswitch.CoreSession_begin_allow_threads(*args)
     def end_allow_threads(*args): return _freeswitch.CoreSession_end_allow_threads(*args)
     def get_uuid(*args): return _freeswitch.CoreSession_get_uuid(*args)

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/mod_python_wrap.cpp
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/mod_python_wrap.cpp	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/mod_python_wrap.cpp	Tue May 13 23:37:33 2008
@@ -1,6 +1,6 @@
 /* ----------------------------------------------------------------------------
  * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 1.3.31
+ * Version 1.3.35
  * 
  * This file is not intended to be easily readable and contains a number of 
  * coding conventions designed to improve portability and efficiency. Do not make
@@ -12,7 +12,7 @@
 #define SWIG_PYTHON_DIRECTOR_NO_VTABLE
 
 #ifdef __cplusplus
-template<class T> class SwigValueWrapper {
+template<typename T> class SwigValueWrapper {
     T *tt;
 public:
     SwigValueWrapper() : tt(0) { }
@@ -25,6 +25,10 @@
 private:
     SwigValueWrapper& operator=(const SwigValueWrapper<T>& rhs);
 };
+
+template <typename T> T SwigValueInit() {
+  return T();
+}
 #endif
 
 /* -----------------------------------------------------------------------------
@@ -34,14 +38,14 @@
 
 /* template workaround for compilers that cannot correctly implement the C++ standard */
 #ifndef SWIGTEMPLATEDISAMBIGUATOR
-# if defined(__SUNPRO_CC)
-#   if (__SUNPRO_CC <= 0x560)
-#     define SWIGTEMPLATEDISAMBIGUATOR template
-#   else
-#     define SWIGTEMPLATEDISAMBIGUATOR 
-#   endif
+# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560)
+#  define SWIGTEMPLATEDISAMBIGUATOR template
+# elif defined(__HP_aCC)
+/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */
+/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */
+#  define SWIGTEMPLATEDISAMBIGUATOR template
 # else
-#   define SWIGTEMPLATEDISAMBIGUATOR 
+#  define SWIGTEMPLATEDISAMBIGUATOR
 # endif
 #endif
 
@@ -124,6 +128,12 @@
 # define _CRT_SECURE_NO_DEPRECATE
 #endif
 
+/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */
+#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE)
+# define _SCL_SECURE_NO_DEPRECATE
+#endif
+
+
 
 /* Python.h has to appear first */
 #include <Python.h>
@@ -137,7 +147,7 @@
 
 /* This should only be incremented when either the layout of swig_type_info changes,
    or for whatever reason, the runtime changes incompatibly */
-#define SWIG_RUNTIME_VERSION "3"
+#define SWIG_RUNTIME_VERSION "4"
 
 /* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */
 #ifdef SWIG_TYPE_TABLE
@@ -172,6 +182,7 @@
 
 /* Flags for pointer conversions */
 #define SWIG_POINTER_DISOWN        0x1
+#define SWIG_CAST_NEW_MEMORY       0x2
 
 /* Flags for new pointer objects */
 #define SWIG_POINTER_OWN           0x1
@@ -312,10 +323,10 @@
 extern "C" {
 #endif
 
-typedef void *(*swig_converter_func)(void *);
+typedef void *(*swig_converter_func)(void *, int *);
 typedef struct swig_type_info *(*swig_dycast_func)(void **);
 
-/* Structure to store inforomation on one type */
+/* 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 */
@@ -360,7 +371,7 @@
     while ((*f2 == ' ') && (f2 != l2)) ++f2;
     if (*f1 != *f2) return (*f1 > *f2) ? 1 : -1;
   }
-  return (l1 - f1) - (l2 - f2);
+  return (int)((l1 - f1) - (l2 - f2));
 }
 
 /*
@@ -442,8 +453,8 @@
   Cast a pointer up an inheritance hierarchy
 */
 SWIGRUNTIMEINLINE void *
-SWIG_TypeCast(swig_cast_info *ty, void *ptr) {
-  return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr);
+SWIG_TypeCast(swig_cast_info *ty, void *ptr, int *newmemory) {
+  return ((!ty) || (!ty->converter)) ? ptr : (*ty->converter)(ptr, newmemory);
 }
 
 /* 
@@ -867,7 +878,7 @@
     Py_DECREF(old_str);
     Py_DECREF(value);
   } else {
-    PyErr_Format(PyExc_RuntimeError, mesg);
+    PyErr_SetString(PyExc_RuntimeError, mesg);
   }
 }
 
@@ -1107,14 +1118,14 @@
 /* Unpack the argument tuple */
 
 SWIGINTERN int
-SWIG_Python_UnpackTuple(PyObject *args, const char *name, int min, int max, PyObject **objs)
+SWIG_Python_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, PyObject **objs)
 {
   if (!args) {
     if (!min && !max) {
       return 1;
     } else {
       PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got none", 
-		   name, (min == max ? "" : "at least "), min);
+		   name, (min == max ? "" : "at least "), (int)min);
       return 0;
     }
   }  
@@ -1122,14 +1133,14 @@
     PyErr_SetString(PyExc_SystemError, "UnpackTuple() argument list is not a tuple");
     return 0;
   } else {
-    register int l = PyTuple_GET_SIZE(args);
+    register Py_ssize_t l = PyTuple_GET_SIZE(args);
     if (l < min) {
       PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", 
-		   name, (min == max ? "" : "at least "), min, l);
+		   name, (min == max ? "" : "at least "), (int)min, (int)l);
       return 0;
     } else if (l > max) {
       PyErr_Format(PyExc_TypeError, "%s expected %s%d arguments, got %d", 
-		   name, (min == max ? "" : "at most "), max, l);
+		   name, (min == max ? "" : "at most "), (int)max, (int)l);
       return 0;
     } else {
       register int i;
@@ -1427,7 +1438,7 @@
 {
   PySwigObject *sobj = (PySwigObject *) v;
   PyObject *next = sobj->next;
-  if (sobj->own) {
+  if (sobj->own == SWIG_POINTER_OWN) {
     swig_type_info *ty = sobj->ty;
     PySwigClientData *data = ty ? (PySwigClientData *) ty->clientdata : 0;
     PyObject *destroy = data ? data->destroy : 0;
@@ -1445,12 +1456,13 @@
 	res = ((*meth)(mself, v));
       }
       Py_XDECREF(res);
-    } else {
-      const char *name = SWIG_TypePrettyName(ty);
+    } 
 #if !defined(SWIG_PYTHON_SILENT_MEMLEAK)
-      printf("swig/python detected a memory leak of type '%s', no destructor found.\n", name);
-#endif
+    else {
+      const char *name = SWIG_TypePrettyName(ty);
+      printf("swig/python detected a memory leak of type '%s', no destructor found.\n", (name ? name : "unknown"));
     }
+#endif
   } 
   Py_XDECREF(next);
   PyObject_DEL(v);
@@ -1608,9 +1620,11 @@
     (unaryfunc)0,                 /*nb_float*/
     (unaryfunc)PySwigObject_oct,  /*nb_oct*/
     (unaryfunc)PySwigObject_hex,  /*nb_hex*/
-#if PY_VERSION_HEX >= 0x02020000
-    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_true_divide */ 
-#elif PY_VERSION_HEX >= 0x02000000
+#if PY_VERSION_HEX >= 0x02050000 /* 2.5.0 */
+    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_index */
+#elif PY_VERSION_HEX >= 0x02020000 /* 2.2.0 */
+    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_true_divide */
+#elif PY_VERSION_HEX >= 0x02000000 /* 2.0.0 */
     0,0,0,0,0,0,0,0,0,0,0 /* nb_inplace_add -> nb_inplace_or */
 #endif
   };
@@ -1953,7 +1967,7 @@
 
 SWIGRUNTIME int
 SWIG_Python_AcquirePtr(PyObject *obj, int own) {
-  if (own) {
+  if (own == SWIG_POINTER_OWN) {
     PySwigObject *sobj = SWIG_Python_GetSwigThis(obj);
     if (sobj) {
       int oldown = sobj->own;
@@ -1974,6 +1988,8 @@
     return SWIG_OK;
   } else {
     PySwigObject *sobj = SWIG_Python_GetSwigThis(obj);
+    if (own)
+      *own = 0;
     while (sobj) {
       void *vptr = sobj->ptr;
       if (ty) {
@@ -1987,7 +2003,15 @@
 	  if (!tc) {
 	    sobj = (PySwigObject *)sobj->next;
 	  } else {
-	    if (ptr) *ptr = SWIG_TypeCast(tc,vptr);
+	    if (ptr) {
+              int newmemory = 0;
+              *ptr = SWIG_TypeCast(tc,vptr,&newmemory);
+              if (newmemory == SWIG_CAST_NEW_MEMORY) {
+                assert(own);
+                if (own)
+                  *own = *own | SWIG_CAST_NEW_MEMORY;
+              }
+            }
 	    break;
 	  }
 	}
@@ -1997,7 +2021,8 @@
       }
     }
     if (sobj) {
-      if (own) *own = sobj->own;
+      if (own)
+        *own = *own | sobj->own;
       if (flags & SWIG_POINTER_DISOWN) {
 	sobj->own = 0;
       }
@@ -2062,8 +2087,13 @@
     }
     if (ty) {
       swig_cast_info *tc = SWIG_TypeCheck(desc,ty);
-      if (!tc) return SWIG_ERROR;
-      *ptr = SWIG_TypeCast(tc,vptr);
+      if (tc) {
+        int newmemory = 0;
+        *ptr = SWIG_TypeCast(tc,vptr,&newmemory);
+        assert(!newmemory); /* newmemory handling not yet implemented */
+      } else {
+        return SWIG_ERROR;
+      }
     } else {
       *ptr = vptr;
     }
@@ -2505,7 +2535,7 @@
 
 #define SWIG_name    "_freeswitch"
 
-#define SWIGVERSION 0x010331 
+#define SWIGVERSION 0x010335 
 #define SWIG_VERSION SWIGVERSION
 
 
@@ -2533,7 +2563,9 @@
     
     PyObject_ptr(PyObject *obj, bool initial_ref = true) :_obj(obj)
     {
-      if (initial_ref) Py_XINCREF(_obj);
+      if (initial_ref) {
+        Py_XINCREF(_obj);
+      }
     }
     
     PyObject_ptr & operator=(const PyObject_ptr& item) 
@@ -2649,14 +2681,12 @@
 
 
 #include <limits.h>
-#ifndef LLONG_MIN
-# define LLONG_MIN	LONG_LONG_MIN
-#endif
-#ifndef LLONG_MAX
-# define LLONG_MAX	LONG_LONG_MAX
-#endif
-#ifndef ULLONG_MAX
-# define ULLONG_MAX	ULONG_LONG_MAX
+#if !defined(SWIG_NO_LLONG_MAX)
+# if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__)
+#   define LLONG_MAX __LONG_LONG_MAX__
+#   define LLONG_MIN (-LLONG_MAX - 1LL)
+#   define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
+# endif
 #endif
 
 
@@ -2914,18 +2944,11 @@
 SWIGINTERN int
 SWIG_AsVal_bool (PyObject *obj, bool *val)
 {
-  if (obj == Py_True) {
-    if (val) *val = true;
-    return SWIG_OK;
-  } else if (obj == Py_False) {
-    if (val) *val = false;
-    return SWIG_OK;
-  } else {
-    long v = 0;
-    int res = SWIG_AddCast(SWIG_AsVal_long (obj, val ? &v : 0));
-    if (SWIG_IsOK(res) && val) *val = v ? true : false;
-    return res;
-  }
+  int r = PyObject_IsTrue(obj);
+  if (r == -1)
+    return SWIG_ERROR;
+  if (val) *val = r ? true : false;
+  return SWIG_OK;
 }
 
 #ifdef __cplusplus
@@ -3265,7 +3288,7 @@
 
 SWIGINTERN PyObject *IVRMenu_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O|swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_IVRMenu, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -3387,7 +3410,7 @@
 
 SWIGINTERN PyObject *API_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O|swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_API, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -3643,7 +3666,7 @@
 
 SWIGINTERN PyObject *input_callback_state_t_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O|swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_input_callback_state, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -3689,7 +3712,7 @@
   int ii;
   
   if (!PyTuple_Check(args)) SWIG_fail;
-  argc = PyObject_Length(args);
+  argc = (int)PyObject_Length(args);
   for (ii = 0; (ii < argc) && (ii < 1); ii++) {
     argv[ii] = PyTuple_GET_ITEM(args,ii);
   }
@@ -3707,7 +3730,10 @@
   }
   
 fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_Stream'.\n  Possible C/C++ prototypes are:\n    Stream()\n    Stream(switch_stream_handle_t *)\n");
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_Stream'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Stream()\n"
+    "    Stream(switch_stream_handle_t *)\n");
   return NULL;
 }
 
@@ -3791,7 +3817,7 @@
 
 SWIGINTERN PyObject *Stream_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O|swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Stream, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -4084,7 +4110,7 @@
   int ii;
   
   if (!PyTuple_Check(args)) SWIG_fail;
-  argc = PyObject_Length(args);
+  argc = (int)PyObject_Length(args);
   for (ii = 0; (ii < argc) && (ii < 2); ii++) {
     argv[ii] = PyTuple_GET_ITEM(args,ii);
   }
@@ -4134,7 +4160,12 @@
   }
   
 fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_Event'.\n  Possible C/C++ prototypes are:\n    Event(char const *,char const *)\n    Event(char const *)\n    Event(switch_event_t *,int)\n    Event(switch_event_t *)\n");
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_Event'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    Event(char const *,char const *)\n"
+    "    Event(char const *)\n"
+    "    Event(switch_event_t *,int)\n"
+    "    Event(switch_event_t *)\n");
   return NULL;
 }
 
@@ -4223,7 +4254,7 @@
   int ii;
   
   if (!PyTuple_Check(args)) SWIG_fail;
-  argc = PyObject_Length(args);
+  argc = (int)PyObject_Length(args);
   for (ii = 0; (ii < argc) && (ii < 2); ii++) {
     argv[ii] = PyTuple_GET_ITEM(args,ii);
   }
@@ -4251,7 +4282,10 @@
   }
   
 fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Event_serialize'.\n  Possible C/C++ prototypes are:\n    serialize(char const *)\n    serialize()\n");
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Event_serialize'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    serialize(Event *,char const *)\n"
+    "    serialize(Event *)\n");
   return NULL;
 }
 
@@ -4323,7 +4357,7 @@
   int ii;
   
   if (!PyTuple_Check(args)) SWIG_fail;
-  argc = PyObject_Length(args);
+  argc = (int)PyObject_Length(args);
   for (ii = 0; (ii < argc) && (ii < 2); ii++) {
     argv[ii] = PyTuple_GET_ITEM(args,ii);
   }
@@ -4351,7 +4385,10 @@
   }
   
 fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Event_setPriority'.\n  Possible C/C++ prototypes are:\n    setPriority(switch_priority_t)\n    setPriority()\n");
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'Event_setPriority'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    setPriority(Event *,switch_priority_t)\n"
+    "    setPriority(Event *)\n");
   return NULL;
 }
 
@@ -4572,7 +4609,7 @@
 
 SWIGINTERN PyObject *Event_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O|swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_Event, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -5029,7 +5066,7 @@
   int ii;
   
   if (!PyTuple_Check(args)) SWIG_fail;
-  argc = PyObject_Length(args);
+  argc = (int)PyObject_Length(args);
   for (ii = 0; (ii < argc) && (ii < 2); ii++) {
     argv[ii] = PyTuple_GET_ITEM(args,ii);
   }
@@ -5057,7 +5094,10 @@
   }
   
 fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CoreSession_hangup'.\n  Possible C/C++ prototypes are:\n    hangup(char *)\n    hangup()\n");
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CoreSession_hangup'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    hangup(CoreSession *,char *)\n"
+    "    hangup(CoreSession *)\n");
   return NULL;
 }
 
@@ -5215,6 +5255,40 @@
 }
 
 
+SWIGINTERN PyObject *_wrap_CoreSession_process_callback_result(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CoreSession *arg1 = (CoreSession *) 0 ;
+  char *arg2 = (char *) 0 ;
+  switch_status_t result;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  int res2 ;
+  char *buf2 = 0 ;
+  int alloc2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CoreSession_process_callback_result",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CoreSession, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_process_callback_result" "', argument " "1"" of type '" "CoreSession *""'"); 
+  }
+  arg1 = reinterpret_cast< CoreSession * >(argp1);
+  res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2);
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_process_callback_result" "', argument " "2"" of type '" "char *""'");
+  }
+  arg2 = reinterpret_cast< char * >(buf2);
+  result = (arg1)->process_callback_result(arg2);
+  resultobj = SWIG_NewPointerObj((new switch_status_t(static_cast< const switch_status_t& >(result))), SWIGTYPE_p_switch_status_t, SWIG_POINTER_OWN |  0 );
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return resultobj;
+fail:
+  if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_CoreSession_recordFile__SWIG_0(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   CoreSession *arg1 = (CoreSession *) 0 ;
@@ -5411,7 +5485,7 @@
   int ii;
   
   if (!PyTuple_Check(args)) SWIG_fail;
-  argc = PyObject_Length(args);
+  argc = (int)PyObject_Length(args);
   for (ii = 0; (ii < argc) && (ii < 5); ii++) {
     argv[ii] = PyTuple_GET_ITEM(args,ii);
   }
@@ -5505,7 +5579,12 @@
   }
   
 fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CoreSession_recordFile'.\n  Possible C/C++ prototypes are:\n    recordFile(char *,int,int,int)\n    recordFile(char *,int,int)\n    recordFile(char *,int)\n    recordFile(char *)\n");
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CoreSession_recordFile'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    recordFile(CoreSession *,char *,int,int,int)\n"
+    "    recordFile(CoreSession *,char *,int,int)\n"
+    "    recordFile(CoreSession *,char *,int)\n"
+    "    recordFile(CoreSession *,char *)\n");
   return NULL;
 }
 
@@ -5656,7 +5735,7 @@
   int ii;
   
   if (!PyTuple_Check(args)) SWIG_fail;
-  argc = PyObject_Length(args);
+  argc = (int)PyObject_Length(args);
   for (ii = 0; (ii < argc) && (ii < 4); ii++) {
     argv[ii] = PyTuple_GET_ITEM(args,ii);
   }
@@ -5704,7 +5783,10 @@
   }
   
 fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CoreSession_originate'.\n  Possible C/C++ prototypes are:\n    originate(CoreSession *,char *,int)\n    originate(CoreSession *,char *)\n");
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CoreSession_originate'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    originate(CoreSession *,CoreSession *,char *,int)\n"
+    "    originate(CoreSession *,CoreSession *,char *)\n");
   return NULL;
 }
 
@@ -6231,7 +6313,7 @@
   int ii;
   
   if (!PyTuple_Check(args)) SWIG_fail;
-  argc = PyObject_Length(args);
+  argc = (int)PyObject_Length(args);
   for (ii = 0; (ii < argc) && (ii < 3); ii++) {
     argv[ii] = PyTuple_GET_ITEM(args,ii);
   }
@@ -6269,7 +6351,10 @@
   }
   
 fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CoreSession_streamFile'.\n  Possible C/C++ prototypes are:\n    streamFile(char *,int)\n    streamFile(char *)\n");
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'CoreSession_streamFile'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    streamFile(CoreSession *,char *,int)\n"
+    "    streamFile(CoreSession *,char *)\n");
   return NULL;
 }
 
@@ -6474,6 +6559,58 @@
 }
 
 
+SWIGINTERN PyObject *_wrap_CoreSession_setEventData(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CoreSession *arg1 = (CoreSession *) 0 ;
+  Event *arg2 = (Event *) 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  void *argp2 = 0 ;
+  int res2 = 0 ;
+  PyObject * obj0 = 0 ;
+  PyObject * obj1 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"OO:CoreSession_setEventData",&obj0,&obj1)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CoreSession, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_setEventData" "', argument " "1"" of type '" "CoreSession *""'"); 
+  }
+  arg1 = reinterpret_cast< CoreSession * >(argp1);
+  res2 = SWIG_ConvertPtr(obj1, &argp2,SWIGTYPE_p_Event, 0 |  0 );
+  if (!SWIG_IsOK(res2)) {
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "CoreSession_setEventData" "', argument " "2"" of type '" "Event *""'"); 
+  }
+  arg2 = reinterpret_cast< Event * >(argp2);
+  (arg1)->setEventData(arg2);
+  resultobj = SWIG_Py_Void();
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
+SWIGINTERN PyObject *_wrap_CoreSession_getXMLCDR(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
+  PyObject *resultobj = 0;
+  CoreSession *arg1 = (CoreSession *) 0 ;
+  char *result = 0 ;
+  void *argp1 = 0 ;
+  int res1 = 0 ;
+  PyObject * obj0 = 0 ;
+  
+  if (!PyArg_ParseTuple(args,(char *)"O:CoreSession_getXMLCDR",&obj0)) SWIG_fail;
+  res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_CoreSession, 0 |  0 );
+  if (!SWIG_IsOK(res1)) {
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "CoreSession_getXMLCDR" "', argument " "1"" of type '" "CoreSession *""'"); 
+  }
+  arg1 = reinterpret_cast< CoreSession * >(argp1);
+  result = (char *)(arg1)->getXMLCDR();
+  resultobj = SWIG_FromCharPtr((const char *)result);
+  return resultobj;
+fail:
+  return NULL;
+}
+
+
 SWIGINTERN PyObject *_wrap_CoreSession_begin_allow_threads(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   CoreSession *arg1 = (CoreSession *) 0 ;
@@ -6634,7 +6771,7 @@
 
 SWIGINTERN PyObject *CoreSession_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O|swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_CoreSession, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -6885,7 +7022,7 @@
   int ii;
   
   if (!PyTuple_Check(args)) SWIG_fail;
-  argc = PyObject_Length(args);
+  argc = (int)PyObject_Length(args);
   for (ii = 0; (ii < argc) && (ii < 1); ii++) {
     argv[ii] = PyTuple_GET_ITEM(args,ii);
   }
@@ -6911,7 +7048,11 @@
   }
   
 fail:
-  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_PySession'.\n  Possible C/C++ prototypes are:\n    PySession()\n    PySession(char *)\n    PySession(switch_core_session_t *)\n");
+  SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number of arguments for overloaded function 'new_PySession'.\n"
+    "  Possible C/C++ prototypes are:\n"
+    "    PySession()\n"
+    "    PySession(char *)\n"
+    "    PySession(switch_core_session_t *)\n");
   return NULL;
 }
 
@@ -7144,7 +7285,7 @@
 
 SWIGINTERN PyObject *PySession_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *obj;
-  if (!PyArg_ParseTuple(args,(char*)"O|swigregister", &obj)) return NULL;
+  if (!PyArg_ParseTuple(args,(char*)"O:swigregister", &obj)) return NULL;
   SWIG_TypeNewClientData(SWIGTYPE_p_PySession, SWIG_NewClientData(obj));
   return SWIG_Py_Void();
 }
@@ -7216,6 +7357,7 @@
 	 { (char *)"CoreSession_setPrivate", _wrap_CoreSession_setPrivate, METH_VARARGS, NULL},
 	 { (char *)"CoreSession_getPrivate", _wrap_CoreSession_getPrivate, METH_VARARGS, NULL},
 	 { (char *)"CoreSession_getVariable", _wrap_CoreSession_getVariable, METH_VARARGS, NULL},
+	 { (char *)"CoreSession_process_callback_result", _wrap_CoreSession_process_callback_result, METH_VARARGS, NULL},
 	 { (char *)"CoreSession_recordFile", _wrap_CoreSession_recordFile, METH_VARARGS, NULL},
 	 { (char *)"CoreSession_setCallerData", _wrap_CoreSession_setCallerData, METH_VARARGS, NULL},
 	 { (char *)"CoreSession_originate", _wrap_CoreSession_originate, METH_VARARGS, NULL},
@@ -7235,6 +7377,8 @@
 	 { (char *)"CoreSession_ready", _wrap_CoreSession_ready, METH_VARARGS, NULL},
 	 { (char *)"CoreSession_execute", _wrap_CoreSession_execute, METH_VARARGS, NULL},
 	 { (char *)"CoreSession_sendEvent", _wrap_CoreSession_sendEvent, METH_VARARGS, NULL},
+	 { (char *)"CoreSession_setEventData", _wrap_CoreSession_setEventData, METH_VARARGS, NULL},
+	 { (char *)"CoreSession_getXMLCDR", _wrap_CoreSession_getXMLCDR, METH_VARARGS, NULL},
 	 { (char *)"CoreSession_begin_allow_threads", _wrap_CoreSession_begin_allow_threads, METH_VARARGS, NULL},
 	 { (char *)"CoreSession_end_allow_threads", _wrap_CoreSession_end_allow_threads, METH_VARARGS, NULL},
 	 { (char *)"CoreSession_get_uuid", _wrap_CoreSession_get_uuid, METH_VARARGS, NULL},
@@ -7263,7 +7407,7 @@
 
 /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
 
-static void *_p_PySessionTo_p_CoreSession(void *x) {
+static void *_p_PySessionTo_p_CoreSession(void *x, int *newmemory) {
     return (void *)((CoreSession *)  ((PySession *) x));
 }
 static swig_type_info _swigt__p_API = {"_p_API", "API *", 0, 0, (void*)0, 0};
@@ -7273,7 +7417,7 @@
 static swig_type_info _swigt__p_PySession = {"_p_PySession", "PySession *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_Stream = {"_p_Stream", "Stream *", 0, 0, (void*)0, 0};
 static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0};
-static swig_type_info _swigt__p_input_callback_state = {"_p_input_callback_state", "input_callback_state *", 0, 0, (void*)0, 0};
+static swig_type_info _swigt__p_input_callback_state = {"_p_input_callback_state", "input_callback_state_t *|input_callback_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_swap_state_t = {"_p_swap_state_t", "enum swap_state_t *|swap_state_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};
@@ -7420,7 +7564,7 @@
 SWIG_InitializeModule(void *clientdata) {
   size_t i;
   swig_module_info *module_head, *iter;
-  int found;
+  int found, init;
   
   clientdata = clientdata;
   
@@ -7430,6 +7574,9 @@
     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 */
@@ -7458,6 +7605,12 @@
     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 */
 #ifdef SWIGRUNTIME_DEBUG
   printf("SWIG_InitializeModule: size %d\n", swig_module.size);

Modified: 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	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_python/switch_swig_wrap.c	Tue May 13 23:37:33 2008
@@ -2924,19 +2924,19 @@
 		PyDict_SetItemString(d, "CS_INIT", SWIG_From_int((int) (CS_INIT)));
 	}
 	{
-		PyDict_SetItemString(d, "CS_RING", SWIG_From_int((int) (CS_RING)));
+		PyDict_SetItemString(d, "CS_ROUTING", SWIG_From_int((int) (CS_ROUTING)));
 	}
 	{
-		PyDict_SetItemString(d, "CS_TRANSMIT", SWIG_From_int((int) (CS_TRANSMIT)));
+		PyDict_SetItemString(d, "CS_SOFT_EXECUTE", SWIG_From_int((int) (CS_SOFT_EXECUTE)));
 	}
 	{
 		PyDict_SetItemString(d, "CS_EXECUTE", SWIG_From_int((int) (CS_EXECUTE)));
 	}
 	{
-		PyDict_SetItemString(d, "CS_LOOPBACK", SWIG_From_int((int) (CS_LOOPBACK)));
+		PyDict_SetItemString(d, "CS_EXCHANGE_MEDIA", SWIG_From_int((int) (CS_EXCHANGE_MEDIA)));
 	}
 	{
-		PyDict_SetItemString(d, "CS_HOLD", SWIG_From_int((int) (CS_HOLD)));
+		PyDict_SetItemString(d, "CS_CONSUME_MEDIA", SWIG_From_int((int) (CS_CONSUME_MEDIA)));
 	}
 	{
 		PyDict_SetItemString(d, "CS_HIBERNATE", SWIG_From_int((int) (CS_HIBERNATE)));

Modified: 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.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c	Tue May 13 23:37:33 2008
@@ -1560,7 +1560,7 @@
 	int argc = 0;
 	jsval ret;
 
-	if (jss->on_hangup && (jss->hook_state == CS_HANGUP || jss->hook_state == CS_RING)) {
+	if (jss->on_hangup && (jss->hook_state == CS_HANGUP || jss->hook_state == CS_ROUTING)) {
 		argv[argc++] = OBJECT_TO_JSVAL(jss->obj);
 		if (jss->hook_state == CS_HANGUP) {
 			argv[argc++] = STRING_TO_JSVAL(JS_NewStringCopyZ(jss->cx, "hangup"));
@@ -2754,7 +2754,7 @@
 		jss->session = peer_session;
 		switch_set_flag(jss, S_HUP);
 		*rval = BOOLEAN_TO_JSVAL(JS_TRUE);
-		switch_channel_set_state(switch_core_session_get_channel(jss->session), CS_TRANSMIT);
+		switch_channel_set_state(switch_core_session_get_channel(jss->session), CS_SOFT_EXECUTE);
 
 	} else {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Missing Args\n");

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_spidermonkey_teletone/mod_spidermonkey_teletone.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_spidermonkey_teletone/mod_spidermonkey_teletone.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/languages/mod_spidermonkey_teletone/mod_spidermonkey_teletone.c	Tue May 13 23:37:33 2008
@@ -209,7 +209,6 @@
 		switch_frame_t write_frame = { 0 };
 		unsigned char *fdata[1024];
 		switch_frame_t *read_frame;
-		int stream_id;
 		switch_core_thread_session_t thread_session = { 0 };
 		switch_channel_t *channel;
 
@@ -238,9 +237,7 @@
 		channel = switch_core_session_get_channel(session);
 
 		if (tto->timer) {
-			for (stream_id = 0; stream_id < switch_core_session_get_stream_count(session); stream_id++) {
-				switch_core_service_session(session, &thread_session, stream_id);
-			}
+			switch_core_service_session(session, &thread_session, 0);
 		}
 
 		if (loops) {
@@ -275,7 +272,7 @@
 
 			} else {
 				switch_status_t status;
-				status = switch_core_session_read_frame(session, &read_frame, -1, 0);
+				status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 
 				if (!SWITCH_READ_ACCEPTABLE(status)) {
 					break;
@@ -287,11 +284,9 @@
 			}
 
 			write_frame.samples = write_frame.datalen / 2;
-			for (stream_id = 0; stream_id < switch_core_session_get_stream_count(session); stream_id++) {
-				if (switch_core_session_write_frame(session, &write_frame, -1, stream_id) != SWITCH_STATUS_SUCCESS) {
-					switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Bad Write\n");
-					break;
-				}
+			if (switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0) != SWITCH_STATUS_SUCCESS) {
+				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Bad Write\n");
+				break;
 			}
 		}
 

Modified: 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_cdr/mod_xml_cdr.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/xml_int/mod_xml_cdr/mod_xml_cdr.c	Tue May 13 23:37:33 2008
@@ -241,11 +241,11 @@
 
 static switch_state_handler_table_t state_handlers = {
 	/*.on_init */ NULL,
-	/*.on_ring */ NULL,
+	/*.on_routing */ NULL,
 	/*.on_execute */ NULL,
 	/*.on_hangup */ my_on_hangup,
-	/*.on_loopback */ NULL,
-	/*.on_transmit */ NULL
+	/*.on_exchange_media */ NULL,
+	/*.on_soft_execute */ NULL
 };
 
 SWITCH_MODULE_LOAD_FUNCTION(mod_xml_cdr_load)

Modified: 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/Makefile	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/mod/xml_int/mod_xml_ldap/Makefile	Tue May 13 23:37:33 2008
@@ -8,7 +8,8 @@
 
 LOCAL_CFLAGS=-DWITH_OPENLDAP -DLDAP_DEPRECATED -I$(LDAP_DIR)/include
 
-DEFAULT_ARGS=--prefix=$(PREFIX) --disable-shared --with-pic
+DEFAULT_ARGS= --prefix=$(PREFIX) --disable-shared --with-pic --disable-slapd
+DEFAULT_ARGS+= --disable-slurpd --disable-relay --disable-bdb --disable-hdb
 
 LOCAL_LIBADD=$(LDAPLA) $(LIBLBERLA)
 
@@ -16,7 +17,7 @@
 
 $(LDAP_DIR):
 	$(GETLIB) $(LDAP).tgz
-	cd $(LDAP_DIR) && ./configure $(DEFAULT_ARGS) --disable-bdb --disable-hdb --disable-slapd
+	cd $(LDAP_DIR) && CFLAGS="`echo $(CFLAGS) | sed -e 's:-std=c99::'`" ./configure $(DEFAULT_ARGS)
 
 $(LDAPLA) $(LIBLBERLA): $(LDAP_DIR)
 	cd $(LDAP_DIR) && $(MAKE)

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch.c	Tue May 13 23:37:33 2008
@@ -44,8 +44,6 @@
 #define PIDFILE "freeswitch.pid"
 static char *pfile = PIDFILE;
 
-/* If we are a windows service, what should we be called */
-#define SERVICENAME "Freeswitch"
 
 /* Picky compiler */
 #ifdef __ICC
@@ -53,6 +51,10 @@
 #endif
 
 #ifdef WIN32
+/* If we are a windows service, what should we be called */
+#define SERVICENAME_DEFAULT "FreeSWITCH"
+#define SERVICENAME_MAXLEN 256
+static char service_name[SERVICENAME_MAXLEN];
 #include <winsock2.h>
 #include <windows.h>
 
@@ -62,7 +64,7 @@
 
 /* signal handler for when freeswitch is running in background mode.
  * signal triggers the shutdown of freeswitch
- */
+# */
 static void handle_SIGTERM(int sig)
 {
 	int32_t arg = 0;
@@ -172,7 +174,7 @@
 	status.dwControlsAccepted = SERVICE_ACCEPT_STOP;
 
 	/* register our handler for service control messages */
-	hStatus = RegisterServiceCtrlHandler(SERVICENAME, &ServiceCtrlHandler);
+	hStatus = RegisterServiceCtrlHandler(service_name, &ServiceCtrlHandler);
 
 	/* update the service status */
 	SetServiceStatus(hStatus, &status);
@@ -217,17 +219,10 @@
     switch_file_t *fd;
 	switch_memory_pool_t *pool = NULL;
 
-
-#ifdef WIN32
-	SERVICE_TABLE_ENTRY dispatchTable[] = {
-		{SERVICENAME, &service_main},
-		{NULL, NULL}
-	};
-#endif
 	usageDesc = "these are the optional arguments you can pass to freeswitch\n"
 #ifdef WIN32
-		"\t-service         -- start freeswitch as a service, cannot be used if loaded as a console app\n"
-		"\t-install         -- install freeswitch as a service\n"
+		"\t-service [name]  -- start freeswitch as a service, cannot be used if loaded as a console app\n"
+		"\t-install [name]  -- install freeswitch as a service, with optional service name\n"
 		"\t-uninstall       -- remove freeswitch as a service\n"
 #else
 		"\t-nf              -- no forking\n"
@@ -253,42 +248,100 @@
 #ifdef WIN32
 		if (x == 1) {
 			if (argv[x] && !strcmp(argv[x], "-service")) {
-				known_opt++;
-				if (StartServiceCtrlDispatcher(dispatchTable) == 0) {
-					/* Not loaded as a service */
-					fprintf(stderr, "Error Freeswitch loaded as a console app with -service option\n");
-					fprintf(stderr, "To install the service load freeswitch with -install\n");
+				/* New installs will always have the service name specified, but keep a default for compat */
+				x++;
+				if (argv[x] && strlen(argv[x])) {
+					switch_copy_string(service_name, argv[x], SERVICENAME_MAXLEN);
+				} else {
+					switch_copy_string(service_name, SERVICENAME_DEFAULT, SERVICENAME_MAXLEN);
+				}
+				{ /* Attempt to start service */
+					SERVICE_TABLE_ENTRY dispatchTable[] = {
+						{service_name, &service_main},
+						{NULL, NULL}
+					};
+					known_opt++;
+					if (StartServiceCtrlDispatcher(dispatchTable) == 0) {
+						/* Not loaded as a service */
+						fprintf(stderr, "Error Freeswitch loaded as a console app with -service option\n");
+						fprintf(stderr, "To install the service load freeswitch with -install\n");
+					}
+					exit(0);
 				}
-				exit(0);
 			}
 			if (argv[x] && !strcmp(argv[x], "-install")) {
 				char exePath[1024];
 				char servicePath[1024];
-
-				SC_HANDLE handle = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
+				x++;
+				if (argv[x] && strlen(argv[x])) {
+					switch_copy_string(service_name, argv[x], SERVICENAME_MAXLEN);
+				} else {
+					switch_copy_string(service_name, SERVICENAME_DEFAULT, SERVICENAME_MAXLEN);
+				}
 				known_opt++;
 				GetModuleFileName(NULL, exePath, 1024);
-				snprintf(servicePath, sizeof(servicePath), "%s -service", exePath);
-				if (!CreateService(handle,
-								   SERVICENAME,
-								   SERVICENAME,
-								   GENERIC_READ | GENERIC_EXECUTE,
-								   SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_IGNORE, servicePath, NULL, NULL, NULL, NULL, NULL)) {
-					fprintf(stderr, "Error installing freeswitch as a service.\n");
+				snprintf(servicePath, sizeof(servicePath), "%s -service %s", exePath, service_name);
+				{ /* Perform service installation */
+					SC_HANDLE hService; 
+					SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
+					if (!hSCManager) {
+						fprintf(stderr, "Could not open service manager (%d).\n", GetLastError());
+						exit(1);
+					}
+					hService = CreateService(hSCManager,
+							 				 service_name,
+											 service_name,
+											 GENERIC_READ | GENERIC_EXECUTE | SERVICE_CHANGE_CONFIG,
+											 SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_IGNORE, 
+											 servicePath, NULL, NULL, NULL,
+											 "NT AUTHORITY\\NetworkService",  /* Service start name */
+											 NULL);
+					if (!hService) {
+						fprintf(stderr, "Error creating freeswitch service (%d).\n", GetLastError());
+					} else {
+						/* Set desc, and don't care if it succeeds */
+						SERVICE_DESCRIPTION desc;
+						desc.lpDescription = "The FreeSWITCH service.";
+						if (!ChangeServiceConfig2(hService, SERVICE_CONFIG_DESCRIPTION, &desc)) {
+							fprintf(stderr, "FreeSWITCH installed, but could not set the service description (%d).\n", GetLastError());
+						}
+						CloseServiceHandle(hService);
+					}
+					CloseServiceHandle(hSCManager);
+					exit(0);
 				}
-				exit(0);
 			}
 			if (argv[x] && !strcmp(argv[x], "-uninstall")) {
-				SC_HANDLE handle = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
-				SC_HANDLE service = OpenService(handle, SERVICENAME, DELETE);
-				known_opt++;
-				if (service != NULL) {
-					/* remove the service! */
-					DeleteService(service);
+				x++;
+				if (argv[x] && strlen(argv[x])) {
+					switch_copy_string(service_name, argv[x], SERVICENAME_MAXLEN);
+				} else {
+					switch_copy_string(service_name, SERVICENAME_DEFAULT, SERVICENAME_MAXLEN);
+				}
+				{ /* Do the uninstallation */
+					SC_HANDLE hService;
+					SC_HANDLE hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
+					if (!hSCManager) {
+						fprintf(stderr, "Could not open service manager (%d).\n", GetLastError());
+						exit(1);
+					}
+					hService = OpenService(hSCManager, service_name, DELETE);
+					known_opt++;
+					if (hService != NULL) {
+						/* remove the service! */
+						if (!DeleteService(hService)) {
+							fprintf(stderr, "Error deleting service (%d).\n", GetLastError());
+						}
+						CloseServiceHandle(hService);
+					} else {
+						fprintf(stderr, "Error opening service (%d).\n", GetLastError());
+					}
+					CloseServiceHandle(hSCManager);
+					exit(0);
 				}
-				exit(0);
 			}
 		}
+
 #else
 		if (argv[x] && !strcmp(argv[x], "-u")) {
 			x++;

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_channel.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_channel.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_channel.c	Tue May 13 23:37:33 2008
@@ -112,8 +112,8 @@
 	switch_core_session_t *session;
 	switch_channel_state_t state;
 	switch_channel_state_t running_state;
-	uint32_t flags;
-	uint32_t state_flags;
+	switch_channel_flag_t flags;
+	switch_channel_flag_t state_flags;
 	switch_caller_profile_t *caller_profile;
 	const switch_state_handler_table_t *state_handlers[SWITCH_MAX_STATE_HANDLERS];
 	int state_handler_index;
@@ -424,7 +424,7 @@
 	switch_assert(channel != NULL);
 
 	switch_mutex_lock(channel->profile_mutex);
-	if (!(v = switch_event_get_header(channel->variables, (char*)varname))) {
+	if (!channel->variables || !(v = switch_event_get_header(channel->variables, (char*)varname))) {
 		switch_caller_profile_t *cp = channel->caller_profile;
 
 		if (cp) {
@@ -721,7 +721,7 @@
 
 	switch_assert(channel != NULL);
 
-	if (!channel->hangup_cause && channel->state > CS_RING && channel->state < CS_HANGUP && channel->state != CS_RESET && 
+	if (!channel->hangup_cause && channel->state > CS_ROUTING && channel->state < CS_HANGUP && channel->state != CS_RESET && 
 		!switch_test_flag(channel, CF_TRANSFER)) {
 			ret++;
 	}
@@ -732,12 +732,12 @@
 static const char *state_names[] = {
 	"CS_NEW",
 	"CS_INIT",
-	"CS_RING",
-	"CS_TRANSMIT",
+	"CS_ROUTING",
+	"CS_SOFT_EXECUTE",
 	"CS_EXECUTE",
-	"CS_LOOPBACK",
+	"CS_EXCHANGE_MEDIA",
 	"CS_PARK",
-	"CS_HOLD",
+	"CS_CONSUME_MEDIA",
 	"CS_HIBERNATE",
 	"CS_RESET",
 	"CS_HANGUP",
@@ -776,7 +776,7 @@
 		channel->state_flags = 0;
 	}
 
-	if (channel->state >= CS_RING) {
+	if (channel->state >= CS_ROUTING) {
 		switch_clear_flag(channel, CF_TRANSFER);
 		switch_channel_presence(channel, "unknown", (char *) state_names[state]);
 	}
@@ -784,7 +784,7 @@
 	if (state < CS_HANGUP) {
 		switch_event_t *event;
 		if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_STATE) == SWITCH_STATUS_SUCCESS) {
-			if (state == CS_RING) {
+			if (state == CS_ROUTING) {
 				switch_channel_event_set_data(channel, event);
 			} else {
 				char state_num[25];
@@ -838,9 +838,9 @@
 
 	case CS_NEW:
 	case CS_INIT:
-	case CS_LOOPBACK:
-	case CS_TRANSMIT:
-	case CS_RING:
+	case CS_EXCHANGE_MEDIA:
+	case CS_SOFT_EXECUTE:
+	case CS_ROUTING:
 	case CS_EXECUTE:
 	case CS_HANGUP:
 	case CS_DONE:
@@ -863,12 +863,12 @@
 
 case CS_INIT:
 	switch (state) {
-case CS_LOOPBACK:
-case CS_TRANSMIT:
-case CS_RING:
+case CS_EXCHANGE_MEDIA:
+case CS_SOFT_EXECUTE:
+case CS_ROUTING:
 case CS_EXECUTE:
 case CS_PARK:
-case CS_HOLD:
+case CS_CONSUME_MEDIA:
 case CS_HIBERNATE:
 case CS_RESET:
 	ok++;
@@ -877,13 +877,13 @@
 	}
 	break;
 
-case CS_LOOPBACK:
+case CS_EXCHANGE_MEDIA:
 	switch (state) {
-case CS_TRANSMIT:
-case CS_RING:
+case CS_SOFT_EXECUTE:
+case CS_ROUTING:
 case CS_EXECUTE:
 case CS_PARK:
-case CS_HOLD:
+case CS_CONSUME_MEDIA:
 case CS_HIBERNATE:
 case CS_RESET:
 	ok++;
@@ -892,13 +892,13 @@
 	}
 	break;
 
-case CS_TRANSMIT:
+case CS_SOFT_EXECUTE:
 	switch (state) {
-case CS_LOOPBACK:
-case CS_RING:
+case CS_EXCHANGE_MEDIA:
+case CS_ROUTING:
 case CS_EXECUTE:
 case CS_PARK:
-case CS_HOLD:
+case CS_CONSUME_MEDIA:
 case CS_HIBERNATE:
 case CS_RESET:
 	ok++;
@@ -909,25 +909,25 @@
 
 case CS_PARK:
 	switch (state) {
-case CS_LOOPBACK:
-case CS_RING:
+case CS_EXCHANGE_MEDIA:
+case CS_ROUTING:
 case CS_EXECUTE:
-case CS_TRANSMIT:
+case CS_SOFT_EXECUTE:
 case CS_HIBERNATE:
 case CS_RESET:
-case CS_HOLD:
+case CS_CONSUME_MEDIA:
 	ok++;
 default:
 	break;
 	}
 	break;
 
-case CS_HOLD:
+case CS_CONSUME_MEDIA:
 	switch (state) {
-case CS_LOOPBACK:
-case CS_RING:
+case CS_EXCHANGE_MEDIA:
+case CS_ROUTING:
 case CS_EXECUTE:
-case CS_TRANSMIT:
+case CS_SOFT_EXECUTE:
 case CS_HIBERNATE:
 case CS_RESET:
 case CS_PARK:
@@ -938,13 +938,13 @@
 	break;
 case CS_HIBERNATE:
 	switch (state) {
-case CS_LOOPBACK:
+case CS_EXCHANGE_MEDIA:
 case CS_INIT:
-case CS_RING:
+case CS_ROUTING:
 case CS_EXECUTE:
-case CS_TRANSMIT:
+case CS_SOFT_EXECUTE:
 case CS_PARK:
-case CS_HOLD:
+case CS_CONSUME_MEDIA:
 case CS_RESET:
 	ok++;
 default:
@@ -952,13 +952,13 @@
 	}
 	break;
 
-case CS_RING:
+case CS_ROUTING:
 	switch (state) {
-case CS_LOOPBACK:
+case CS_EXCHANGE_MEDIA:
 case CS_EXECUTE:
-case CS_TRANSMIT:
+case CS_SOFT_EXECUTE:
 case CS_PARK:
-case CS_HOLD:
+case CS_CONSUME_MEDIA:
 case CS_HIBERNATE:
 case CS_RESET:
 	ok++;
@@ -969,11 +969,11 @@
 
 case CS_EXECUTE:
 	switch (state) {
-case CS_LOOPBACK:
-case CS_TRANSMIT:
-case CS_RING:
+case CS_EXCHANGE_MEDIA:
+case CS_SOFT_EXECUTE:
+case CS_ROUTING:
 case CS_PARK:
-case CS_HOLD:
+case CS_CONSUME_MEDIA:
 case CS_HIBERNATE:
 case CS_RESET:
 	ok++;

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core.c	Tue May 13 23:37:33 2008
@@ -187,7 +187,7 @@
 
 	switch_channel_set_flag(channel, CF_SERVICE);
 	while (data->running > 0) {
-		switch (switch_core_session_read_frame(session, &read_frame, -1, stream_id)) {
+		switch (switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, stream_id)) {
 		case SWITCH_STATUS_SUCCESS:
 		case SWITCH_STATUS_TIMEOUT:
 		case SWITCH_STATUS_BREAK:
@@ -842,6 +842,11 @@
 
 	memset(&runtime, 0, sizeof(runtime));
 
+	runtime.dummy_cng_frame.data = runtime.dummy_data;
+	runtime.dummy_cng_frame.datalen= sizeof(runtime.dummy_data);
+	runtime.dummy_cng_frame.buflen= sizeof(runtime.dummy_data);
+	runtime.dummy_cng_frame.flags = SFF_CNG;
+
 	switch_set_flag((&runtime), SCF_NO_NEW_SESSIONS);
 	runtime.hard_log_level = SWITCH_LOG_DEBUG;
 	runtime.mailer_app = "sendmail";

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_event_hook.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_event_hook.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_event_hook.c	Tue May 13 23:37:33 2008
@@ -40,8 +40,6 @@
 NEW_HOOK_DECL(video_read_frame)
 NEW_HOOK_DECL(video_write_frame)
 NEW_HOOK_DECL(kill_channel)
-NEW_HOOK_DECL(waitfor_read)
-NEW_HOOK_DECL(waitfor_write)
 NEW_HOOK_DECL(send_dtmf)
 NEW_HOOK_DECL(recv_dtmf)
 NEW_HOOK_DECL(resurrect_session)

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_io.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_io.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_io.c	Tue May 13 23:37:33 2008
@@ -35,20 +35,19 @@
 #include <switch.h>
 #include "private/switch_core_pvt.h"
 
-SWITCH_DECLARE(switch_status_t) switch_core_session_write_video_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, int stream_id)
+SWITCH_DECLARE(switch_status_t) switch_core_session_write_video_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id)
 {
 	switch_io_event_hook_video_write_frame_t *ptr;
 	switch_status_t status = SWITCH_STATUS_FALSE;
-	switch_io_flag_t flags = 0;
 
 	if (switch_channel_get_state(session->channel) >= CS_HANGUP) {
 		return SWITCH_STATUS_FALSE;
 	}
 
 	if (session->endpoint_interface->io_routines->write_video_frame) {
-		if ((status = session->endpoint_interface->io_routines->write_video_frame(session, frame, timeout, flags, stream_id)) == SWITCH_STATUS_SUCCESS) {
+		if ((status = session->endpoint_interface->io_routines->write_video_frame(session, frame, flags, stream_id)) == SWITCH_STATUS_SUCCESS) {
 			for (ptr = session->event_hooks.video_write_frame; ptr; ptr = ptr->next) {
-				if ((status = ptr->video_write_frame(session, frame, timeout, flags, stream_id)) != SWITCH_STATUS_SUCCESS) {
+				if ((status = ptr->video_write_frame(session, frame, flags, stream_id)) != SWITCH_STATUS_SUCCESS) {
 					break;
 				}
 			}
@@ -57,7 +56,7 @@
 	return status;
 }
 
-SWITCH_DECLARE(switch_status_t) switch_core_session_read_video_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, int stream_id)
+SWITCH_DECLARE(switch_status_t) switch_core_session_read_video_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id)
 {
 	switch_status_t status = SWITCH_STATUS_FALSE;
 	switch_io_event_hook_video_read_frame_t *ptr;
@@ -68,9 +67,9 @@
 
 	if (session->endpoint_interface->io_routines->read_video_frame) {
 		if ((status =
-			 session->endpoint_interface->io_routines->read_video_frame(session, frame, timeout, SWITCH_IO_FLAG_NOOP, stream_id)) == SWITCH_STATUS_SUCCESS) {
+			 session->endpoint_interface->io_routines->read_video_frame(session, frame, flags, stream_id)) == SWITCH_STATUS_SUCCESS) {
 			for (ptr = session->event_hooks.video_read_frame; ptr; ptr = ptr->next) {
-				if ((status = ptr->video_read_frame(session, frame, timeout, SWITCH_IO_FLAG_NOOP, stream_id)) != SWITCH_STATUS_SUCCESS) {
+				if ((status = ptr->video_read_frame(session, frame, flags, stream_id)) != SWITCH_STATUS_SUCCESS) {
 					break;
 				}
 			}
@@ -98,12 +97,13 @@
 	return status;
 }
 
-SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout, int stream_id)
+SWITCH_DECLARE(switch_status_t) switch_core_session_read_frame(switch_core_session_t *session, switch_frame_t **frame, switch_io_flag_t flags, int stream_id)
 {
 	switch_io_event_hook_read_frame_t *ptr;
 	switch_status_t status;
 	int need_codec, perfect, do_bugs = 0, do_resample = 0, is_cng = 0;
 	unsigned int flag = 0;
+
   top:
 
 	if (switch_channel_get_state(session->channel) >= CS_HANGUP) {
@@ -125,9 +125,9 @@
 
 	if (session->endpoint_interface->io_routines->read_frame) {
 		if ((status =
-			 session->endpoint_interface->io_routines->read_frame(session, frame, timeout, SWITCH_IO_FLAG_NOOP, stream_id)) == SWITCH_STATUS_SUCCESS) {
+			 session->endpoint_interface->io_routines->read_frame(session, frame, flags, stream_id)) == SWITCH_STATUS_SUCCESS) {
 			for (ptr = session->event_hooks.read_frame; ptr; ptr = ptr->next) {
-				if ((status = ptr->read_frame(session, frame, timeout, SWITCH_IO_FLAG_NOOP, stream_id)) != SWITCH_STATUS_SUCCESS) {
+				if ((status = ptr->read_frame(session, frame, flags, stream_id)) != SWITCH_STATUS_SUCCESS) {
 					break;
 				}
 			}
@@ -160,7 +160,14 @@
 	} 
 
 	switch_assert((*frame)->codec != NULL);
-	if ((session->read_codec && (*frame)->codec && session->read_codec->implementation != (*frame)->codec->implementation)) {
+
+	if (!(session->read_codec && session->read_codec->implementation)) {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%s has no read codec.\n", switch_channel_get_name(session->channel));
+		abort();
+		return SWITCH_STATUS_FALSE;
+	}
+
+	if (((*frame)->codec && session->read_codec->implementation != (*frame)->codec->implementation)) {
 		need_codec = TRUE;
 	}
 
@@ -462,19 +469,23 @@
 
  even_more_done:
 
+	if (!*frame) {
+		*frame = &runtime.dummy_cng_frame;
+	}
+
 	return status;
 }
 
-static switch_status_t perform_write(switch_core_session_t *session, switch_frame_t *frame, int timeout, switch_io_flag_t flags, int stream_id)
+static switch_status_t perform_write(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id)
 {
 	switch_io_event_hook_write_frame_t *ptr;
 	switch_status_t status = SWITCH_STATUS_FALSE;
 
 	if (session->endpoint_interface->io_routines->write_frame) {
 
-		if ((status = session->endpoint_interface->io_routines->write_frame(session, frame, timeout, flags, stream_id)) == SWITCH_STATUS_SUCCESS) {
+		if ((status = session->endpoint_interface->io_routines->write_frame(session, frame, flags, stream_id)) == SWITCH_STATUS_SUCCESS) {
 			for (ptr = session->event_hooks.write_frame; ptr; ptr = ptr->next) {
-				if ((status = ptr->write_frame(session, frame, timeout, flags, stream_id)) != SWITCH_STATUS_SUCCESS) {
+				if ((status = ptr->write_frame(session, frame, flags, stream_id)) != SWITCH_STATUS_SUCCESS) {
 					break;
 				}
 			}
@@ -484,13 +495,12 @@
 	return status;
 }
 
-SWITCH_DECLARE(switch_status_t) switch_core_session_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout, int stream_id)
+SWITCH_DECLARE(switch_status_t) switch_core_session_write_frame(switch_core_session_t *session, switch_frame_t *frame, switch_io_flag_t flags, int stream_id)
 {
 
 	switch_status_t status = SWITCH_STATUS_FALSE;
 	switch_frame_t *enc_frame = NULL, *write_frame = frame;
 	unsigned int flag = 0, need_codec = 0, perfect = 0, do_bugs = 0, do_write = 0, do_resample = 0, ptime_mismatch = 0;
-	switch_io_flag_t io_flag = SWITCH_IO_FLAG_NOOP;
 
 	switch_assert(session != NULL);
 	switch_assert(frame != NULL);
@@ -499,18 +509,23 @@
 		return SWITCH_STATUS_FALSE;
 	}
 
+	if (!(session->write_codec && session->write_codec->implementation)) {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "%s has no write codec.\n", switch_channel_get_name(session->channel));
+		return SWITCH_STATUS_FALSE;
+	}
+
 	if (switch_channel_test_flag(session->channel, CF_HOLD)) {
 		return SWITCH_STATUS_SUCCESS;
 	}
 
 	if (switch_test_flag(frame, SFF_PROXY_PACKET)) {
 		/* Fast PASS! */
-		return perform_write(session, frame, timeout, flag, stream_id);
+		return perform_write(session, frame, flag, stream_id);
 	}
 
 	if (switch_test_flag(frame, SFF_CNG)) {
 		if (switch_channel_test_flag(session->channel, CF_ACCEPT_CNG)) {
-			return perform_write(session, frame, timeout, flag, stream_id);
+			return perform_write(session, frame, flag, stream_id);
 		}
 		return SWITCH_STATUS_SUCCESS;
 	}
@@ -751,7 +766,7 @@
 				if (flag & SFF_CNG) {
 					switch_set_flag(write_frame, SFF_CNG);
 				}
-				status = perform_write(session, write_frame, timeout, io_flag, stream_id);
+				status = perform_write(session, write_frame, flags, stream_id);
 				return status;
 			} else {
 				switch_size_t used = switch_buffer_inuse(session->raw_write_buffer);
@@ -857,7 +872,7 @@
 								switch_set_flag(write_frame, SFF_CNG);
 							}
 
-							if ((status = perform_write(session, write_frame, timeout, io_flag, stream_id)) != SWITCH_STATUS_SUCCESS) {
+							if ((status = perform_write(session, write_frame, flags, stream_id)) != SWITCH_STATUS_SUCCESS) {
 								break;
 							}
 						}
@@ -873,7 +888,7 @@
   done:
 
 	if (do_write) {
-		return perform_write(session, frame, timeout, io_flag, stream_id);
+		return perform_write(session, frame, flags, stream_id);
 	}
 	return status;
 }
@@ -907,40 +922,6 @@
 	return status;
 }
 
-SWITCH_DECLARE(switch_status_t) switch_core_session_waitfor_read(switch_core_session_t *session, int timeout, int stream_id)
-{
-	switch_io_event_hook_waitfor_read_t *ptr;
-	switch_status_t status = SWITCH_STATUS_FALSE;
-
-	if (session->endpoint_interface->io_routines->waitfor_read) {
-		if ((status = session->endpoint_interface->io_routines->waitfor_read(session, timeout, stream_id)) == SWITCH_STATUS_SUCCESS) {
-			for (ptr = session->event_hooks.waitfor_read; ptr; ptr = ptr->next) {
-				if ((status = ptr->waitfor_read(session, timeout, stream_id)) != SWITCH_STATUS_SUCCESS) {
-					break;
-				}
-			}
-		}
-	}
-	return status;
-}
-
-SWITCH_DECLARE(switch_status_t) switch_core_session_waitfor_write(switch_core_session_t *session, int timeout, int stream_id)
-{
-	switch_io_event_hook_waitfor_write_t *ptr;
-	switch_status_t status = SWITCH_STATUS_FALSE;
-
-	if (session->endpoint_interface->io_routines->waitfor_write) {
-		if ((status = session->endpoint_interface->io_routines->waitfor_write(session, timeout, stream_id)) == SWITCH_STATUS_SUCCESS) {
-			for (ptr = session->event_hooks.waitfor_write; ptr; ptr = ptr->next) {
-				if ((status = ptr->waitfor_write(session, timeout, stream_id)) != SWITCH_STATUS_SUCCESS) {
-					break;
-				}
-			}
-		}
-	}
-	return status;
-}
-
 SWITCH_DECLARE(switch_status_t) switch_core_session_recv_dtmf(switch_core_session_t *session, const switch_dtmf_t *dtmf)
 {
 	switch_io_event_hook_recv_dtmf_t *ptr;	

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_sqldb.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_sqldb.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_sqldb.c	Tue May 13 23:37:33 2008
@@ -202,7 +202,7 @@
 
 
 		if (trans && ((itterations == target) || nothing_in_queue)) {
-			if (switch_core_db_persistant_execute_trans(sql_manager.event_db, sqlbuf, 1000) != SWITCH_STATUS_SUCCESS) {
+			if (switch_core_db_persistant_execute_trans(sql_manager.event_db, sqlbuf, 100) != SWITCH_STATUS_SUCCESS) {
 				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "SQL thread unable to commit transaction, records lost!\n");
 			}
 			itterations = 0;
@@ -237,69 +237,75 @@
 	switch (event->event_id) {
 	case SWITCH_EVENT_ADD_SCHEDULE:
 		sql = switch_mprintf("insert into tasks values('%q','%q','%q','%q')",
-							 switch_event_get_header(event, "task-id"),
-							 switch_event_get_header(event, "task-desc"),
-							 switch_event_get_header(event, "task-group"), switch_event_get_header(event, "task-sql_manager")
-			);
+							 switch_event_get_header_nil(event, "task-id"),
+							 switch_event_get_header_nil(event, "task-desc"),
+							 switch_event_get_header_nil(event, "task-group"), 
+							 switch_event_get_header_nil(event, "task-sql_manager")
+							 );
 		break;
 	case SWITCH_EVENT_DEL_SCHEDULE:
 	case SWITCH_EVENT_EXE_SCHEDULE:
-		sql = switch_mprintf("delete from tasks where task_id=%q", switch_event_get_header(event, "task-id"));
+		sql = switch_mprintf("delete from tasks where task_id=%q", switch_event_get_header_nil(event, "task-id"));
 		break;
 	case SWITCH_EVENT_RE_SCHEDULE:
 		sql = switch_mprintf("update tasks set task_sql_manager='%q' where task_id=%q",
-							 switch_event_get_header(event, "task-sql_manager"), switch_event_get_header(event, "task-id"));
+							 switch_event_get_header_nil(event, "task-sql_manager"), switch_event_get_header_nil(event, "task-id"));
 		break;
 	case SWITCH_EVENT_CHANNEL_DESTROY:
-		sql = switch_mprintf("delete from channels where uuid='%q'", switch_event_get_header(event, "unique-id"));
+		sql = switch_mprintf("delete from channels where uuid='%q'", switch_event_get_header_nil(event, "unique-id"));
 		break;
 	case SWITCH_EVENT_CHANNEL_CREATE:
-		sql = switch_mprintf("insert into channels (uuid,created,created_epoch, name,state) values('%q','%q','%ld','%q','%q')",
-							 switch_event_get_header(event, "unique-id"),
-							 switch_event_get_header(event, "event-date-local"),
+		sql = switch_mprintf("insert into channels (uuid,created,created_epoch, name,state,dialplan,context) values('%q','%q','%ld','%q','%q','%q','%q')",
+							 switch_event_get_header_nil(event, "unique-id"),
+							 switch_event_get_header_nil(event, "event-date-local"),
 							 (long)switch_timestamp(NULL),							 
-							 switch_event_get_header(event, "channel-name"), 
-							 switch_event_get_header(event, "channel-state")
+							 switch_event_get_header_nil(event, "channel-name"),
+							 switch_event_get_header_nil(event, "channel-state"),
+							 switch_event_get_header_nil(event, "caller-dialplan"),
+							 switch_event_get_header_nil(event, "caller-context")
 			);
 		break;
 	case SWITCH_EVENT_CODEC:
 		sql =
 			switch_mprintf
 			("update channels set read_codec='%q',read_rate='%q',write_codec='%q',write_rate='%q' where uuid='%q'",
-			 switch_event_get_header(event, "channel-read-codec-name"), switch_event_get_header(event,
+			 switch_event_get_header_nil(event, "channel-read-codec-name"), switch_event_get_header_nil(event,
 																								"channel-read-codec-rate"),
-			 switch_event_get_header(event, "channel-write-codec-name"), switch_event_get_header(event,
+			 switch_event_get_header_nil(event, "channel-write-codec-name"), switch_event_get_header_nil(event,
 																								 "channel-write-codec-rate"),
-			 switch_event_get_header(event, "unique-id"));
+			 switch_event_get_header_nil(event, "unique-id"));
 		break;
 	case SWITCH_EVENT_CHANNEL_EXECUTE:
 		sql = switch_mprintf("update channels set application='%q',application_data='%q' where uuid='%q'",
-							 switch_event_get_header(event, "application"),
-							 switch_event_get_header(event, "application-data"), switch_event_get_header(event, "unique-id")
+							 switch_event_get_header_nil(event, "application"),
+							 switch_event_get_header_nil(event, "application-data"), switch_event_get_header_nil(event, "unique-id")
 			);
 		break;
 	case SWITCH_EVENT_CHANNEL_STATE:
 		if (event) {
-			char *state = switch_event_get_header(event, "channel-state-number");
+			char *state = switch_event_get_header_nil(event, "channel-state-number");
 			switch_channel_state_t state_i = atoi(state);
 
 			switch (state_i) {
 			case CS_HANGUP:
 			case CS_DONE:
 				break;
-			case CS_RING:
-				sql = switch_mprintf("update channels set state='%s',cid_name='%q',cid_num='%q',ip_addr='%s',dest='%q' "
+			case CS_ROUTING:
+				sql = switch_mprintf("update channels set state='%s',cid_name='%q',cid_num='%q',ip_addr='%s',dest='%q',dialplan='%q',context='%q' "
 									 "where uuid='%s'",
-									 switch_event_get_header(event, "channel-state"),
-									 switch_event_get_header(event, "caller-caller-id-name"),
-									 switch_event_get_header(event, "caller-caller-id-number"),
-									 switch_event_get_header(event, "caller-network-addr"),
-									 switch_event_get_header(event, "caller-destination-number"), switch_event_get_header(event, "unique-id")
+									 switch_event_get_header_nil(event, "channel-state"),
+									 switch_event_get_header_nil(event, "caller-caller-id-name"),
+									 switch_event_get_header_nil(event, "caller-caller-id-number"),
+									 switch_event_get_header_nil(event, "caller-network-addr"),
+									 switch_event_get_header_nil(event, "caller-destination-number"), 
+									 switch_event_get_header_nil(event, "caller-dialplan"), 
+									 switch_event_get_header_nil(event, "caller-context"), 
+									 switch_event_get_header_nil(event, "unique-id")
 					);
 				break;
 			default:
 				sql = switch_mprintf("update channels set state='%s' where uuid='%s'",
-									 switch_event_get_header(event, "channel-state"), switch_event_get_header(event, "unique-id")
+									 switch_event_get_header_nil(event, "channel-state"), switch_event_get_header_nil(event, "unique-id")
 					);
 				break;
 			}
@@ -308,22 +314,22 @@
 		break;
 	case SWITCH_EVENT_CHANNEL_BRIDGE:
 		sql = switch_mprintf("insert into calls values ('%s', '%ld', '%s','%q','%q','%q','%q','%s','%q','%q','%q','%q','%s')",
-							 switch_event_get_header(event, "event-date-local"),
+							 switch_event_get_header_nil(event, "event-date-local"),
 							 (long)switch_timestamp(NULL),
-							 switch_event_get_header(event, "event-calling-function"),
-							 switch_event_get_header(event, "caller-caller-id-name"),
-							 switch_event_get_header(event, "caller-caller-id-number"),
-							 switch_event_get_header(event, "caller-destination-number"),
-							 switch_event_get_header(event, "caller-channel-name"),
-							 switch_event_get_header(event, "caller-unique-id"),
-							 switch_event_get_header(event, "Other-Leg-caller-id-name"),
-							 switch_event_get_header(event, "Other-Leg-caller-id-number"),
-							 switch_event_get_header(event, "Other-Leg-destination-number"),
-							 switch_event_get_header(event, "Other-Leg-channel-name"), switch_event_get_header(event, "Other-Leg-unique-id")
+							 switch_event_get_header_nil(event, "event-calling-function"),
+							 switch_event_get_header_nil(event, "caller-caller-id-name"),
+							 switch_event_get_header_nil(event, "caller-caller-id-number"),
+							 switch_event_get_header_nil(event, "caller-destination-number"),
+							 switch_event_get_header_nil(event, "caller-channel-name"),
+							 switch_event_get_header_nil(event, "caller-unique-id"),
+							 switch_event_get_header_nil(event, "Other-Leg-caller-id-name"),
+							 switch_event_get_header_nil(event, "Other-Leg-caller-id-number"),
+							 switch_event_get_header_nil(event, "Other-Leg-destination-number"),
+							 switch_event_get_header_nil(event, "Other-Leg-channel-name"), switch_event_get_header_nil(event, "Other-Leg-unique-id")
 			);
 		break;
 	case SWITCH_EVENT_CHANNEL_UNBRIDGE:
-		sql = switch_mprintf("delete from calls where caller_uuid='%s'", switch_event_get_header(event, "caller-unique-id"));
+		sql = switch_mprintf("delete from calls where caller_uuid='%s'", switch_event_get_header_nil(event, "caller-unique-id"));
 		break;
 	case SWITCH_EVENT_SHUTDOWN:
 		sql = switch_mprintf("delete from channels;delete from interfaces;delete from calls");
@@ -332,10 +338,10 @@
 		return;
 	case SWITCH_EVENT_MODULE_LOAD:
 		{
-			const char *type = switch_event_get_header(event, "type");
-			const char *name = switch_event_get_header(event, "name");
-			const char *description = switch_event_get_header(event, "description");
-			const char *syntax = switch_event_get_header(event, "syntax");
+			const char *type = switch_event_get_header_nil(event, "type");
+			const char *name = switch_event_get_header_nil(event, "name");
+			const char *description = switch_event_get_header_nil(event, "description");
+			const char *syntax = switch_event_get_header_nil(event, "syntax");
 			if (!switch_strlen_zero(type) && !switch_strlen_zero(name)) {
 				sql =
 					switch_mprintf("insert into interfaces (type,name,description,syntax) values('%q','%q','%q','%q')",
@@ -401,6 +407,8 @@
 			"   dest  VARCHAR(255),\n"
 			"   application  VARCHAR(255),\n"
 			"   application_data  VARCHAR(255),\n"
+			"   dialplan VARCHAR(255),\n"
+			"   context VARCHAR(255),\n"
 			"   read_codec  VARCHAR(255),\n" 
 			"   read_rate  VARCHAR(255),\n" 
 			"   write_codec  VARCHAR(255),\n" 

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_state_machine.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_state_machine.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_core_state_machine.c	Tue May 13 23:37:33 2008
@@ -54,7 +54,7 @@
 					  switch_channel_get_name(session->channel));	
 }
 
-static void switch_core_standard_on_ring(switch_core_session_t *session)
+static void switch_core_standard_on_routing(switch_core_session_t *session)
 {
 	switch_dialplan_interface_t *dialplan_interface = NULL;
 	switch_caller_profile_t *caller_profile;
@@ -62,7 +62,7 @@
 	char *expanded = NULL;
 	char *dpstr = NULL;
 
-	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Standard RING %s\n", switch_channel_get_name(session->channel));
+	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Standard ROUTING %s\n", switch_channel_get_name(session->channel));
 
 	if ((caller_profile = switch_channel_get_caller_profile(session->channel)) == 0) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't get profile!\n");
@@ -103,7 +103,7 @@
 		if (!count) {
 			if (switch_channel_test_flag(session->channel, CF_OUTBOUND)) {
 				switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "No Dialplan, changing state to HOLD\n");
-				switch_channel_set_state(session->channel, CS_HOLD);
+				switch_channel_set_state(session->channel, CS_CONSUME_MEDIA);
 				goto end;
 			}
 		}
@@ -157,14 +157,14 @@
 	}
 }
 
-static void switch_core_standard_on_loopback(switch_core_session_t *session)
+static void switch_core_standard_on_exchange_media(switch_core_session_t *session)
 {
 
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Standard LOOPBACK\n");
 	switch_ivr_session_echo(session);
 }
 
-static void switch_core_standard_on_transmit(switch_core_session_t *session)
+static void switch_core_standard_on_soft_execute(switch_core_session_t *session)
 {
 	switch_assert(session != NULL);
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Standard TRANSMIT\n");
@@ -179,7 +179,7 @@
 	switch_ivr_park(session, NULL);
 }
 
-static void switch_core_standard_on_hold(switch_core_session_t *session)
+static void switch_core_standard_on_consume_media(switch_core_session_t *session)
 {
 	switch_assert(session != NULL);
 	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Standard HOLD\n");
@@ -369,7 +369,7 @@
 				break;
 			case CS_DONE:
 				goto done;
-				/* HANGUP INIT RING and RESET are all short term so we signal lock during their callbacks */
+				/* HANGUP INIT ROUTING and RESET are all short term so we signal lock during their callbacks */
 			case CS_HANGUP:	    /* Deactivate and end the thread */
 				{
 					const char *var = switch_channel_get_variable(session->channel, SWITCH_PROCESS_CDR_VARIABLE);
@@ -413,9 +413,9 @@
 				STATE_MACRO(init, "INIT");
 				switch_core_session_signal_unlock(session);
 				break;
-			case CS_RING: /* Look for a dialplan and find something to do */
+			case CS_ROUTING: /* Look for a dialplan and find something to do */
 				switch_core_session_signal_lock(session);
-				STATE_MACRO(ring, "RING");
+				STATE_MACRO(routing, "ROUTING");
 				switch_core_session_signal_unlock(session);
 				break;
 			case CS_RESET: /* Reset */
@@ -427,17 +427,17 @@
 			case CS_EXECUTE: /* Execute an Operation */
 				STATE_MACRO(execute, "EXECUTE");
 				break;
-			case CS_LOOPBACK: /* loop all data back to source */
-				STATE_MACRO(loopback, "LOOPBACK");
+			case CS_EXCHANGE_MEDIA: /* loop all data back to source */
+				STATE_MACRO(exchange_media, "EXCHANGE_MEDIA");
 				break;
-			case CS_TRANSMIT: /* send/recieve data to/from another channel */
-				STATE_MACRO(transmit, "TRANSMIT");
+			case CS_SOFT_EXECUTE: /* send/recieve data to/from another channel */
+				STATE_MACRO(soft_execute, "SOFT_EXECUTE");
 				break;
 			case CS_PARK: /* wait in limbo */
 				STATE_MACRO(park, "PARK");
 				break;
-			case CS_HOLD: /* wait in limbo */
-				STATE_MACRO(hold, "HOLD");
+			case CS_CONSUME_MEDIA: /* wait in limbo */
+				STATE_MACRO(consume_media, "CONSUME_MEDIA");
 				break;
 			case CS_HIBERNATE: /* sleep */
 				STATE_MACRO(hibernate, "HIBERNATE");

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_cpp.cpp
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_cpp.cpp	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_cpp.cpp	Tue May 13 23:37:33 2008
@@ -270,13 +270,13 @@
 	return NULL;
 }
 
-SWITCH_DECLARE(char *)Event::getType(void)
+SWITCH_DECLARE(const char *)Event::getType(void)
 {
 	if (event) {
 		return switch_event_name(event->event_id);
 	}
 	
-	return "invalid";
+	return (char *) "invalid";
 }
 
 SWITCH_DECLARE_CONSTRUCTOR Stream::Stream()
@@ -352,7 +352,7 @@
 			allocated = 1;
 			switch_set_flag(this, S_HUP);
 			uuid = strdup(switch_core_session_get_uuid(session));
-			switch_channel_set_state(switch_core_session_get_channel(session), CS_TRANSMIT);
+			switch_channel_set_state(switch_core_session_get_channel(session), CS_SOFT_EXECUTE);
 		}
 	}
 }
@@ -382,11 +382,38 @@
 		switch_core_session_rwunlock(session);
 	}
 
+	switch_safe_free(xml_cdr_text);
 	switch_safe_free(uuid);	
 	switch_safe_free(tts_name);
 	switch_safe_free(voice_name);
 }
 
+SWITCH_DECLARE(char *) CoreSession::getXMLCDR()
+{
+	
+	switch_xml_t cdr;
+	
+	sanity_check((char *)"");
+
+	switch_safe_free(xml_cdr_text);
+
+	if (switch_ivr_generate_xml_cdr(session, &cdr) == SWITCH_STATUS_SUCCESS) {
+		xml_cdr_text = switch_xml_toxml(cdr, SWITCH_FALSE);
+		switch_xml_free(cdr);
+	}
+
+	return (char *) (xml_cdr_text ? xml_cdr_text : "");
+}
+
+SWITCH_DECLARE(void) CoreSession::setEventData(Event *e)
+{
+	sanity_check_noreturn;
+	
+	if (channel && e->event) {
+		switch_channel_event_set_data(channel, e->event);
+	}
+}
+
 SWITCH_DECLARE(int) CoreSession::answer()
 {
     switch_status_t status;
@@ -408,7 +435,9 @@
 {
     switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "CoreSession::hangup\n");
 	sanity_check_noreturn;
+	this->begin_allow_threads();
     switch_channel_hangup(channel, switch_channel_str2cause(cause));
+	this->end_allow_threads();
 }
 
 SWITCH_DECLARE(void) CoreSession::setPrivate(char *var, void *val)
@@ -532,7 +561,7 @@
 											  int timeout)
 {
     switch_status_t status;
-	sanity_check("");
+	sanity_check((char *)"");
 	begin_allow_threads();
 	char terminator;
 
@@ -594,7 +623,7 @@
 												  char *digits_regex)
 {
     switch_status_t status;
-	sanity_check("");
+	sanity_check((char *)"");
 	begin_allow_threads();
 	memset(dtmf_buf, 0, sizeof(dtmf_buf));
     status = switch_play_and_get_digits( session, 
@@ -694,7 +723,7 @@
     if (a_leg_session) a_leg_session->end_allow_threads();
 	channel = switch_core_session_get_channel(session);
 	allocated = 1;
-	switch_channel_set_state(switch_core_session_get_channel(session), CS_TRANSMIT);
+	switch_channel_set_state(switch_core_session_get_channel(session), CS_SOFT_EXECUTE);
 
 	return SWITCH_STATUS_SUCCESS;
 
@@ -909,7 +938,6 @@
 }
 
 
-
 SWITCH_DECLARE(switch_status_t) CoreSession::process_callback_result(char *ret)
 {
 	

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_event.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_event.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_event.c	Tue May 13 23:37:33 2008
@@ -297,7 +297,7 @@
 	return SYSTEM_RUNNING ? SWITCH_STATUS_SUCCESS : SWITCH_STATUS_FALSE;
 }
 
-SWITCH_DECLARE(char *) switch_event_name(switch_event_types_t event)
+SWITCH_DECLARE(const char *) switch_event_name(switch_event_types_t event)
 {
 	switch_assert(BLOCK != NULL);
 	switch_assert(RUNTIME_POOL != NULL);
@@ -510,6 +510,7 @@
 SWITCH_DECLARE(char *) switch_event_get_header(switch_event_t *event, char *header_name)
 {
 	switch_event_header_t *hp;
+	switch_assert(event);
 	if (!header_name) return NULL;
 
 	for (hp = event->headers; hp; hp = hp->next) {

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr.c	Tue May 13 23:37:33 2008
@@ -60,11 +60,16 @@
 			break;
 		}
 
+		if (switch_channel_test_flag(channel, CF_PROXY_MODE)) {
+			switch_yield(1000);
+			continue;
+		}
+
 		if (switch_channel_test_flag(channel, CF_SERVICE) ||
 			(!switch_channel_test_flag(channel, CF_ANSWERED) && !switch_channel_test_flag(channel, CF_EARLY_MEDIA))) {
 			switch_yield(1000);
 		} else {
-			status = switch_core_session_read_frame(session, &read_frame, left, 0);
+			status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 			if (!SWITCH_READ_ACCEPTABLE(status)) {
 				break;
 			}
@@ -93,7 +98,7 @@
 		}
 		conninfo->write_frame.datalen = (uint32_t)len;
 		conninfo->write_frame.samples = conninfo->write_frame.datalen / 2;
-		switch_core_session_write_frame(conninfo->session, &conninfo->write_frame, -1, conninfo->stream_id);
+		switch_core_session_write_frame(conninfo->session, &conninfo->write_frame, SWITCH_IO_FLAG_NONE, conninfo->stream_id);
 	}
 	
 	switch_clear_flag_locked(conninfo, SUF_READY);
@@ -276,7 +281,7 @@
 		int frame_count = atoi(lead_frames);
 
 		while(frame_count > 0) {
-			status = switch_core_session_read_frame(session, &read_frame, -1, 0);
+			status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 			if (!SWITCH_READ_ACCEPTABLE(status)) {
 				goto done;
 			}
@@ -449,7 +454,7 @@
 
 	while (switch_channel_ready(channel) && switch_channel_test_flag(channel, CF_CONTROLLED)) {
 
-		if ((status = switch_core_session_read_frame(session, &read_frame, -1, stream_id)) == SWITCH_STATUS_SUCCESS) {
+		if ((status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, stream_id)) == SWITCH_STATUS_SUCCESS) {
 			if (!SWITCH_READ_ACCEPTABLE(status)) {
 				break;
 			}
@@ -615,7 +620,7 @@
 		if (switch_channel_test_flag(channel, CF_SERVICE)) {
 			switch_yield(1000);
 		} else {
-			status = switch_core_session_read_frame(session, &read_frame, -1, 0);
+			status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 		}
 
 		if (!SWITCH_READ_ACCEPTABLE(status)) {
@@ -731,7 +736,7 @@
 		if (switch_channel_test_flag(channel, CF_SERVICE)) {
 			switch_yield(1000);
 		} else {
-			status = switch_core_session_read_frame(session, &read_frame, -1, 0);
+			status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 			if (!SWITCH_READ_ACCEPTABLE(status)) {
 				break;
 			}
@@ -843,7 +848,7 @@
 			switch_core_session_receive_message(session, &msg);
 
 			switch_channel_wait_for_flag(channel, CF_REQ_MEDIA, SWITCH_FALSE, 10000);
-			switch_core_session_read_frame(session, &read_frame, -1, 0);
+			switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 			
 			if ((flags & SMF_REBRIDGE)
 				&& (other_uuid = switch_channel_get_variable(channel, SWITCH_SIGNAL_BRIDGE_VARIABLE))
@@ -852,7 +857,7 @@
 				switch_assert(other_channel != NULL);
 				switch_core_session_receive_message(other_session, &msg);
 				switch_channel_wait_for_flag(other_channel, CF_REQ_MEDIA, SWITCH_FALSE, 10000);
-				switch_core_session_read_frame(other_session, &read_frame, -1, 0);
+				switch_core_session_read_frame(other_session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 				switch_channel_clear_state_handler(other_channel, NULL);
 				switch_core_session_rwunlock(other_session);
 			}
@@ -1023,7 +1028,7 @@
 		switch_channel_set_caller_profile(channel, new_profile);
 		switch_channel_set_flag(channel, CF_TRANSFER);
 
-		switch_channel_set_state(channel, CS_RING);
+		switch_channel_set_state(channel, CS_ROUTING);
 		
 		msg.message_id = SWITCH_MESSAGE_INDICATE_TRANSFER;
 		msg.from = __FILE__;
@@ -1642,7 +1647,7 @@
 	write_frame.codec = read_codec;
 
 	while(switch_channel_ready(channel)) {
-		status = switch_core_session_read_frame(session, &read_frame, -1, 0);
+		status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 		if (!SWITCH_READ_ACCEPTABLE(status)) {
 			break;
 		}
@@ -1653,7 +1658,7 @@
 		if ((jb_frame = stfu_n_read_a_frame(jb))) {
 			write_frame.data = jb_frame->data;
 			write_frame.datalen = (uint32_t)jb_frame->dlen;
-			status = switch_core_session_write_frame(session, &write_frame, -1, 0);
+			status = switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0);
 			if (!SWITCH_READ_ACCEPTABLE(status)) {
 				break;
 			}
@@ -1663,6 +1668,21 @@
 	stfu_n_destroy(&jb);
 }
 
+SWITCH_DECLARE(switch_status_t) switch_ivr_say(switch_core_session_t *session, const char *tosay, const char *module_name, const char *say_type, const char *say_method, switch_input_args_t *args)
+{
+	switch_say_interface_t *si;
+	switch_status_t status = SWITCH_STATUS_SUCCESS;
+
+	if ((si = switch_loadable_module_get_say_interface(module_name))) {
+		// should go back and proto all the say mods to const....
+		status = si->say_function(session, (char *)tosay, switch_ivr_get_say_type_by_name(say_type), switch_ivr_get_say_method_by_name(say_method), args);
+	} else {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid SAY Interface [%s]!\n", module_name);
+		status = SWITCH_STATUS_FALSE;
+	}
+
+	return status;
+}
 
 /* For Emacs:
  * Local Variables:

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_async.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_async.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_async.c	Tue May 13 23:37:33 2008
@@ -49,7 +49,7 @@
 
 	eh->up = 1;	
 	while(switch_channel_ready(channel)) {
-		status = switch_core_session_read_video_frame(session, &read_frame, -1, 0);
+		status = switch_core_session_read_video_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
         
 		if (!SWITCH_READ_ACCEPTABLE(status)) {
 			break;
@@ -59,7 +59,7 @@
 			continue;
 		}
 
-		switch_core_session_write_video_frame(session, read_frame, -1, 0);
+		switch_core_session_write_video_frame(session, read_frame, SWITCH_IO_FLAG_NONE, 0);
 		
 	}
 	eh->up = 0;
@@ -91,14 +91,14 @@
 #endif
 
 	while(switch_channel_ready(channel)) {
-		status = switch_core_session_read_frame(session, &read_frame, -1, 0);
+		status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 		if (!SWITCH_READ_ACCEPTABLE(status)) {
 			break;
 		}
-		switch_core_session_write_frame(session, read_frame, -1, 0);
+		switch_core_session_write_frame(session, read_frame, SWITCH_IO_FLAG_NONE, 0);
 
 #ifndef SWITCH_VIDEO_IN_THREADS
-		status = switch_core_session_read_video_frame(session, &read_frame, -1, 0);
+		status = switch_core_session_read_video_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
         
 		if (!SWITCH_READ_ACCEPTABLE(status)) {
 			break;
@@ -108,7 +108,7 @@
 			continue;
 		}
 
-		switch_core_session_write_video_frame(session, read_frame, -1, 0);
+		switch_core_session_write_video_frame(session, read_frame, SWITCH_IO_FLAG_NONE, 0);
 #endif
 
 	}
@@ -308,7 +308,7 @@
 							  read_codec->implementation->number_of_channels,
 							  read_codec->implementation->actual_samples_per_second,
 							  SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT,
-							  switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) {
+							  NULL) != SWITCH_STATUS_SUCCESS) {
 		switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
 		switch_core_session_reset(session, SWITCH_TRUE);
 		return SWITCH_STATUS_GENERR;
@@ -590,7 +590,7 @@
 			char *fcommand = NULL;
 			char db[2] = "";
 
-			status = switch_core_session_read_frame(session, &read_frame, 1000, 0);
+			status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 			
 			if (!SWITCH_READ_ACCEPTABLE(status)) {
 				goto end;
@@ -676,7 +676,7 @@
 				while (switch_buffer_inuse(ep->buffer) >= len) {
 					write_frame.datalen = (uint32_t)switch_buffer_read(ep->buffer, buf, len);
 					write_frame.samples = write_frame.datalen / 2;
-					if ((status = switch_core_session_write_frame(session, &write_frame, 1000, 0)) != SWITCH_STATUS_SUCCESS) {
+					if ((status = switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0)) != SWITCH_STATUS_SUCCESS) {
 						break;
 					}
 				}
@@ -755,7 +755,7 @@
 							  file,
 							  channels,
 							  read_codec->implementation->actual_samples_per_second,
-							  SWITCH_FILE_FLAG_WRITE | SWITCH_FILE_DATA_SHORT, switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) {
+							  SWITCH_FILE_FLAG_WRITE | SWITCH_FILE_DATA_SHORT, NULL) != SWITCH_STATUS_SUCCESS) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error opening %s\n", file);
 		switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
 		switch_core_session_reset(session, SWITCH_TRUE);

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_bridge.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_bridge.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_bridge.c	Tue May 13 23:37:33 2008
@@ -52,13 +52,13 @@
 
 	vh->up = 1;	
 	while(switch_channel_ready(channel) && vh->up == 1) {
-		status = switch_core_session_read_video_frame(vh->session_a, &read_frame, -1, 0);
+		status = switch_core_session_read_video_frame(vh->session_a, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 		
 		if (!SWITCH_READ_ACCEPTABLE(status)) {
 			break;
 		}
 		
-		switch_core_session_write_video_frame(vh->session_b, read_frame, -1, 0);
+		switch_core_session_write_video_frame(vh->session_b, read_frame, SWITCH_IO_FLAG_NONE, 0);
 		
 	}
 	vh->up = 0;
@@ -161,12 +161,8 @@
 		}
 
 		if (!nosuspend && (switch_channel_test_flag(chan_a, CF_SUSPEND) || switch_channel_test_flag(chan_b, CF_SUSPEND))) {
-			if (switch_channel_test_flag(chan_a, CF_SUSPEND)) {
-				status = SWITCH_STATUS_SUCCESS;
-			} else {
-				status = switch_core_session_read_frame(session_a, &read_frame, -1, stream_id);
-			}
-
+			status = switch_core_session_read_frame(session_a, &read_frame, SWITCH_IO_FLAG_NONE, stream_id);
+			
 			if (!SWITCH_READ_ACCEPTABLE(status)) {
 				goto end_of_bridge_loop;
 			}
@@ -250,18 +246,18 @@
 #ifndef SWITCH_VIDEO_IN_THREADS
 		if (switch_channel_test_flag(chan_a, CF_VIDEO) && switch_channel_test_flag(chan_b, CF_VIDEO)) {
 			/* read video from 1 channel and write it to the other */
-			status = switch_core_session_read_video_frame(session_a, &read_frame, -1, 0);
+			status = switch_core_session_read_video_frame(session_a, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 		
 			if (!SWITCH_READ_ACCEPTABLE(status)) {
 				goto end_of_bridge_loop;
 			}
 		
-			switch_core_session_write_video_frame(session_b, read_frame, -1, 0);
+			switch_core_session_write_video_frame(session_b, read_frame, SWITCH_IO_FLAG_NONE, 0);
 		}
 #endif
 
 		/* read audio from 1 channel and write it to the other */
-		status = switch_core_session_read_frame(session_a, &read_frame, -1, stream_id);
+		status = switch_core_session_read_frame(session_a, &read_frame, SWITCH_IO_FLAG_NONE, stream_id);
 
 		if (SWITCH_READ_ACCEPTABLE(status)) {
 			if (switch_test_flag(read_frame, SFF_CNG)) {
@@ -269,7 +265,7 @@
 			}
 
 			if (status != SWITCH_STATUS_BREAK && !switch_channel_test_flag(chan_a, CF_HOLD)) {
-				if (switch_core_session_write_frame(session_b, read_frame, -1, stream_id) != SWITCH_STATUS_SUCCESS) {
+				if (switch_core_session_write_frame(session_b, read_frame, SWITCH_IO_FLAG_NONE, stream_id) != SWITCH_STATUS_SUCCESS) {
 					switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "write: %s Bad Frame....[%u] Bubye!\n",
 									  switch_channel_get_name(chan_b), read_frame->datalen);
 					goto end_of_bridge_loop;
@@ -354,7 +350,7 @@
 	return NULL;
 }
 
-static switch_status_t audio_bridge_on_loopback(switch_core_session_t *session)
+static switch_status_t audio_bridge_on_exchange_media(switch_core_session_t *session)
 {
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 	switch_ivr_bridge_data_t *bd = switch_channel_get_private(channel, "_bridge_");
@@ -374,25 +370,25 @@
 
 	state = switch_channel_get_state(channel);
 
-	if (!switch_channel_test_flag(channel, CF_TRANSFER) && state != CS_PARK && state != CS_RING) {
+	if (!switch_channel_test_flag(channel, CF_TRANSFER) && state != CS_PARK && state != CS_ROUTING) {
 		switch_channel_hangup(channel, SWITCH_CAUSE_NORMAL_CLEARING);
 	}
 
 	return SWITCH_STATUS_FALSE;
 }
 
-static switch_status_t audio_bridge_on_ring(switch_core_session_t *session)
+static switch_status_t audio_bridge_on_routing(switch_core_session_t *session)
 {
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 
-	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s CUSTOM RING\n", switch_channel_get_name(channel));
+	switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "%s CUSTOM ROUTING\n", switch_channel_get_name(channel));
 
 	/* put the channel in a passive state so we can loop audio to it */
-	switch_channel_set_state(channel, CS_HOLD);
+	switch_channel_set_state(channel, CS_CONSUME_MEDIA);
 	return SWITCH_STATUS_FALSE;
 }
 
-static switch_status_t audio_bridge_on_hold(switch_core_session_t *session)
+static switch_status_t audio_bridge_on_consume_media(switch_core_session_t *session)
 {
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 
@@ -404,12 +400,12 @@
 
 static const switch_state_handler_table_t audio_bridge_peer_state_handlers = {
 	/*.on_init */ NULL,
-	/*.on_ring */ audio_bridge_on_ring,
+	/*.on_routing */ audio_bridge_on_routing,
 	/*.on_execute */ NULL,
 	/*.on_hangup */ NULL,
-	/*.on_loopback */ audio_bridge_on_loopback,
-	/*.on_transmit */ NULL,
-	/*.on_hold */ audio_bridge_on_hold,
+	/*.on_exchange_media */ audio_bridge_on_exchange_media,
+	/*.on_soft_execute */ NULL,
+	/*.on_consume_media */ audio_bridge_on_consume_media,
 };
 
 static switch_status_t uuid_bridge_on_reset(switch_core_session_t *session)
@@ -421,13 +417,13 @@
 	switch_channel_clear_flag(channel, CF_TRANSFER);
 
 	if (switch_channel_test_flag(channel, CF_ORIGINATOR)) {
-		switch_channel_set_state(channel, CS_TRANSMIT);
+		switch_channel_set_state(channel, CS_SOFT_EXECUTE);
 	}
 
 	return SWITCH_STATUS_SUCCESS;
 }
 
-static switch_status_t uuid_bridge_on_transmit(switch_core_session_t *session)
+static switch_status_t uuid_bridge_on_soft_execute(switch_core_session_t *session)
 {
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 	switch_core_session_t *other_session;
@@ -459,10 +455,10 @@
 		}
 
 		if (switch_channel_get_state(other_channel) == CS_RESET) {
-			switch_channel_set_state(other_channel, CS_TRANSMIT);
+			switch_channel_set_state(other_channel, CS_SOFT_EXECUTE);
 		}
 
-		switch_channel_wait_for_state(channel, other_channel, CS_TRANSMIT);
+		switch_channel_wait_for_state(channel, other_channel, CS_SOFT_EXECUTE);
 
 		switch_channel_clear_flag(channel, CF_TRANSFER);
 		switch_channel_clear_flag(other_channel, CF_TRANSFER);
@@ -512,12 +508,12 @@
 
 static const switch_state_handler_table_t uuid_bridge_state_handlers = {
 	/*.on_init */ NULL,
-	/*.on_ring */ NULL,
+	/*.on_routing */ NULL,
 	/*.on_execute */ NULL,
 	/*.on_hangup */ NULL,
-	/*.on_loopback */ NULL,
-	/*.on_transmit */ uuid_bridge_on_transmit,
-	/*.on_hold */ NULL,
+	/*.on_exchange_media */ NULL,
+	/*.on_soft_execute */ uuid_bridge_on_soft_execute,
+	/*.on_consume_media */ NULL,
 	/*.on_hibernate*/ NULL,
 	/*.on_reset*/ uuid_bridge_on_reset
 };
@@ -572,12 +568,12 @@
 
 static const switch_state_handler_table_t signal_bridge_state_handlers = {
 	/*.on_init */ NULL,
-	/*.on_ring */ NULL,
+	/*.on_routing */ NULL,
 	/*.on_execute */ NULL,
 	/*.on_hangup */ signal_bridge_on_hangup,
-	/*.on_loopback */ NULL,
-	/*.on_transmit */ NULL,
-	/*.on_hold */ NULL,
+	/*.on_exchange_media */ NULL,
+	/*.on_soft_execute */ NULL,
+	/*.on_consume_media */ NULL,
 	/*.on_hibernate */ signal_bridge_on_hibernate
 };
 
@@ -681,7 +677,7 @@
 		const switch_application_interface_t *application_interface;
 		const char *app, *data;
 
-		switch_channel_set_state(peer_channel, CS_HOLD);
+		switch_channel_set_state(peer_channel, CS_CONSUME_MEDIA);
 
 		if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_BRIDGE) == SWITCH_STATUS_SUCCESS) {
 			switch_channel_event_set_data(caller_channel, event);
@@ -697,7 +693,7 @@
 				if ((status = switch_ivr_wait_for_answer(session, peer_session)) != SWITCH_STATUS_SUCCESS) {
 					switch_channel_state_t w_state = switch_channel_get_state(caller_channel);
 					switch_channel_hangup(peer_channel, SWITCH_CAUSE_ALLOTTED_TIMEOUT);
-					if (w_state < CS_HANGUP && w_state != CS_RING && w_state != CS_PARK && !switch_channel_test_flag(caller_channel, CF_TRANSFER) &&
+					if (w_state < CS_HANGUP && w_state != CS_ROUTING && w_state != CS_PARK && !switch_channel_test_flag(caller_channel, CF_TRANSFER) &&
 						w_state != CS_EXECUTE) {
 						const char *ext = switch_channel_get_variable(peer_channel, "original_destination_number");
 						if (!ext) {
@@ -757,17 +753,17 @@
 			}
 
 			switch_channel_set_private(peer_channel, "_bridge_", b_leg);
-			switch_channel_set_state(peer_channel, CS_LOOPBACK);
+			switch_channel_set_state(peer_channel, CS_EXCHANGE_MEDIA);
 			audio_bridge_thread(NULL, (void *) a_leg);
 
 			switch_channel_clear_flag(caller_channel, CF_ORIGINATOR);
 			//make sure this doesnt break anything
 
-			if (!switch_channel_test_flag(peer_channel, CF_TRANSFER) && switch_channel_get_state(peer_channel) == CS_LOOPBACK) {
+			if (!switch_channel_test_flag(peer_channel, CF_TRANSFER) && switch_channel_get_state(peer_channel) == CS_EXCHANGE_MEDIA) {
 				switch_channel_set_state(peer_channel, CS_RESET);
 			}
 
-			while (switch_channel_get_state(peer_channel) == CS_LOOPBACK) {
+			while (switch_channel_get_state(peer_channel) == CS_EXCHANGE_MEDIA) {
 				switch_yield(1000);
 			}
 
@@ -800,7 +796,7 @@
 	state = switch_channel_get_state(caller_channel);
 	
 	if (!switch_channel_test_flag(caller_channel, CF_TRANSFER)) {
-		if ((state != CS_EXECUTE && state != CS_PARK && state != CS_RING) || 
+		if ((state != CS_EXECUTE && state != CS_PARK && state != CS_ROUTING) || 
 			(switch_channel_test_flag(peer_channel, CF_ANSWERED) && state < CS_HANGUP && 
 			 switch_true(switch_channel_get_variable(caller_channel, SWITCH_HANGUP_AFTER_BRIDGE_VARIABLE)))) {
 			switch_channel_hangup(caller_channel, switch_channel_get_cause(peer_channel));
@@ -849,7 +845,7 @@
 
 			/* override transmit state for originator_channel to bridge to originatee_channel 
 			 * install pointer to originatee_session into originator_channel
-			 * set CF_TRANSFER on both channels and change state to CS_TRANSMIT to
+			 * set CF_TRANSFER on both channels and change state to CS_SOFT_EXECUTE to
 			 * inturrupt anything they are already doing.
 			 * originatee_session will fall asleep and originator_session will bridge to it
 			 */

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_originate.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_originate.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_originate.c	Tue May 13 23:37:33 2008
@@ -34,12 +34,14 @@
 
 static const switch_state_handler_table_t originate_state_handlers;
 
-static switch_status_t originate_on_hold_transmit(switch_core_session_t *session)
+static switch_status_t originate_on_consume_media_transmit(switch_core_session_t *session)
 {
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 	
-	while(switch_channel_get_state(channel) == CS_HOLD) {
-		switch_ivr_sleep(session, 10);
+	if (!switch_channel_test_flag(channel, CF_PROXY_MODE)) {
+		while(switch_channel_get_state(channel) == CS_CONSUME_MEDIA) {
+			switch_ivr_sleep(session, 10);
+		}
 	}
 	
 	switch_channel_clear_state_handler(channel, &originate_state_handlers);
@@ -47,24 +49,24 @@
 	return SWITCH_STATUS_FALSE;
 }
 
-static switch_status_t originate_on_ring(switch_core_session_t *session)
+static switch_status_t originate_on_routing(switch_core_session_t *session)
 {
 	switch_channel_t *channel = switch_core_session_get_channel(session);
 
 	/* put the channel in a passive state until it is answered */
-	switch_channel_set_state(channel, CS_HOLD);
+	switch_channel_set_state(channel, CS_CONSUME_MEDIA);
 
 	return SWITCH_STATUS_FALSE;
 }
 
 static const switch_state_handler_table_t originate_state_handlers = {
 	/*.on_init */ NULL,
-	/*.on_ring */ originate_on_ring,
+	/*.on_routing */ originate_on_routing,
 	/*.on_execute */ NULL,
 	/*.on_hangup */ NULL,
-	/*.on_loopback */ NULL,
-	/*.on_transmit */ originate_on_hold_transmit,
-	/*.on_hold */ originate_on_hold_transmit
+	/*.on_exchange_media */ NULL,
+	/*.on_soft_execute */ originate_on_consume_media_transmit,
+	/*.on_consume_media */ originate_on_consume_media_transmit
 };
 
 typedef enum {
@@ -113,7 +115,7 @@
 			goto wbreak;
 		}
 
-		switch_channel_set_state(channel, CS_TRANSMIT);
+		switch_channel_set_state(channel, CS_SOFT_EXECUTE);
 		switch_core_session_exec(collect->session, application_interface, app_data);
 		
 		if (switch_channel_get_state(channel) < CS_HANGUP) {
@@ -341,7 +343,7 @@
 												  read_codec->implementation->number_of_channels,
 												  read_codec->implementation->actual_samples_per_second,
 												  SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT,
-												  switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) {
+												  NULL) != SWITCH_STATUS_SUCCESS) {
 							switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error Playing File\n");
 							switch_safe_free(tmp_data);
 							goto done;
@@ -383,7 +385,7 @@
 				message = NULL;
 			}
 		}
-		status = switch_core_session_read_frame(session, &read_frame, 1000, 0);
+		status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 		if (!SWITCH_READ_ACCEPTABLE(status)) {
 			break;
 		}
@@ -421,7 +423,7 @@
 				}
 			}
 
-			if (switch_core_session_write_frame(session, &write_frame, 1000, 0) != SWITCH_STATUS_SUCCESS) {
+			if (switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0) != SWITCH_STATUS_SUCCESS) {
 				break;
 			}
 		} else {
@@ -884,7 +886,7 @@
 				
 				if (!switch_core_session_running(peer_sessions[i])) {
 					//if (!(flags & SOF_NOBLOCK)) {
-                    //switch_channel_set_state(peer_channels[i], CS_RING);
+                    //switch_channel_set_state(peer_channels[i], CS_ROUTING);
 					//}
                     //} else {
 					switch_core_session_thread_launch(peer_sessions[i]);
@@ -910,7 +912,7 @@
 						continue;
 					}
 
-					if (state >= CS_RING) {
+					if (state >= CS_ROUTING) {
 						goto endfor1;
 					}
 
@@ -994,7 +996,7 @@
 														  read_codec->implementation->number_of_channels,
 														  read_codec->implementation->actual_samples_per_second,
 														  SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT,
-														  switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) {
+														  NULL) != SWITCH_STATUS_SUCCESS) {
 									switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error Playing File\n");
 									switch_safe_free(tmp_data);
 									goto notready;
@@ -1057,11 +1059,13 @@
 					}
 				}
 
-				/* read from the channel while we wait if the audio is up on it */
-				if (session && (ringback_data || 
-								!(switch_channel_test_flag(caller_channel, CF_PROXY_MODE) && switch_channel_test_flag(caller_channel, CF_PROXY_MODE))) &&
-					(switch_channel_test_flag(caller_channel, CF_ANSWERED) || switch_channel_test_flag(caller_channel, CF_EARLY_MEDIA))) {
-					switch_status_t tstatus = switch_core_session_read_frame(session, &read_frame, 1000, 0);
+				/* read from the channel while we wait if the audio is up on it */				
+				if (session && 
+					!switch_channel_test_flag(caller_channel, CF_PROXY_MODE) && 
+					!switch_channel_test_flag(caller_channel, CF_PROXY_MEDIA) && 
+					(ringback_data || (switch_channel_test_flag(caller_channel, CF_ANSWERED) || switch_channel_test_flag(caller_channel, CF_EARLY_MEDIA)))) {
+					 
+					switch_status_t tstatus = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 					
 					if (!SWITCH_READ_ACCEPTABLE(tstatus)) {
 						break;
@@ -1100,7 +1104,7 @@
 							}
 						}
 						
-						if (switch_core_session_write_frame(session, &write_frame, 1000, 0) != SWITCH_STATUS_SUCCESS) {
+						if (switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0) != SWITCH_STATUS_SUCCESS) {
 							break;
 						}
 					}

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_play_say.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_play_say.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_ivr_play_say.c	Tue May 13 23:37:33 2008
@@ -65,7 +65,7 @@
 	NULL
 };
 
-static switch_say_method_t get_say_method_by_name(char *name)
+SWITCH_DECLARE(switch_say_method_t) switch_ivr_get_say_method_by_name(const char *name)
 {
 	int x = 0;
 	for (x = 0; SAY_METHOD_NAMES[x]; x++) {
@@ -77,7 +77,7 @@
 	return (switch_say_method_t) x;
 }
 
-static switch_say_type_t get_say_type_by_name(char *name)
+SWITCH_DECLARE(switch_say_type_t) switch_ivr_get_say_type_by_name(const char *name)
 {
 	int x = 0;
 	for (x = 0; SAY_TYPE_NAMES[x]; x++) {
@@ -286,7 +286,7 @@
 							char *say_type = (char *) switch_xml_attr_soft(action, "type");
 							char *say_method = (char *) switch_xml_attr_soft(action, "method");
 
-							status = si->say_function(session, odata, get_say_type_by_name(say_type), get_say_method_by_name(say_method), args);
+							status = si->say_function(session, odata, switch_ivr_get_say_type_by_name(say_type), switch_ivr_get_say_method_by_name(say_method), args);
 						} else {
 							switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid SAY Interface [%s]!\n", module_name);
 						}
@@ -373,7 +373,7 @@
 							  file,
 							  fh->channels,
 							  read_codec->implementation->actual_samples_per_second,
-							  SWITCH_FILE_FLAG_WRITE | SWITCH_FILE_DATA_SHORT, switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) {
+							  SWITCH_FILE_FLAG_WRITE | SWITCH_FILE_DATA_SHORT, NULL) != SWITCH_STATUS_SUCCESS) {
 		switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
 		switch_core_session_reset(session, SWITCH_TRUE);
 		return SWITCH_STATUS_GENERR;
@@ -505,7 +505,7 @@
 			}
 		}
 
-		status = switch_core_session_read_frame(session, &read_frame, -1, 0);
+		status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 		if (!SWITCH_READ_ACCEPTABLE(status)) {
 			break;
 		}
@@ -624,7 +624,7 @@
 			break;
 		}
 
-		status = switch_core_session_read_frame(session, &read_frame, 1000, 0);
+		status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 
 		if (!SWITCH_READ_ACCEPTABLE(status)) {
 			break;
@@ -643,7 +643,7 @@
 
 		write_frame.samples = write_frame.datalen / 2;
 
-		if (switch_core_session_write_frame(session, &write_frame, 1000, 0) != SWITCH_STATUS_SUCCESS) {
+		if (switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0) != SWITCH_STATUS_SUCCESS) {
 			break;
 		}
 	}
@@ -674,7 +674,6 @@
 	switch_codec_t codec;
 	switch_memory_pool_t *pool = switch_core_session_get_pool(session);
 	char *codec_name;
-	int stream_id = 0;
 	switch_status_t status = SWITCH_STATUS_SUCCESS;
 	switch_file_handle_t lfh;
 	switch_codec_t *read_codec = NULL;
@@ -789,7 +788,7 @@
 							  file,
 							  read_codec->implementation->number_of_channels,
 							  read_codec->implementation->actual_samples_per_second,
-							  SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT, switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) {
+							  SWITCH_FILE_FLAG_READ | SWITCH_FILE_DATA_SHORT, NULL) != SWITCH_STATUS_SUCCESS) {
 		switch_core_session_reset(session, SWITCH_TRUE);
 		status = SWITCH_STATUS_NOTFOUND;
 		goto end;
@@ -899,9 +898,7 @@
 
 	if (timer_name) {
 		/* start a thread to absorb incoming audio */
-		for (stream_id = 0; stream_id < switch_core_session_get_stream_count(session); stream_id++) {
-			switch_core_service_session(session, &thread_session, stream_id);
-		}
+		switch_core_service_session(session, &thread_session, 0);
 	}
 
 	ilen = samples;
@@ -1080,14 +1077,12 @@
 		}
 #endif
 #endif
-		stream_id = 0;
-
 		if (fh->vol) {
 			switch_change_sln_volume(write_frame.data, write_frame.datalen / 2, fh->vol);
 		}
 
 		fh->offset_pos += write_frame.samples / 2;
-		status = switch_core_session_write_frame(session, &write_frame, -1, stream_id);
+		status = switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0);
 		
 		if (status == SWITCH_STATUS_MORE_DATA) {
 			status = SWITCH_STATUS_SUCCESS;
@@ -1112,7 +1107,7 @@
 				switch_yield(10000);
 			}
 
-			tstatus = switch_core_session_read_frame(session, &read_frame, -1, 0);
+			tstatus = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 			
 			if (!SWITCH_READ_ACCEPTABLE(tstatus)) {
 				break;
@@ -1338,7 +1333,6 @@
 	switch_size_t ilen = 0;
 	switch_frame_t write_frame = { 0 };
 	int x;
-	int stream_id = 0;
 	int done = 0;
 	int lead_in_out = 10;
 	switch_status_t status = SWITCH_STATUS_SUCCESS;
@@ -1420,7 +1414,7 @@
 		if (timer) {
 			write_frame.timestamp = timer->samplecount;
 		}
-		if (switch_core_session_write_frame(session, &write_frame, -1, stream_id) != SWITCH_STATUS_SUCCESS) {
+		if (switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0) != SWITCH_STATUS_SUCCESS) {
 			done = 1;
 			break;
 		}
@@ -1490,7 +1484,7 @@
 				}
 			} else {
 				switch_frame_t *read_frame;
-				switch_status_t tstatus = switch_core_session_read_frame(session, &read_frame, -1, 0);
+				switch_status_t tstatus = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 
 				while (switch_channel_ready(channel) && switch_channel_test_flag(channel, CF_HOLD)) {
 					switch_yield(10000);
@@ -1518,7 +1512,7 @@
 				if (timer) {
 					write_frame.timestamp = timer->samplecount;
 				}
-				if (switch_core_session_write_frame(session, &write_frame, -1, stream_id) != SWITCH_STATUS_SUCCESS) {
+				if (switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0) != SWITCH_STATUS_SUCCESS) {
 					done = 1;
 					break;
 				}
@@ -1538,7 +1532,7 @@
 		if (timer) {
 			write_frame.timestamp = timer->samplecount;
 		}
-		if (switch_core_session_write_frame(session, &write_frame, -1, stream_id) != SWITCH_STATUS_SUCCESS) {
+		if (switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0) != SWITCH_STATUS_SUCCESS) {
 			done = 1;
 			break;
 		}
@@ -1553,7 +1547,7 @@
 			}
 		} else {				/* time off the channel (if you must) */
 			switch_frame_t *read_frame;
-			switch_status_t tstatus = switch_core_session_read_frame(session, &read_frame, -1, 0);
+			switch_status_t tstatus = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
 
 			while (switch_channel_ready(channel) && switch_channel_test_flag(channel, CF_HOLD)) {
 				switch_yield(10000);
@@ -1618,7 +1612,6 @@
 	switch_codec_t lcodec, *codec;
 	switch_memory_pool_t *pool = switch_core_session_get_pool(session);
 	char *codec_name;
-	int stream_id = 0;
 	switch_status_t status = SWITCH_STATUS_SUCCESS;
 	switch_speech_handle_t lsh, *sh;
 	switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_NONE;
@@ -1721,9 +1714,8 @@
 			switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "setup timer success %u bytes per %d ms!\n", sh->samples * 2, interval);
 		}
 		/* start a thread to absorb incoming audio */
-		for (stream_id = 0; stream_id < switch_core_session_get_stream_count(session); stream_id++) {
-			switch_core_service_session(session, &thread_session, stream_id);
-		}
+		switch_core_service_session(session, &thread_session, 0);
+
 	}
 	
 	status = switch_ivr_speak_text_handle(session, sh, write_frame.codec, timer_name ? timer : NULL, text, args);

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_loadable_module.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_loadable_module.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_loadable_module.c	Tue May 13 23:37:33 2008
@@ -1276,12 +1276,14 @@
 				for (imp = codec_interface->implementations; imp; imp = imp->next) {
 					uint8_t match = 1;
 
-					if ((uint32_t) (imp->microseconds_per_frame / 1000) != 20) {
-						match = 0;
-					}
-
-					if (match && rate && (uint32_t) imp->samples_per_second != rate) {
-						match = 0;
+					if (imp->codec_type != SWITCH_CODEC_TYPE_VIDEO) {
+						if ((uint32_t) (imp->microseconds_per_frame / 1000) != 20) {
+							match = 0;
+						}
+
+						if (match && rate && (uint32_t) imp->samples_per_second != rate) {
+							match = 0;
+						}
 					}
 
 					if (match) {
@@ -1295,12 +1297,14 @@
 			for (imp = codec_interface->implementations; imp; imp = imp->next) {
 				uint8_t match = 1;
 
-				if (interval && (uint32_t) (imp->microseconds_per_frame / 1000) != interval) {
-					match = 0;
-				}
+				if (imp->codec_type != SWITCH_CODEC_TYPE_VIDEO) {
+					if (interval && (uint32_t) (imp->microseconds_per_frame / 1000) != interval) {
+						match = 0;
+					}
 
-				if (match && rate && (uint32_t) imp->samples_per_second != rate) {
-					match = 0;
+					if (match && rate && (uint32_t) imp->samples_per_second != rate) {
+						match = 0;
+					}
 				}
 
 				if (match) {

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_rtp.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_rtp.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_rtp.c	Tue May 13 23:37:33 2008
@@ -238,6 +238,7 @@
 {
 	switch_stun_packet_t *packet;
 	switch_stun_packet_attribute_t *attr;
+	void *end_buf;
 	char username[33] = { 0 };
 	unsigned char buf[512] = { 0 };
 	switch_size_t cpylen = len;
@@ -260,6 +261,12 @@
 
 	memcpy(buf, data, cpylen);
 	packet = switch_stun_packet_parse(buf, sizeof(buf));
+	if (!packet) {
+		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid STUN/ICE packet received\n");
+		goto end;
+	}
+	end_buf = buf + ((sizeof(buf) > packet->header.length) ? packet->header.length : sizeof(buf));
+
 	rtp_session->last_stun = switch_time_now();
 
 	switch_stun_packet_first_attribute(packet, attr);
@@ -279,7 +286,7 @@
 			}
 			break;
 		}
-	} while (switch_stun_packet_next_attribute(attr));
+	} while (switch_stun_packet_next_attribute(attr, end_buf));
 
 	if ((packet->header.type == SWITCH_STUN_BINDING_REQUEST) && !strcmp(rtp_session->user_ice, username)) {
 		uint8_t stunbuf[512];
@@ -1094,7 +1101,7 @@
 	}
 }
 
-static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_type, switch_frame_flag_t *flags)
+static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_type, switch_frame_flag_t *flags, switch_io_flag_t io_flags)
 {
 	switch_size_t bytes = 0;
 	switch_status_t status;
@@ -1142,6 +1149,12 @@
 			goto end;
 		}
 
+		if (!bytes && (io_flags & SWITCH_IO_FLAG_NOBLOCK)) {
+			do_cng = 1;
+            goto cng;
+		}
+
+
 		if (rtp_session->timer.interval) {
 			check = (uint8_t) (switch_core_timer_check(&rtp_session->timer, SWITCH_TRUE) == SWITCH_STATUS_SUCCESS);						
 			if (bytes) {
@@ -1508,7 +1521,7 @@
 }
 
 SWITCH_DECLARE(switch_status_t) switch_rtp_read(switch_rtp_t *rtp_session, void *data, uint32_t * datalen,
-												switch_payload_t *payload_type, switch_frame_flag_t *flags)
+												switch_payload_t *payload_type, switch_frame_flag_t *flags, switch_io_flag_t io_flags)
 {
 	int bytes = 0;
 
@@ -1516,7 +1529,7 @@
 		return SWITCH_STATUS_FALSE;
 	}
 
-	bytes = rtp_common_read(rtp_session, payload_type, flags);
+	bytes = rtp_common_read(rtp_session, payload_type, flags, io_flags);
 
 	if (bytes < 0) {
 		*datalen = 0;
@@ -1535,7 +1548,7 @@
 	return SWITCH_STATUS_SUCCESS;
 }
 
-SWITCH_DECLARE(switch_status_t) switch_rtp_zerocopy_read_frame(switch_rtp_t *rtp_session, switch_frame_t *frame)
+SWITCH_DECLARE(switch_status_t) switch_rtp_zerocopy_read_frame(switch_rtp_t *rtp_session, switch_frame_t *frame, switch_io_flag_t io_flags)
 {
 	int bytes = 0;
 
@@ -1543,7 +1556,7 @@
 		return SWITCH_STATUS_FALSE;
 	}
 
-	bytes = rtp_common_read(rtp_session, &frame->payload, &frame->flags);
+	bytes = rtp_common_read(rtp_session, &frame->payload, &frame->flags, io_flags);
 
 	frame->data = rtp_session->recv_msg.body;
 	frame->packet = &rtp_session->recv_msg;
@@ -1574,7 +1587,7 @@
 }
 
 SWITCH_DECLARE(switch_status_t) switch_rtp_zerocopy_read(switch_rtp_t *rtp_session,
-														 void **data, uint32_t * datalen, switch_payload_t *payload_type, switch_frame_flag_t *flags)
+														 void **data, uint32_t * datalen, switch_payload_t *payload_type, switch_frame_flag_t *flags, switch_io_flag_t io_flags)
 {
 	int bytes = 0;
 
@@ -1582,7 +1595,7 @@
 		return SWITCH_STATUS_FALSE;
 	}
 
-	bytes = rtp_common_read(rtp_session, payload_type, flags);
+	bytes = rtp_common_read(rtp_session, payload_type, flags, io_flags);
 	*data = rtp_session->recv_msg.body;
 
 	if (bytes < 0) {

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_stun.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_stun.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_stun.c	Tue May 13 23:37:33 2008
@@ -113,10 +113,13 @@
 	}
 }
 
+
 SWITCH_DECLARE(switch_stun_packet_t *) switch_stun_packet_parse(uint8_t * buf, uint32_t len)
 {
 	switch_stun_packet_t *packet;
 	switch_stun_packet_attribute_t *attr;
+	uint32_t bytes_left = len;
+	void *end_buf = buf + len;
 
 	if (len < SWITCH_STUN_PACKET_MIN_LEN) {
 		return NULL;
@@ -125,23 +128,181 @@
 	packet = (switch_stun_packet_t *) buf;
 	packet->header.type = ntohs(packet->header.type);
 	packet->header.length = ntohs(packet->header.length);
+	bytes_left -= packet->header.length + 20;
+
+	/*
+	 * Check packet type (RFC3489(bis?) values)
+	 */
+	switch(packet->header.type) {
+	case SWITCH_STUN_BINDING_REQUEST:
+	case SWITCH_STUN_BINDING_RESPONSE:
+	case SWITCH_STUN_BINDING_ERROR_RESPONSE:
+	case SWITCH_STUN_SHARED_SECRET_REQUEST:
+	case SWITCH_STUN_SHARED_SECRET_RESPONSE:
+	case SWITCH_STUN_SHARED_SECRET_ERROR_RESPONSE:
+	case SWITCH_STUN_ALLOCATE_REQUEST:
+	case SWITCH_STUN_ALLOCATE_RESPONSE:
+	case SWITCH_STUN_ALLOCATE_ERROR_RESPONSE:
+	case SWITCH_STUN_SEND_REQUEST:
+	case SWITCH_STUN_SEND_RESPONSE:
+	case SWITCH_STUN_SEND_ERROR_RESPONSE:
+	case SWITCH_STUN_DATA_INDICATION:
+		/* Valid */
+		break;
+
+	default:
+		/* Invalid value */
+		return NULL;
+	}
+
+	/*
+	 * Check for length overflow
+	 */
+	if (bytes_left <= 0) {
+		/* Invalid */
+		return NULL;
+	}
+
+	/*
+	 * No payload?
+	 */
+	if (packet->header.length == 0) {
+		/* Invalid?! */
+		return NULL;
+	}
+
+	/* check if we have enough bytes left for an attribute */
+	if (bytes_left < SWITCH_STUN_ATTRIBUTE_MIN_LEN) {
+		return NULL;
+	}
+
 	switch_stun_packet_first_attribute(packet, attr);
 	do {
 		attr->length = ntohs(attr->length);
 		attr->type = ntohs(attr->type);
-		if (!attr->length) {
-			break;
+		bytes_left -= 4;	/* attribute header consumed */
+
+		if (!attr->length || switch_stun_attribute_padded_length(attr) > bytes_left) {
+			/*
+			 * Note we simply don't "break" here out of the loop anymore because
+			 * we don't want the upper layers to have to deal with attributes without a value
+			 * (or worse: invalid length)
+			 */
+			return NULL;
 		}
+
+		/*
+		 * Handle STUN attributes
+		 */
 		switch (attr->type) {
-		case SWITCH_STUN_ATTR_MAPPED_ADDRESS:
-			if (attr->type) {
+		case SWITCH_STUN_ATTR_MAPPED_ADDRESS:		/* Address, we only care about this one, but parse the others too */
+		case SWITCH_STUN_ATTR_RESPONSE_ADDRESS:
+		case SWITCH_STUN_ATTR_SOURCE_ADDRESS:
+		case SWITCH_STUN_ATTR_CHANGED_ADDRESS:
+		case SWITCH_STUN_ATTR_REFLECTED_FROM:
+		case SWITCH_STUN_ATTR_ALTERNATE_SERVER:
+		case SWITCH_STUN_ATTR_DESTINATION_ADDRESS:
+		case SWITCH_STUN_ATTR_SOURCE_ADDRESS2:
+			{
 				switch_stun_ip_t *ip;
+				uint32_t addr_length = 0;
 				ip = (switch_stun_ip_t *) attr->value;
+
+				switch (ip->family) {
+				case 0x01:		/* IPv4 */
+					addr_length = 4;
+					break;
+
+				case 0x02:		/* IPv6 */
+					addr_length = 16;
+					break;
+
+				default:		/* Invalid */
+					return NULL;
+				}
+
+				/* attribute payload length must be == address length + size of other payload fields (family...) */
+				if (attr->length != addr_length + 4) {
+					/* Invalid */
+					return NULL;
+				}
+
 				ip->port = ntohs(ip->port);
 			}
 			break;
+
+		case SWITCH_STUN_ATTR_CHANGE_REQUEST:		/* UInt32 */
+		case SWITCH_STUN_ATTR_LIFETIME:
+		case SWITCH_STUN_ATTR_BANDWIDTH:
+		case SWITCH_STUN_ATTR_OPTIONS:
+			{
+				uint32_t *val = (uint32_t *) attr->value;
+
+				if (attr->length != sizeof(uint32_t)) {
+					/* Invalid */
+					return NULL;
+				}
+
+				*val = ntohl(*val);	/* should we do this here? */
+			}
+			break;
+
+		case SWITCH_STUN_ATTR_USERNAME:			/* ByteString, multiple of 4 bytes */
+		case SWITCH_STUN_ATTR_PASSWORD:			/* ByteString, multiple of 4 bytes */
+			if (attr->length % 4 != 0) {
+				/* Invalid */
+				return NULL;
+			}
+			break;
+
+		case SWITCH_STUN_ATTR_DATA:			/* ByteString */
+		case SWITCH_STUN_ATTR_ERROR_CODE:		/* ErrorCode */
+		case SWITCH_STUN_ATTR_TRANSPORT_PREFERENCES:	/* TransportPrefs */
+			/*
+			 * No length checking here, since we already checked against the padded length
+			 * before
+			 */
+			break;
+
+		case SWITCH_STUN_ATTR_MESSAGE_INTEGRITY:	/* ByteString, 20 bytes */
+			if (attr->length != 20) {
+				/* Invalid */
+				return NULL;
+			}
+			break;
+
+		case SWITCH_STUN_ATTR_MAGIC_COOKIE:		/* ByteString, 4 bytes */
+			if (attr->length != 4) {
+				/* Invalid */
+				return NULL;
+			}
+			break;
+
+		case SWITCH_STUN_ATTR_UNKNOWN_ATTRIBUTES:	/* UInt16List (= multiple of 2 bytes) */
+			if (attr->length % 2 != 0) {
+				return NULL;
+			}
+			break;
+
+		default:
+			/* Mandatory attribute range? => invalid */
+			if (attr->type <= 0x7FFF) {
+				return NULL;
+			}
+			break;
 		}
-	} while (switch_stun_packet_next_attribute(attr));
+		bytes_left -= switch_stun_attribute_padded_length(attr);	/* attribute value consumed, substract padded length */
+
+	} while (bytes_left >= SWITCH_STUN_ATTRIBUTE_MIN_LEN && switch_stun_packet_next_attribute(attr, end_buf));
+
+	if ((uint32_t)(packet->header.length + 20) > (uint32_t)(len - bytes_left)) {
+		/*
+		 * the packet length is longer than the length of all attributes?
+		 * for now simply decrease the packet size
+		 */
+		packet->header.length = (uint16_t)((len - bytes_left) - 20);
+	}
+
 	return packet;
 }
 
@@ -273,6 +434,7 @@
 	switch_sockaddr_t *local_addr = NULL, *remote_addr = NULL, *from_addr = NULL;
 	switch_socket_t *sock = NULL;
 	uint8_t buf[256] = { 0 };
+	void *end_buf;
 	switch_stun_packet_t *packet;
 	switch_stun_packet_attribute_t *attr;
 	switch_size_t bytes = 0;
@@ -335,8 +497,13 @@
 	switch_socket_close(sock);
 
 	packet = switch_stun_packet_parse(buf, sizeof(buf));
-	switch_stun_packet_first_attribute(packet, attr);
+	if (!packet) {
+		*err = "Invalid STUN/ICE packet";
+		return SWITCH_STATUS_FALSE;
+	}
+	end_buf = buf + ((sizeof(buf) > packet->header.length) ? packet->header.length : sizeof(buf));
 
+	switch_stun_packet_first_attribute(packet, attr);
 	do {
 		switch (attr->type) {
 		case SWITCH_STUN_ATTR_MAPPED_ADDRESS:
@@ -350,7 +517,7 @@
 			}
 			break;
 		}
-	} while (switch_stun_packet_next_attribute(attr));
+	} while (switch_stun_packet_next_attribute(attr, end_buf));
 
 	if (packet->header.type == SWITCH_STUN_BINDING_RESPONSE) {
 		*ip = switch_core_strdup(pool, rip);

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_time.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_time.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/src/switch_time.c	Tue May 13 23:37:33 2008
@@ -173,6 +173,9 @@
 	}
 
 	if ((private_info = switch_core_alloc(timer->memory_pool, sizeof(*private_info)))) {
+#if defined(WIN32)
+		timeBeginPeriod(1);
+#endif
 		switch_mutex_lock(globals.mutex);
 		TIMER_MATRIX[timer->interval].count++;
 		switch_mutex_unlock(globals.mutex);
@@ -454,6 +457,12 @@
 			switch_yield(10000);
 		}
 	}
+
+#if defined(WIN32)
+	timeEndPeriod(1);
+#endif
+
+
 	return SWITCH_STATUS_SUCCESS;
 }
 

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/w32/Setup/Setup.2008.vdproj
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/w32/Setup/Setup.2008.vdproj	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/w32/Setup/Setup.2008.vdproj	Tue May 13 23:37:33 2008
@@ -219,12 +219,6 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_3FBEFE0119944C6781F81104ECEF37CA"
-        "OwnerKey" = "8:_UNDEFINED"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
         "MsmKey" = "8:_4132509BFE93497C8E86E017E5B98F69"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
@@ -279,6 +273,12 @@
         }
         "Entry"
         {
+        "MsmKey" = "8:_52E46D57FE2F483E9CB36B77E39EB120"
+        "OwnerKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
         "MsmKey" = "8:_549D54D0FFCA4C719EE17DF14BB3E61C"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
@@ -496,7 +496,7 @@
         "Entry"
         {
         "MsmKey" = "8:_879085EF680EFDF6242DCB77439EC825"
-        "OwnerKey" = "8:_3FBEFE0119944C6781F81104ECEF37CA"
+        "OwnerKey" = "8:_59CFED0C4EC0492C945E4EBC04FE965F"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
@@ -513,12 +513,6 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_879085EF680EFDF6242DCB77439EC825"
-        "OwnerKey" = "8:_59CFED0C4EC0492C945E4EBC04FE965F"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
         "MsmKey" = "8:_8B53F026686B44189676CBC200E641C1"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
@@ -627,18 +621,312 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_A164EF86C4B57E41C8CE77B48F39DAC7"
+        "MsmKey" = "8:_A3936A2727E73289F5804D5DA006FD0A"
+        "OwnerKey" = "8:_28FBC5A60B44423B8A2CC378347483CE"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_0772289C2CC6435396616D7A2C407EA2"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_FBD45C36E901435399634CACA5339597"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_FBB0E565B1DE49CE9C827ACAC337AC5B"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_FB1B9FBDC3294F1C96DAC4246C013C22"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_F366CE9AB8F74F8E8388B033FC81C4C3"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_F0B800E719294692A02518CFD8CBAEFF"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_EF14CB99F3414BB689D0CB0E6D6B8AB8"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_EC4922AEC1064C90B96EBBDD3104D761"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_EAF4B051F44745ABA9B58038FB93994C"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_E763C699DF0948B6984DDEB96A2DFD06"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_E1AA7C5B96DA4A26859D2C7A21E00AB6"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_D7EC5795A9C645AC8E129C2EE6D461ED"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_D6F0F5845FAD4707975CE012A33CD607"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
         "OwnerKey" = "8:_D2EF447106B24E67907DAED3D39CFBB1"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_A3936A2727E73289F5804D5DA006FD0A"
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_D1269F1E49D442CF8EAC96C23E60325D"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_D0BB09AFB8D94B76918F0EE85BCCAD0A"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_C81AC700C1BC4A55B98DF12C0CBAFD6F"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_C105055EE271471A999CE7022E617EB7"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_C1036825E1364537B537E542E71F9C0E"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_BB99CEDF341D40F3976B6D5486D9366D"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_B5542B260CD5493395871EFDE833E438"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_B0A2E9B4C45D4098AFD734D0C4E3EAFB"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_A1132A25606840309D744CBC67BE0579"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_9B19C40442134D69B533E16D0851D99B"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_96F8F7DE89C74DC399E8AE55C22B4F15"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_95D01083472B4853AC3F06514558F347"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_8E023477B9DC4126921A556B285B29E5"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_8B53F026686B44189676CBC200E641C1"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_7B1050643E1E48A3B67B281B4AD43904"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_77550ABD8CC84D66A3B6C3C3C48665A4"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_6E5C001E7A314DCEA0A4BF52BF74BCAD"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_6DF726E4018A4136BC27E2C6F4B67B9E"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_5EDFD5418DD243D1A03D882B83BBBCF1"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_59CFED0C4EC0492C945E4EBC04FE965F"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_4A285D260C3748A4BEFA6E5A9004D128"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_3E37631016BC45B2B672FE23257D542B"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_3DB5A5EF1E624F999BCEA20250508EEA"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_318FCC99E8D143D6B4F9F534E63009B3"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_2F2FEC549F02436EB87961BD1B9E5783"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_2D9E612823084E3F9E10376A7AC0C476"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_2C6E622B76524C41A3C12953761C6693"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_2B80DCCD934745B1BB4F0B31099094D9"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_297D0BADB993435092DDB8CDF9F2A3C6"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
         "OwnerKey" = "8:_28FBC5A60B44423B8A2CC378347483CE"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_2814E641538B42EFA83525986A9D5AC1"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_1DCA6B2BA0F842FDB5CBA54CF52228F7"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_1CFB1AB04E024FC993E0EB4859DF8408"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_1777CB4B737E4B8481E25A10950B2B5A"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_1678ADE0786044AF9A26FACF1EBA0CF6"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_A5FD3A07B7CB423590AF4F9C015C77E0"
+        "OwnerKey" = "8:_166BDBE308F54EE4881DA68F2A8189F5"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
         "MsmKey" = "8:_A944ADCEDF884574A23F7BA5420A6BA1"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
@@ -795,12 +1083,6 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_CB7CBDD38519056FAA16312EEF6BCAF7"
-        "OwnerKey" = "8:_2C6E622B76524C41A3C12953761C6693"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
         "MsmKey" = "8:_CCAC35C9D0644917A28341E382DB6B93"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
@@ -1216,7 +1498,7 @@
             }
             "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1273F63008CF585CA0E063E436B4646F"
             {
-            "SourcePath" = "8:iphlpapi.dll"
+            "SourcePath" = "8:IPHLPAPI.DLL"
             "TargetName" = "8:iphlpapi.dll"
             "Tag" = "8:"
             "Folder" = "8:_06036160035041E38F4179E6DB6380C5"
@@ -2514,26 +2796,6 @@
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
             }
-            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A164EF86C4B57E41C8CE77B48F39DAC7"
-            {
-            "SourcePath" = "8:libaprutil.dll"
-            "TargetName" = "8:libaprutil.dll"
-            "Tag" = "8:"
-            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
-            "Condition" = "8:"
-            "Transitive" = "11:FALSE"
-            "Vital" = "11:TRUE"
-            "ReadOnly" = "11:FALSE"
-            "Hidden" = "11:FALSE"
-            "System" = "11:FALSE"
-            "Permanent" = "11:FALSE"
-            "SharedLegacy" = "11:FALSE"
-            "PackageAs" = "3:1"
-            "Register" = "3:1"
-            "Exclude" = "11:FALSE"
-            "IsDependency" = "11:TRUE"
-            "IsolateTo" = "8:"
-            }
             "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A3936A2727E73289F5804D5DA006FD0A"
             {
             "SourcePath" = "8:RPCRT4.dll"
@@ -2814,26 +3076,6 @@
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
             }
-            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CB7CBDD38519056FAA16312EEF6BCAF7"
-            {
-            "SourcePath" = "8:mod_spidermonkey.dll"
-            "TargetName" = "8:mod_spidermonkey.dll"
-            "Tag" = "8:"
-            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
-            "Condition" = "8:"
-            "Transitive" = "11:FALSE"
-            "Vital" = "11:TRUE"
-            "ReadOnly" = "11:FALSE"
-            "Hidden" = "11:FALSE"
-            "System" = "11:FALSE"
-            "Permanent" = "11:FALSE"
-            "SharedLegacy" = "11:FALSE"
-            "PackageAs" = "3:1"
-            "Register" = "3:1"
-            "Exclude" = "11:FALSE"
-            "IsDependency" = "11:TRUE"
-            "IsolateTo" = "8:"
-            }
             "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CCAC35C9D0644917A28341E382DB6B93"
             {
             "SourcePath" = "8:..\\..\\conf\\dialplan\\default.xml"
@@ -4083,6 +4325,34 @@
         }
         "MergeModule"
         {
+            "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_52E46D57FE2F483E9CB36B77E39EB120"
+            {
+            "UseDynamicProperties" = "11:TRUE"
+            "IsDependency" = "11:TRUE"
+            "SourcePath" = "8:microsoft_vc90_debugcrt_x86.msm"
+                "Properties"
+                {
+                }
+            "LanguageId" = "3:0"
+            "Exclude" = "11:FALSE"
+            "Folder" = "8:"
+            "Feature" = "8:"
+            "IsolateTo" = "8:"
+            }
+            "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_A5FD3A07B7CB423590AF4F9C015C77E0"
+            {
+            "UseDynamicProperties" = "11:TRUE"
+            "IsDependency" = "11:TRUE"
+            "SourcePath" = "8:policy_9_0_Microsoft_VC90_DebugCRT_x86.msm"
+                "Properties"
+                {
+                }
+            "LanguageId" = "3:0"
+            "Exclude" = "11:FALSE"
+            "Folder" = "8:"
+            "Feature" = "8:"
+            "IsolateTo" = "8:"
+            }
         }
         "ProjectOutput"
         {
@@ -4534,34 +4804,6 @@
                 {
                 }
             }
-            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_3FBEFE0119944C6781F81104ECEF37CA"
-            {
-            "SourcePath" = "8:..\\..\\Debug\\libapriconv.dll"
-            "TargetName" = "8:"
-            "Tag" = "8:"
-            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
-            "Condition" = "8:"
-            "Transitive" = "11:FALSE"
-            "Vital" = "11:TRUE"
-            "ReadOnly" = "11:FALSE"
-            "Hidden" = "11:FALSE"
-            "System" = "11:FALSE"
-            "Permanent" = "11:FALSE"
-            "SharedLegacy" = "11:FALSE"
-            "PackageAs" = "3:1"
-            "Register" = "3:1"
-            "Exclude" = "11:FALSE"
-            "IsDependency" = "11:FALSE"
-            "IsolateTo" = "8:"
-            "ProjectOutputGroupRegister" = "3:1"
-            "OutputConfiguration" = "8:"
-            "OutputGroupCanonicalName" = "8:Built"
-            "OutputProjectGuid" = "8:{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}"
-            "ShowKeyOutput" = "11:TRUE"
-                "ExcludeFilters"
-                {
-                }
-            }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_4A285D260C3748A4BEFA6E5A9004D128"
             {
             "SourcePath" = "8:..\\..\\Debug\\mod\\mod_spidermonkey.dll"

Modified: freeswitch/branches/lukedashjr/syslibs/freeswitch/w32/Setup/Setup.vdproj
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/freeswitch/w32/Setup/Setup.vdproj	(original)
+++ freeswitch/branches/lukedashjr/syslibs/freeswitch/w32/Setup/Setup.vdproj	Tue May 13 23:37:33 2008
@@ -27,318 +27,6 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_0772289C2CC6435396616D7A2C407EA2"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_BA769056DBAF4259B38F5C3FF7377055"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_A8D70CB0D12C4B3FB2E2E896E9A7C843"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_78F060A241D0428998B42093C467AD36"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_9527B92C45BB45629BDB19ED3C8DC194"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_FBD45C36E901435399634CACA5339597"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_FBB0E565B1DE49CE9C827ACAC337AC5B"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_FB1B9FBDC3294F1C96DAC4246C013C22"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_F0B800E719294692A02518CFD8CBAEFF"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_EF14CB99F3414BB689D0CB0E6D6B8AB8"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_EC4922AEC1064C90B96EBBDD3104D761"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_EAF4B051F44745ABA9B58038FB93994C"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_E763C699DF0948B6984DDEB96A2DFD06"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_E1AA7C5B96DA4A26859D2C7A21E00AB6"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_D7EC5795A9C645AC8E129C2EE6D461ED"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_D6F0F5845FAD4707975CE012A33CD607"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_D2EF447106B24E67907DAED3D39CFBB1"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_D1269F1E49D442CF8EAC96C23E60325D"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_D0BB09AFB8D94B76918F0EE85BCCAD0A"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_C81AC700C1BC4A55B98DF12C0CBAFD6F"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_C105055EE271471A999CE7022E617EB7"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_C1036825E1364537B537E542E71F9C0E"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_BB99CEDF341D40F3976B6D5486D9366D"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_B5542B260CD5493395871EFDE833E438"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_B0A2E9B4C45D4098AFD734D0C4E3EAFB"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_A0D5F714A0F94250A1C39603B699AB82"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_9B19C40442134D69B533E16D0851D99B"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_96F8F7DE89C74DC399E8AE55C22B4F15"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_95D01083472B4853AC3F06514558F347"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_8E023477B9DC4126921A556B285B29E5"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_8B53F026686B44189676CBC200E641C1"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_7B1050643E1E48A3B67B281B4AD43904"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_77550ABD8CC84D66A3B6C3C3C48665A4"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_6E5C001E7A314DCEA0A4BF52BF74BCAD"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_6DF726E4018A4136BC27E2C6F4B67B9E"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_5EDFD5418DD243D1A03D882B83BBBCF1"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_59CFED0C4EC0492C945E4EBC04FE965F"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_4A285D260C3748A4BEFA6E5A9004D128"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_3FBEFE0119944C6781F81104ECEF37CA"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_3E37631016BC45B2B672FE23257D542B"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_3DB5A5EF1E624F999BCEA20250508EEA"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_318FCC99E8D143D6B4F9F534E63009B3"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_2F2FEC549F02436EB87961BD1B9E5783"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_2D9E612823084E3F9E10376A7AC0C476"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_2B80DCCD934745B1BB4F0B31099094D9"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_297D0BADB993435092DDB8CDF9F2A3C6"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_28FBC5A60B44423B8A2CC378347483CE"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_2814E641538B42EFA83525986A9D5AC1"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_1DCA6B2BA0F842FDB5CBA54CF52228F7"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_1CFB1AB04E024FC993E0EB4859DF8408"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_1777CB4B737E4B8481E25A10950B2B5A"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
-        "OwnerKey" = "8:_166BDBE308F54EE4881DA68F2A8189F5"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
         "MsmKey" = "8:_103209E575C54D649DD1472DBB9B5F5D"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
@@ -393,6 +81,18 @@
         }
         "Entry"
         {
+        "MsmKey" = "8:_22F4FC6A582C42A0817BA85C8FEBAA18"
+        "OwnerKey" = "8:_28FBC5A60B44423B8A2CC378347483CE"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
+        "MsmKey" = "8:_22F4FC6A582C42A0817BA85C8FEBAA18"
+        "OwnerKey" = "8:_A0D5F714A0F94250A1C39603B699AB82"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
         "MsmKey" = "8:_27E8189E01B6420CB898CC51360C83A3"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
@@ -519,12 +219,6 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_3FBEFE0119944C6781F81104ECEF37CA"
-        "OwnerKey" = "8:_UNDEFINED"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
         "MsmKey" = "8:_4132509BFE93497C8E86E017E5B98F69"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
@@ -633,12 +327,6 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_6A4CAD73F43678BF7C05E8FB41042F74"
-        "OwnerKey" = "8:_D2EF447106B24E67907DAED3D39CFBB1"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
         "MsmKey" = "8:_6AA8D6AF639F4E6B92D28A7E0D13FD5E"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
@@ -729,104 +417,98 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_7B1050643E1E48A3B67B281B4AD43904"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_7A08061CFF2F14AC1D5A1B4592BEDB6D"
+        "OwnerKey" = "8:_59CFED0C4EC0492C945E4EBC04FE965F"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_7CFCCDD9C6694A0498D7CD6CDD285042"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_7A08061CFF2F14AC1D5A1B4592BEDB6D"
+        "OwnerKey" = "8:_F0B800E719294692A02518CFD8CBAEFF"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_7E46520FEA2B4DA7A90171E3467C29CA"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_7A08061CFF2F14AC1D5A1B4592BEDB6D"
+        "OwnerKey" = "8:_D2EF447106B24E67907DAED3D39CFBB1"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_7F2A5D1B25FD4B109F5E17402117543A"
+        "MsmKey" = "8:_7B1050643E1E48A3B67B281B4AD43904"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_7FDBEDFAE608481684258301B02CFD1C"
-        "OwnerKey" = "8:_0CDD28A9559445CE96186F5FB19F690B"
+        "MsmKey" = "8:_7BBFE2768ACD3A62F3874EF99D16C0B8"
+        "OwnerKey" = "8:_F0B800E719294692A02518CFD8CBAEFF"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_7FEA1E60C11343F1A98DC33C512051FA"
+        "MsmKey" = "8:_7CFCCDD9C6694A0498D7CD6CDD285042"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_80D44DD7FA3C4E3F8D6BB8B4F949F6AF"
+        "MsmKey" = "8:_7E46520FEA2B4DA7A90171E3467C29CA"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_82158C38354740E99D416F1DB58C7E18"
+        "MsmKey" = "8:_7F2A5D1B25FD4B109F5E17402117543A"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_821771D6A597416391F899CD9147F75B"
+        "MsmKey" = "8:_7FEA1E60C11343F1A98DC33C512051FA"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_83131C9ADB7C4E6C88388D820F720BB5"
+        "MsmKey" = "8:_80D44DD7FA3C4E3F8D6BB8B4F949F6AF"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_8471500508034D338D599ED5C35F938F"
+        "MsmKey" = "8:_82158C38354740E99D416F1DB58C7E18"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_860B731FDCC848F79AB8DFD4D03E2A47"
+        "MsmKey" = "8:_821771D6A597416391F899CD9147F75B"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_86D8DF7599FF472096D6826044347537"
+        "MsmKey" = "8:_83131C9ADB7C4E6C88388D820F720BB5"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_879085EF680EFDF6242DCB77439EC825"
-        "OwnerKey" = "8:_3FBEFE0119944C6781F81104ECEF37CA"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_879085EF680EFDF6242DCB77439EC825"
-        "OwnerKey" = "8:_F0B800E719294692A02518CFD8CBAEFF"
+        "MsmKey" = "8:_8471500508034D338D599ED5C35F938F"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_879085EF680EFDF6242DCB77439EC825"
-        "OwnerKey" = "8:_D2EF447106B24E67907DAED3D39CFBB1"
+        "MsmKey" = "8:_860B731FDCC848F79AB8DFD4D03E2A47"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_879085EF680EFDF6242DCB77439EC825"
-        "OwnerKey" = "8:_59CFED0C4EC0492C945E4EBC04FE965F"
+        "MsmKey" = "8:_86D8DF7599FF472096D6826044347537"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
@@ -849,14 +531,8 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_90D7F247E8254DE797317F431E3FB010"
-        "OwnerKey" = "8:_UNDEFINED"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
-        "MsmKey" = "8:_91BA2668F87764F53188E93BC8D363D7"
-        "OwnerKey" = "8:_59CFED0C4EC0492C945E4EBC04FE965F"
+        "MsmKey" = "8:_90D7F247E8254DE797317F431E3FB010"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
@@ -939,12 +615,6 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_A164EF86C4B57E41C8CE77B48F39DAC7"
-        "OwnerKey" = "8:_D2EF447106B24E67907DAED3D39CFBB1"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
         "MsmKey" = "8:_A3936A2727E73289F5804D5DA006FD0A"
         "OwnerKey" = "8:_28FBC5A60B44423B8A2CC378347483CE"
         "MsmSig" = "8:_UNDEFINED"
@@ -1023,6 +693,12 @@
         }
         "Entry"
         {
+        "MsmKey" = "8:_B540FA32E4F6382CF1426D13A0A4E6B7"
+        "OwnerKey" = "8:_D2EF447106B24E67907DAED3D39CFBB1"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
         "MsmKey" = "8:_B5542B260CD5493395871EFDE833E438"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
@@ -1083,6 +759,12 @@
         }
         "Entry"
         {
+        "MsmKey" = "8:_BFD1EC957C5DBC08B54E6594C7CC5F91"
+        "OwnerKey" = "8:_D2EF447106B24E67907DAED3D39CFBB1"
+        "MsmSig" = "8:_UNDEFINED"
+        }
+        "Entry"
+        {
         "MsmKey" = "8:_C1036825E1364537B537E542E71F9C0E"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
@@ -1119,12 +801,6 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_CB7CBDD38519056FAA16312EEF6BCAF7"
-        "OwnerKey" = "8:_BA769056DBAF4259B38F5C3FF7377055"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
         "MsmKey" = "8:_CCAC35C9D0644917A28341E382DB6B93"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
@@ -1167,14 +843,14 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_D7E82DD20D5B47395F635480C8E3A1D3"
-        "OwnerKey" = "8:_F0B800E719294692A02518CFD8CBAEFF"
+        "MsmKey" = "8:_D7EC5795A9C645AC8E129C2EE6D461ED"
+        "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
         {
-        "MsmKey" = "8:_D7EC5795A9C645AC8E129C2EE6D461ED"
-        "OwnerKey" = "8:_UNDEFINED"
+        "MsmKey" = "8:_DC30A9FB71F9449BAF1F5981E3538D1E"
+        "OwnerKey" = "8:_22F4FC6A582C42A0817BA85C8FEBAA18"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
@@ -1191,12 +867,6 @@
         }
         "Entry"
         {
-        "MsmKey" = "8:_E1CC91FCF87955D17FC3C0A8E875B690"
-        "OwnerKey" = "8:_59CFED0C4EC0492C945E4EBC04FE965F"
-        "MsmSig" = "8:_UNDEFINED"
-        }
-        "Entry"
-        {
         "MsmKey" = "8:_E5C5D9225978484CA7AD0BD78C1222EE"
         "OwnerKey" = "8:_UNDEFINED"
         "MsmSig" = "8:_UNDEFINED"
@@ -1534,7 +1204,7 @@
             }
             "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1273F63008CF585CA0E063E436B4646F"
             {
-            "SourcePath" = "8:iphlpapi.dll"
+            "SourcePath" = "8:IPHLPAPI.DLL"
             "TargetName" = "8:iphlpapi.dll"
             "Tag" = "8:"
             "Folder" = "8:_06036160035041E38F4179E6DB6380C5"
@@ -2132,26 +1802,6 @@
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
             }
-            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6A4CAD73F43678BF7C05E8FB41042F74"
-            {
-            "SourcePath" = "8:libteletone.dll"
-            "TargetName" = "8:libteletone.dll"
-            "Tag" = "8:"
-            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
-            "Condition" = "8:"
-            "Transitive" = "11:FALSE"
-            "Vital" = "11:TRUE"
-            "ReadOnly" = "11:FALSE"
-            "Hidden" = "11:FALSE"
-            "System" = "11:FALSE"
-            "Permanent" = "11:FALSE"
-            "SharedLegacy" = "11:FALSE"
-            "PackageAs" = "3:1"
-            "Register" = "3:1"
-            "Exclude" = "11:FALSE"
-            "IsDependency" = "11:TRUE"
-            "IsolateTo" = "8:"
-            }
             "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6AA8D6AF639F4E6B92D28A7E0D13FD5E"
             {
             "SourcePath" = "8:..\\..\\conf\\dialplan\\extensions\\sipphone.com.noload"
@@ -2372,6 +2022,46 @@
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
             }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7A08061CFF2F14AC1D5A1B4592BEDB6D"
+            {
+            "SourcePath" = "8:libapr.dll"
+            "TargetName" = "8:libapr.dll"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7BBFE2768ACD3A62F3874EF99D16C0B8"
+            {
+            "SourcePath" = "8:FreeSwitch.dll"
+            "TargetName" = "8:FreeSwitch.dll"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:TRUE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
             "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_7CFCCDD9C6694A0498D7CD6CDD285042"
             {
             "SourcePath" = "8:..\\..\\conf\\lang\\de\\de.xml"
@@ -2592,26 +2282,6 @@
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
             }
-            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_879085EF680EFDF6242DCB77439EC825"
-            {
-            "SourcePath" = "8:libapr.dll"
-            "TargetName" = "8:libapr.dll"
-            "Tag" = "8:"
-            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
-            "Condition" = "8:"
-            "Transitive" = "11:FALSE"
-            "Vital" = "11:TRUE"
-            "ReadOnly" = "11:FALSE"
-            "Hidden" = "11:FALSE"
-            "System" = "11:FALSE"
-            "Permanent" = "11:FALSE"
-            "SharedLegacy" = "11:FALSE"
-            "PackageAs" = "3:1"
-            "Register" = "3:1"
-            "Exclude" = "11:FALSE"
-            "IsDependency" = "11:TRUE"
-            "IsolateTo" = "8:"
-            }
             "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_8FB175B8685A47F7BE75E1A025F65693"
             {
             "SourcePath" = "8:..\\..\\conf\\autoload_configs\\limit.conf.xml"
@@ -2652,26 +2322,6 @@
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
             }
-            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_91BA2668F87764F53188E93BC8D363D7"
-            {
-            "SourcePath" = "8:libapriconv.dll"
-            "TargetName" = "8:libapriconv.dll"
-            "Tag" = "8:"
-            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
-            "Condition" = "8:"
-            "Transitive" = "11:FALSE"
-            "Vital" = "11:TRUE"
-            "ReadOnly" = "11:FALSE"
-            "Hidden" = "11:FALSE"
-            "System" = "11:FALSE"
-            "Permanent" = "11:FALSE"
-            "SharedLegacy" = "11:FALSE"
-            "PackageAs" = "3:1"
-            "Register" = "3:1"
-            "Exclude" = "11:TRUE"
-            "IsDependency" = "11:TRUE"
-            "IsolateTo" = "8:"
-            }
             "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_92F95219F6434CE3A736526946DA2ABB"
             {
             "SourcePath" = "8:..\\..\\conf\\autoload_configs\\event_socket.conf.xml"
@@ -2832,26 +2482,6 @@
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
             }
-            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A164EF86C4B57E41C8CE77B48F39DAC7"
-            {
-            "SourcePath" = "8:libaprutil.dll"
-            "TargetName" = "8:libaprutil.dll"
-            "Tag" = "8:"
-            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
-            "Condition" = "8:"
-            "Transitive" = "11:FALSE"
-            "Vital" = "11:TRUE"
-            "ReadOnly" = "11:FALSE"
-            "Hidden" = "11:FALSE"
-            "System" = "11:FALSE"
-            "Permanent" = "11:FALSE"
-            "SharedLegacy" = "11:FALSE"
-            "PackageAs" = "3:1"
-            "Register" = "3:1"
-            "Exclude" = "11:FALSE"
-            "IsDependency" = "11:TRUE"
-            "IsolateTo" = "8:"
-            }
             "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A3936A2727E73289F5804D5DA006FD0A"
             {
             "SourcePath" = "8:RPCRT4.dll"
@@ -2952,6 +2582,26 @@
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
             }
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B540FA32E4F6382CF1426D13A0A4E6B7"
+            {
+            "SourcePath" = "8:libteletone.dll"
+            "TargetName" = "8:libteletone.dll"
+            "Tag" = "8:"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
+            "Condition" = "8:"
+            "Transitive" = "11:FALSE"
+            "Vital" = "11:TRUE"
+            "ReadOnly" = "11:FALSE"
+            "Hidden" = "11:FALSE"
+            "System" = "11:FALSE"
+            "Permanent" = "11:FALSE"
+            "SharedLegacy" = "11:FALSE"
+            "PackageAs" = "3:1"
+            "Register" = "3:1"
+            "Exclude" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
+            "IsolateTo" = "8:"
+            }
             "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B5ADB663C7CE49A1A11E895E4EBB4933"
             {
             "SourcePath" = "8:..\\..\\conf\\autoload_configs\\zeroconf.conf.xml"
@@ -3072,12 +2722,12 @@
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
             }
-            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C7E9135AE3874E19809A03F02CCC15C9"
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BFD1EC957C5DBC08B54E6594C7CC5F91"
             {
-            "SourcePath" = "8:..\\..\\conf\\jingle_profiles\\server.noload"
-            "TargetName" = "8:server.noload"
+            "SourcePath" = "8:libaprutil.dll"
+            "TargetName" = "8:libaprutil.dll"
             "Tag" = "8:"
-            "Folder" = "8:_6521C567C8FB4E1389A5CD0BAA719A2E"
+            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
             "Condition" = "8:"
             "Transitive" = "11:FALSE"
             "Vital" = "11:TRUE"
@@ -3089,15 +2739,15 @@
             "PackageAs" = "3:1"
             "Register" = "3:1"
             "Exclude" = "11:FALSE"
-            "IsDependency" = "11:FALSE"
+            "IsDependency" = "11:TRUE"
             "IsolateTo" = "8:"
             }
-            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C93A983EC95F4F45AF27F37D674CF86B"
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C7E9135AE3874E19809A03F02CCC15C9"
             {
-            "SourcePath" = "8:..\\..\\conf\\autoload_configs\\woomera.conf.xml"
-            "TargetName" = "8:woomera.conf.xml"
+            "SourcePath" = "8:..\\..\\conf\\jingle_profiles\\server.noload"
+            "TargetName" = "8:server.noload"
             "Tag" = "8:"
-            "Folder" = "8:_B3CE338501E445B593742462EDD46103"
+            "Folder" = "8:_6521C567C8FB4E1389A5CD0BAA719A2E"
             "Condition" = "8:"
             "Transitive" = "11:FALSE"
             "Vital" = "11:TRUE"
@@ -3112,12 +2762,12 @@
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
             }
-            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CB0CF364674E42A1B928D78A3823CB76"
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_C93A983EC95F4F45AF27F37D674CF86B"
             {
-            "SourcePath" = "8:..\\..\\conf\\directory\\default\\1013.xml"
-            "TargetName" = "8:1013.xml"
+            "SourcePath" = "8:..\\..\\conf\\autoload_configs\\woomera.conf.xml"
+            "TargetName" = "8:woomera.conf.xml"
             "Tag" = "8:"
-            "Folder" = "8:_C67316B39FC9471EA6A197EDF9897073"
+            "Folder" = "8:_B3CE338501E445B593742462EDD46103"
             "Condition" = "8:"
             "Transitive" = "11:FALSE"
             "Vital" = "11:TRUE"
@@ -3132,12 +2782,12 @@
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
             }
-            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CB7CBDD38519056FAA16312EEF6BCAF7"
+            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CB0CF364674E42A1B928D78A3823CB76"
             {
-            "SourcePath" = "8:mod_spidermonkey.dll"
-            "TargetName" = "8:mod_spidermonkey.dll"
+            "SourcePath" = "8:..\\..\\conf\\directory\\default\\1013.xml"
+            "TargetName" = "8:1013.xml"
             "Tag" = "8:"
-            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
+            "Folder" = "8:_C67316B39FC9471EA6A197EDF9897073"
             "Condition" = "8:"
             "Transitive" = "11:FALSE"
             "Vital" = "11:TRUE"
@@ -3149,7 +2799,7 @@
             "PackageAs" = "3:1"
             "Register" = "3:1"
             "Exclude" = "11:FALSE"
-            "IsDependency" = "11:TRUE"
+            "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
             }
             "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CCAC35C9D0644917A28341E382DB6B93"
@@ -3212,26 +2862,6 @@
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
             }
-            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D7E82DD20D5B47395F635480C8E3A1D3"
-            {
-            "SourcePath" = "8:FreeSwitch.dll"
-            "TargetName" = "8:FreeSwitch.dll"
-            "Tag" = "8:"
-            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
-            "Condition" = "8:"
-            "Transitive" = "11:FALSE"
-            "Vital" = "11:TRUE"
-            "ReadOnly" = "11:FALSE"
-            "Hidden" = "11:FALSE"
-            "System" = "11:FALSE"
-            "Permanent" = "11:FALSE"
-            "SharedLegacy" = "11:FALSE"
-            "PackageAs" = "3:1"
-            "Register" = "3:1"
-            "Exclude" = "11:TRUE"
-            "IsDependency" = "11:TRUE"
-            "IsolateTo" = "8:"
-            }
             "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DD54C8F25D0546E199ADB3C4B40EA20B"
             {
             "SourcePath" = "8:..\\..\\conf\\autoload_configs\\conference.conf.xml"
@@ -3252,26 +2882,6 @@
             "IsDependency" = "11:FALSE"
             "IsolateTo" = "8:"
             }
-            "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E1CC91FCF87955D17FC3C0A8E875B690"
-            {
-            "SourcePath" = "8:WLDAP32.dll"
-            "TargetName" = "8:WLDAP32.dll"
-            "Tag" = "8:"
-            "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
-            "Condition" = "8:"
-            "Transitive" = "11:FALSE"
-            "Vital" = "11:TRUE"
-            "ReadOnly" = "11:FALSE"
-            "Hidden" = "11:FALSE"
-            "System" = "11:FALSE"
-            "Permanent" = "11:FALSE"
-            "SharedLegacy" = "11:FALSE"
-            "PackageAs" = "3:1"
-            "Register" = "3:1"
-            "Exclude" = "11:TRUE"
-            "IsDependency" = "11:TRUE"
-            "IsolateTo" = "8:"
-            }
             "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E5C5D9225978484CA7AD0BD78C1222EE"
             {
             "SourcePath" = "8:..\\..\\conf\\autoload_configs\\java.conf.xml"
@@ -4401,11 +4011,11 @@
         }
         "MergeModule"
         {
-            "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_0CDD28A9559445CE96186F5FB19F690B"
+            "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_22F4FC6A582C42A0817BA85C8FEBAA18"
             {
             "UseDynamicProperties" = "11:TRUE"
             "IsDependency" = "11:TRUE"
-            "SourcePath" = "8:Microsoft_VC80_DebugCRT_x86.msm"
+            "SourcePath" = "8:Microsoft_VC80_CRT_x86.msm"
                 "Properties"
                 {
                 }
@@ -4415,11 +4025,11 @@
             "Feature" = "8:"
             "IsolateTo" = "8:"
             }
-            "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_7FDBEDFAE608481684258301B02CFD1C"
+            "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_DC30A9FB71F9449BAF1F5981E3538D1E"
             {
             "UseDynamicProperties" = "11:TRUE"
             "IsDependency" = "11:TRUE"
-            "SourcePath" = "8:policy_8_0_microsoft_vc80_debugcrt_x86.msm"
+            "SourcePath" = "8:policy_8_0_microsoft_vc80_crt_x86.msm"
                 "Properties"
                 {
                 }
@@ -4434,7 +4044,7 @@
         {
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_0772289C2CC6435396616D7A2C407EA2"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_voicemail.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_voicemail.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -4462,7 +4072,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_166BDBE308F54EE4881DA68F2A8189F5"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_enum.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_enum.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -4490,7 +4100,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_1777CB4B737E4B8481E25A10950B2B5A"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_native_file.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_native_file.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -4518,7 +4128,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_1CFB1AB04E024FC993E0EB4859DF8408"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_dingaling.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_dingaling.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -4546,7 +4156,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_1DCA6B2BA0F842FDB5CBA54CF52228F7"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_h26x.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_h26x.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -4574,7 +4184,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_2814E641538B42EFA83525986A9D5AC1"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_ilbc.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_ilbc.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -4602,7 +4212,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_28FBC5A60B44423B8A2CC378347483CE"
             {
-            "SourcePath" = "8:..\\..\\Debug\\libapr.dll"
+            "SourcePath" = "8:..\\..\\Release\\libapr.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
@@ -4630,7 +4240,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_297D0BADB993435092DDB8CDF9F2A3C6"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_xml_cdr.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_xml_cdr.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -4658,7 +4268,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_2B80DCCD934745B1BB4F0B31099094D9"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_say_en.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_say_en.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -4686,7 +4296,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_2D9E612823084E3F9E10376A7AC0C476"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_g723_1.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_g723_1.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -4714,7 +4324,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_2F2FEC549F02436EB87961BD1B9E5783"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_iax.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_iax.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -4742,7 +4352,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_318FCC99E8D143D6B4F9F534E63009B3"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_sndfile.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_sndfile.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -4770,7 +4380,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_3DB5A5EF1E624F999BCEA20250508EEA"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_fifo.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_fifo.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -4798,7 +4408,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_3E37631016BC45B2B672FE23257D542B"
             {
-            "SourcePath" = "8:..\\..\\Debug\\pthreadVC2.dll"
+            "SourcePath" = "8:..\\..\\Release\\pthreadVC2.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
@@ -4824,37 +4434,9 @@
                 {
                 }
             }
-            "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_3FBEFE0119944C6781F81104ECEF37CA"
-            {
-            "SourcePath" = "8:..\\..\\Debug\\libapriconv.dll"
-            "TargetName" = "8:"
-            "Tag" = "8:"
-            "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
-            "Condition" = "8:"
-            "Transitive" = "11:FALSE"
-            "Vital" = "11:TRUE"
-            "ReadOnly" = "11:FALSE"
-            "Hidden" = "11:FALSE"
-            "System" = "11:FALSE"
-            "Permanent" = "11:FALSE"
-            "SharedLegacy" = "11:FALSE"
-            "PackageAs" = "3:1"
-            "Register" = "3:1"
-            "Exclude" = "11:FALSE"
-            "IsDependency" = "11:FALSE"
-            "IsolateTo" = "8:"
-            "ProjectOutputGroupRegister" = "3:1"
-            "OutputConfiguration" = "8:"
-            "OutputGroupCanonicalName" = "8:Built"
-            "OutputProjectGuid" = "8:{101130D1-3EA6-4ED2-B65D-CEB5243A20ED}"
-            "ShowKeyOutput" = "11:TRUE"
-                "ExcludeFilters"
-                {
-                }
-            }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_4A285D260C3748A4BEFA6E5A9004D128"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_spidermonkey.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_spidermonkey.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -4882,7 +4464,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_59CFED0C4EC0492C945E4EBC04FE965F"
             {
-            "SourcePath" = "8:..\\..\\Debug\\libaprutil.dll"
+            "SourcePath" = "8:..\\..\\Release\\libaprutil.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
@@ -4910,7 +4492,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_5EDFD5418DD243D1A03D882B83BBBCF1"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_esf.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_esf.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -4938,7 +4520,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_6DF726E4018A4136BC27E2C6F4B67B9E"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_logfile.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_logfile.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -4966,7 +4548,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_6E5C001E7A314DCEA0A4BF52BF74BCAD"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_speex.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_speex.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -4994,7 +4576,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_77550ABD8CC84D66A3B6C3C3C48665A4"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_dialplan_asterisk.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_dialplan_asterisk.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5022,7 +4604,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_78F060A241D0428998B42093C467AD36"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_voipcodecs.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_voipcodecs.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5050,7 +4632,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_7B1050643E1E48A3B67B281B4AD43904"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_g729.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_g729.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5078,7 +4660,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_8B53F026686B44189676CBC200E641C1"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_amr.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_amr.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5106,7 +4688,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_8E023477B9DC4126921A556B285B29E5"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_spidermonkey_socket.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_spidermonkey_socket.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5134,7 +4716,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_9527B92C45BB45629BDB19ED3C8DC194"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_fsv.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_fsv.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5162,7 +4744,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_95D01083472B4853AC3F06514558F347"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_spidermonkey_teletone.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_spidermonkey_teletone.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5190,7 +4772,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_96F8F7DE89C74DC399E8AE55C22B4F15"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_xml_curl.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_xml_curl.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5218,7 +4800,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_9B19C40442134D69B533E16D0851D99B"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_spidermonkey_odbc.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_spidermonkey_odbc.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5246,7 +4828,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_A0D5F714A0F94250A1C39603B699AB82"
             {
-            "SourcePath" = "8:..\\..\\Debug\\libteletone.dll"
+            "SourcePath" = "8:..\\..\\Release\\libteletone.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
@@ -5274,7 +4856,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_A8D70CB0D12C4B3FB2E2E896E9A7C843"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_tone_stream.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_tone_stream.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5302,7 +4884,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_A944ADCEDF884574A23F7BA5420A6BA1"
             {
-            "SourcePath" = "8:..\\..\\libs\\win32\\sqlite\\Debug\\libsqlite.lib"
+            "SourcePath" = "8:..\\..\\libs\\win32\\sqlite\\Release\\sqlite.lib"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
@@ -5330,7 +4912,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_B0A2E9B4C45D4098AFD734D0C4E3EAFB"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_conference.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_conference.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5358,7 +4940,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_B5542B260CD5493395871EFDE833E438"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_openmrcp.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_openmrcp.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5386,7 +4968,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_BA769056DBAF4259B38F5C3FF7377055"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_spidermonkey_curl.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_spidermonkey_curl.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5414,7 +4996,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_BB649A2C1ABE4895859025B09A240323"
             {
-            "SourcePath" = "8:..\\..\\libs\\win32\\pcre\\Debug\\libpcre.lib"
+            "SourcePath" = "8:..\\..\\libs\\win32\\pcre\\Release\\libpcre.lib"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
@@ -5442,7 +5024,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_BB99CEDF341D40F3976B6D5486D9366D"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_limit.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_limit.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5470,7 +5052,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_C1036825E1364537B537E542E71F9C0E"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_event_socket.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_event_socket.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5498,7 +5080,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_C105055EE271471A999CE7022E617EB7"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_commands.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_commands.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5526,7 +5108,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_C81AC700C1BC4A55B98DF12C0CBAFD6F"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_dialplan_xml.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_dialplan_xml.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5554,7 +5136,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_D0BB09AFB8D94B76918F0EE85BCCAD0A"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_dptools.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_dptools.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5582,7 +5164,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_D1269F1E49D442CF8EAC96C23E60325D"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_xml_rpc.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_xml_rpc.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5610,7 +5192,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_D2EF447106B24E67907DAED3D39CFBB1"
             {
-            "SourcePath" = "8:..\\..\\Debug\\FreeSwitch.dll"
+            "SourcePath" = "8:..\\..\\Release\\FreeSwitch.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
@@ -5638,7 +5220,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_D6F0F5845FAD4707975CE012A33CD607"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_rss.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_rss.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5666,7 +5248,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_D7EC5795A9C645AC8E129C2EE6D461ED"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_event_multicast.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_event_multicast.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5694,7 +5276,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_E1AA7C5B96DA4A26859D2C7A21E00AB6"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_spidermonkey_core_db.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_spidermonkey_core_db.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5722,7 +5304,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_E763C699DF0948B6984DDEB96A2DFD06"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_PortAudio.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_PortAudio.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5750,7 +5332,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_EAF4B051F44745ABA9B58038FB93994C"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_expr.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_expr.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5778,7 +5360,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_EC4922AEC1064C90B96EBBDD3104D761"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_local_stream.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_local_stream.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5806,7 +5388,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_EF14CB99F3414BB689D0CB0E6D6B8AB8"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_console.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_console.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5834,7 +5416,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_F0B800E719294692A02518CFD8CBAEFF"
             {
-            "SourcePath" = "8:..\\..\\Debug\\FreeSwitch.exe"
+            "SourcePath" = "8:..\\..\\Release\\FreeSwitch.exe"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_04AC783F1C9F41AEB4E947C46CE9C9FF"
@@ -5862,7 +5444,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_FB1B9FBDC3294F1C96DAC4246C013C22"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_woomera.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_woomera.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5890,7 +5472,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_FBB0E565B1DE49CE9C827ACAC337AC5B"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_sofia.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_sofia.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"
@@ -5918,7 +5500,7 @@
             }
             "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_FBD45C36E901435399634CACA5339597"
             {
-            "SourcePath" = "8:..\\..\\Debug\\mod\\mod_cdr_csv.dll"
+            "SourcePath" = "8:..\\..\\Release\\mod\\mod_cdr_csv.dll"
             "TargetName" = "8:"
             "Tag" = "8:"
             "Folder" = "8:_B6E020422C78490D96F78DB0E1A3F521"

Modified: freeswitch/branches/lukedashjr/syslibs/libs/apr-util/.update
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/apr-util/.update	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/apr-util/.update	Tue May 13 23:37:33 2008
@@ -1 +1 @@
-Fri Mar 16 17:12:43 EDT 2007
+Thu May  8 18:41:57 EDT 2008

Modified: freeswitch/branches/lukedashjr/syslibs/libs/apr-util/build-outputs.mk
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/apr-util/build-outputs.mk	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/apr-util/build-outputs.mk	Tue May 13 23:37:33 2008
@@ -1,37 +1,12 @@
 # DO NOT EDIT. AUTOMATICALLY GENERATED.
 
-buckets/apr_buckets_file.lo: buckets/apr_buckets_file.c .make.dirs include/apr_buckets.h
-buckets/apr_brigade.lo: buckets/apr_brigade.c .make.dirs include/apr_buckets.h
-buckets/apr_buckets_mmap.lo: buckets/apr_buckets_mmap.c .make.dirs include/apr_buckets.h
-buckets/apr_buckets_heap.lo: buckets/apr_buckets_heap.c .make.dirs include/apr_buckets.h
-buckets/apr_buckets.lo: buckets/apr_buckets.c .make.dirs include/apr_buckets.h
-buckets/apr_buckets_socket.lo: buckets/apr_buckets_socket.c .make.dirs include/apr_buckets.h
-buckets/apr_buckets_pool.lo: buckets/apr_buckets_pool.c .make.dirs include/apr_buckets.h
-buckets/apr_buckets_alloc.lo: buckets/apr_buckets_alloc.c .make.dirs include/apr_buckets.h
-buckets/apr_buckets_pipe.lo: buckets/apr_buckets_pipe.c .make.dirs include/apr_buckets.h
-buckets/apr_buckets_eos.lo: buckets/apr_buckets_eos.c .make.dirs include/apr_buckets.h
-buckets/apr_buckets_flush.lo: buckets/apr_buckets_flush.c .make.dirs include/apr_buckets.h
-buckets/apr_buckets_refcount.lo: buckets/apr_buckets_refcount.c .make.dirs include/apr_buckets.h
-buckets/apr_buckets_simple.lo: buckets/apr_buckets_simple.c .make.dirs include/apr_buckets.h
 crypto/apr_md5.lo: crypto/apr_md5.c .make.dirs include/apr_xlate.h include/apr_md5.h include/apr_sha1.h
 crypto/uuid.lo: crypto/uuid.c .make.dirs include/apr_uuid.h
 crypto/apr_sha1.lo: crypto/apr_sha1.c .make.dirs include/apr_xlate.h include/apr_sha1.h include/apr_base64.h
 crypto/getuuid.lo: crypto/getuuid.c .make.dirs include/apr_uuid.h include/apr_md5.h include/apr_xlate.h
 crypto/apr_md4.lo: crypto/apr_md4.c .make.dirs include/apr_md4.h include/apr_xlate.h
-dbm/apr_dbm_berkeleydb.lo: dbm/apr_dbm_berkeleydb.c .make.dirs 
-dbm/apr_dbm_gdbm.lo: dbm/apr_dbm_gdbm.c .make.dirs 
-dbm/apr_dbm_ndbm.lo: dbm/apr_dbm_ndbm.c .make.dirs 
-dbm/apr_dbm.lo: dbm/apr_dbm.c .make.dirs include/apr_dbm.h
-dbm/apr_dbm_sdbm.lo: dbm/apr_dbm_sdbm.c .make.dirs include/apr_sdbm.h
-dbm/sdbm/sdbm_hash.lo: dbm/sdbm/sdbm_hash.c .make.dirs include/apr_sdbm.h
-dbm/sdbm/sdbm.lo: dbm/sdbm/sdbm.c .make.dirs include/apr_sdbm.h
-dbm/sdbm/sdbm_lock.lo: dbm/sdbm/sdbm_lock.c .make.dirs include/apr_sdbm.h
-dbm/sdbm/sdbm_pair.lo: dbm/sdbm/sdbm_pair.c .make.dirs include/apr_sdbm.h
 encoding/apr_base64.lo: encoding/apr_base64.c .make.dirs include/apr_base64.h include/apr_xlate.h
 hooks/apr_hooks.lo: hooks/apr_hooks.c .make.dirs include/apr_optional_hooks.h include/apr_optional.h include/apr_hooks.h
-ldap/apr_ldap_option.lo: ldap/apr_ldap_option.c .make.dirs 
-ldap/apr_ldap_init.lo: ldap/apr_ldap_init.c .make.dirs 
-ldap/apr_ldap_url.lo: ldap/apr_ldap_url.c .make.dirs 
 misc/apr_reslist.lo: misc/apr_reslist.c .make.dirs include/apr_reslist.h
 misc/apr_rmm.lo: misc/apr_rmm.c .make.dirs include/apr_rmm.h include/apr_anylock.h
 misc/apr_date.lo: misc/apr_date.c .make.dirs include/apr_date.h
@@ -40,12 +15,8 @@
 uri/apr_uri.lo: uri/apr_uri.c .make.dirs include/apr_uri.h
 strmatch/apr_strmatch.lo: strmatch/apr_strmatch.c .make.dirs include/apr_strmatch.h
 xlate/xlate.lo: xlate/xlate.c .make.dirs include/apr_xlate.h
-dbd/apr_dbd_sqlite2.lo: dbd/apr_dbd_sqlite2.c .make.dirs 
-dbd/apr_dbd_pgsql.lo: dbd/apr_dbd_pgsql.c .make.dirs 
-dbd/apr_dbd.lo: dbd/apr_dbd.c .make.dirs include/apr_dbd.h
-dbd/apr_dbd_sqlite3.lo: dbd/apr_dbd_sqlite3.c .make.dirs 
 
-OBJECTS_all = buckets/apr_buckets_file.lo buckets/apr_brigade.lo buckets/apr_buckets_mmap.lo buckets/apr_buckets_heap.lo buckets/apr_buckets.lo buckets/apr_buckets_socket.lo buckets/apr_buckets_pool.lo buckets/apr_buckets_alloc.lo buckets/apr_buckets_pipe.lo buckets/apr_buckets_eos.lo buckets/apr_buckets_flush.lo buckets/apr_buckets_refcount.lo buckets/apr_buckets_simple.lo crypto/apr_md5.lo crypto/uuid.lo crypto/apr_sha1.lo crypto/getuuid.lo crypto/apr_md4.lo dbm/apr_dbm_berkeleydb.lo dbm/apr_dbm_gdbm.lo dbm/apr_dbm_ndbm.lo dbm/apr_dbm.lo dbm/apr_dbm_sdbm.lo dbm/sdbm/sdbm_hash.lo dbm/sdbm/sdbm.lo dbm/sdbm/sdbm_lock.lo dbm/sdbm/sdbm_pair.lo encoding/apr_base64.lo hooks/apr_hooks.lo ldap/apr_ldap_option.lo ldap/apr_ldap_init.lo ldap/apr_ldap_url.lo misc/apr_reslist.lo misc/apr_rmm.lo misc/apr_date.lo misc/apu_version.lo misc/apr_queue.lo uri/apr_uri.lo strmatch/apr_strmatch.lo xlate/xlate.lo dbd/apr_dbd_sqlite2.lo dbd/apr_dbd_pgsql.lo dbd/apr_dbd.lo dbd/apr_dbd_sqlite3.lo
+OBJECTS_all = crypto/apr_md5.lo crypto/uuid.lo crypto/apr_sha1.lo crypto/getuuid.lo crypto/apr_md4.lo encoding/apr_base64.lo hooks/apr_hooks.lo misc/apr_reslist.lo misc/apr_rmm.lo misc/apr_date.lo misc/apu_version.lo misc/apr_queue.lo uri/apr_uri.lo strmatch/apr_strmatch.lo xlate/xlate.lo
 
 OBJECTS_unix = $(OBJECTS_all)
 
@@ -57,11 +28,11 @@
 
 OBJECTS_os390 = $(OBJECTS_all)
 
-HEADERS = $(top_srcdir)/include/apr_optional.h $(top_srcdir)/include/apu_version.h $(top_srcdir)/include/apr_dbm.h $(top_srcdir)/include/apr_strmatch.h $(top_srcdir)/include/apr_buckets.h $(top_srcdir)/include/apr_optional_hooks.h $(top_srcdir)/include/apr_sdbm.h $(top_srcdir)/include/apr_md4.h $(top_srcdir)/include/apr_reslist.h $(top_srcdir)/include/apr_base64.h $(top_srcdir)/include/apr_ldap_option.h $(top_srcdir)/include/apr_anylock.h $(top_srcdir)/include/apr_rmm.h $(top_srcdir)/include/apr_ldap_init.h $(top_srcdir)/include/apr_ldap_url.h $(top_srcdir)/include/apr_md5.h $(top_srcdir)/include/apr_date.h $(top_srcdir)/include/apr_hooks.h $(top_srcdir)/include/apr_xlate.h $(top_srcdir)/include/apr_queue.h $(top_srcdir)/include/apr_uri.h $(top_srcdir)/include/apr_uuid.h $(top_srcdir)/include/apr_sha1.h $(top_srcdir)/include/apr_dbd.h
+HEADERS = $(top_srcdir)/include/apr_optional.h $(top_srcdir)/include/apu_version.h $(top_srcdir)/include/apr_strmatch.h $(top_srcdir)/include/apr_optional_hooks.h $(top_srcdir)/include/apr_sdbm.h $(top_srcdir)/include/apr_md4.h $(top_srcdir)/include/apr_reslist.h $(top_srcdir)/include/apr_base64.h $(top_srcdir)/include/apr_anylock.h $(top_srcdir)/include/apr_rmm.h $(top_srcdir)/include/apr_md5.h $(top_srcdir)/include/apr_date.h $(top_srcdir)/include/apr_hooks.h $(top_srcdir)/include/apr_xlate.h $(top_srcdir)/include/apr_queue.h $(top_srcdir)/include/apr_uri.h $(top_srcdir)/include/apr_uuid.h $(top_srcdir)/include/apr_sha1.h
 
-SOURCE_DIRS = dbd dbm encoding hooks buckets misc crypto uri strmatch dbm/sdbm ldap xlate $(EXTRA_SOURCE_DIRS)
+SOURCE_DIRS = encoding hooks misc crypto uri strmatch xlate $(EXTRA_SOURCE_DIRS)
 
-BUILD_DIRS = buckets crypto dbd dbm dbm/sdbm encoding hooks ldap misc strmatch uri xlate
+BUILD_DIRS = crypto encoding hooks misc strmatch uri xlate
 
 .make.dirs: $(srcdir)/build-outputs.mk
 	@for d in $(BUILD_DIRS); do test -d $$d || mkdir $$d; done

Modified: freeswitch/branches/lukedashjr/syslibs/libs/apr-util/crypto/getuuid.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/apr-util/crypto/getuuid.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/apr-util/crypto/getuuid.c	Tue May 13 23:37:33 2008
@@ -20,10 +20,11 @@
  */
 #include "apr.h"
 #include "apr_uuid.h"
-#include "apr_md5.h"
 #include "apr_general.h"
 #include "apr_portable.h"
-
+#if !APR_HAS_RANDOM
+#include "apr_md5.h"
+#endif
 
 #if APR_HAVE_UNISTD_H
 #include <unistd.h>     /* for getpid, gethostname */

Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/.update
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/.update	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/.update	Tue May 13 23:37:33 2008
@@ -1 +1 @@
-Wed Apr 23 14:38:18 EDT 2008
+Mon May 12 14:41:23 EDT 2008

Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nta/nta.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nta/nta.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nta/nta.c	Tue May 13 23:37:33 2008
@@ -170,6 +170,10 @@
 #define NTA_BRANCH_PRIME SU_U64_C(0xB9591D1C361C6521)
 #define NTA_TAG_PRIME    SU_U64_C(0xB9591D1C361C6521)
 
+#ifndef UINT32_MAX
+#define UINT32_MAX (0xffffffffU)
+#endif
+
 HTABLE_PROTOS_WITH(leg_htable, lht, nta_leg_t, size_t, hash_value_t);
 static nta_leg_t *leg_find(nta_agent_t const *sa,
 			   char const *method_name,
@@ -734,7 +738,7 @@
 void agent_timer(su_root_magic_t *rm, su_timer_t *timer, nta_agent_t *agent)
 {
   su_time_t stamp = su_now();
-  su_duration_t now = su_time_ms(stamp), next;
+  uint32_t now = su_time_ms(stamp), next, latest;
 
   now += now == 0;
 
@@ -752,10 +756,11 @@
   agent->sa_in_timer = 0;
 
   /* Calculate next timeout */
-  next = now + SU_DURATION_MAX;
+  next = latest = now + NTA_TIME_MAX + 1;
 
 #define NEXT_TIMEOUT(next, p, f, now) \
-  (void)(p && p->f - (next) < 0 && ((next) = (p->f - (now) > 0 ? p->f : (now))))
+  (void)(p && (int32_t)(p->f - (next)) < 0 && \
+	 ((next) = ((int32_t)(p->f - (now)) > 0 ? p->f : (now))))
 
   NEXT_TIMEOUT(next, agent->sa_out.re_list, orq_retry, now);
   NEXT_TIMEOUT(next, agent->sa_out.inv_completed->q_head, orq_timeout, now);
@@ -776,8 +781,8 @@
 
 #undef NEXT_TIMEOUT
 
-  if (next == now + SU_DURATION_MAX) {
-    /* Do not set timer */
+  if (next == latest) {
+    /* Do not set timer? */
     SU_DEBUG_9(("nta: timer not set\n"));
     assert(!agent->sa_out.completed->q_head);
     assert(!agent->sa_out.trying->q_head);
@@ -800,6 +805,22 @@
   su_timer_set_at(timer, agent_timer, agent, su_time_add(stamp, next - now));
 }
 
+/** Add uin32_t milliseconds to the time. */
+static su_time_t add_milliseconds(su_time_t t0, uint32_t ms)
+{
+  unsigned long sec = ms / 1000, usec = (ms % 1000) * 1000;
+
+  t0.tv_usec += usec;
+  t0.tv_sec += sec;
+
+  if (t0.tv_usec >= 1000000) {
+    t0.tv_sec += 1;
+    t0.tv_usec -= 1000000;
+  }
+
+  return t0;
+}
+
 /** Calculate nonzero value for timeout.
  *
  * Sets or adjusts agent timer when needed.
@@ -808,25 +829,25 @@
  * @retval timeout (millisecond counter) otherwise
  */
 static
-su_duration_t set_timeout(nta_agent_t *agent, su_duration_t offset)
+uint32_t set_timeout(nta_agent_t *agent, uint32_t offset)
 {
   su_time_t now;
-  su_duration_t next, ms;
+  uint32_t next, ms;
 
   if (offset == 0)
     return 0;
 
-  if (agent->sa_millisec) /* Avoid expensive call to su_timer_ms() */
+  if (agent->sa_millisec) /* Avoid expensive call to su_now() */
     now = agent->sa_now, ms = agent->sa_millisec;
   else
-    now = su_now(), ms = (su_duration_t)su_time_ms(now);
+    now = su_now(), ms = su_time_ms(now);
   
   next = ms + offset; if (next == 0) next = 1;
 
-  if (agent->sa_in_timer)
+  if (agent->sa_in_timer)	/* Currently executing timer */
     return next;
 
-  if (agent->sa_next == 0 || agent->sa_next - next - 5L > 0) {
+  if (agent->sa_next == 0 || (int32_t)(agent->sa_next - next - 5L) > 0) {
     /* Set timer */
     if (agent->sa_next)
       SU_DEBUG_9(("nta: timer %s to %ld ms\n", "shortened", (long)offset));
@@ -834,7 +855,7 @@
       SU_DEBUG_9(("nta: timer %s to %ld ms\n", "set", (long)offset));
       
     su_timer_set_at(agent->sa_timer, agent_timer, agent, 
-		    su_time_add(now, offset));
+		    add_milliseconds(now, offset));
     agent->sa_next = next;
   }
 
@@ -1093,7 +1114,7 @@
   }
 
   if (maxsize == 0) maxsize = 2 * 1024 * 1024;
-  if (maxsize > NTA_TIME_MAX) maxsize = NTA_TIME_MAX;
+  if (maxsize > UINT32_MAX) maxsize = UINT32_MAX;
   agent->sa_maxsize = maxsize;
 
   if (max_proceeding == 0) max_proceeding = SIZE_MAX;
@@ -1262,7 +1283,7 @@
 	     NTATAG_EXTRA_100(agent->sa_extra_100),
 	     NTATAG_GRAYLIST(agent->sa_graylist),
 	     NTATAG_MAXSIZE(agent->sa_maxsize),
-		 NTATAG_MAX_PROCEEDING(agent->sa_max_proceeding),
+	     NTATAG_MAX_PROCEEDING(agent->sa_max_proceeding),
 	     NTATAG_MAX_FORWARDS(agent->sa_max_forwards->mf_count),
 	     NTATAG_MCLASS(agent->sa_mclass),
 	     NTATAG_MERGE_482(agent->sa_merge_482),
@@ -2046,11 +2067,16 @@
     clear = 1, v->v_protocol = via->v_protocol;
 
   /* XXX - should we do this? */
-  if (via->v_host != v->v_host &&
+  if (!user_via &&
+      via->v_host != v->v_host &&
       str0cmp(via->v_host, v->v_host))
     clear = 1, v->v_host = via->v_host;
 
-  if (via->v_port != v->v_port &&
+  if ((!user_via ||
+       /* Replace port in user Via only if we use udp and no rport */
+       (v->v_protocol == sip_transport_udp && !v->v_rport && 
+	!orq->orq_stateless)) &&
+      via->v_port != v->v_port &&
       str0cmp(via->v_port, v->v_port))
     clear = 1, v->v_port = via->v_port;
 
@@ -2440,16 +2466,20 @@
     leg_recv(leg, msg, sip, tport);
   }
   else if (!agent->sa_is_stateless && (leg = agent->sa_default_leg)) {
-	if (method == sip_method_invite && agent->sa_in.proceeding->q_length >= agent->sa_max_proceeding) {
-		SU_DEBUG_5(("nta: proceeding queue full for %s (%u)\n", method_name, cseq));
-		nta_msg_treply(agent, msg, SIP_503_SERVICE_UNAVAILABLE,
-			   NTATAG_TPORT(tport), 
-			   TAG_END());
-		return;
-	} else {
-		SU_DEBUG_5(("nta: %s (%u) %s\n", method_name, cseq, "going to a default leg"));
-		leg_recv(leg, msg, sip, tport);
-	}
+    if (method == sip_method_invite &&
+	agent->sa_in.proceeding->q_length >= agent->sa_max_proceeding) {
+      SU_DEBUG_5(("nta: proceeding queue full for %s (%u)\n",
+		  method_name, cseq));
+      nta_msg_treply(agent, msg, SIP_503_SERVICE_UNAVAILABLE,
+		     NTATAG_TPORT(tport),
+		     TAG_END());
+      return;
+    }
+    else {
+      SU_DEBUG_5(("nta: %s (%u) %s\n",
+		  method_name, cseq, "going to a default leg"));
+      leg_recv(leg, msg, sip, tport);
+    }
   }
   else if (agent->sa_callback) {
     /* Stateless processing for request */
@@ -4022,6 +4052,55 @@
   return leg;
 }
 
+/**@internal
+ * Find a leg corresponding to the request message.
+ *
+ */
+static
+nta_leg_t *leg_find_call_id(nta_agent_t const *sa,
+		    sip_call_id_t const *i)
+{
+  hash_value_t hash = i->i_hash;
+  leg_htable_t const *lht = sa->sa_dialogs;
+  nta_leg_t **ll, *leg = NULL;
+
+  for (ll = leg_htable_hash(lht, hash);
+       (leg = *ll);
+       ll = leg_htable_next(lht, ll)) {
+    sip_call_id_t const *leg_i = leg->leg_id;
+
+	if (leg->leg_hash != hash)
+      continue;
+    if (strcmp(leg_i->i_id, i->i_id) != 0)
+      continue;
+
+	return leg;
+  }
+
+  return leg;
+}
+
+/** Get dialog leg by @CallID.
+ *
+ * @since New in @VERSION_1_12_9.
+ */
+SOFIAPUBFUN
+nta_leg_t *nta_leg_by_call_id(nta_agent_t *sa, const char *call_id)
+{
+  nta_leg_t *leg = NULL;
+
+  if (call_id) {
+    sip_call_id_t id[1];
+    sip_call_id_init(id);
+
+    id->i_hash = msg_hash_string(id->i_id = call_id);
+
+    leg = leg_find_call_id(sa, id);
+  }
+
+  return leg;
+}
+
 /** Calculate a simple case-insensitive hash over a string */
 su_inline
 hash_value_t hash_istring(char const *s, char const *term, hash_value_t hash)
@@ -4469,7 +4548,7 @@
 su_inline int incoming_is_queued(nta_incoming_t const *irq);
 su_inline void incoming_queue(incoming_queue_t *queue, nta_incoming_t *);
 su_inline void incoming_remove(nta_incoming_t *irq);
-su_inline void incoming_set_timer(nta_incoming_t *, unsigned interval);
+su_inline void incoming_set_timer(nta_incoming_t *, uint32_t interval);
 su_inline void incoming_reset_timer(nta_incoming_t *);
 su_inline size_t incoming_mass_destroy(nta_agent_t *, incoming_queue_t *);
 
@@ -4803,10 +4882,10 @@
 static void
 incoming_queue_adjust(nta_agent_t *sa, 
 		      incoming_queue_t *queue, 
-		      unsigned timeout)
+		      uint32_t timeout)
 {
   nta_incoming_t *irq;
-  su_duration_t latest;
+  uint32_t latest;
 
   if (timeout >= queue->q_timeout || !queue->q_head) {
     queue->q_timeout = timeout;
@@ -4816,7 +4895,7 @@
   latest = set_timeout(sa, queue->q_timeout = timeout);
 
   for (irq = queue->q_head; irq; irq = irq->irq_next) {
-    if (irq->irq_timeout - latest > 0)
+    if ((int32_t)(irq->irq_timeout - latest) > 0)
       irq->irq_timeout = latest;
   }
 }
@@ -4881,7 +4960,7 @@
 }
 
 su_inline
-void incoming_set_timer(nta_incoming_t *irq, unsigned interval)
+void incoming_set_timer(nta_incoming_t *irq, uint32_t interval)
 {
   nta_incoming_t **rq;
   
@@ -4905,10 +4984,10 @@
 
   rq = irq->irq_agent->sa_in.re_t1;
 
-  if (!(*rq) || (*rq)->irq_retry - irq->irq_retry > 0)
+  if (!(*rq) || (int32_t)((*rq)->irq_retry - irq->irq_retry) > 0)
     rq = &irq->irq_agent->sa_in.re_list;
 
-  while (*rq && (*rq)->irq_retry - irq->irq_retry <= 0)
+  while (*rq && (int32_t)((*rq)->irq_retry - irq->irq_retry) <= 0)
     rq = &(*rq)->irq_rnext;
 
   if ((irq->irq_rnext = *rq))
@@ -6135,7 +6214,7 @@
 /** @internal Timer routine for the incoming request. */
 static void incoming_timer(nta_agent_t *sa)
 {
-  su_duration_t now = sa->sa_millisec;
+  uint32_t now = sa->sa_millisec;
   nta_incoming_t *irq, *irq_next;
   size_t retransmitted = 0, timeout = 0, terminated = 0, destroyed = 0;
   size_t unconfirmed = 
@@ -6152,7 +6231,7 @@
 
   /* Handle retry queue */
   while ((irq = sa->sa_in.re_list)) {
-    if (irq->irq_retry - now > 0)
+    if ((int32_t)(irq->irq_retry - now) > 0)
       break;
     if (retransmitted >= timer_max_retransmit)
       break;
@@ -6233,7 +6312,7 @@
     assert(irq->irq_status < 200);
     assert(irq->irq_timeout);
 
-    if (irq->irq_timeout - now > 0)
+    if ((int32_t)(irq->irq_timeout - now) > 0)
       break;
     if (timeout >= timer_max_timeout)
       break;
@@ -6253,7 +6332,7 @@
     assert(irq->irq_timeout);
     assert(irq->irq_method == sip_method_invite);
 
-    if (irq->irq_timeout - now > 0 || 
+    if ((int32_t)(irq->irq_timeout - now) > 0 ||
 	timeout >= timer_max_timeout || 
 	terminated >= timer_max_terminate)
       break;
@@ -6281,7 +6360,8 @@
     assert(irq->irq_status >= 200);
     assert(irq->irq_method == sip_method_invite);
 
-    if (irq->irq_timeout - now > 0 || terminated >= timer_max_terminate)
+    if ((int32_t)(irq->irq_timeout - now) > 0 ||
+	terminated >= timer_max_terminate)
       break;
     
     /* Timer I */
@@ -6302,7 +6382,8 @@
     assert(irq->irq_timeout);
     assert(irq->irq_method != sip_method_invite);
 
-    if (irq->irq_timeout - now > 0 || terminated >= timer_max_terminate)
+    if ((int32_t)(irq->irq_timeout - now) > 0 ||
+	terminated >= timer_max_terminate)
       break;
 
     /* Timer J */
@@ -6395,24 +6476,24 @@
 su_inline void outgoing_queue(outgoing_queue_t *queue, 
 				  nta_outgoing_t *orq);
 su_inline void outgoing_remove(nta_outgoing_t *orq);
-su_inline void outgoing_set_timer(nta_outgoing_t *orq, unsigned interval);
+su_inline void outgoing_set_timer(nta_outgoing_t *orq, uint32_t interval);
 su_inline void outgoing_reset_timer(nta_outgoing_t *orq);
 static size_t outgoing_timer_dk(outgoing_queue_t *q, 
 				char const *timer, 
-				su_duration_t now);
+				uint32_t now);
 static size_t outgoing_timer_bf(outgoing_queue_t *q, 
 				char const *timer, 
-				su_duration_t now);
+				uint32_t now);
 static size_t outgoing_timer_c(outgoing_queue_t *q, 
 			       char const *timer, 
-			       su_duration_t now);
+			       uint32_t now);
 
 static void outgoing_ack(nta_outgoing_t *orq, sip_t *sip);
 static msg_t *outgoing_ackmsg(nta_outgoing_t *, sip_method_t, char const *,
 			      tagi_t const *tags);
 static void outgoing_retransmit(nta_outgoing_t *orq);
 static void outgoing_trying(nta_outgoing_t *orq);
-static void outgoing_timeout(nta_outgoing_t *orq, su_duration_t now);
+static void outgoing_timeout(nta_outgoing_t *orq, uint32_t now);
 static int outgoing_complete(nta_outgoing_t *orq);
 static int outgoing_terminate(nta_outgoing_t *orq);
 static size_t outgoing_mass_destroy(nta_agent_t *sa, outgoing_queue_t *q);
@@ -7654,7 +7735,7 @@
 		      unsigned timeout)
 {
   nta_outgoing_t *orq;
-  su_duration_t latest;
+  uint32_t latest;
 
   if (timeout >= queue->q_timeout || !queue->q_head) {
     queue->q_timeout = timeout;
@@ -7665,7 +7746,7 @@
 
   for (orq = queue->q_head; orq; orq = orq->orq_next) {
     if (orq->orq_timeout == 0 ||
-	orq->orq_timeout - latest > 0)
+	(int32_t)(orq->orq_timeout - latest) > 0)
       orq->orq_timeout = latest;
   }
 }
@@ -7735,7 +7816,7 @@
  * Set the retry timer (B/D) on the outgoing request (client transaction).
  */
 su_inline
-void outgoing_set_timer(nta_outgoing_t *orq, unsigned interval)
+void outgoing_set_timer(nta_outgoing_t *orq, uint32_t interval)
 {
   nta_outgoing_t **rq;
   
@@ -7762,10 +7843,10 @@
   /* Shortcut into queue at SIP T1 */
   rq = orq->orq_agent->sa_out.re_t1;
 
-  if (!(*rq) || (*rq)->orq_retry - orq->orq_retry > 0)
+  if (!(*rq) || (int32_t)((*rq)->orq_retry - orq->orq_retry) > 0)
     rq = &orq->orq_agent->sa_out.re_list;
 
-  while (*rq && (*rq)->orq_retry - orq->orq_retry <= 0)
+  while (*rq && (int32_t)((*rq)->orq_retry - orq->orq_retry) <= 0)
     rq = &(*rq)->orq_rnext;
 
   if ((orq->orq_rnext = *rq))
@@ -7913,7 +7994,7 @@
  */
 static void outgoing_timer(nta_agent_t *sa)
 {
-  su_duration_t now = sa->sa_millisec;
+  uint32_t now = sa->sa_millisec;
   nta_outgoing_t *orq;
   outgoing_queue_t rq[1];
   size_t retransmitted = 0, terminated = 0, timeout = 0, destroyed;
@@ -7927,7 +8008,7 @@
   outgoing_queue_init(sa->sa_out.free = rq, 0);
 
   while ((orq = sa->sa_out.re_list)) {
-    if (orq->orq_retry - now > 0)
+    if ((int32_t)(orq->orq_retry) - now > 0)
       break;
     if (retransmitted >= timer_max_retransmit)
       break;
@@ -8023,13 +8104,14 @@
 static
 size_t outgoing_timer_bf(outgoing_queue_t *q, 
 			 char const *timer, 
-			 su_duration_t now)
+			 uint32_t now)
 {
   nta_outgoing_t *orq;
   size_t timeout = 0;
 
   while ((orq = q->q_head)) {
-    if (orq->orq_timeout - now > 0 || timeout >= timer_max_timeout)
+    if ((int32_t)(orq->orq_timeout - now) > 0 ||
+	timeout >= timer_max_timeout)
       break;
 
     timeout++;
@@ -8044,7 +8126,7 @@
     else
       outgoing_terminate(orq);
 
-    assert(q->q_head != orq || orq->orq_timeout - now > 0);
+    assert(q->q_head != orq || (int32_t)(orq->orq_timeout - now) > 0);
   }
 
   return timeout;
@@ -8054,7 +8136,7 @@
 static
 size_t outgoing_timer_c(outgoing_queue_t *q, 
 			char const *timer, 
-			su_duration_t now)
+			uint32_t now)
 {
   nta_outgoing_t *orq;
   size_t timeout = 0;
@@ -8063,7 +8145,7 @@
     return 0;
 
   while ((orq = q->q_head)) {
-    if (orq->orq_timeout - now > 0 || timeout >= timer_max_timeout)
+    if ((int32_t)(orq->orq_timeout - now) > 0 || timeout >= timer_max_timeout)
       break;
 
     timeout++;
@@ -8083,7 +8165,7 @@
 }
 
 /** @internal Signal transaction timeout to the application. */
-void outgoing_timeout(nta_outgoing_t *orq, su_duration_t now)
+void outgoing_timeout(nta_outgoing_t *orq, uint32_t now)
 {
   nta_outgoing_t *cancel;
 
@@ -8131,13 +8213,14 @@
 static
 size_t outgoing_timer_dk(outgoing_queue_t *q, 
 			 char const *timer, 
-			 su_duration_t now)
+			 uint32_t now)
 {
   nta_outgoing_t *orq;
   size_t terminated = 0;
 
   while ((orq = q->q_head)) {
-    if (orq->orq_timeout - now > 0 || terminated >= timer_max_terminate)
+    if ((int32_t)(orq->orq_timeout - now) > 0 ||
+	terminated >= timer_max_terminate)
       break;
 
     terminated++;

Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nta/nta_internal.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nta/nta_internal.h	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nta/nta_internal.h	Tue May 13 23:37:33 2008
@@ -102,9 +102,9 @@
   nta_update_magic_t   *sa_update_magic;
   nta_update_tport_f   *sa_update_tport;
 
-  su_duration_t         sa_next; /**< Timestamp for next agent_timer. */
   su_time_t             sa_now;	 /**< Timestamp in microsecond resolution. */
-  uint32_t              sa_millisec; /**< Timestamp in milliseconds resolution. */
+  uint32_t              sa_next; /**< Timestamp for next agent_timer. */
+  uint32_t              sa_millisec; /**< Timestamp in milliseconds. */
 
   uint32_t              sa_nw_updates; /* Shall we enable network detector? */
 
@@ -419,8 +419,8 @@
   sip_timestamp_t      *irq_timestamp;
   su_time_t             irq_received;
 
-  su_duration_t       	irq_timeout;    /**< Timer H, I, J */
-  su_duration_t       	irq_retry;      /**< Timer G */
+  uint32_t       	irq_timeout;    /**< Timer H, I, J */
+  uint32_t       	irq_retry;      /**< Timer G */
   unsigned short      	irq_interval;	/**< Next timer  */
 
   short               	irq_status;
@@ -499,8 +499,8 @@
   su_time_t             orq_sent;       /**< When request was sent? */
   unsigned              orq_delay;      /**< RTT estimate */
 
-  su_duration_t         orq_retry;	/**< Timer A, E */
-  su_duration_t       	orq_timeout;	/**< Timer B, D, F, K */
+  uint32_t		orq_retry;	/**< Timer A, E */
+  uint32_t		orq_timeout;	/**< Timer B, D, F, K */
 
   unsigned short      	orq_interval;	/**< Next timer A/E */
 

Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta.h	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nta/sofia-sip/nta.h	Tue May 13 23:37:33 2008
@@ -253,6 +253,10 @@
 SOFIAPUBFUN
 nta_leg_t *nta_leg_by_replaces(nta_agent_t *, sip_replaces_t const *);
 
+/** Get dialog leg by CallID */
+SOFIAPUBFUN
+nta_leg_t *nta_leg_by_call_id(nta_agent_t *sa, const char *call_id);
+
 /* ----------------------------------------------------------------------
  * 6) Prototypes for incoming transactions 
  */

Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua.c	Tue May 13 23:37:33 2008
@@ -1005,6 +1005,21 @@
   return 0;
 }
 
+struct nua_stack_handle_by_call_id_args {
+  nua_handle_t *retval;
+  nua_t *nua;
+  const char *call_id;
+};
+
+static int nua_stack_handle_by_call_id_call(void *arg)
+{
+  struct nua_stack_handle_by_call_id_args *a = arg;
+
+  a->retval = nua_stack_handle_by_call_id(a->nua, a->call_id);
+
+  return 0;
+}
+
 /** Obtain a new reference to an existing handle based on @Replaces header.
  *
  * @since New in @VERSION_1_12_4.
@@ -1039,3 +1054,38 @@
   }
   return NULL;
 }
+
+/** Obtain a new reference to an existing handle based on @CallID.
+ *
+ * @since New in @VERSION_1_12_9.
+ *
+ * @note
+ * You should release the reference with nua_handle_unref() when you are
+ * done with the handle.
+ *
+ * @sa nua_handle_make_replaces(), @Replaces, @RFC3891, nua_refer(),
+ * #nua_i_refer, @ReferTo, nta_leg_by_replaces()
+ */
+nua_handle_t *nua_handle_by_call_id(nua_t *nua, const char *call_id)
+{
+  if (nua) {
+#if HAVE_OPEN_C
+    struct nua_stack_handle_by_call_id_args a;
+	a.retval = NULL;
+    a.nua = nua;
+    a.call_id = call_id;
+#else
+    struct nua_stack_handle_by_call_id_args a = { NULL, nua, call_id };
+#endif
+
+    if (su_task_execute(nua->nua_server,
+			nua_stack_handle_by_call_id_call, (void *)&a,
+			NULL) == 0) {
+      nua_handle_t *nh = a.retval;
+
+      if (nh && !NH_IS_DEFAULT(nh) && nh->nh_valid)
+	return nua_handle_ref(nh);
+    }
+  }
+  return NULL;
+}

Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_notifier.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_notifier.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_notifier.c	Tue May 13 23:37:33 2008
@@ -558,9 +558,6 @@
     }
   }
 
-  if (nu->nu_substate == nua_substate_terminated)
-    cr->cr_terminating = 1;
-
   cr->cr_usage = du;
 
   return nua_notify_client_init_etag(cr, msg, sip, tags);
@@ -700,6 +697,18 @@
   if (nu->nu_substate == nua_substate_terminated)
     cr->cr_terminating = 1;
 
+  if (cr->cr_terminating) {
+    nua_server_request_t *sr;
+    for (sr = du->du_dialog->ds_sr; sr; sr = sr->sr_next) {
+      if (sr->sr_usage == du) {
+	/* If subscribe has not been responded, don't terminate usage by NOTIFY */
+	sr->sr_terminating = 1;
+	cr->cr_terminating = 0;
+	break;
+      }
+    }
+  }
+
   if (du->du_event && !sip->sip_event)
     sip_add_dup(cr->cr_msg, sip, (sip_header_t *)du->du_event);
 

Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_session.c	Tue May 13 23:37:33 2008
@@ -1293,7 +1293,9 @@
       /* signal SOA that O/A round(s) is (are) complete */
 	soa_activate(nh->nh_soa, NULL);
     }
-    else if (nh->nh_soa == NULL && !(cr->cr_offer_sent && !cr->cr_answer_recv)) {
+    else if (nh->nh_soa == NULL
+	     /* NUA does not necessarily know dirty details */
+	     /* && !(cr->cr_offer_sent && !cr->cr_answer_recv) */) {
       ;
     }
     else {
@@ -2202,11 +2204,11 @@
   }
   else if (sr->sr_offer_recv && !sr->sr_answer_sent && early_answer) {
     /* Generate answer */ 
-    if (soa_generate_answer(nh->nh_soa, NULL) >= 0) {
-      answer = 1;
-      soa_activate(nh->nh_soa, NULL);
-      /* signal that O/A answer sent (answer to invite) */
+    if (soa_generate_answer(nh->nh_soa, NULL) >= 0 &&
+	soa_activate(nh->nh_soa, NULL) >= 0) {
+      answer = 1;      /* signal that O/A answer sent (answer to invite) */
     }
+    /* We have an error! */
     else if (sr->sr_status >= 200) {
       sip_warning_t *warning = NULL;
       int wcode;
@@ -3135,17 +3137,15 @@
 	(sr->sr_offer_recv && !sr->sr_answer_sent))
       break;
 
-  if (sr ||
-      (cri && cri->cr_offer_sent && !cri->cr_answer_recv) ||
-      (cri && cri->cr_offer_recv && !cri->cr_answer_sent)) {
-    if (nh->nh_soa == NULL) {
-      if (session_get_description(sip, NULL, NULL))
-	return nua_client_return(cr, 500, "Overlapping Offer/Answer", msg);
-    }
-  }
-  else if (nh->nh_soa == NULL) {
+  if (nh->nh_soa == NULL) {
     offer_sent = session_get_description(sip, NULL, NULL);
   }
+  else if (sr ||
+	   (cri && cri->cr_offer_sent && !cri->cr_answer_recv) ||
+	   (cri && cri->cr_offer_recv && !cri->cr_answer_sent)) {
+   if (session_get_description(sip, NULL, NULL))
+     return nua_client_return(cr, 500, "Overlapping Offer/Answer", msg);
+  }
   else if (!sip->sip_payload) {
     soa_init_offer_answer(nh->nh_soa);
 
@@ -3360,7 +3360,7 @@
 	if ((overlap = sr0->sr_offer_recv && !sr0->sr_answer_sent))
 	  break;
 
-    if (overlap)
+    if (nh->nh_soa && overlap)
       return nua_server_retry_after(sr, 500, "Overlapping Offer/Answer", 1, 9);
 
     if (nh->nh_soa &&

Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.c	Tue May 13 23:37:33 2008
@@ -511,12 +511,19 @@
     e->e_status = status;
     e->e_phrase = phrase;
 
-    SU_DEBUG_7(("nua(%p): signal %s\n", (void *)nh,
-		nua_event_name(event) + 4));
-
     su_msg_deinitializer(sumsg, nua_event_deinit);
       
     retval = su_msg_send_to(sumsg, nua->nua_server, nua_stack_signal);
+
+    if (retval == 0){
+      SU_DEBUG_7(("nua(%p): %s signal %s\n", (void *)nh,
+		  "sent", nua_event_name(event) + 4));
+    }
+    else {
+      SU_DEBUG_0(("nua(%p): %s signal %s\n", (void *)nh,
+		  "FAILED TO SEND", nua_event_name(event) + 4));
+
+    }
   }
 
   ta_end(ta);
@@ -552,9 +559,9 @@
     char const *name = nua_event_name(e->e_event);
 
     if (e->e_status == 0)
-      SU_DEBUG_5(("nua(%p): signal %s\n", (void *)nh, name + 4));
+      SU_DEBUG_5(("nua(%p): %s signal %s\n", (void *)nh, "recv", name + 4));
     else
-      SU_DEBUG_5(("nua(%p): signal %s %u %s\n",
+      SU_DEBUG_5(("nua(%p): recv signal %s %u %s\n",
 		  (void *)nh, name + 4,
 		  e->e_status, e->e_phrase ? e->e_phrase : ""));
   }
@@ -651,7 +658,8 @@
   }
 
   if (error < 0) {
-    nua_stack_event(nh->nh_nua, nh, NULL, event, NUA_ERROR_AT(__FILE__, __LINE__), NULL);
+    nua_stack_event(nh->nh_nua, nh, NULL, event,
+		    NUA_ERROR_AT(__FILE__, __LINE__), NULL);
   }
 
   su_msg_destroy(nua->nua_signal);
@@ -1115,6 +1123,15 @@
   return NULL;
 }
 
+nua_handle_t *nua_stack_handle_by_call_id(nua_t *nua, const char *call_id)
+{
+  if (nua) {
+    nta_leg_t *leg = nta_leg_by_call_id(nua->nua_nta, call_id);
+    if (leg)
+      return nta_leg_magic(leg, nua_stack_process_request);
+  }
+  return NULL;
+}
 
 /** @internal Add authorization data */
 int nh_authorize(nua_handle_t *nh, tag_type_t tag, tag_value_t value, ...)
@@ -2281,6 +2298,12 @@
 	sip_add_dup(msg, sip, (sip_header_t *)nua->nua_from) < 0)
       return nua_client_return(cr, NUA_ERROR_AT(__FILE__, __LINE__), msg);
 
+    if (sip->sip_to == NULL && cr->cr_method == sip_method_register &&
+      sip_add_dup_as(msg, sip, sip_to_class,
+		     (sip_header_t *)sip->sip_from) < 0) {
+      return nua_client_return(cr, NUA_ERROR_AT(__FILE__, __LINE__), msg);
+    }
+
     if (cr->cr_dialog) {
       ds->ds_leg = nta_leg_tcreate(nua->nua_nta,
 				   nua_stack_process_request, nh,

Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.h	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_stack.h	Tue May 13 23:37:33 2008
@@ -207,7 +207,8 @@
 extern char const nua_internal_error[];
 
 #define NUA_INTERNAL_ERROR 900, nua_internal_error
-#define NUA_ERROR_AT(file, line) 900, "Internal error at " file ":" #line
+#define _NUA_INTERNAL_ERROR_AT(file, line) "Internal error at " file ":" #line
+#define NUA_ERROR_AT(file, line) 900, _NUA_INTERNAL_ERROR_AT(file, line)
 
 struct nua_s {
   su_home_t            nua_home[1];
@@ -380,6 +381,9 @@
 nua_handle_t *nua_stack_handle_by_replaces(nua_t *nua,
 					   sip_replaces_t const *r);
 
+nua_handle_t *nua_stack_handle_by_call_id(nua_t *nua, const char *call_id);
+
+
 /* ---------------------------------------------------------------------- */
 
 int nua_stack_set_defaults(nua_handle_t *nh, nua_handle_preferences_t *nhp);

Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/nua_subnotref.c	Tue May 13 23:37:33 2008
@@ -248,15 +248,18 @@
   nua_dialog_usage_t *du = cr->cr_usage; 
   sip_time_t expires = 0;
 
-  if (cr->cr_event != nua_r_subscribe ||
-      (du && du->du_shutdown) ||
-      (sip->sip_expires && sip->sip_expires->ex_delta == 0))
+  if (cr->cr_event != nua_r_subscribe || !du || du->du_shutdown)
     cr->cr_terminating = 1;
 
   if (du) {
     struct event_usage *eu = nua_dialog_usage_private(du);
     sip_event_t *o = sip->sip_event;
 
+    if (eu->eu_notified &&
+	sip->sip_expires &&
+	sip->sip_expires->ex_delta == 0)
+      cr->cr_terminating = 1;
+
     if (nua_client_bind(cr, du) < 0)
       return -1;
 

Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/outbound.c	Tue May 13 23:37:33 2008
@@ -97,7 +97,7 @@
   /** Source of Contact header */
   unsigned ob_by_stack:1;
   /** Self-generated contacts */
-  unsigned ob_contacts:1, :0;
+  unsigned ob_contacts:1;
 
   /* The registration state machine. */
   /** Initial REGISTER containing ob_rcontact has been sent */
@@ -336,6 +336,14 @@
   if (ob) {
     if (ob->ob_contacts)
       *return_current_contact = ob->ob_rcontact;
+    else {
+      sip_contact_t *contact = *return_current_contact;
+      if (contact) {
+	if (ob->ob_rcontact)
+	  msg_header_free_all(ob->ob_home, (msg_header_t*)ob->ob_rcontact);
+	ob->ob_rcontact = sip_contact_dup(ob->ob_home, contact);
+      }
+    }
     *return_previous_contact = ob->ob_previous;
   }
   return 0;

Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua.h
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua.h	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/sofia-sip/nua.h	Tue May 13 23:37:33 2008
@@ -384,6 +384,7 @@
 SOFIAPUBFUN nua_handle_t *nua_handle_by_replaces(nua_t *nua,
 						 sip_replaces_t const *rp);
 
+nua_handle_t *nua_handle_by_call_id(nua_t *nua, const char *call_id);
 
 SOFIA_END_DECLS
 

Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_simple.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_simple.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_simple.c	Tue May 13 23:37:33 2008
@@ -607,6 +607,27 @@
   }
 }
 
+int save_until_responded_and_notified_twice(CONDITION_PARAMS)
+{
+  save_event_in_list(ctx, event, ep, call);
+
+  if (event == nua_i_notify) {
+    if (ep->flags.bit0)
+      ep->flags.bit1 = 1;
+    ep->flags.bit0 = 1;
+  }
+
+  if (event == nua_r_subscribe || event == nua_r_unsubscribe) {
+    if (status >= 300)
+      return 1;
+    else if (status >= 200) {
+      ep->flags.bit2 = 1;
+    }
+  }
+
+  return ep->flags.bit0 && ep->flags.bit1 && ep->flags.bit2;
+}
+
 
 int accept_and_notify(CONDITION_PARAMS)
 {
@@ -620,16 +641,21 @@
   switch (event) {
   case nua_i_subscribe:
     if (status < 200) {
+      int fetch = sip->sip_expires && sip->sip_expires->ex_delta == 0;
+
       RESPOND(ep, call, nh, SIP_202_ACCEPTED,
 	      NUTAG_WITH(with),
 	      SIPTAG_EXPIRES_STR("360"),
+	      SIPTAG_EXPIRES(sip->sip_expires),
 	      TAG_END());
 
       NOTIFY(ep, call, nh, 
 	     SIPTAG_EVENT(sip->sip_event),
 	     SIPTAG_CONTENT_TYPE_STR("application/pidf+xml"),
 	     SIPTAG_PAYLOAD_STR(presence_closed),
-	     NUTAG_SUBSTATE(nua_substate_pending),
+	     NUTAG_SUBSTATE(fetch
+			    ? nua_substate_pending
+			    : nua_substate_terminated),
 	     TAG_END());
 
     }
@@ -695,7 +721,7 @@
 	    SIPTAG_ACCEPT_STR("application/xpidf, application/pidf+xml"),
 	    TAG_END());
 
-  run_ab_until(ctx, -1, save_until_notified_and_responded,
+  run_ab_until(ctx, -1, save_until_responded_and_notified_twice,
 	       -1, accept_and_notify_twice);
 
   /* Client events:
@@ -727,10 +753,16 @@
   TEST_1(e = es); TEST_E(e->data->e_event, nua_r_subscribe);
   TEST_1(e->data->e_status == 202 || e->data->e_status == 200);
   TEST_1(tl_find(e->data->e_tags, nutag_substate));
-  if (es == a->events->head) 
-    TEST(tl_find(e->data->e_tags, nutag_substate)->t_value, nua_substate_embryonic);
-  else
-    TEST(tl_find(e->data->e_tags, nutag_substate)->t_value, nua_substate_pending);
+  r_tags = tl_find(e->data->e_tags, nutag_substate);
+  if (es == a->events->head) {
+    TEST(r_tags->t_value, nua_substate_embryonic);
+  }
+  else if (es == a->events->head->next) {
+    TEST_1(r_tags->t_value == nua_substate_pending);
+  }
+  else {
+    TEST_1(r_tags->t_value == nua_substate_active);
+  }
   TEST_1(sip = sip_object(e->data->e_msg));
   TEST_1(sip->sip_expires);
   TEST_1(sip->sip_expires->ex_delta <= 333);
@@ -1165,6 +1197,235 @@
 }
 
 /* ---------------------------------------------------------------------- */
+
+/*
+ * When incoming SUBSCRIBE, send NOTIFY,
+ * 200 OK SUBSCRIBE when NOTIFY has been responded.
+ */
+int notify_and_accept(CONDITION_PARAMS)
+{
+  if (!(check_handle(ep, call, nh, SIP_500_INTERNAL_SERVER_ERROR)))
+    return 0;
+
+  save_event_in_list(ctx, event, ep, call);
+
+  switch (event) {
+  case nua_i_subscribe:
+    if (status < 200) {
+      NOTIFY(ep, call, nh,
+	     SIPTAG_EVENT(sip->sip_event),
+	     SIPTAG_CONTENT_TYPE_STR("application/pidf+xml"),
+	     SIPTAG_PAYLOAD_STR(presence_closed),
+	     TAG_END());
+    }
+    return 0;
+
+  case nua_r_notify:
+    if (status >= 200) {
+      struct event *e;
+      for (e = ep->events->head; e; e = e->next) {
+	if (e->data->e_event == nua_i_subscribe) {
+	  RESPOND(ep, call, nh, SIP_200_OK,
+		  NUTAG_WITH(e->data->e_msg),
+		  TAG_END());
+	  break;
+	}
+      }
+      return 1;
+    }
+
+  default:
+    return 0;
+  }
+}
+
+int test_event_fetch(struct context *ctx)
+{
+  BEGIN();
+
+  struct endpoint *a = &ctx->a,  *b = &ctx->b;
+  struct call *a_call = a->call, *b_call = b->call;
+  struct event *e, *en1, *en2, *es;
+  sip_t const *sip;
+  tagi_t const *r_tags;
+
+  if (print_headings)
+    printf("TEST NUA-11.6.1: event fetch using nua_notify()\n");
+
+  TEST_1(a_call->nh = nua_handle(a->nua, a_call, SIPTAG_TO(b->to), TAG_END()));
+
+/* Fetch 1:
+
+   A			 B
+   |                     |
+   |------SUBSCRIBE----->|
+   |     Expires: 0      |
+   |<---------202--------|
+   |                     |
+   |<-------NOTIFY-------|
+   | S-State: terminated |
+   |-------200 OK------->|
+   |                     |
+*/
+
+  SUBSCRIBE(a, a_call, a_call->nh, NUTAG_URL(b->contact->m_url),
+	    SIPTAG_EVENT_STR("presence"),
+	    SIPTAG_EXPIRES_STR("0"),
+	    SIPTAG_ACCEPT_STR("application/xpidf, application/pidf+xml"),
+	    TAG_END());
+
+  run_ab_until(ctx, -1, save_until_notified_and_responded,
+	       -1, accept_and_notify);
+
+  /* Client events:
+     nua_subscribe(), nua_i_notify/nua_r_subscribe/nua_i_notify
+  */
+  for (en1 = en2 = es = NULL, e = a->events->head; e; e = e->next) {
+    if (en1 == NULL && e->data->e_event == nua_i_notify)
+      en1 = e;
+    else if (en2 == NULL && e->data->e_event == nua_i_notify)
+      en2 = e;
+    else if (e->data->e_event == nua_r_subscribe)
+      es = e;
+    else
+      TEST_1(!e);
+  }
+
+  TEST_1(e = en1);
+  TEST_E(e->data->e_event, nua_i_notify);
+  TEST_1(tl_find(e->data->e_tags, nutag_substate));
+  TEST(tl_find(e->data->e_tags, nutag_substate)->t_value, nua_substate_terminated);
+  TEST_1(sip = sip_object(e->data->e_msg));
+  TEST_1(sip->sip_event); TEST_S(sip->sip_event->o_type, "presence");
+  TEST_1(sip->sip_content_type);
+  TEST_S(sip->sip_content_type->c_type, "application/pidf+xml");
+  TEST_1(sip->sip_subscription_state);
+  TEST_S(sip->sip_subscription_state->ss_substate, "terminated");
+
+  TEST_1(e = es); TEST_E(e->data->e_event, nua_r_subscribe);
+  TEST_1(e->data->e_status == 202 || e->data->e_status == 200);
+  TEST_1(tl_find(e->data->e_tags, nutag_substate));
+
+  if (es == a->events->head)
+    TEST(tl_find(e->data->e_tags, nutag_substate)->t_value, nua_substate_embryonic);
+  else
+    TEST(tl_find(e->data->e_tags, nutag_substate)->t_value, nua_substate_terminated);
+  TEST_1(sip = sip_object(e->data->e_msg));
+  TEST_1(sip->sip_expires);
+  TEST_1(sip->sip_expires->ex_delta == 0);
+
+  free_events_in_list(ctx, a->events);
+
+  /* Server events: nua_i_subscribe, nua_r_notify */
+  TEST_1(e = b->events->head);
+  TEST_E(e->data->e_event, nua_i_subscribe);
+  TEST_E(e->data->e_status, 100);
+  TEST_1(sip = sip_object(e->data->e_msg));
+
+  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_r_notify);
+  r_tags = e->data->e_tags;
+  TEST_1(tl_find(r_tags, nutag_substate));
+  TEST(tl_find(r_tags, nutag_substate)->t_value, nua_substate_terminated);
+
+  free_events_in_list(ctx, b->events);
+
+  if (print_headings)
+    printf("TEST NUA-11.6.1: PASSED\n");
+
+  nua_handle_destroy(a_call->nh), a_call->nh = NULL;
+  nua_handle_destroy(b_call->nh), b_call->nh = NULL;
+
+
+  if (print_headings)
+    printf("TEST NUA-11.6.2: event fetch, NOTIFY comes before 202\n");
+
+  TEST_1(a_call->nh = nua_handle(a->nua, a_call, SIPTAG_TO(b->to), TAG_END()));
+
+/* Fetch 2:
+
+   A			 B
+   |                     |
+   |------SUBSCRIBE----->|
+   |     Expires: 0      |
+   |<-------NOTIFY-------|
+   | S-State: terminated |
+   |-------200 OK------->|
+   |                     |
+   |<---------202--------|
+   |                     |
+*/
+
+  SUBSCRIBE(a, a_call, a_call->nh, NUTAG_URL(b->contact->m_url),
+	    SIPTAG_EVENT_STR("presence"),
+	    SIPTAG_EXPIRES_STR("0"),
+	    SIPTAG_ACCEPT_STR("application/xpidf, application/pidf+xml"),
+	    TAG_END());
+
+  run_ab_until(ctx, -1, save_until_notified_and_responded,
+	       -1, notify_and_accept);
+
+  /* Client events:
+     nua_subscribe(), nua_i_notify/nua_r_subscribe/nua_i_notify
+  */
+  for (en1 = en2 = es = NULL, e = a->events->head; e; e = e->next) {
+    if (en1 == NULL && e->data->e_event == nua_i_notify)
+      en1 = e;
+    else if (en2 == NULL && e->data->e_event == nua_i_notify)
+      en2 = e;
+    else if (e->data->e_event == nua_r_subscribe)
+      es = e;
+    else
+      TEST_1(!e);
+  }
+
+  TEST_1(e = en1);
+  TEST_E(e->data->e_event, nua_i_notify);
+  TEST_1(tl_find(e->data->e_tags, nutag_substate));
+  TEST(tl_find(e->data->e_tags, nutag_substate)->t_value, nua_substate_terminated);
+  TEST_1(sip = sip_object(e->data->e_msg));
+  TEST_1(sip->sip_event); TEST_S(sip->sip_event->o_type, "presence");
+  TEST_1(sip->sip_content_type);
+  TEST_S(sip->sip_content_type->c_type, "application/pidf+xml");
+  TEST_1(sip->sip_subscription_state);
+  TEST_S(sip->sip_subscription_state->ss_substate, "terminated");
+
+  TEST_1(e = es); TEST_E(e->data->e_event, nua_r_subscribe);
+  TEST_1(e->data->e_status == 202 || e->data->e_status == 200);
+  TEST_1(tl_find(e->data->e_tags, nutag_substate));
+
+  if (es == a->events->head)
+    TEST(tl_find(e->data->e_tags, nutag_substate)->t_value, nua_substate_embryonic);
+  else
+    TEST(tl_find(e->data->e_tags, nutag_substate)->t_value, nua_substate_terminated);
+  TEST_1(sip = sip_object(e->data->e_msg));
+  TEST_1(sip->sip_expires);
+  TEST_1(sip->sip_expires->ex_delta == 0);
+
+  free_events_in_list(ctx, a->events);
+
+  /* Server events: nua_i_subscribe, nua_r_notify */
+  TEST_1(e = b->events->head);
+  TEST_E(e->data->e_event, nua_i_subscribe);
+  TEST_E(e->data->e_status, 100);
+  TEST_1(sip = sip_object(e->data->e_msg));
+
+  TEST_1(e = e->next); TEST_E(e->data->e_event, nua_r_notify);
+  r_tags = e->data->e_tags;
+  TEST_1(tl_find(r_tags, nutag_substate));
+  TEST(tl_find(r_tags, nutag_substate)->t_value, nua_substate_terminated);
+
+  free_events_in_list(ctx, b->events);
+
+  if (print_headings)
+    printf("TEST NUA-11.6.2: PASSED\n");
+
+  nua_handle_destroy(a_call->nh), a_call->nh = NULL;
+  nua_handle_destroy(b_call->nh), b_call->nh = NULL;
+
+  END();
+}
+
+/* ---------------------------------------------------------------------- */
 /* Unsolicited NOTIFY */
 
 int accept_notify(CONDITION_PARAMS);
@@ -1830,6 +2091,7 @@
     || test_message(ctx)
     || test_publish(ctx)
     || test_subscribe_notify(ctx)
+    || test_event_fetch(ctx)
     || test_subscribe_notify_graceful(ctx)
     || test_newsub_notify(ctx)
     || test_subscription_timeout(ctx)

Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_sip_events.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_sip_events.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/nua/test_sip_events.c	Tue May 13 23:37:33 2008
@@ -358,6 +358,73 @@
     printf("TEST NUA-12.5: PASSED\n");
 
   /* ---------------------------------------------------------------------- */
+/* Fetch event, SUBSCRIBE with expires: 0
+
+   A			B
+   |                    |
+   |------SUBSCRIBE---->|
+   |<--------202--------|
+   |<------NOTIFY-------|
+   |-------200 OK------>|
+   |                    |
+*/
+  if (print_headings)
+    printf("TEST NUA-12.5.1: event fetch\n");
+
+  SUBSCRIBE(a, a_call, a_call->nh, NUTAG_URL(b->contact->m_url),
+	    SIPTAG_EVENT_STR("presence"),
+	    SIPTAG_ACCEPT_STR("application/pidf+xml"),
+	    SIPTAG_EXPIRES_STR("0"),
+	    TAG_END());
+
+  run_ab_until(ctx, -1, save_until_notified_and_responded,
+	       -1, save_until_subscription);
+
+  /* Client events:
+     nua_subscribe(), nua_i_notify/nua_r_subscribe
+  */
+  TEST_1(en = event_by_type(a->events->head, nua_i_notify));
+  TEST_1(es = event_by_type(a->events->head, nua_r_subscribe));
+
+  e = es; TEST_E(e->data->e_event, nua_r_subscribe);
+  TEST_1(t = tl_find(e->data->e_tags, nutag_substate));
+  TEST_1(t->t_value == nua_substate_pending ||
+	 t->t_value == nua_substate_terminated ||
+	 t->t_value == nua_substate_embryonic);
+
+  e = en; TEST_E(e->data->e_event, nua_i_notify);
+  TEST_1(sip = sip_object(e->data->e_msg));
+  n_tags = e->data->e_tags;
+
+  TEST_1(sip->sip_event); TEST_S(sip->sip_event->o_type, "presence");
+  TEST_1(sip->sip_content_type);
+  TEST_S(sip->sip_content_type->c_type, "application/pidf+xml");
+  TEST_1(sip->sip_payload && sip->sip_payload->pl_data);
+  TEST_1(sip->sip_subscription_state);
+  TEST_S(sip->sip_subscription_state->ss_substate, "terminated");
+  TEST_1(tl_find(n_tags, nutag_substate));
+  TEST(tl_find(n_tags, nutag_substate)->t_value,
+       nua_substate_terminated);
+  TEST_1(!en->next || !es->next);
+  free_events_in_list(ctx, a->events);
+
+  /*
+   Server events:
+   nua_i_subscription
+  */
+  TEST_1(e = b->events->head);
+  TEST_E(e->data->e_event, nua_i_subscription);
+  TEST(tl_gets(e->data->e_tags, NEATAG_SUB_REF(sub), TAG_END()), 1);
+  TEST_1(sub);
+  TEST_1(!e->next);
+
+  free_events_in_list(ctx, b->events);
+
+  if (print_headings)
+    printf("TEST NUA-12.4.1: PASSED\n");
+
+
+  /* ---------------------------------------------------------------------- */
 /* 2nd SUBSCRIBE with event id
 
    A			B
@@ -370,7 +437,7 @@
 */
   /* XXX - we should do this before unsubscribing first one */
   if (print_headings)
-    printf("TEST NUA-12.4: establishing 2nd subscription\n");
+    printf("TEST NUA-12.4.2: establishing 2nd subscription\n");
 
    NOTIFIER(b, b_call, b_call->nh,
 	    SIPTAG_EVENT_STR("presence"),

Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/soa/soa_static.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/soa/soa_static.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/soa/soa_static.c	Tue May 13 23:37:33 2008
@@ -731,10 +731,11 @@
   o_media = su_zalloc(home, (Ns + 1) * (sizeof *o_media));
   u_media = su_zalloc(home, (Nu + 1) * (sizeof *u_media));
   r_media = su_zalloc(home, (Nr + 1) * (sizeof *r_media));
+  if (!s_media || !o_media || !u_media || !r_media)
+    return -1;
 
   um = sdp_media_dup_all(home, user->sdp_media, session); 
-
-  if (!s_media || !u_media || !r_media || !um)
+  if (!um && user->sdp_media)
     return -1;
 
   u2s = su_alloc(home, (Nu + 1) * sizeof(*u2s));
@@ -1021,7 +1022,16 @@
 
     for (j = 0, um = user->sdp_media; j != s2u[i]; um = um->m_next, j++)
       assert(um);
-    assert(um);
+    if (um == NULL) {
+      if (dryrun)
+	return 1;
+      else
+	retval = 1;
+      sm->m_rejected = 1;
+      sm->m_mode = sdp_inactive;
+      sm->m_port = 0;
+      continue;
+    }
 
     send_mode = um->m_mode & sdp_sendonly;
     if (rm)
@@ -1049,10 +1059,11 @@
       }
     }
 
-    if (sm->m_mode != (unsigned)(recv_mode | send_mode))
-      retval = 1;
-
-    if (!dryrun) {
+    if (sm->m_mode != (unsigned)(recv_mode | send_mode)) {
+      if (dryrun)
+	return 1;
+      else
+	retval = 1;
       sm->m_mode = recv_mode | send_mode;
     }
   }
@@ -1161,7 +1172,8 @@
       *local0 = *local, local = local0;
     SU_DEBUG_7(("soa_static(%p, %s): %s\n", (void *)ss, by, 
 		"upgrade with local description"));
-    soa_sdp_upgrade(ss, tmphome, local, user, NULL, &u2s, &s2u);
+    if (soa_sdp_upgrade(ss, tmphome, local, user, NULL, &u2s, &s2u) < 0)
+      goto internal_error;
     break;
   case generate_answer:
     /* Upgrade local SDP based on remote SDP */
@@ -1173,7 +1185,8 @@
 	*local0 = *local, local = local0;
       SU_DEBUG_7(("soa_static(%p, %s): %s\n", (void *)ss, by,
 		  "upgrade with remote description"));
-      soa_sdp_upgrade(ss, tmphome, local, user, remote, &u2s, &s2u);
+      if (soa_sdp_upgrade(ss, tmphome, local, user, remote, &u2s, &s2u) < 0)
+	goto internal_error;
     }
     break;
   case process_answer:

Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/soa/test_soa.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/soa/test_soa.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/soa/test_soa.c	Tue May 13 23:37:33 2008
@@ -1311,6 +1311,159 @@
 }
 
 
+int test_media_removal(struct context *ctx)
+{
+  BEGIN();
+  int n;
+
+  soa_session_t *a, *b;
+
+  char const *offer = NONE, *answer = NONE;
+  isize_t offerlen = (isize_t)-1, answerlen = (isize_t)-1;
+
+  sdp_session_t const *a_sdp, *b_sdp;
+  sdp_media_t const *m;
+
+  char const a_caps[] =
+    "v=0\r\n"
+    "o=left 219498671 2 IN IP4 127.0.0.2\r\n"
+    "c=IN IP4 127.0.0.2\r\n"
+    "m=audio 5008 RTP/AVP 0 8\r\n"
+    ;
+
+  char const b_caps[] =
+    "v=0\n"
+    "m=audio 5004 RTP/AVP 0 8\n"
+    "a=rtpmap:96 G7231/8000\n"
+    "a=rtpmap:97 G729/8000\n";
+
+  TEST_1(a = soa_create("static", ctx->root, ctx));
+  TEST_1(b = soa_create("static", ctx->root, ctx));
+
+  TEST(soa_set_user_sdp(a, 0, a_caps, strlen(a_caps)), 1);
+  TEST(soa_set_user_sdp(b, 0, b_caps, strlen(b_caps)), 1);
+
+  TEST_1(soa_set_params(b, SOATAG_RTP_MISMATCH(0),
+			SOATAG_ORDERED_USER(1),
+			TAG_END()));
+
+  n = soa_generate_offer(a, 1, test_completed); TEST(n, 0);
+  n = soa_get_local_sdp(a, NULL, &offer, &offerlen); TEST(n, 1);
+  TEST_1(offer != NULL && offer != NONE);
+  n = soa_set_remote_sdp(b, 0, offer, offerlen); TEST(n, 1);
+  n = soa_get_local_sdp(b, NULL, &answer, &answerlen); TEST(n, 0);
+  n = soa_generate_answer(b, test_completed); TEST(n, 0);
+  n = soa_get_local_sdp(b, &b_sdp, &answer, &answerlen); TEST(n, 1);
+  TEST_1(answer != NULL && answer != NONE);
+  n = soa_set_remote_sdp(a, 0, answer, -1); TEST(n, 1);
+  n = soa_process_answer(a, test_completed); TEST(n, 0);
+
+  TEST_1(soa_is_complete(b));
+  TEST(soa_activate(b, NULL), 0);
+
+  TEST_1(soa_is_complete(a));
+  TEST(soa_activate(a, NULL), 0);
+
+  TEST(soa_is_audio_active(a), SOA_ACTIVE_SENDRECV);
+  TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_SENDRECV);
+
+  /* ---------------------------------------------------------------------- */
+  /* Re-O/A: remove media stream */
+  TEST(soa_set_user_sdp(b, 0, "v=0", -1), 1);
+
+  n = soa_generate_offer(a, 1, test_completed); TEST(n, 0);
+  n = soa_get_local_sdp(a, &a_sdp, &offer, &offerlen); TEST(n, 1);
+  TEST_1(offer != NULL && offer != NONE);
+  n = soa_set_remote_sdp(b, 0, offer, offerlen); TEST(n, 1);
+  n = soa_generate_answer(b, test_completed); TEST(n, 0);
+  n = soa_get_local_sdp(b, &b_sdp, &answer, &answerlen); TEST(n, 1);
+  TEST_1(m = b_sdp->sdp_media); TEST_1(m->m_rejected);
+  TEST_1(answer != NULL && answer != NONE);
+  n = soa_set_remote_sdp(a, 0, answer, -1); TEST(n, 1);
+  n = soa_process_answer(a, test_completed); TEST(n, 0);
+  n = soa_get_local_sdp(a, &a_sdp, NULL, NULL); TEST(n, 1);
+  TEST_1(m = a_sdp->sdp_media); TEST_1(m->m_rejected);
+
+  TEST_1(soa_is_complete(b));
+  TEST(soa_activate(b, NULL), 0);
+
+  TEST_1(soa_is_complete(a));
+  TEST(soa_activate(a, NULL), 0);
+
+  TEST(soa_is_audio_active(a), SOA_ACTIVE_REJECTED);
+  TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_REJECTED);
+
+  TEST_VOID(soa_terminate(a, NULL));
+  TEST_VOID(soa_terminate(b, NULL));
+
+  TEST_VOID(soa_destroy(a));
+  TEST_VOID(soa_destroy(b));
+
+  /* ---------------------------------------------------------------------- */
+
+  TEST_1(a = soa_create("static", ctx->root, ctx));
+  TEST_1(b = soa_create("static", ctx->root, ctx));
+
+  TEST(soa_set_user_sdp(a, 0, a_caps, strlen(a_caps)), 1);
+  TEST(soa_set_user_sdp(b, 0, b_caps, strlen(b_caps)), 1);
+
+  n = soa_generate_offer(a, 1, test_completed); TEST(n, 0);
+  n = soa_get_local_sdp(a, NULL, &offer, &offerlen); TEST(n, 1);
+  TEST_1(offer != NULL && offer != NONE);
+  n = soa_set_remote_sdp(b, 0, offer, offerlen); TEST(n, 1);
+  n = soa_get_local_sdp(b, NULL, &answer, &answerlen); TEST(n, 0);
+  n = soa_generate_answer(b, test_completed); TEST(n, 0);
+  n = soa_get_local_sdp(b, &b_sdp, &answer, &answerlen); TEST(n, 1);
+  TEST_1(answer != NULL && answer != NONE);
+  n = soa_set_remote_sdp(a, 0, answer, -1); TEST(n, 1);
+  n = soa_process_answer(a, test_completed); TEST(n, 0);
+
+  TEST_1(soa_is_complete(b));
+  TEST(soa_activate(b, NULL), 0);
+
+  TEST_1(soa_is_complete(a));
+  TEST(soa_activate(a, NULL), 0);
+
+  TEST(soa_is_audio_active(a), SOA_ACTIVE_SENDRECV);
+  TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_SENDRECV);
+
+  /* ---------------------------------------------------------------------- */
+  /* Re-O/A: offerer remove media stream from user sdp */
+  TEST(soa_set_user_sdp(a, 0, "v=0", -1), 1);
+
+  n = soa_generate_offer(a, 1, test_completed); TEST(n, 0);
+  n = soa_get_local_sdp(a, &a_sdp, &offer, &offerlen); TEST(n, 1);
+  TEST_1(m = a_sdp->sdp_media); TEST_1(m->m_rejected);
+  TEST_1(offer != NULL && offer != NONE);
+  n = soa_set_remote_sdp(b, 0, offer, offerlen); TEST(n, 1);
+  n = soa_generate_answer(b, test_completed); TEST(n, 0);
+  n = soa_get_local_sdp(b, &b_sdp, &answer, &answerlen); TEST(n, 1);
+  TEST_1(m = b_sdp->sdp_media); TEST_1(m->m_rejected);
+  TEST_1(answer != NULL && answer != NONE);
+  n = soa_set_remote_sdp(a, 0, answer, -1); TEST(n, 1);
+  n = soa_process_answer(a, test_completed); TEST(n, 0);
+  n = soa_get_local_sdp(a, &a_sdp, NULL, NULL); TEST(n, 1);
+  TEST_1(m = a_sdp->sdp_media); TEST_1(m->m_rejected);
+
+  TEST_1(soa_is_complete(b));
+  TEST(soa_activate(b, NULL), 0);
+
+  TEST_1(soa_is_complete(a));
+  TEST(soa_activate(a, NULL), 0);
+
+  TEST(soa_is_audio_active(a), SOA_ACTIVE_REJECTED);
+  TEST(soa_is_remote_audio_active(a), SOA_ACTIVE_REJECTED);
+
+  TEST_VOID(soa_terminate(a, NULL));
+  TEST_VOID(soa_terminate(b, NULL));
+
+  TEST_VOID(soa_destroy(a));
+  TEST_VOID(soa_destroy(b));
+
+  END();
+}
+
+
 int test_media_reject(struct context *ctx)
 {
   BEGIN();
@@ -1482,7 +1635,6 @@
   n = soa_get_local_sdp(b, &b_sdp, &offer, &offerlen); TEST(n, 1);
   TEST_1(offer != NULL && offer != NONE);
   n = soa_set_remote_sdp(a, 0, offer, offerlen); TEST(n, 1);
-  printf("offer 2:\n%s", offer);
   TEST_1(soa_set_params(a, SOATAG_RTP_MISMATCH(0),
 			SOATAG_USER_SDP_STR(a_caps2),
 			TAG_END()) > 0);
@@ -1490,7 +1642,6 @@
   n = soa_generate_answer(a, test_completed); TEST(n, 0);
   n = soa_get_local_sdp(a, &a_sdp, &answer, &answerlen); TEST(n, 1);
   TEST_1(answer != NULL && answer != NONE);
-  printf("answer 2:\n%s", answer);
   n = soa_set_remote_sdp(b, 0, answer, -1); TEST(n, 1);
   n = soa_process_answer(b, test_completed); TEST(n, 0);
   n = soa_get_local_sdp(b, &b_sdp, NULL, NULL); TEST(n, 1);
@@ -1730,6 +1881,7 @@
     retval |= test_static_offer_answer(ctx); SINGLE_FAILURE_CHECK();
     retval |= test_codec_selection(ctx); SINGLE_FAILURE_CHECK();
     retval |= test_media_replace(ctx); SINGLE_FAILURE_CHECK();
+    retval |= test_media_removal(ctx); SINGLE_FAILURE_CHECK();
     retval |= test_media_reject(ctx); SINGLE_FAILURE_CHECK();
 
     retval |= test_asynch_offer_answer(ctx); SINGLE_FAILURE_CHECK();

Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/su/su_log.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/su/su_log.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/su/su_log.c	Tue May 13 23:37:33 2008
@@ -240,11 +240,13 @@
 {
   if (log == NULL)
     log = su_log_default;
-  if (log->log_init > 1)
+  if (log->log_init == 1)
     return;
+
   if (log->log_env && getenv(log->log_env)) {
     su_log_init(log);
-  } else {
+  }
+  else {
     log->log_level = level;
     log->log_init = 2;
 

Modified: freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/tport/tport_tls.c
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/tport/tport_tls.c	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/sofia-sip/libsofia-sip-ua/tport/tport_tls.c	Tue May 13 23:37:33 2008
@@ -299,7 +299,9 @@
     BIO_free(tls->bio_con);
 
   for (k = 0; k < TLS_MAX_HOSTS; k++)
-    free(tls->hosts[k]), tls->hosts[k] = NULL;
+    if (tls->hosts[k]) {
+      free(tls->hosts[k]), tls->hosts[k] = NULL;
+    }
 
   free(tls);
 }

Modified: freeswitch/branches/lukedashjr/syslibs/libs/voipcodecs/src/Makefile.am
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/voipcodecs/src/Makefile.am	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/voipcodecs/src/Makefile.am	Tue May 13 23:37:33 2008
@@ -27,6 +27,7 @@
 lib_LTLIBRARIES = libvoipcodecs.la
 
 libvoipcodecs_la_SOURCES = bitstream.c \
+                           bit_operations.c \
                            g711.c \
                            g722_encode.c \
                            g722_decode.c \

Modified: freeswitch/branches/lukedashjr/syslibs/libs/win32/apr-util/libaprutil.2008.vcproj
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/win32/apr-util/libaprutil.2008.vcproj	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/win32/apr-util/libaprutil.2008.vcproj	Tue May 13 23:37:33 2008
@@ -229,6 +229,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -238,6 +239,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -251,6 +253,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -260,6 +263,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -273,6 +277,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -282,6 +287,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -295,6 +301,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -304,6 +311,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -317,6 +325,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -326,6 +335,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -339,6 +349,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -348,6 +359,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -361,6 +373,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -370,6 +383,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -383,6 +397,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -392,6 +407,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -405,6 +421,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -414,6 +431,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -427,6 +445,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -436,6 +455,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -449,6 +469,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -458,6 +479,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -471,6 +493,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -480,6 +503,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -493,6 +517,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -502,6 +527,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -519,6 +545,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -528,6 +555,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -541,6 +569,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -550,6 +579,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -563,6 +593,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -572,6 +603,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -633,6 +665,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -642,6 +675,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -655,6 +689,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -664,6 +699,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -677,6 +713,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -686,6 +723,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -699,6 +737,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -708,6 +747,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -725,6 +765,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -734,6 +775,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -747,6 +789,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -756,6 +799,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -769,6 +813,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -778,6 +823,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -791,6 +837,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -800,6 +847,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -817,6 +865,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -826,6 +875,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -843,6 +893,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -852,6 +903,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -869,6 +921,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -878,6 +931,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -891,6 +945,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -900,6 +955,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -913,6 +969,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -922,6 +979,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -939,6 +997,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -948,6 +1007,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -983,6 +1043,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -992,6 +1053,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1005,6 +1067,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1014,6 +1077,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1031,6 +1095,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1040,6 +1105,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1053,6 +1119,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1062,6 +1129,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1075,6 +1143,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1084,6 +1153,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1097,6 +1167,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1106,6 +1177,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1117,14 +1189,62 @@
 				<File
 					RelativePath="..\..\apr-util\dbm\sdbm\sdbm_pair.h"
 					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						ExcludedFromBuild="true"
+						>
+						<Tool
+							Name="VCCustomBuildTool"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						ExcludedFromBuild="true"
+						>
+						<Tool
+							Name="VCCustomBuildTool"
+						/>
+					</FileConfiguration>
 				</File>
 				<File
 					RelativePath="..\..\apr-util\dbm\sdbm\sdbm_private.h"
 					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						ExcludedFromBuild="true"
+						>
+						<Tool
+							Name="VCCustomBuildTool"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						ExcludedFromBuild="true"
+						>
+						<Tool
+							Name="VCCustomBuildTool"
+						/>
+					</FileConfiguration>
 				</File>
 				<File
 					RelativePath="..\..\apr-util\dbm\sdbm\sdbm_tune.h"
 					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						ExcludedFromBuild="true"
+						>
+						<Tool
+							Name="VCCustomBuildTool"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						ExcludedFromBuild="true"
+						>
+						<Tool
+							Name="VCCustomBuildTool"
+						/>
+					</FileConfiguration>
 				</File>
 			</Filter>
 			<Filter
@@ -1135,6 +1255,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1144,6 +1265,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1161,6 +1283,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1170,6 +1293,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1187,6 +1311,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1196,6 +1321,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"

Modified: freeswitch/branches/lukedashjr/syslibs/libs/win32/apr-util/libaprutil.vcproj
==============================================================================
--- freeswitch/branches/lukedashjr/syslibs/libs/win32/apr-util/libaprutil.vcproj	(original)
+++ freeswitch/branches/lukedashjr/syslibs/libs/win32/apr-util/libaprutil.vcproj	Tue May 13 23:37:33 2008
@@ -230,6 +230,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -239,6 +240,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -252,6 +254,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -261,6 +264,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -274,6 +278,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -283,6 +288,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -296,6 +302,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -305,6 +312,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -318,6 +326,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -327,6 +336,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -340,6 +350,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -349,6 +360,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -362,6 +374,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -371,6 +384,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -384,6 +398,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -393,6 +408,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -406,6 +422,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -415,6 +432,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -428,6 +446,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -437,6 +456,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -450,6 +470,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -459,6 +480,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -472,6 +494,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -481,6 +504,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -494,6 +518,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -503,6 +528,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -520,6 +546,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -529,6 +556,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -542,6 +570,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -551,6 +580,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -564,6 +594,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -573,6 +604,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -634,6 +666,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -643,6 +676,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -656,6 +690,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -665,6 +700,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -678,6 +714,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -687,6 +724,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -700,6 +738,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -709,6 +748,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -726,6 +766,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -735,6 +776,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -748,6 +790,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -757,6 +800,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -770,6 +814,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -779,6 +824,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -792,6 +838,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -801,6 +848,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -818,6 +866,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -827,6 +876,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -844,6 +894,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -853,6 +904,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -870,6 +922,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -879,6 +932,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -892,6 +946,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -901,6 +956,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -914,6 +970,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -923,6 +980,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -940,6 +998,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -949,6 +1008,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -984,6 +1044,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -993,6 +1054,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1006,6 +1068,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1015,6 +1078,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1032,6 +1096,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1041,6 +1106,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1054,6 +1120,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1063,6 +1130,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1076,6 +1144,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1085,6 +1154,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1098,6 +1168,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1107,6 +1178,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1118,14 +1190,62 @@
 				<File
 					RelativePath="..\..\apr-util\dbm\sdbm\sdbm_pair.h"
 					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						ExcludedFromBuild="true"
+						>
+						<Tool
+							Name="VCCustomBuildTool"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						ExcludedFromBuild="true"
+						>
+						<Tool
+							Name="VCCustomBuildTool"
+						/>
+					</FileConfiguration>
 				</File>
 				<File
 					RelativePath="..\..\apr-util\dbm\sdbm\sdbm_private.h"
 					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						ExcludedFromBuild="true"
+						>
+						<Tool
+							Name="VCCustomBuildTool"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						ExcludedFromBuild="true"
+						>
+						<Tool
+							Name="VCCustomBuildTool"
+						/>
+					</FileConfiguration>
 				</File>
 				<File
 					RelativePath="..\..\apr-util\dbm\sdbm\sdbm_tune.h"
 					>
+					<FileConfiguration
+						Name="Debug|Win32"
+						ExcludedFromBuild="true"
+						>
+						<Tool
+							Name="VCCustomBuildTool"
+						/>
+					</FileConfiguration>
+					<FileConfiguration
+						Name="Release|Win32"
+						ExcludedFromBuild="true"
+						>
+						<Tool
+							Name="VCCustomBuildTool"
+						/>
+					</FileConfiguration>
 				</File>
 			</Filter>
 			<Filter
@@ -1136,6 +1256,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1145,6 +1266,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1162,6 +1284,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1171,6 +1294,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1188,6 +1312,7 @@
 					>
 					<FileConfiguration
 						Name="Debug|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"
@@ -1197,6 +1322,7 @@
 					</FileConfiguration>
 					<FileConfiguration
 						Name="Release|Win32"
+						ExcludedFromBuild="true"
 						>
 						<Tool
 							Name="VCCLCompilerTool"



More information about the Freeswitch-svn mailing list