[commit] r2613 - in freeswitch/branches/james: . libs/codec/lpc10 libs/win32/apr libs/win32/apr-iconv libs/win32/apr-util src src/include src/mod/applications/mod_commands src/mod/applications/mod_conference src/mod/applications/mod_park src/mod/applications/mod_playback src/mod/asr_tts/mod_cepstral src/mod/codecs/mod_g722 src/mod/codecs/mod_g723_1 src/mod/codecs/mod_g729 src/mod/endpoints/mod_dingaling src/mod/endpoints/mod_exosip src/mod/endpoints/mod_sofia src/mod/endpoints/mod_wanpipe s
Author: james Date: Sun Sep 10 07:09:34 2006 New Revision: 2613 Added: freeswitch/branches/james/src/mod/applications/mod_park/ - copied from r2606, /freeswitch/trunk/src/mod/applications/mod_park/ freeswitch/branches/james/src/mod/applications/mod_park/mod_park.c - copied unchanged from r2606, /freeswitch/trunk/src/mod/applications/mod_park/mod_park.c freeswitch/branches/james/src/mod/applications/mod_park/mod_park.vcproj - copied unchanged from r2606, /freeswitch/trunk/src/mod/applications/mod_park/mod_park.vcproj freeswitch/branches/james/src/mod/languages/mod_php/ - copied from r2606, /freeswitch/trunk/src/mod/languages/mod_php/ freeswitch/branches/james/src/mod/languages/mod_php/Makefile - copied unchanged from r2606, /freeswitch/trunk/src/mod/languages/mod_php/Makefile freeswitch/branches/james/src/mod/languages/mod_php/apptest.php - copied unchanged from r2606, /freeswitch/trunk/src/mod/languages/mod_php/apptest.php freeswitch/branches/james/src/mod/languages/mod_php/fix.diff - copied unchanged from r2606, /freeswitch/trunk/src/mod/languages/mod_php/fix.diff freeswitch/branches/james/src/mod/languages/mod_php/freeswitch.php - copied unchanged from r2606, /freeswitch/trunk/src/mod/languages/mod_php/freeswitch.php freeswitch/branches/james/src/mod/languages/mod_php/mod_php.c - copied unchanged from r2606, /freeswitch/trunk/src/mod/languages/mod_php/mod_php.c freeswitch/branches/james/src/mod/languages/mod_php/php_freeswitch.h - copied unchanged from r2606, /freeswitch/trunk/src/mod/languages/mod_php/php_freeswitch.h freeswitch/branches/james/src/mod/languages/mod_php/switch_swig.c - copied unchanged from r2606, /freeswitch/trunk/src/mod/languages/mod_php/switch_swig.c freeswitch/branches/james/src/mod/languages/mod_php/switch_swig.i - copied unchanged from r2606, /freeswitch/trunk/src/mod/languages/mod_php/switch_swig.i freeswitch/branches/james/src/mod/languages/mod_php/switch_swig_wrap.c - copied unchanged from r2606, /freeswitch/trunk/src/mod/languages/mod_php/switch_swig_wrap.c freeswitch/branches/james/src/mod/languages/mod_php/test.php - copied unchanged from r2606, /freeswitch/trunk/src/mod/languages/mod_php/test.php Modified: freeswitch/branches/james/Freeswitch.sln freeswitch/branches/james/Makefile.in freeswitch/branches/james/libs/codec/lpc10/Makefile.am freeswitch/branches/james/libs/win32/apr-iconv/libapriconv.vcproj freeswitch/branches/james/libs/win32/apr-util/libaprutil.vcproj freeswitch/branches/james/libs/win32/apr/libapr.vcproj freeswitch/branches/james/src/include/switch.h freeswitch/branches/james/src/include/switch_apr.h freeswitch/branches/james/src/include/switch_bitpack.h freeswitch/branches/james/src/include/switch_buffer.h freeswitch/branches/james/src/include/switch_caller.h freeswitch/branches/james/src/include/switch_channel.h freeswitch/branches/james/src/include/switch_config.h freeswitch/branches/james/src/include/switch_console.h freeswitch/branches/james/src/include/switch_core.h freeswitch/branches/james/src/include/switch_event.h freeswitch/branches/james/src/include/switch_frame.h freeswitch/branches/james/src/include/switch_ivr.h freeswitch/branches/james/src/include/switch_loadable_module.h freeswitch/branches/james/src/include/switch_log.h freeswitch/branches/james/src/include/switch_module_interfaces.h freeswitch/branches/james/src/include/switch_platform.h freeswitch/branches/james/src/include/switch_resample.h freeswitch/branches/james/src/include/switch_rtp.h freeswitch/branches/james/src/include/switch_sqlite.h freeswitch/branches/james/src/include/switch_stun.h freeswitch/branches/james/src/include/switch_types.h freeswitch/branches/james/src/include/switch_utils.h freeswitch/branches/james/src/include/switch_xml.h freeswitch/branches/james/src/mod/applications/mod_commands/mod_commands.c freeswitch/branches/james/src/mod/applications/mod_conference/mod_conference.c freeswitch/branches/james/src/mod/applications/mod_playback/mod_playback.c freeswitch/branches/james/src/mod/asr_tts/mod_cepstral/mod_cepstral.c freeswitch/branches/james/src/mod/codecs/mod_g722/mod_g722.c freeswitch/branches/james/src/mod/codecs/mod_g723_1/mod_g723_1.c freeswitch/branches/james/src/mod/codecs/mod_g729/mod_g729.c freeswitch/branches/james/src/mod/codecs/mod_g729/mod_g729.vcproj freeswitch/branches/james/src/mod/endpoints/mod_dingaling/mod_dingaling.c freeswitch/branches/james/src/mod/endpoints/mod_exosip/mod_exosip.c freeswitch/branches/james/src/mod/endpoints/mod_sofia/mod_sofia.c freeswitch/branches/james/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c freeswitch/branches/james/src/mod/event_handlers/mod_event_socket/mod_event_socket.c freeswitch/branches/james/src/mod/languages/mod_perl/fs_perl.pm freeswitch/branches/james/src/mod/languages/mod_perl/switch_swig.c freeswitch/branches/james/src/mod/languages/mod_perl/switch_swig_wrap.c freeswitch/branches/james/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c freeswitch/branches/james/src/switch_buffer.c freeswitch/branches/james/src/switch_channel.c freeswitch/branches/james/src/switch_console.c freeswitch/branches/james/src/switch_core.c freeswitch/branches/james/src/switch_event.c freeswitch/branches/james/src/switch_ivr.c freeswitch/branches/james/src/switch_loadable_module.c Log: Update to trunk. Modified: freeswitch/branches/james/Freeswitch.sln ============================================================================== --- freeswitch/branches/james/Freeswitch.sln (original) +++ freeswitch/branches/james/Freeswitch.sln Sun Sep 10 07:09:34 2006 @@ -3,21 +3,21 @@ # Visual Studio 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FreeSwitchConsole", "w32\Console\FreeSwitchConsole.vcproj", "{1AF3A893-F7BE-43DD-B697-8AB2397C0D67}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {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}") = "FreeSwitchCoreLib", "w32\Library\FreeSwitchCore.vcproj", "{202D7A4E-760D-4D0E-AFA1-D7459CED30FF}" ProjectSection(ProjectDependencies) = postProject - {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {EEF031CB-FED8-451E-A471-91EC8D4F6750} = {EEF031CB-FED8-451E-A471-91EC8D4F6750} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} - {8D04B550-D240-4A44-8A18-35DA3F7038D9} = {8D04B550-D240-4A44-8A18-35DA3F7038D9} {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761} = {50AD0E28-B8D7-4FCC-8FC3-599F6AC69761} + {8D04B550-D240-4A44-8A18-35DA3F7038D9} = {8D04B550-D240-4A44-8A18-35DA3F7038D9} + {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 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_g729", "src\mod\codecs\mod_g729\mod_g729.vcproj", "{1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}" @@ -27,54 +27,54 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_gsm", "src\mod\codecs\mod_gsm\mod_gsm.vcproj", "{4926323F-4EA8-4B7D-A3D3-65488725988F}" ProjectSection(ProjectDependencies) = postProject - {8FD2E297-4096-47E5-9258-C48FF1841523} = {8FD2E297-4096-47E5-9258-C48FF1841523} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {8FD2E297-4096-47E5-9258-C48FF1841523} = {8FD2E297-4096-47E5-9258-C48FF1841523} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_xmpp_event", "src\mod\event_handlers\mod_xmpp_event\mod_xmpp_event.vcproj", "{F10BE67C-A8FF-4CB2-AF29-D46D2590DC59}" ProjectSection(ProjectDependencies) = postProject - {E727E8F6-935D-46FE-8B0E-37834748A0E3} = {E727E8F6-935D-46FE-8B0E-37834748A0E3} - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {E727E8F6-935D-46FE-8B0E-37834748A0E3} = {E727E8F6-935D-46FE-8B0E-37834748A0E3} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_sndfile", "src\mod\formats\mod_sndfile\mod_sndfile.vcproj", "{AFAC0568-7548-42D5-9F6A-8D3400A1E4F6}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {3D0370CA-BED2-4657-A475-32375CBCB6E4} = {3D0370CA-BED2-4657-A475-32375CBCB6E4} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {3D0370CA-BED2-4657-A475-32375CBCB6E4} = {3D0370CA-BED2-4657-A475-32375CBCB6E4} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_bridgecall", "src\mod\applications\mod_bridgecall\mod_bridgecall.vcproj", "{E1794405-29D4-466D-9BE3-DD2344C2A663}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {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}") = "mod_event_test", "src\mod\event_handlers\mod_event_test\mod_event_test.vcproj", "{3A2A7795-C216-4FFF-B8EF-4D17A84BACCC}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {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}") = "mod_exosip", "src\mod\endpoints\mod_exosip\mod_exosip.vcproj", "{45DF84ED-D24A-4FF6-B5B0-0A9A5FDB9552}" ProjectSection(ProjectDependencies) = postProject - {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} - {44F46B7E-0E51-4304-9735-330DFBAB41E5} = {44F46B7E-0E51-4304-9735-330DFBAB41E5} - {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} - {4EA67539-9EE9-4065-BD39-87E517FD8262} = {4EA67539-9EE9-4065-BD39-87E517FD8262} {85255507-5D16-4218-85E2-F683BB2F04DA} = {85255507-5D16-4218-85E2-F683BB2F04DA} + {4EA67539-9EE9-4065-BD39-87E517FD8262} = {4EA67539-9EE9-4065-BD39-87E517FD8262} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {44F46B7E-0E51-4304-9735-330DFBAB41E5} = {44F46B7E-0E51-4304-9735-330DFBAB41E5} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_g711", "src\mod\codecs\mod_g711\mod_g711.vcproj", "{B1FE4613-3F4B-4DAF-9714-2472BF8F56AE}" @@ -84,28 +84,28 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_iax", "src\mod\endpoints\mod_iax\mod_iax.vcproj", "{3A5B9131-F20C-4A85-9447-6C1610941CEE}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E} = {5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E} = {5CC054B7-6DAA-46BF-9A08-3B33B83E8D3E} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_playback", "src\mod\applications\mod_playback\mod_playback.vcproj", "{78100236-7CEA-4948-96CC-E8ED3160329C}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {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}") = "mod_PortAudio", "src\mod\endpoints\mod_portaudio\mod_PortAudio.vcproj", "{5FD31A25-5D83-4794-8BEE-904DAD84CE71}" ProjectSection(ProjectDependencies) = postProject - {C30D35E4-7FC6-4E97-9BE5-4BC077BE0D4B} = {C30D35E4-7FC6-4E97-9BE5-4BC077BE0D4B} - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {C30D35E4-7FC6-4E97-9BE5-4BC077BE0D4B} = {C30D35E4-7FC6-4E97-9BE5-4BC077BE0D4B} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_l16", "src\mod\codecs\mod_l16\mod_l16.vcproj", "{5844AFE1-AA3E-4BDB-A9EF-119AEF19DF88}" @@ -115,24 +115,24 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_softtimer", "src\mod\timers\mod_softtimer\mod_softtimer.vcproj", "{DCC13474-28DF-47CA-A8EB-72F8CE9A78C5}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {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}") = "mod_speex", "src\mod\codecs\mod_speex\mod_speex.vcproj", "{5580D60E-0F77-4716-9CD4-B8E5986FA375}" ProjectSection(ProjectDependencies) = postProject - {1C469CDD-A3AF-4A94-A592-B2CF12F2D918} = {1C469CDD-A3AF-4A94-A592-B2CF12F2D918} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {1C469CDD-A3AF-4A94-A592-B2CF12F2D918} = {1C469CDD-A3AF-4A94-A592-B2CF12F2D918} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_woomera", "src\mod\endpoints\mod_woomera\mod_woomera.vcproj", "{FE3540C5-3303-46E0-A69E-D92F775687F1}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {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}") = "Codecs", "Codecs", "{F881ADA2-2F1A-4046-9FEB-191D9422D781}" @@ -155,19 +155,19 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dialplan_xml", "src\mod\dialplans\mod_dialplan_xml\mod_dialplan_xml.vcproj", "{07113B25-D3AF-4E04-BA77-4CD1171F022C}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} - {8D04B550-D240-4A44-8A18-35DA3F7038D9} = {8D04B550-D240-4A44-8A18-35DA3F7038D9} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {8D04B550-D240-4A44-8A18-35DA3F7038D9} = {8D04B550-D240-4A44-8A18-35DA3F7038D9} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {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}") = "mod_ivrtest", "src\mod\applications\mod_ivrtest\mod_ivrtest.vcproj", "{419AA391-5F3F-4BFE-A869-9D154D62A792}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} EndProjectSection EndProject Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "FreeSwitchSetup", "w32\Setup\Setup.vdproj", "{B17FFBE6-A942-4056-8346-B624FB5D995B}" @@ -181,28 +181,28 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dialplan_directory", "src\mod\dialplans\mod_dialplan_directory\mod_dialplan_directory.vcproj", "{A27CCA23-1541-4337-81A4-F0A6413078A0}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {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}") = "mod_zeroconf", "src\mod\event_handlers\mod_zeroconf\mod_zeroconf.vcproj", "{C7705DC4-2088-493E-AF8D-65BC6D65C125}" ProjectSection(ProjectDependencies) = postProject - {0D826AF5-0506-4C50-BB8B-7DB019AC21AE} = {0D826AF5-0506-4C50-BB8B-7DB019AC21AE} - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {49C34584-B6DA-448F-83CF-27584DC9FC90} = {49C34584-B6DA-448F-83CF-27584DC9FC90} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {49C34584-B6DA-448F-83CF-27584DC9FC90} = {49C34584-B6DA-448F-83CF-27584DC9FC90} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE} = {0D826AF5-0506-4C50-BB8B-7DB019AC21AE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_event_multicast", "src\mod\event_handlers\mod_event_multicast\mod_event_multicast.vcproj", "{784113EF-44D9-4949-835D-7065D3C7AD08}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {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}") = "libteletone", "libs\libteletone\libteletone.vcproj", "{89385C74-5860-4174-9CAF-A39E7C48909C}" @@ -211,15 +211,15 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey", "src\mod\languages\mod_spidermonkey\mod_spidermonkey.vcproj", "{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}" ProjectSection(ProjectDependencies) = postProject - {204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D} - {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} - {89385C74-5860-4174-9CAF-A39E7C48909C} = {89385C74-5860-4174-9CAF-A39E7C48909C} - {76D0A759-9C07-42D4-90A9-82AE15462C95} = {76D0A759-9C07-42D4-90A9-82AE15462C95} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {76D0A759-9C07-42D4-90A9-82AE15462C95} = {76D0A759-9C07-42D4-90A9-82AE15462C95} + {89385C74-5860-4174-9CAF-A39E7C48909C} = {89385C74-5860-4174-9CAF-A39E7C48909C} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} + {204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D} EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ASR-TTS", "ASR-TTS", "{4CF6A6AC-07DE-4B9E-ABE1-7F98B64E0BB0}" @@ -241,35 +241,35 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_echo", "src\mod\applications\mod_echo\mod_echo.vcproj", "{0E2C6395-13B9-46E5-9264-8859D346018D}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {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}") = "mod_ilbc", "src\mod\codecs\mod_ilbc\mod_ilbc.vcproj", "{D3EC0AFF-76FC-4210-A825-9A17410660A3}" ProjectSection(ProjectDependencies) = postProject - {989BB874-7AF1-44CB-8E5C-CC8113D267E8} = {989BB874-7AF1-44CB-8E5C-CC8113D267E8} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {989BB874-7AF1-44CB-8E5C-CC8113D267E8} = {989BB874-7AF1-44CB-8E5C-CC8113D267E8} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dingaling", "src\mod\endpoints\mod_dingaling\mod_dingaling.vcproj", "{FFAA4C52-3A53-4F99-90C1-D59D1F0427F3}" ProjectSection(ProjectDependencies) = postProject - {E727E8F6-935D-46FE-8B0E-37834748A0E3} = {E727E8F6-935D-46FE-8B0E-37834748A0E3} - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} - {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} {1906D736-08BD-4EE1-924F-B536249B9A54} = {1906D736-08BD-4EE1-924F-B536249B9A54} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {E727E8F6-935D-46FE-8B0E-37834748A0E3} = {E727E8F6-935D-46FE-8B0E-37834748A0E3} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_commands", "src\mod\applications\mod_commands\mod_commands.vcproj", "{30A5B29C-983E-4580-9FD0-D647CCDCC7EB}" ProjectSection(ProjectDependencies) = postProject - {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} = {6EDFEFD5-3596-4FA9-8EBA-B331547B35A3} EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Loggers", "Loggers", "{A7AB4405-FDB7-4853-9FBB-1516B1C3D80A}" @@ -283,54 +283,54 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_xml_rpc", "src\mod\xml_int\mod_xml_rpc\mod_xml_rpc.vcproj", "{CBEC7225-0C21-4DA8-978E-1F158F8AD950}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {155844C3-EC5F-407F-97A4-A2DDADED9B2F} = {155844C3-EC5F-407F-97A4-A2DDADED9B2F} - {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} - {A3FE0076-B366-429D-A238-D7304DA7D3C1} = {A3FE0076-B366-429D-A238-D7304DA7D3C1} - {356EC96D-4C9F-47B5-9083-FC328B87BA94} = {356EC96D-4C9F-47B5-9083-FC328B87BA94} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {356EC96D-4C9F-47B5-9083-FC328B87BA94} = {356EC96D-4C9F-47B5-9083-FC328B87BA94} + {A3FE0076-B366-429D-A238-D7304DA7D3C1} = {A3FE0076-B366-429D-A238-D7304DA7D3C1} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {87EE9DA4-DE1E-4448-8324-183C98DCA588} = {87EE9DA4-DE1E-4448-8324-183C98DCA588} + {155844C3-EC5F-407F-97A4-A2DDADED9B2F} = {155844C3-EC5F-407F-97A4-A2DDADED9B2F} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_rss", "src\mod\applications\mod_rss\mod_rss.vcproj", "{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {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}") = "mod_conference", "src\mod\applications\mod_conference\mod_conference.vcproj", "{C24FB505-05D7-4319-8485-7540B44C8603}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {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}") = "mod_dptools", "src\mod\applications\mod_dptools\mod_dptools.vcproj", "{B5881A85-FE70-4F64-8607-2CAAE52669C6}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {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}") = "mod_event_socket", "src\mod\event_handlers\mod_event_socket\mod_event_socket.vcproj", "{05515420-16DE-4E63-BE73-85BE85BA5142}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {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}") = "mod_cdr", "src\mod\event_handlers\mod_cdr\mod_cdr.vcproj", "{3D1EED36-A510-4EDB-B4D9-4E0F4A5EC2A8}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {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}") = "_Libraries", "_Libraries", "{EB910B0D-F27D-4B62-B67B-DE834C99AC5B}" @@ -355,8 +355,8 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpcre", "libs\win32\pcre\libpcre.vcproj", "{8D04B550-D240-4A44-8A18-35DA3F7038D9}" ProjectSection(ProjectDependencies) = postProject - {1CED5987-A529-46DC-B30F-870D85FF9C94} = {1CED5987-A529-46DC-B30F-870D85FF9C94} {91695C7C-7AD1-4782-9727-508F82D9C577} = {91695C7C-7AD1-4782-9727-508F82D9C577} + {1CED5987-A529-46DC-B30F-870D85FF9C94} = {1CED5987-A529-46DC-B30F-870D85FF9C94} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpcre Generate pcre_chartables.c", "libs\win32\pcre\pcre_chartables.c.vcproj", "{1CED5987-A529-46DC-B30F-870D85FF9C94}" @@ -376,18 +376,18 @@ 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} - {5786D51D-1C6A-4BE1-8804-29954DB5258F} = {5786D51D-1C6A-4BE1-8804-29954DB5258F} {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} = {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} + {5786D51D-1C6A-4BE1-8804-29954DB5258F} = {5786D51D-1C6A-4BE1-8804-29954DB5258F} + {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 - {E969F3E0-1043-482A-AD49-787B8356BA92} = {E969F3E0-1043-482A-AD49-787B8356BA92} - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {5786D51D-1C6A-4BE1-8804-29954DB5258F} = {5786D51D-1C6A-4BE1-8804-29954DB5258F} {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} = {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} + {5786D51D-1C6A-4BE1-8804-29954DB5258F} = {5786D51D-1C6A-4BE1-8804-29954DB5258F} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + {E969F3E0-1043-482A-AD49-787B8356BA92} = {E969F3E0-1043-482A-AD49-787B8356BA92} EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Downloads", "_Downloads", "{C120A020-773F-4EA3-923F-B67AF28B750D}" @@ -401,8 +401,8 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download APR-Util", "libs\win32\Download APR-Util.vcproj", "{E969F3E0-1043-482A-AD49-787B8356BA92}" ProjectSection(ProjectDependencies) = postProject - {5786D51D-1C6A-4BE1-8804-29954DB5258F} = {5786D51D-1C6A-4BE1-8804-29954DB5258F} {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} = {C4854C1D-5478-4F87-AB62-36CCDDDBA3C7} + {5786D51D-1C6A-4BE1-8804-29954DB5258F} = {5786D51D-1C6A-4BE1-8804-29954DB5258F} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download LIBRESAMPLE", "libs\win32\Download LIBRESAMPLE.vcproj", "{C3B50FF8-E49B-4589-B07A-4D7866980669}" @@ -436,15 +436,15 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "eXosip", "libs\win32\exosip\eXosip.vcproj", "{4EA67539-9EE9-4065-BD39-87E517FD8262}" ProjectSection(ProjectDependencies) = postProject - {C038D7B4-B116-4C3E-93E2-45D295429808} = {C038D7B4-B116-4C3E-93E2-45D295429808} - {44F46B7E-0E51-4304-9735-330DFBAB41E5} = {44F46B7E-0E51-4304-9735-330DFBAB41E5} {85255507-5D16-4218-85E2-F683BB2F04DA} = {85255507-5D16-4218-85E2-F683BB2F04DA} + {44F46B7E-0E51-4304-9735-330DFBAB41E5} = {44F46B7E-0E51-4304-9735-330DFBAB41E5} + {C038D7B4-B116-4C3E-93E2-45D295429808} = {C038D7B4-B116-4C3E-93E2-45D295429808} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "osip2", "libs\win32\exosip\osip2.vcproj", "{85255507-5D16-4218-85E2-F683BB2F04DA}" ProjectSection(ProjectDependencies) = postProject - {C038D7B4-B116-4C3E-93E2-45D295429808} = {C038D7B4-B116-4C3E-93E2-45D295429808} {44F46B7E-0E51-4304-9735-330DFBAB41E5} = {44F46B7E-0E51-4304-9735-330DFBAB41E5} + {C038D7B4-B116-4C3E-93E2-45D295429808} = {C038D7B4-B116-4C3E-93E2-45D295429808} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "osipparser2", "libs\win32\exosip\osipparser2.vcproj", "{44F46B7E-0E51-4304-9735-330DFBAB41E5}" @@ -461,8 +461,8 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mDNSResponder static library", "libs\win32\howl\libmDNSResponder.vcproj", "{49C34584-B6DA-448F-83CF-27584DC9FC90}" ProjectSection(ProjectDependencies) = postProject - {0D826AF5-0506-4C50-BB8B-7DB019AC21AE} = {0D826AF5-0506-4C50-BB8B-7DB019AC21AE} {5927104D-C14C-4AC8-925C-4AB681762E75} = {5927104D-C14C-4AC8-925C-4AB681762E75} + {0D826AF5-0506-4C50-BB8B-7DB019AC21AE} = {0D826AF5-0506-4C50-BB8B-7DB019AC21AE} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download LIBSNDFILE", "libs\win32\Download LIBSNDFILE.vcproj", "{EFA9E76E-62A5-4237-B7E9-F39B8E174CD5}" @@ -488,8 +488,8 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Abyss", "libs\win32\xmlrpc\Abyss.vcproj", "{356EC96D-4C9F-47B5-9083-FC328B87BA94}" ProjectSection(ProjectDependencies) = postProject - {EC8D4AE8-0F3E-454A-BFB8-D56A5D9C0121} = {EC8D4AE8-0F3E-454A-BFB8-D56A5D9C0121} {A3FE0076-B366-429D-A238-D7304DA7D3C1} = {A3FE0076-B366-429D-A238-D7304DA7D3C1} + {EC8D4AE8-0F3E-454A-BFB8-D56A5D9C0121} = {EC8D4AE8-0F3E-454A-BFB8-D56A5D9C0121} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xml", "libs\win32\apr-util\xml.vcproj", "{155844C3-EC5F-407F-97A4-A2DDADED9B2F}" @@ -503,27 +503,27 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "js", "libs\win32\js\js.vcproj", "{204FA0DE-305D-4414-AE2E-F195A23F390D}" ProjectSection(ProjectDependencies) = postProject - {B0AA13FC-636C-45A7-8EAE-663220679A75} = {B0AA13FC-636C-45A7-8EAE-663220679A75} {76D0A759-9C07-42D4-90A9-82AE15462C95} = {76D0A759-9C07-42D4-90A9-82AE15462C95} + {B0AA13FC-636C-45A7-8EAE-663220679A75} = {B0AA13FC-636C-45A7-8EAE-663220679A75} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_sofia", "src\mod\endpoints\mod_sofia\mod_sofia.vcproj", "{0DF3ABD0-DDC0-4265-B778-07C66780979B}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {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}") = "libg726", "libs\codec\g726\libg726.vcproj", "{5A6A281A-AA50-470A-8305-202BDA1CD1BF}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_g726", "src\mod\codecs\mod_g726\mod_g726.vcproj", "{486369EB-F150-4B56-BCC8-77B9E18FF5F5}" ProjectSection(ProjectDependencies) = postProject - {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} - {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} - {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} - {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} {5A6A281A-AA50-470A-8305-202BDA1CD1BF} = {5A6A281A-AA50-470A-8305-202BDA1CD1BF} + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {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}") = "libg7xx", "libs\codec\g7xx\libg7xx.vcproj", "{D71E7338-8D9C-4FE4-A15F-D5CC60202C7C}" @@ -537,6 +537,14 @@ {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} EndProjectSection EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_park", "src\mod\applications\mod_park\mod_park.vcproj", "{2740F45C-475A-4DE0-BCED-6E2E5F6C4B8B}" + ProjectSection(ProjectDependencies) = postProject + {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF} + {F057DA7F-79E5-4B00-845C-EF446EF055E3} = {F057DA7F-79E5-4B00-845C-EF446EF055E3} + {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF} + {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} = {101130D1-3EA6-4ED2-B65D-CEB5243A20ED} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -551,8 +559,10 @@ {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Debug|Win32.Build.0 = Debug|Win32 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Win32.ActiveCfg = Release|Win32 {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}.Release|Win32.Build.0 = Release|Win32 - {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|Win32.ActiveCfg = Debug|Win32 - {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|Win32.ActiveCfg = Release|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|Win32.ActiveCfg = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Debug|Win32.Build.0 = Debug Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|Win32.ActiveCfg = Release Passthrough|Win32 + {1D95CD95-0DE2-48C3-AC23-D5C7D1C9C0F0}.Release|Win32.Build.0 = Release Passthrough|Win32 {4926323F-4EA8-4B7D-A3D3-65488725988F}.Debug|Win32.ActiveCfg = Debug|Win32 {4926323F-4EA8-4B7D-A3D3-65488725988F}.Debug|Win32.Build.0 = Debug|Win32 {4926323F-4EA8-4B7D-A3D3-65488725988F}.Release|Win32.ActiveCfg = Release|Win32 @@ -881,6 +891,10 @@ {D42518CC-7475-454D-B392-0E132C07D761}.Debug|Win32.Build.0 = Debug|Win32 {D42518CC-7475-454D-B392-0E132C07D761}.Release|Win32.ActiveCfg = Release|Win32 {D42518CC-7475-454D-B392-0E132C07D761}.Release|Win32.Build.0 = Release|Win32 + {2740F45C-475A-4DE0-BCED-6E2E5F6C4B8B}.Debug|Win32.ActiveCfg = Debug|Win32 + {2740F45C-475A-4DE0-BCED-6E2E5F6C4B8B}.Debug|Win32.Build.0 = Debug|Win32 + {2740F45C-475A-4DE0-BCED-6E2E5F6C4B8B}.Release|Win32.ActiveCfg = Release|Win32 + {2740F45C-475A-4DE0-BCED-6E2E5F6C4B8B}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -909,6 +923,7 @@ {B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} {C24FB505-05D7-4319-8485-7540B44C8603} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} {B5881A85-FE70-4F64-8607-2CAAE52669C6} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} + {2740F45C-475A-4DE0-BCED-6E2E5F6C4B8B} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78} {3A5B9131-F20C-4A85-9447-6C1610941CEE} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} {5FD31A25-5D83-4794-8BEE-904DAD84CE71} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} {FE3540C5-3303-46E0-A69E-D92F775687F1} = {9460B5F1-0A95-41C4-BEB7-9C2C96459A7C} Modified: freeswitch/branches/james/Makefile.in ============================================================================== --- freeswitch/branches/james/Makefile.in (original) +++ freeswitch/branches/james/Makefile.in Sun Sep 10 07:09:34 2006 @@ -1136,6 +1136,8 @@ installall: install install_mod +sure: clean modclean modwipe uninstall installall + wayclean: clean modclean modwipe: Modified: freeswitch/branches/james/libs/codec/lpc10/Makefile.am ============================================================================== --- freeswitch/branches/james/libs/codec/lpc10/Makefile.am (original) +++ freeswitch/branches/james/libs/codec/lpc10/Makefile.am Sun Sep 10 07:09:34 2006 @@ -2,24 +2,20 @@ SUBDIRS = AUTOMAKE_OPTS= gnu MAKE=gmake -NAME=liblpc10 +NAME=libg7xx AM_CC=gcc AM_CFLAGS = -Wall -O3 -funroll-loops AM_CPPFLAGS = $(AM_CFLAGS) -lib_LTLIBRARIES = liblpc10.la -liblpc10_la_SOURCES = analys.c dcbias.c difmag.c energy.c hp100.c ivfilt.c lpcini.c mload.c placea.c prepro.c synths.c vparms.c \ -bsynz.c decode.c dyptrk.c f2clib.c invert.c lpcdec.c lpfilt.c onset.c placev.c random.c tbdm.c \ -chanwr.c deemp.c encode.c ham84.c irc2pc.c lpcenc.c median.c pitsyn.c preemp.c rcchk.c voicin.c +lib_LTLIBRARIES = libg7xx.la +libg7xx_la_SOURCES = g711.c g722_deode.c g722_encode.c g726.c +libg7xx_la_CFLAGS = $(AM_CFLAGS) +libg7xx_la_LDFLAGS = - -liblpc10_la_CFLAGS = $(AM_CFLAGS) -liblpc10_la_LDFLAGS = - -library_includedir = $(prefix)/include/lpc10 -library_include_HEADERS = f2c.h lpc10.h +library_includedir = $(prefix)/include/g7xx +library_include_HEADERS = g726.h g711.h g722.h Modified: freeswitch/branches/james/libs/win32/apr-iconv/libapriconv.vcproj ============================================================================== --- freeswitch/branches/james/libs/win32/apr-iconv/libapriconv.vcproj (original) +++ freeswitch/branches/james/libs/win32/apr-iconv/libapriconv.vcproj Sun Sep 10 07:09:34 2006 @@ -25,7 +25,7 @@ > <Tool Name="VCPreBuildEventTool" - CommandLine="if not exist $(ProjectDir)..\..\include\ md $(ProjectDir)..\..\include\ xcopy "$(ProjectDir)..\..\apr-iconv-1.1.1\include\*.h" $(ProjectDir)..\..\include\ /C /D /Y " + CommandLine="if not exist "$(ProjectDir)..\..\include\" md "$(ProjectDir)..\..\include\" xcopy "$(ProjectDir)..\..\apr-iconv-1.1.1\include\*.h" "$(ProjectDir)..\..\include\" /C /D /Y " /> <Tool Name="VCCustomBuildTool" @@ -123,7 +123,7 @@ > <Tool Name="VCPreBuildEventTool" - CommandLine="if not exist $(ProjectDir)..\..\include\ md $(ProjectDir)..\..\include\ xcopy "$(ProjectDir)..\..\apr-iconv-1.1.1\include\*.h" $(ProjectDir)..\..\include\ /C /D /Y " + CommandLine="if not exist "$(ProjectDir)..\..\include\" md "$(ProjectDir)..\..\include\" xcopy "$(ProjectDir)..\..\apr-iconv-1.1.1\include\*.h" "$(ProjectDir)..\..\include\" /C /D /Y " /> <Tool Name="VCCustomBuildTool" Modified: freeswitch/branches/james/libs/win32/apr-util/libaprutil.vcproj ============================================================================== --- freeswitch/branches/james/libs/win32/apr-util/libaprutil.vcproj (original) +++ freeswitch/branches/james/libs/win32/apr-util/libaprutil.vcproj Sun Sep 10 07:09:34 2006 @@ -25,7 +25,7 @@ > <Tool Name="VCPreBuildEventTool" - CommandLine="if not exist $(ProjectDir)..\..\include\ md $(ProjectDir)..\..\include\ if not exist $(ProjectDir)..\..\apr-util-1.2.7\include\apr_ldap.h type $(ProjectDir)..\..\apr-util-1.2.7\include\apr_ldap.hw > $(ProjectDir)..\..\apr-util-1.2.7\include\apr_ldap.h if not exist $(ProjectDir)..\..\apr-util-1.2.7\include\apu.h type $(ProjectDir)..\..\apr-util-1.2.7\include\apu.hw > $(ProjectDir)..\..\apr-util-1.2.7\include\apu.h if not exist $(ProjectDir)..\..\apr-util-1.2.7\include\apu_config.h type $(ProjectDir)..\..\apr-util-1.2.7\include\apu_config.hw > $(ProjectDir)..\..\apr-util-1.2.7\include\apu_config.h if not exist $(ProjectDir)..\..\apr-util-1.2.7\include\apu_select_dbm.h type $(ProjectDir)..\..\apr-util-1.2.7\include\apu_select_dbm.hw > $(ProjectDir)..\..\apr-util-1.2.7\include\apu_select_dbm.h if not exist $(ProjectDir)..\..\apr-util-1.2.7\include\apu_want.h type $(ProjectDir)..\..\apr-util-1.2.7\include\apu_want.hw > $(ProjectDir)..\..\apr-util-1.2.7\include\apu_want.h xcopy "$(ProjectDir)..\..\apr-util-1.2.7\include\*.h" $(ProjectDir)..\..\include\ /C /D /Y " + CommandLine="if not exist "$(ProjectDir)..\..\include\" md "$(ProjectDir)..\..\include\" if not exist "$(ProjectDir)..\..\apr-util-1.2.7\include\apr_ldap.h" type "$(ProjectDir)..\..\apr-util-1.2.7\include\apr_ldap.hw" > "$(ProjectDir)..\..\apr-util-1.2.7\include\apr_ldap.h" if not exist "$(ProjectDir)..\..\apr-util-1.2.7\include\apu.h" type "$(ProjectDir)..\..\apr-util-1.2.7\include\apu.hw" > "$(ProjectDir)..\..\apr-util-1.2.7\include\apu.h" if not exist "$(ProjectDir)..\..\apr-util-1.2.7\include\apu_config.h" type "$(ProjectDir)..\..\apr-util-1.2.7\include\apu_config.hw" > "$(ProjectDir)..\..\apr-util-1.2.7\include\apu_config.h" if not exist "$(ProjectDir)..\..\apr-util-1.2.7\include\apu_select_dbm.h" type "$(ProjectDir)..\..\apr-util-1.2.7\include\apu_select_dbm.hw" > "$(ProjectDir)..\..\apr-util-1.2.7\include\apu_select_dbm.h" if not exist "$(ProjectDir)..\..\apr-util-1.2.7\include\apu_want.h" type "$(ProjectDir)..\..\apr-util-1.2.7\include\apu_want.hw" > "$(ProjectDir)..\..\apr-util-1.2.7\include\apu_want.h" xcopy "$(ProjectDir)..\..\apr-util-1.2.7\include\*.h" "$(ProjectDir)..\..\include\" /C /D /Y " /> <Tool Name="VCCustomBuildTool" @@ -125,7 +125,7 @@ > <Tool Name="VCPreBuildEventTool" - CommandLine="if not exist $(ProjectDir)..\..\include\ md $(ProjectDir)..\..\include\ if not exist $(ProjectDir)..\..\apr-util-1.2.7\include\apr_ldap.h type $(ProjectDir)..\..\apr-util-1.2.7\include\apr_ldap.hw > $(ProjectDir)..\..\apr-util-1.2.7\include\apr_ldap.h if not exist $(ProjectDir)..\..\apr-util-1.2.7\include\apu.h type $(ProjectDir)..\..\apr-util-1.2.7\include\apu.hw > $(ProjectDir)..\..\apr-util-1.2.7\include\apu.h if not exist $(ProjectDir)..\..\apr-util-1.2.7\include\apu_config.h type $(ProjectDir)..\..\apr-util-1.2.7\include\apu_config.hw > $(ProjectDir)..\..\apr-util-1.2.7\include\apu_config.h if not exist $(ProjectDir)..\..\apr-util-1.2.7\include\apu_select_dbm.h type $(ProjectDir)..\..\apr-util-1.2.7\include\apu_select_dbm.hw > $(ProjectDir)..\..\apr-util-1.2.7\include\apu_select_dbm.h if not exist $(ProjectDir)..\..\apr-util-1.2.7\include\apu_want.h type $(ProjectDir)..\..\apr-util-1.2.7\include\apu_want.hw > $(ProjectDir)..\..\apr-util-1.2.7\include\apu_want.h xcopy "$(ProjectDir)..\..\apr-util-1.2.7\include\*.h" $(ProjectDir)..\..\include\ /C /D /Y " + CommandLine="if not exist "$(ProjectDir)..\..\include\" md "$(ProjectDir)..\..\include\" if not exist "$(ProjectDir)..\..\apr-util-1.2.7\include\apr_ldap.h" type "$(ProjectDir)..\..\apr-util-1.2.7\include\apr_ldap.hw" > "$(ProjectDir)..\..\apr-util-1.2.7\include\apr_ldap.h" if not exist "$(ProjectDir)..\..\apr-util-1.2.7\include\apu.h" type "$(ProjectDir)..\..\apr-util-1.2.7\include\apu.hw" > "$(ProjectDir)..\..\apr-util-1.2.7\include\apu.h" if not exist "$(ProjectDir)..\..\apr-util-1.2.7\include\apu_config.h" type "$(ProjectDir)..\..\apr-util-1.2.7\include\apu_config.hw" > "$(ProjectDir)..\..\apr-util-1.2.7\include\apu_config.h" if not exist "$(ProjectDir)..\..\apr-util-1.2.7\include\apu_select_dbm.h" type "$(ProjectDir)..\..\apr-util-1.2.7\include\apu_select_dbm.hw" > "$(ProjectDir)..\..\apr-util-1.2.7\include\apu_select_dbm.h" if not exist "$(ProjectDir)..\..\apr-util-1.2.7\include\apu_want.h" type "$(ProjectDir)..\..\apr-util-1.2.7\include\apu_want.hw" > "$(ProjectDir)..\..\apr-util-1.2.7\include\apu_want.h" xcopy "$(ProjectDir)..\..\apr-util-1.2.7\include\*.h" "$(ProjectDir)..\..\include\" /C /D /Y " /> <Tool Name="VCCustomBuildTool" Modified: freeswitch/branches/james/libs/win32/apr/libapr.vcproj ============================================================================== --- freeswitch/branches/james/libs/win32/apr/libapr.vcproj (original) +++ freeswitch/branches/james/libs/win32/apr/libapr.vcproj Sun Sep 10 07:09:34 2006 @@ -25,7 +25,7 @@ > <Tool Name="VCPreBuildEventTool" - CommandLine="if not exist $(ProjectDir)..\..\include\ md $(ProjectDir)..\..\include\ if not exist $(ProjectDir)..\..\apr-1.2.7\include\apr.h type $(ProjectDir)apr.hw > $(ProjectDir)..\..\apr-1.2.7\include\apr.h xcopy "$(ProjectDir)..\..\apr-1.2.7\include\*.h" $(ProjectDir)..\..\include\ /C /D /Y " + CommandLine="if not exist "$(ProjectDir)..\..\include\" md "$(ProjectDir)..\..\include\" if not exist "$(ProjectDir)..\..\apr-1.2.7\include\apr.h" type "$(ProjectDir)apr.hw" > "$(ProjectDir)..\..\apr-1.2.7\include\apr.h" xcopy "$(ProjectDir)..\..\apr-1.2.7\include\*.h" "$(ProjectDir)..\..\include\" /C /D /Y " /> <Tool Name="VCCustomBuildTool" @@ -124,7 +124,7 @@ > <Tool Name="VCPreBuildEventTool" - CommandLine="if not exist $(ProjectDir)..\..\include\ md $(ProjectDir)..\..\include\ if not exist $(ProjectDir)..\..\apr-1.2.7\include\apr.h type $(ProjectDir)apr.hw > $(ProjectDir)..\..\apr-1.2.7\include\apr.h xcopy "$(ProjectDir)..\..\apr-1.2.7\include\*.h" $(ProjectDir)..\..\include\ /C /D /Y " + CommandLine="if not exist "$(ProjectDir)..\..\include\" md "$(ProjectDir)..\..\include\" if not exist "$(ProjectDir)..\..\apr-1.2.7\include\apr.h" type "$(ProjectDir)apr.hw" > "$(ProjectDir)..\..\apr-1.2.7\include\apr.h" xcopy "$(ProjectDir)..\..\apr-1.2.7\include\*.h" "$(ProjectDir)..\..\include\" /C /D /Y " /> <Tool Name="VCCustomBuildTool" Modified: freeswitch/branches/james/src/include/switch.h ============================================================================== --- freeswitch/branches/james/src/include/switch.h (original) +++ freeswitch/branches/james/src/include/switch.h Sun Sep 10 07:09:34 2006 @@ -36,11 +36,11 @@ #define SWITCH_H #ifdef __cplusplus -#define BEGIN_EXTERN_C extern "C" { -#define END_EXTERN_C } +#define SWITCH_BEGIN_EXTERN_C extern "C" { +#define SWITCH_END_EXTERN_C } #else -#define BEGIN_EXTERN_C -#define END_EXTERN_C +#define SWITCH_BEGIN_EXTERN_C +#define SWITCH_END_EXTERN_C #endif Modified: freeswitch/branches/james/src/include/switch_apr.h ============================================================================== --- freeswitch/branches/james/src/include/switch_apr.h (original) +++ freeswitch/branches/james/src/include/switch_apr.h Sun Sep 10 07:09:34 2006 @@ -63,7 +63,7 @@ #include <apr_want.h> #include <apr_env.h> -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C /* The pieces of apr we allow ppl to pass around between modules we typedef into our namespace and wrap all the functions @@ -1433,6 +1433,6 @@ /** @} */ /** @} */ -END_EXTERN_C +SWITCH_END_EXTERN_C #endif Modified: freeswitch/branches/james/src/include/switch_bitpack.h ============================================================================== --- freeswitch/branches/james/src/include/switch_bitpack.h (original) +++ freeswitch/branches/james/src/include/switch_bitpack.h Sun Sep 10 07:09:34 2006 @@ -35,7 +35,7 @@ */ #ifndef SWITCH_BITPACK_H #define SWITCH_BITPACK_H -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C #include <switch.h> @@ -278,5 +278,5 @@ } ///\} -END_EXTERN_C +SWITCH_END_EXTERN_C #endif Modified: freeswitch/branches/james/src/include/switch_buffer.h ============================================================================== --- freeswitch/branches/james/src/include/switch_buffer.h (original) +++ freeswitch/branches/james/src/include/switch_buffer.h Sun Sep 10 07:09:34 2006 @@ -40,7 +40,7 @@ #include <switch.h> -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C /** * @defgroup switch_buffer Buffer Routines @@ -62,6 +62,18 @@ */ SWITCH_DECLARE(switch_status_t) switch_buffer_create(switch_memory_pool_t *pool, switch_buffer_t **buffer, switch_size_t max_len); +/*! \brief Allocate a new dynamic switch_buffer + * \param buffer returned pointer to the new buffer + * \param blocksize length to realloc by as data is added + * \param start_len ammount of memory to reserve initially + * \param max_len length the buffer is allowed to grow to + * \return status + */ +SWITCH_DECLARE(switch_status_t) switch_buffer_create_dynamic(switch_buffer_t **buffer, + switch_size_t blocksize, + switch_size_t start_len, + switch_size_t max_len); + /*! \brief Get the length of a switch_buffer_t * \param buffer any buffer of type switch_buffer_t * \return int size of the buffer. @@ -107,8 +119,15 @@ * \param buffer any buffer of type switch_buffer_t */ SWITCH_DECLARE(void) switch_buffer_zero(switch_buffer_t *buffer); + +/*! \brief Destroy the buffer + * \param buffer buffer to destroy + * \note only neccessary on dynamic buffers (noop on pooled ones) + */ +SWITCH_DECLARE(void) switch_buffer_destroy(switch_buffer_t **buffer); + /** @} */ -END_EXTERN_C +SWITCH_END_EXTERN_C #endif Modified: freeswitch/branches/james/src/include/switch_caller.h ============================================================================== --- freeswitch/branches/james/src/include/switch_caller.h (original) +++ freeswitch/branches/james/src/include/switch_caller.h Sun Sep 10 07:09:34 2006 @@ -55,7 +55,7 @@ #include <switch.h> -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C /*! \brief Call Specific Data */ @@ -195,7 +195,7 @@ SWITCH_DECLARE(void) switch_caller_profile_event_set_data(switch_caller_profile_t *caller_profile, char *prefix, switch_event_t *event); -END_EXTERN_C +SWITCH_END_EXTERN_C /** @} */ Modified: freeswitch/branches/james/src/include/switch_channel.h ============================================================================== --- freeswitch/branches/james/src/include/switch_channel.h (original) +++ freeswitch/branches/james/src/include/switch_channel.h Sun Sep 10 07:09:34 2006 @@ -40,7 +40,7 @@ #include <switch.h> -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C struct switch_channel_timetable { switch_time_t created; @@ -137,6 +137,12 @@ uint32_t flags); /*! + \brief Uninitalize a channel + \param channel the channel to uninit +*/ +SWITCH_DECLARE(void) switch_channel_uninit(switch_channel_t *channel); + +/*! \brief Set the given channel's caller profile \param channel channel to assign the profile to \param caller_profile the profile to assign @@ -298,17 +304,19 @@ /*! \brief Set private data on channel \param channel channel on which to set data + \param key unique keyname to associate your private data to \param private_info void pointer to private data \return SWITCH_STATUS_SUCCESS if data was set */ -SWITCH_DECLARE(switch_status_t) switch_channel_set_private(switch_channel_t *channel, void *private_info); +SWITCH_DECLARE(switch_status_t) switch_channel_set_private(switch_channel_t *channel, char *key, void *private_info); /*! \brief Retrieve private from a given channel \param channel channel to retrieve data from + \param key unique keyname to retrieve your private data \return void pointer to channel's private data */ -SWITCH_DECLARE(void *) switch_channel_get_private(switch_channel_t *channel); +SWITCH_DECLARE(void *) switch_channel_get_private(switch_channel_t *channel, char *key); /*! \brief Assign a name to a given channel @@ -391,6 +399,6 @@ SWITCH_DECLARE(switch_status_t) switch_channel_get_raw_mode (switch_channel_t *channel, int *freq, int *bits, int *channels, int *ms, int *kbps); /** @} */ -END_EXTERN_C +SWITCH_END_EXTERN_C #endif Modified: freeswitch/branches/james/src/include/switch_config.h ============================================================================== --- freeswitch/branches/james/src/include/switch_config.h (original) +++ freeswitch/branches/james/src/include/switch_config.h Sun Sep 10 07:09:34 2006 @@ -58,7 +58,7 @@ #include <switch.h> -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C /*! \brief A simple file handle representing an open configuration file **/ struct switch_config { @@ -104,7 +104,7 @@ */ SWITCH_DECLARE(int) switch_config_next_pair(switch_config_t *cfg, char **var, char **val); -END_EXTERN_C +SWITCH_END_EXTERN_C /** @} */ Modified: freeswitch/branches/james/src/include/switch_console.h ============================================================================== --- freeswitch/branches/james/src/include/switch_console.h (original) +++ freeswitch/branches/james/src/include/switch_console.h Sun Sep 10 07:09:34 2006 @@ -41,8 +41,19 @@ #include <switch.h> -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C +#define SWITCH_CMD_CHUNK_LEN 1024 +#define SWITCH_STANDARD_STREAM(s) if ((s.data = (char *)malloc(SWITCH_CMD_CHUNK_LEN))) { \ + memset(s.data, 0, SWITCH_CMD_CHUNK_LEN); \ + s.end = s.data;\ + s.data_size = SWITCH_CMD_CHUNK_LEN;\ + s.write_function = switch_console_stream_write;\ + s.alloc_len = SWITCH_CMD_CHUNK_LEN;\ + s.alloc_chunk = SWITCH_CMD_CHUNK_LEN;\ + } + + /*! \brief A simple comand loop that reads input from the terminal */ @@ -57,6 +68,6 @@ \brief A method akin to printf for dealing with api streams */ SWITCH_DECLARE(switch_status_t) switch_console_stream_write(switch_stream_handle_t *handle, char *fmt, ...); -END_EXTERN_C +SWITCH_END_EXTERN_C #endif Modified: freeswitch/branches/james/src/include/switch_core.h ============================================================================== --- freeswitch/branches/james/src/include/switch_core.h (original) +++ freeswitch/branches/james/src/include/switch_core.h Sun Sep 10 07:09:34 2006 @@ -40,7 +40,7 @@ #include <switch.h> -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C #define SWITCH_MAX_CORE_THREAD_SESSION_OBJS 128 #define SWITCH_MAX_STREAMS 128 @@ -99,14 +99,89 @@ struct switch_core_session; struct switch_core_runtime; +struct switch_core_port_allocator; - /*! \defgroup core1 Core Library \ingroup FREESWITCH \{ */ + +///\defgroup mb1 Media Bugs +///\ingroup core1 +///\{ + +/*! + \brief Add a media bug to the session + \param session the session to add the bug to + \param callback a callback for events + \param user_data arbitrary user data + \param new_bug pointer to assign new bug to + \return SWITCH_STATUS_SUCCESS if the operation was a success +*/ +SWITCH_DECLARE(switch_status_t) switch_core_media_bug_add(switch_core_session_t *session, + switch_media_bug_callback_t callback, + void *user_data, + switch_media_bug_t **new_bug); + + +/*! + \brief Remove a media bug from the session + \param session the session to remove the bug from + \param bug bug to remove + \return SWITCH_STATUS_SUCCESS if the operation was a success +*/ +SWITCH_DECLARE(switch_status_t) switch_core_media_bug_remove(switch_core_session_t *session, switch_media_bug_t **bug); + +/*! + \brief Remove all media bugs from the session + \param session the session to remove the bugs from + \return SWITCH_STATUS_SUCCESS if the operation was a success +*/ +SWITCH_DECLARE(switch_status_t) switch_core_media_bug_remove_all(switch_core_session_t *session); + +/*! + \brief Read a frame from the bug + \param bug the bug to read from + \param frame the frame to write the data to + \return the amount of data +*/ +SWITCH_DECLARE(switch_status_t) switch_core_media_bug_read(switch_media_bug_t *bug, switch_frame_t *frame); + +///\} + +///\defgroup pa1 Port Allocation +///\ingroup core1 +///\{ + +/*! + \brief Initilize the port allocator + \param start the starting port + \param end the ending port + \param inc the amount to increment each port + \param new_allocator new pointer for the return value + \return SWITCH_STATUS_SUCCESS if the operation was a success +*/ +SWITCH_DECLARE(switch_status_t) switch_core_port_allocator_new(switch_port_t start, + switch_port_t end, + uint8_t inc, + switch_core_port_allocator_t **new_allocator); + +/*! + \brief Get a port from the port allocator + \param alloc the allocator object + \return the port +*/ +SWITCH_DECLARE(switch_port_t) switch_core_port_allocator_request_port(switch_core_port_allocator_t *alloc); + +/*! + \brief destroythe port allocator + \param alloc the allocator object +*/ +SWITCH_DECLARE(void) switch_core_port_allocator_destroy(switch_core_port_allocator_t **alloc); +///\} + ///\defgroup ss Startup/Shutdown ///\ingroup core1 ///\{ @@ -469,8 +544,32 @@ */ SWITCH_DECLARE(switch_status_t) switch_core_session_dequeue_event(switch_core_session_t *session, switch_event_t **event); +/*! + \brief Queue a private event on a given session + \param session the session to queue the message on + \param event the event to queue + \return the status returned by the message handler +*/ +SWITCH_DECLARE(switch_status_t) switch_core_session_queue_private_event(switch_core_session_t *session, switch_event_t **event); + /*! + \brief Indicate the number of waiting private events on a session + \param session the session to check + \return the number of events +*/ +SWITCH_DECLARE(int32_t) switch_core_session_private_event_count(switch_core_session_t *session); + +/*! + \brief DE-Queue a private event on a given session + \param session the session to de-queue the message on + \param event the de-queued event + \return the SWITCH_STATUS_SUCCESS if the event was de-queued +*/ +SWITCH_DECLARE(switch_status_t) switch_core_session_dequeue_private_event(switch_core_session_t *session, switch_event_t **event); + + +/*! \brief Read a frame from a session \param session the session to read from \param frame a NULL pointer to a frame to aim at the newly read frame @@ -1118,6 +1217,6 @@ \} */ -END_EXTERN_C +SWITCH_END_EXTERN_C #endif Modified: freeswitch/branches/james/src/include/switch_event.h ============================================================================== --- freeswitch/branches/james/src/include/switch_event.h (original) +++ freeswitch/branches/james/src/include/switch_event.h Sun Sep 10 07:09:34 2006 @@ -60,7 +60,7 @@ #include <switch.h> -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C /*! \brief An event Header */ struct switch_event_header{ @@ -310,6 +310,6 @@ #define switch_event_fire_data(event, data) switch_event_fire_detailed(__FILE__, (char * )__FUNCTION__, __LINE__, event, data) ///\} -END_EXTERN_C +SWITCH_END_EXTERN_C #endif Modified: freeswitch/branches/james/src/include/switch_frame.h ============================================================================== --- freeswitch/branches/james/src/include/switch_frame.h (original) +++ freeswitch/branches/james/src/include/switch_frame.h Sun Sep 10 07:09:34 2006 @@ -38,7 +38,7 @@ #include <switch.h> -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C /*! \brief An abstraction of a data frame */ struct switch_frame { @@ -68,6 +68,6 @@ switch_frame_flag_t flags; }; -END_EXTERN_C +SWITCH_END_EXTERN_C #endif Modified: freeswitch/branches/james/src/include/switch_ivr.h ============================================================================== --- freeswitch/branches/james/src/include/switch_ivr.h (original) +++ freeswitch/branches/james/src/include/switch_ivr.h Sun Sep 10 07:09:34 2006 @@ -40,8 +40,10 @@ #include <switch.h> -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C +static const switch_state_handler_table_t noop_state_handler = {0}; + /** * @defgroup switch_ivr IVR Library * @ingroup core1 @@ -59,6 +61,8 @@ */ SWITCH_DECLARE(switch_status_t) switch_ivr_sleep(switch_core_session_t *session, uint32_t ms); +SWITCH_DECLARE(switch_status_t) switch_ivr_park(switch_core_session_t *session); + /*! \brief Wait for DTMF digits calling a pluggable callback function when digits are collected. \param session the session to read. @@ -90,8 +94,25 @@ const char *terminators, char *terminator, unsigned int timeout); - + /*! + \brief Record a session to disk + \param session the session to record + \param file the path to the file + \param fh file handle to use (NULL for builtin one) + \return SWITCH_STATUS_SUCCESS if all is well +*/ +SWITCH_DECLARE(switch_status_t) switch_ivr_record_session(switch_core_session_t *session, char *file, switch_file_handle_t *fh); + +/*! + \brief Stop Recording a session + \param session the session to stop recording + \param file the path to the file + \return SWITCH_STATUS_SUCCESS if all is well +*/ +SWITCH_DECLARE(switch_status_t) switch_ivr_stop_record_session(switch_core_session_t *session, char *file); + +/*! \brief play a file from the disk to the session \param session the session to play the file too \param fh file handle to use (NULL for builtin one) @@ -212,7 +233,7 @@ /** @} */ -END_EXTERN_C +SWITCH_END_EXTERN_C #endif Modified: freeswitch/branches/james/src/include/switch_loadable_module.h ============================================================================== --- freeswitch/branches/james/src/include/switch_loadable_module.h (original) +++ freeswitch/branches/james/src/include/switch_loadable_module.h Sun Sep 10 07:09:34 2006 @@ -43,7 +43,7 @@ #include <switch.h> -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C /*! \defgroup mods Loadable Module Functions @@ -230,6 +230,6 @@ SWITCH_MOD_DECLARE(switch_status_t) switch_module_shutdown(void); ///\} -END_EXTERN_C +SWITCH_END_EXTERN_C #endif Modified: freeswitch/branches/james/src/include/switch_log.h ============================================================================== --- freeswitch/branches/james/src/include/switch_log.h (original) +++ freeswitch/branches/james/src/include/switch_log.h Sun Sep 10 07:09:34 2006 @@ -40,7 +40,7 @@ #include <switch.h> -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C ///\defgroup log Logger Routines ///\ingroup core1 @@ -117,6 +117,6 @@ SWITCH_DECLARE(switch_log_level_t) switch_log_str2level(const char *str); ///\} -END_EXTERN_C +SWITCH_END_EXTERN_C #endif Modified: freeswitch/branches/james/src/include/switch_module_interfaces.h ============================================================================== --- freeswitch/branches/james/src/include/switch_module_interfaces.h (original) +++ freeswitch/branches/james/src/include/switch_module_interfaces.h Sun Sep 10 07:09:34 2006 @@ -41,7 +41,7 @@ #include <switch.h> -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C /*! \brief A table of functions to execute at various states */ @@ -68,6 +68,8 @@ void *end; switch_size_t data_size; switch_size_t data_len; + switch_size_t alloc_len; + switch_size_t alloc_chunk; switch_event_t *event; }; @@ -534,6 +536,6 @@ const struct switch_api_interface *next; }; -END_EXTERN_C +SWITCH_END_EXTERN_C #endif Modified: freeswitch/branches/james/src/include/switch_platform.h ============================================================================== --- freeswitch/branches/james/src/include/switch_platform.h (original) +++ freeswitch/branches/james/src/include/switch_platform.h Sun Sep 10 07:09:34 2006 @@ -34,7 +34,7 @@ #ifndef SWITCH_PLATFORM_H #define SWITCH_PLATFORM_H -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C #ifdef __ICC #pragma warning (disable:810 869 981 279 1469 188) @@ -141,6 +141,6 @@ #define DoxyDefine(x) #endif -END_EXTERN_C +SWITCH_END_EXTERN_C #endif Modified: freeswitch/branches/james/src/include/switch_resample.h ============================================================================== --- freeswitch/branches/james/src/include/switch_resample.h (original) +++ freeswitch/branches/james/src/include/switch_resample.h Sun Sep 10 07:09:34 2006 @@ -43,7 +43,7 @@ #define SWITCH_RESAMPLE_H #include <switch.h> -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C #include <stdlib.h> /*! @@ -156,7 +156,7 @@ ///\} -END_EXTERN_C +SWITCH_END_EXTERN_C #endif Modified: freeswitch/branches/james/src/include/switch_rtp.h ============================================================================== --- freeswitch/branches/james/src/include/switch_rtp.h (original) +++ freeswitch/branches/james/src/include/switch_rtp.h Sun Sep 10 07:09:34 2006 @@ -38,7 +38,7 @@ #ifndef SWITCH_RTP_H #define SWITCH_RTP_H -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C #define SWITCH_RTP_MAX_BUF_LEN 16384 @@ -373,6 +373,6 @@ \} */ -END_EXTERN_C +SWITCH_END_EXTERN_C #endif Modified: freeswitch/branches/james/src/include/switch_sqlite.h ============================================================================== --- freeswitch/branches/james/src/include/switch_sqlite.h (original) +++ freeswitch/branches/james/src/include/switch_sqlite.h Sun Sep 10 07:09:34 2006 @@ -35,7 +35,7 @@ #ifndef SWITCH_SQLITE_H #define SWITCH_SQLITE_H -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C #include <sqlite3.h> @@ -1804,6 +1804,6 @@ /** @} */ /** @} */ -END_EXTERN_C +SWITCH_END_EXTERN_C #endif Modified: freeswitch/branches/james/src/include/switch_stun.h ============================================================================== --- freeswitch/branches/james/src/include/switch_stun.h (original) +++ freeswitch/branches/james/src/include/switch_stun.h Sun Sep 10 07:09:34 2006 @@ -37,7 +37,7 @@ #ifndef _SWITCH_STUN_PARSER_H #define _SWITCH_STUN_PARSER_H -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C #define SWITCH_STUN_DEFAULT_PORT 3478 #define SWITCH_STUN_PACKET_MIN_LEN 20 @@ -240,6 +240,6 @@ #define switch_stun_packet_length(packet) ntohs(packet->header.length) + sizeof(switch_stun_packet_header_t) ///\} -END_EXTERN_C +SWITCH_END_EXTERN_C #endif Modified: freeswitch/branches/james/src/include/switch_types.h ============================================================================== --- freeswitch/branches/james/src/include/switch_types.h (original) +++ freeswitch/branches/james/src/include/switch_types.h Sun Sep 10 07:09:34 2006 @@ -36,7 +36,7 @@ #include <switch.h> -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C #ifdef WIN32 #define SWITCH_PATH_SEPARATOR "\\" @@ -80,6 +80,12 @@ SWITCH_BITPACK_MODE_AAL2 } switch_bitpack_mode_t; +typedef enum { + SWITCH_ABC_TYPE_INIT, + SWITCH_ABC_TYPE_READ, + SWITCH_ABC_TYPE_WRITE, + SWITCH_ABC_TYPE_CLOSE, +} switch_abc_type_t; typedef struct { switch_byte_t *buf; @@ -382,7 +388,8 @@ CF_HOLD = (1 << 8) - Channel is on hold CF_SERVICE = (1 << 9) - Channel has a service thread CF_TAGGED = (1 << 10) - Channel is tagged -CF_WINNER = (1 << 10) - Channel is the winner +CF_WINNER = (1 << 11) - Channel is the winner +CF_CONTROLLED = (1 << 12) - Channel is under control </pre> */ @@ -398,7 +405,8 @@ CF_HOLD = (1 << 8), CF_SERVICE = (1 << 9), CF_TAGGED = (1 << 10), - CF_WINNER = (1 << 11) + CF_WINNER = (1 << 11), + CF_CONTROLLED = (1 << 12) } switch_channel_flag_t; @@ -444,6 +452,7 @@ SWITCH_CODEC_FLAG_SILENCE = (1 << 4) - Silence SWITCH_CODEC_FLAG_FREE_POOL = (1 << 5) - Free codec's pool on destruction SWITCH_CODEC_FLAG_AAL2 = (1 << 6) - USE AAL2 Bitpacking +SWITCH_CODEC_FLAG_PASSTHROUGH = (1 << 7) - Passthrough only </pre> */ typedef enum { @@ -453,7 +462,8 @@ SWITCH_CODEC_FLAG_SILENCE_STOP = (1 << 3), SWITCH_CODEC_FLAG_SILENCE = (1 << 4), SWITCH_CODEC_FLAG_FREE_POOL = (1 << 5), - SWITCH_CODEC_FLAG_AAL2 = (1 << 6) + SWITCH_CODEC_FLAG_AAL2 = (1 << 6), + SWITCH_CODEC_FLAG_PASSTHROUGH = (1 << 7) } switch_codec_flag_t; @@ -571,6 +581,10 @@ SWITCH_EVENT_CHANNEL_EXECUTE - A channel has executed a module's application SWITCH_EVENT_CHANNEL_BRIDGE - A channel has bridged to another channel SWITCH_EVENT_CHANNEL_UNBRIDGE - A channel has unbridged from another channel + SWITCH_EVENT_CHANNEL_PROGRESS - A channel has been parked + SWITCH_EVENT_CHANNEL_OUTGOING - A channel has been unparked + SWITCH_EVENT_CHANNEL_PARK - A channel has been parked + SWITCH_EVENT_CHANNEL_UNPARK - A channel has been unparked SWITCH_EVENT_API - An API call has been executed SWITCH_EVENT_LOG - A LOG event has been triggered SWITCH_EVENT_INBOUND_CHAN - A new inbound channel has been created @@ -586,8 +600,7 @@ SWITCH_EVENT_DTMF - DTMF was sent SWITCH_EVENT_MESSAGE - A Basic Message SWITCH_EVENT_CODEC - Codec Change - SWITCH_EVENT_PROGRESS - Early Media - SWITCH_EVENT_OUTGOING - Outgoing Channel + SWITCH_EVENT_BACKGROUND_JOB - Background Job SWITCH_EVENT_ALL - All events at once </pre> @@ -604,6 +617,8 @@ SWITCH_EVENT_CHANNEL_UNBRIDGE, SWITCH_EVENT_CHANNEL_PROGRESS, SWITCH_EVENT_CHANNEL_OUTGOING, + SWITCH_EVENT_CHANNEL_PARK, + SWITCH_EVENT_CHANNEL_UNPARK, SWITCH_EVENT_API, SWITCH_EVENT_LOG, SWITCH_EVENT_INBOUND_CHAN, @@ -619,6 +634,7 @@ SWITCH_EVENT_DTMF, SWITCH_EVENT_MESSAGE, SWITCH_EVENT_CODEC, + SWITCH_EVENT_BACKGROUND_JOB, SWITCH_EVENT_ALL } switch_event_types_t; @@ -728,7 +744,9 @@ typedef struct switch_file_interface switch_file_interface_t; typedef struct switch_speech_interface switch_speech_interface_t; typedef struct switch_directory_interface switch_directory_interface_t; - +typedef struct switch_core_port_allocator switch_core_port_allocator_t; +typedef struct switch_media_bug switch_media_bug_t; +typedef void (*switch_media_bug_callback_t)(switch_media_bug_t *, void *, switch_abc_type_t); typedef void (*switch_application_function_t)(switch_core_session_t *, char *); typedef void (*switch_event_callback_t)(switch_event_t *); typedef switch_caller_extension_t *(*switch_dialplan_hunt_function_t)(switch_core_session_t *); @@ -773,7 +791,9 @@ struct switch_channel; /*! \brief A core session representing a call and all of it's resources */ struct switch_core_session; +/*! \brief An audio bug */ +struct switch_media_bug; -END_EXTERN_C +SWITCH_END_EXTERN_C #endif Modified: freeswitch/branches/james/src/include/switch_utils.h ============================================================================== --- freeswitch/branches/james/src/include/switch_utils.h (original) +++ freeswitch/branches/james/src/include/switch_utils.h Sun Sep 10 07:09:34 2006 @@ -40,7 +40,7 @@ #include <switch.h> -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C #ifndef snprintf #define snprintf apr_snprintf @@ -50,6 +50,12 @@ #endif +#define SWITCH_SMAX 32767 +#define SWITCH_SMIN -32768 +#define switch_normalize_to_16bit(n) if (n > SWITCH_SMAX) n = SWITCH_SMAX / 2; else if (n < SWITCH_SMIN) n = SWITCH_SMIN / 2; + + + /*! \brief Evaluate the truthfullness of a string expression \param expr a string expression @@ -210,6 +216,6 @@ #define SWITCH_READ_ACCEPTABLE(status) status == SWITCH_STATUS_SUCCESS || status == SWITCH_STATUS_BREAK SWITCH_DECLARE(size_t) switch_url_encode(char *url, char *buf, size_t len); SWITCH_DECLARE(char *) switch_url_decode(char *s); -END_EXTERN_C +SWITCH_END_EXTERN_C #endif Modified: freeswitch/branches/james/src/include/switch_xml.h ============================================================================== --- freeswitch/branches/james/src/include/switch_xml.h (original) +++ freeswitch/branches/james/src/include/switch_xml.h Sun Sep 10 07:09:34 2006 @@ -65,7 +65,7 @@ ///\defgroup xml1 XML Library Functions ///\ingroup core1 ///\{ -BEGIN_EXTERN_C +SWITCH_BEGIN_EXTERN_C #define SWITCH_XML_BUFSIZE 1024 // size of internal memory buffers @@ -331,7 +331,7 @@ ///\return the section mask SWITCH_DECLARE(switch_xml_section_t) switch_xml_parse_section_string(char *str); -END_EXTERN_C +SWITCH_END_EXTERN_C ///\} Modified: freeswitch/branches/james/src/mod/applications/mod_commands/mod_commands.c ============================================================================== --- freeswitch/branches/james/src/mod/applications/mod_commands/mod_commands.c (original) +++ freeswitch/branches/james/src/mod/applications/mod_commands/mod_commands.c Sun Sep 10 07:09:34 2006 @@ -260,7 +260,7 @@ return SWITCH_STATUS_SUCCESS; } - if (switch_ivr_originate(NULL, &caller_session, aleg, timeout, NULL, cid_name, cid_num, NULL) != SWITCH_STATUS_SUCCESS) { + if (switch_ivr_originate(NULL, &caller_session, aleg, timeout, &noop_state_handler, cid_name, cid_num, NULL) != SWITCH_STATUS_SUCCESS) { stream->write_function(stream, "Cannot Create Outgoing Channel! [%s]\n", aleg); return SWITCH_STATUS_SUCCESS; } @@ -268,10 +268,33 @@ caller_channel = switch_core_session_get_channel(caller_session); assert(caller_channel != NULL); switch_channel_clear_state_handler(caller_channel, NULL); - switch_core_session_rwunlock(caller_session); - switch_ivr_session_transfer(caller_session, exten, dp, context); + if (*exten == '&') { + switch_caller_extension_t *extension = NULL; + char *app_name = switch_core_session_strdup(caller_session, (exten + 1)); + char *arg, *e; + + if ((e = strchr(app_name, ')'))) { + *e = '\0'; + } + + if ((arg = strchr(app_name, '('))) { + *arg++ = '\0'; + } + + if ((extension = switch_caller_extension_new(caller_session, app_name, arg)) == 0) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "memory error!\n"); + switch_channel_hangup(caller_channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); + return SWITCH_STATUS_MEMERR; + } + switch_caller_extension_add_application(caller_session, extension, app_name, arg); + switch_channel_set_caller_extension(caller_channel, extension); + switch_channel_set_state(caller_channel, CS_EXECUTE); + } else { + switch_ivr_session_transfer(caller_session, exten, dp, context); + } + stream->write_function(stream, "Created Session: %s\n", switch_core_session_get_uuid(caller_session)); return SWITCH_STATUS_SUCCESS;; } Modified: freeswitch/branches/james/src/mod/applications/mod_conference/mod_conference.c ============================================================================== --- freeswitch/branches/james/src/mod/applications/mod_conference/mod_conference.c (original) +++ freeswitch/branches/james/src/mod/applications/mod_conference/mod_conference.c Sun Sep 10 07:09:34 2006 @@ -40,6 +40,10 @@ #define CONF_EVENT_MAINT "conference::maintenence" #define CONF_DEFAULT_LEADIN 20 +#define CONF_DBLOCK_SIZE CONF_BUFFER_SIZE +#define CONF_DBUFFER_SIZE CONF_BUFFER_SIZE +#define CONF_DBUFFER_MAX 0 + typedef enum { FILE_STOP_CURRENT, FILE_STOP_ALL @@ -197,6 +201,7 @@ switch_core_session_t *session, char *bridgeto, uint32_t timeout, + char *flags, char *cid_name, char *cid_num); static void conference_function(switch_core_session_t *session, char *data); @@ -223,10 +228,6 @@ } -#define SMAX 32767 -#define SMIN -32768 -#define normalize_to_16bit(n) if (n > SMAX) n = SMAX; else if (n < SMIN) n = SMIN; - static void switch_change_sln_volume(int16_t *data, uint32_t samples, int32_t vol) { int16_t *p = data; @@ -244,7 +245,7 @@ for (x = 0; x < samples; x++) { b = (int32_t)((double)p[x] * mult); - normalize_to_16bit(b); + switch_normalize_to_16bit(b); p[x] = (int16_t) b; } } @@ -595,7 +596,7 @@ for (x = 0; x < imember->read / 2; x++) { int32_t z = muxed[x] + bptr[x]; - normalize_to_16bit(z); + switch_normalize_to_16bit(z); muxed[x] = (int16_t)z; } @@ -1018,7 +1019,7 @@ } #ifdef WIN32 - if (file[1] != ':') { + if (*(file +1) != ':' && *file != '/') { #else if (*file != '/') { #endif @@ -1399,7 +1400,7 @@ goto done; } else if (!strcasecmp(argv[1], "dial")) { if (argc > 2) { - conference_outcall(conference, NULL, argv[2], 60, argv[3], argv[4]); + conference_outcall(conference, NULL, argv[2], 60, argv[3], argv[4], argv[5]); stream->write_function(stream, "OK\n"); goto done; } else { @@ -1557,7 +1558,6 @@ conference_member_t *member; if ((member = conference_member_get(conference, id))) { - switch_clear_flag_locked(member, MFLAG_CAN_SPEAK); if (argv[3]) { switch_mutex_lock(member->flag_mutex); @@ -1595,7 +1595,6 @@ conference_member_t *member; if ((member = conference_member_get(conference, id))) { - switch_clear_flag_locked(member, MFLAG_CAN_SPEAK); if (argv[3]) { switch_mutex_lock(member->flag_mutex); @@ -1633,7 +1632,6 @@ conference_member_t *member; if ((member = conference_member_get(conference, id))) { - switch_clear_flag_locked(member, MFLAG_CAN_SPEAK); if (argv[3]) { switch_mutex_lock(member->flag_mutex); @@ -2037,6 +2035,7 @@ switch_core_session_t *session, char *bridgeto, uint32_t timeout, + char *flags, char *cid_name, char *cid_num) { @@ -2044,6 +2043,7 @@ switch_channel_t *peer_channel; switch_status_t status = SWITCH_STATUS_SUCCESS; switch_channel_t *caller_channel = NULL; + char appdata[512]; if (switch_ivr_originate(session, &peer_session, bridgeto, timeout, &audio_bridge_peer_state_handlers, cid_name, cid_num, NULL) != SWITCH_STATUS_SUCCESS) { @@ -2071,7 +2071,13 @@ goto done; } /* add them to the conference */ - switch_caller_extension_add_application(peer_session, extension, (char *) global_app_name, conference->name); + if (flags) { + snprintf(appdata, sizeof(appdata), "%s +flags{%s}", conference->name, flags); + switch_caller_extension_add_application(peer_session, extension, (char *) global_app_name, appdata); + } else { + switch_caller_extension_add_application(peer_session, extension, (char *) global_app_name, conference->name); + } + switch_channel_set_caller_extension(peer_channel, extension); switch_channel_set_state(peer_channel, CS_EXECUTE); @@ -2177,23 +2183,19 @@ *dpin++ = '\0'; } - /* Open the config from the xml registry */ - if (!(cxml = switch_xml_open_cfg(global_cf_name, &cfg, NULL))) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", global_cf_name); - goto done; - } - if ((profile_name = strchr(conf_name, '@'))) { *profile_name++ = '\0'; + /* Open the config from the xml registry */ + if (!(cxml = switch_xml_open_cfg(global_cf_name, &cfg, NULL))) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "open of %s failed\n", global_cf_name); + goto done; + } + if ((profiles = switch_xml_child(cfg, "profiles"))) { profile = switch_xml_find_child(profiles, "profile", "name", profile_name); } - } else { - if ((profiles = switch_xml_child(cfg, "profiles"))) { - profile = switch_xml_find_child(profiles, "profile", "name", "default"); - } - } + } if (isbr) { char *uuid = switch_core_session_get_uuid(session); @@ -2306,7 +2308,7 @@ if (!switch_strlen_zero(bridgeto) && strcasecmp(bridgeto, "none")) { - if (conference_outcall(conference, session, bridgeto, 60, NULL, NULL) != SWITCH_STATUS_SUCCESS) { + if (conference_outcall(conference, session, bridgeto, 60, NULL, NULL, NULL) != SWITCH_STATUS_SUCCESS) { goto done; } } @@ -2349,7 +2351,7 @@ switch_core_session_get_pool(session)); /* Setup an audio buffer for the resampled audio */ - if (switch_buffer_create(pool, &member.resample_buffer, CONF_BUFFER_SIZE) != SWITCH_STATUS_SUCCESS) { + if (switch_buffer_create_dynamic(&member.resample_buffer, CONF_DBLOCK_SIZE, CONF_DBUFFER_SIZE, CONF_DBUFFER_MAX) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error Creating Audio Buffer!\n"); goto done; } @@ -2375,13 +2377,13 @@ } /* Setup an audio buffer for the incoming audio */ - if (switch_buffer_create(pool, &member.audio_buffer, CONF_BUFFER_SIZE) != SWITCH_STATUS_SUCCESS) { + if (switch_buffer_create_dynamic(&member.audio_buffer, CONF_DBLOCK_SIZE, CONF_DBUFFER_SIZE, CONF_DBUFFER_MAX) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error Creating Audio Buffer!\n"); goto codec_done1; } /* Setup an audio buffer for the outgoing audio */ - if (switch_buffer_create(pool, &member.mux_buffer, CONF_BUFFER_SIZE) != SWITCH_STATUS_SUCCESS) { + if (switch_buffer_create_dynamic(&member.mux_buffer, CONF_DBLOCK_SIZE, CONF_DBUFFER_SIZE, CONF_DBUFFER_MAX) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error Creating Audio Buffer!\n"); goto codec_done1; } @@ -2429,6 +2431,10 @@ switch_core_codec_destroy(&member.write_codec); done: + switch_buffer_destroy(&member.resample_buffer); + switch_buffer_destroy(&member.audio_buffer); + switch_buffer_destroy(&member.mux_buffer); + /* Release the config registry handle */ if (cxml) { switch_xml_free(cxml); Modified: freeswitch/branches/james/src/mod/applications/mod_playback/mod_playback.c ============================================================================== --- freeswitch/branches/james/src/mod/applications/mod_playback/mod_playback.c (original) +++ freeswitch/branches/james/src/mod/applications/mod_playback/mod_playback.c Sun Sep 10 07:09:34 2006 @@ -133,6 +133,26 @@ } +static void record_session_function(switch_core_session_t *session, char *data) +{ + switch_channel_t *channel; + channel = switch_core_session_get_channel(session); + assert(channel != NULL); + + switch_ivr_record_session(session, data, NULL); +} + + +static void stop_record_session_function(switch_core_session_t *session, char *data) +{ + switch_channel_t *channel; + channel = switch_core_session_get_channel(session); + assert(channel != NULL); + + switch_ivr_stop_record_session(session, data); +} + + static const switch_application_interface_t speak_application_interface = { /*.interface_name */ "speak", /*.application_function */ speak_function @@ -145,11 +165,27 @@ &speak_application_interface }; + +static const switch_application_interface_t record_session_application_interface = { + /*.interface_name */ "record_session", + /*.application_function */ record_session_function, + NULL,NULL,NULL, + &record_application_interface +}; + + +static const switch_application_interface_t stop_record_session_application_interface = { + /*.interface_name */ "stop_record_session", + /*.application_function */ stop_record_session_function, + NULL,NULL,NULL, + &record_session_application_interface +}; + static const switch_application_interface_t playback_application_interface = { /*.interface_name */ "playback", /*.application_function */ playback_function, NULL,NULL,NULL, - /*.next*/ &record_application_interface + /*.next*/ &stop_record_session_application_interface }; static const switch_loadable_module_interface_t mod_playback_module_interface = { Modified: freeswitch/branches/james/src/mod/asr_tts/mod_cepstral/mod_cepstral.c ============================================================================== --- freeswitch/branches/james/src/mod/asr_tts/mod_cepstral/mod_cepstral.c (original) +++ freeswitch/branches/james/src/mod/asr_tts/mod_cepstral/mod_cepstral.c Sun Sep 10 07:09:34 2006 @@ -42,7 +42,8 @@ #include <swift.h> #include <switch.h> -#define MY_BUF_LEN 1024 * 256 +#define MY_BUF_LEN 1024 * 32 +#define MY_BLOCK_SIZE MY_BUF_LEN static const char modname[] = "mod_cepstral"; @@ -119,7 +120,7 @@ return SWITCH_STATUS_MEMERR; } - if (switch_buffer_create(sh->memory_pool, &cepstral->audio_buffer, MY_BUF_LEN) != SWITCH_STATUS_SUCCESS) { + if (switch_buffer_create_dynamic(&cepstral->audio_buffer, MY_BLOCK_SIZE, MY_BUF_LEN, 0) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Write Buffer Failed!\n"); return SWITCH_STATUS_MEMERR; } @@ -195,6 +196,8 @@ cepstral->port = NULL; //cepstral->engine = NULL; + switch_buffer_destroy(&cepstral->audio_buffer); + return SWITCH_STATUS_SUCCESS; } Modified: freeswitch/branches/james/src/mod/codecs/mod_g722/mod_g722.c ============================================================================== --- freeswitch/branches/james/src/mod/codecs/mod_g722/mod_g722.c (original) +++ freeswitch/branches/james/src/mod/codecs/mod_g722/mod_g722.c Sun Sep 10 07:09:34 2006 @@ -53,16 +53,22 @@ if (!(encoding || decoding) || (!(context = switch_core_alloc(codec->memory_pool, sizeof(struct g722_context))))) { return SWITCH_STATUS_FALSE; } else { - if (!(encoding || decoding)) { - - if (encoding) { + if (encoding) { + if(codec->implementation->samples_per_second == 16000){ g722_encode_init(&context->encoder_object, 64000, G722_PACKED); + } else { + g722_encode_init(&context->encoder_object, 64000, G722_SAMPLE_RATE_8000); } - if (decoding) { + } + if (decoding) { + if(codec->implementation->samples_per_second == 16000){ g722_decode_init(&context->decoder_object, 64000, G722_PACKED); + } else { + g722_decode_init(&context->decoder_object, 64000, G722_SAMPLE_RATE_8000); } } } + codec->private_info = context; return SWITCH_STATUS_SUCCESS; } @@ -115,7 +121,7 @@ /* Registration */ -static const switch_codec_implementation_t g722_implementation = { +static const switch_codec_implementation_t g722_8k_implementation = { /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, /*.ianacode */ 9, /*.iananame */ "G722", @@ -132,12 +138,31 @@ /*.encode */ switch_g722_encode, /*.decode */ switch_g722_decode, /*.destroy */ switch_g722_destroy, - ///*.next */ &g711u_16k_implementation }; +static const switch_codec_implementation_t g722_16k_implementation = { + /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, + /*.ianacode */ 9, + /*.iananame */ "G722", + /*.samples_per_second */ 16000, + /*.bits_per_second */ 64000, + /*.microseconds_per_frame */ 20000, + /*.samples_per_frame */ 160, + /*.bytes_per_frame */ 320, + /*.encoded_bytes_per_frame */ 160, + /*.number_of_channels */ 1, + /*.pref_frames_per_packet */ 1, + /*.max_frames_per_packet */ 1, + /*.init */ switch_g722_init, + /*.encode */ switch_g722_encode, + /*.decode */ switch_g722_decode, + /*.destroy */ switch_g722_destroy, + /*.next */ &g722_8k_implementation +}; + static const switch_codec_interface_t g722_codec_interface = { /*.interface_name */ "g722", - /*.implementations */ &g722_implementation + /*.implementations */ &g722_16k_implementation }; static switch_loadable_module_interface_t g722_module_interface = { Modified: freeswitch/branches/james/src/mod/codecs/mod_g723_1/mod_g723_1.c ============================================================================== --- freeswitch/branches/james/src/mod/codecs/mod_g723_1/mod_g723_1.c (original) +++ freeswitch/branches/james/src/mod/codecs/mod_g723_1/mod_g723_1.c Sun Sep 10 07:09:34 2006 @@ -32,6 +32,8 @@ * */ #include "switch.h" + +#ifndef G723_PASSTHROUGH #include "g723.h" #define TYPE_HIGH 0x0 @@ -45,19 +47,26 @@ Flag UseVx = True; enum Crate WrkRate = Rate63; +#endif static const char modname[] = "mod_g723_1"; +#ifndef G723_PASSTHROUGH struct g723_context { struct cod_state encoder_object; struct dec_state decoder_object; float cod_float_buf[Frame]; float dec_float_buf[Frame]; }; +#endif static switch_status_t switch_g723_init(switch_codec_t *codec, switch_codec_flag_t flags, const switch_codec_settings_t *codec_settings) { +#ifdef G723_PASSTHROUGH + codec->flags |= SWITCH_CODEC_FLAG_PASSTHROUGH; + return SWITCH_STATUS_FALSE; +#else struct g723_context *context = NULL; int encoding, decoding; @@ -85,12 +94,15 @@ return SWITCH_STATUS_SUCCESS; } +#endif } static switch_status_t switch_g723_destroy(switch_codec_t *codec) { +#ifndef G723_PASSTHROUGH codec->private_info = NULL; +#endif return SWITCH_STATUS_SUCCESS; } @@ -106,6 +118,10 @@ uint32_t *encoded_rate, unsigned int *flag) { +#ifdef G723_PASSTHROUGH + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "This codec is only usable in passthrough mode!\n"); + return SWITCH_STATUS_FALSE; +#else struct g723_context *context = codec->private_info; int16_t *decoded_slin_buf = (int16_t *) decoded_data; char *ebuf = (char *) encoded_data; @@ -123,6 +139,7 @@ *encoded_data_len = codec->implementation->encoded_bytes_per_frame; return SWITCH_STATUS_SUCCESS; +#endif } static switch_status_t switch_g723_decode(switch_codec_t *codec, @@ -137,6 +154,10 @@ uint32_t *decoded_rate, unsigned int *flag) { +#ifdef G723_PASSTHROUGH + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "This codec is only usable in passthrough mode!\n"); + return SWITCH_STATUS_FALSE; +#else struct g723_context *context = codec->private_info; int x; int16_t *to_slin_buf = decoded_data; @@ -153,11 +174,12 @@ *decoded_data_len = codec->implementation->bytes_per_frame; return SWITCH_STATUS_SUCCESS; +#endif } /* Registration */ -static const switch_codec_implementation_t g723_1_30ms_implementation = { +static const switch_codec_implementation_t g723_1_implementation = { /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, /*.ianacode */ 4, /*.iananame */ "G723", @@ -169,49 +191,24 @@ /*.encoded_bytes_per_frame */ 24, /*.number_of_channels */ 1, /*.pref_frames_per_packet */ 1, - /*.max_frames_per_packet */ 2, + /*.max_frames_per_packet */ 4, /*.init */ switch_g723_init, /*.encode */ switch_g723_encode, /*.decode */ switch_g723_decode, /*.destroy */ switch_g723_destroy, }; -#if 0 -static const switch_codec_implementation_t g723_1_60ms_implementation = { - /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, - /*.ianacode */ 4, - /*.iananame */ "G723", - /*.samples_per_second */ 8000, - /*.bits_per_second */ 6300, - /*.microseconds_per_frame */ 60000, - /*.samples_per_frame */ 240, - /*.bytes_per_frame */ 480, - /*.encoded_bytes_per_frame */ 24, - /*.number_of_channels */ 1, - /*.pref_frames_per_packet */ 2, - /*.max_frames_per_packet */ 2, - /*.init */ switch_g723_init, - /*.encode */ switch_g723_encode, - /*.decode */ switch_g723_decode, - /*.destroy */ switch_g723_destroy, -}; -#endif -static const switch_codec_interface_t g723_1_30ms_codec_interface = { + +static const switch_codec_interface_t g723_1_codec_interface = { /*.interface_name */ "g723.1 6.3k", - /*.implementations */ &g723_1_30ms_implementation, + /*.implementations */ &g723_1_implementation, }; -#if 0 -static const switch_codec_interface_t g723_1_60ms_codec_interface = { - /*.interface_name */ "g723.1 6.3k", - /*.implementations */ &g723_1_60ms_implementation, - /*.next */ &g723_1_30ms_codec_interface -}; -#endif + static switch_loadable_module_interface_t g723_module_interface = { /*.module_name */ modname, /*.endpoint_interface */ NULL, /*.timer_interface */ NULL, /*.dialplan_interface */ NULL, - /*.codec_interface */ &g723_1_30ms_codec_interface, + /*.codec_interface */ &g723_1_codec_interface, /*.application_interface */ NULL }; Modified: freeswitch/branches/james/src/mod/codecs/mod_g729/mod_g729.c ============================================================================== --- freeswitch/branches/james/src/mod/codecs/mod_g729/mod_g729.c (original) +++ freeswitch/branches/james/src/mod/codecs/mod_g729/mod_g729.c Sun Sep 10 07:09:34 2006 @@ -31,20 +31,27 @@ * mod_g729.c -- G729 Codec Module * */ -#include "switch.h" -#include "g729.h" static const char modname[] = "mod_g729"; +#include "switch.h" + +#ifndef G729_PASSTHROUGH +#include "g729.h" + struct g729_context { struct dec_state decoder_object; struct cod_state encoder_object; }; +#endif static switch_status_t switch_g729_init(switch_codec_t *codec, switch_codec_flag_t flags, const switch_codec_settings_t *codec_settings) { - +#ifdef G729_PASSTHROUGH + codec->flags |= SWITCH_CODEC_FLAG_PASSTHROUGH; + return SWITCH_STATUS_SUCCESS; +#else struct g729_context *context = NULL; int encoding, decoding; @@ -68,11 +75,14 @@ return SWITCH_STATUS_SUCCESS; } +#endif } static switch_status_t switch_g729_destroy(switch_codec_t *codec) { +#ifndef G729_PASSTHROUGH codec->private_info = NULL; +#endif return SWITCH_STATUS_SUCCESS; } @@ -88,6 +98,10 @@ uint32_t *encoded_rate, unsigned int *flag) { +#ifdef G729_PASSTHROUGH + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "This codec is only usable in passthrough mode!\n"); + return SWITCH_STATUS_FALSE; +#else struct g729_context *context = codec->private_info; int cbret = 0; @@ -117,6 +131,7 @@ } } return SWITCH_STATUS_SUCCESS; +#endif } static switch_status_t switch_g729_decode(switch_codec_t *codec, @@ -131,6 +146,10 @@ uint32_t *decoded_rate, unsigned int *flag) { +#ifdef G729_PASSTHROUGH + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "This codec is only usable in passthrough mode!\n"); + return SWITCH_STATUS_FALSE; +#else struct g729_context *context = codec->private_info; int divisor = 10; int plen = 10; @@ -194,6 +213,7 @@ return SWITCH_STATUS_FALSE; } return SWITCH_STATUS_SUCCESS; +#endif } /* Registration */ @@ -237,49 +257,9 @@ &g729_10ms_8k_implementation }; -static const switch_codec_implementation_t g729a_10ms_8k_implementation = { - /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, - /*.ianacode */ 18, - /*.iananame */ "G729a", - /*.samples_per_second */ 8000, - /*.bits_per_second */ 32000, - /*.microseconds_per_frame */ 10000, - /*.samples_per_frame */ 80, - /*.bytes_per_frame */ 160, - /*.encoded_bytes_per_frame */ 10, - /*.number_of_channels */ 1, - /*.pref_frames_per_packet */ 1, - /*.max_frames_per_packet */ 1, - /*.init */ switch_g729_init, - /*.encode */ switch_g729_encode, - /*.decode */ switch_g729_decode, - /*.destroy */ switch_g729_destroy, - &g729_8k_implementation -}; - -static const switch_codec_implementation_t g729a_8k_implementation = { - /*.codec_type */ SWITCH_CODEC_TYPE_AUDIO, - /*.ianacode */ 18, - /*.iananame */ "G729a", - /*.samples_per_second */ 8000, - /*.bits_per_second */ 64000, - /*.microseconds_per_frame */ 20000, - /*.samples_per_frame */ 160, - /*.bytes_per_frame */ 320, - /*.encoded_bytes_per_frame */ 20, - /*.number_of_channels */ 1, - /*.pref_frames_per_packet */ 1, - /*.max_frames_per_packet */ 1, - /*.init */ switch_g729_init, - /*.encode */ switch_g729_encode, - /*.decode */ switch_g729_decode, - /*.destroy */ switch_g729_destroy, - &g729a_10ms_8k_implementation -}; - static const switch_codec_interface_t g729_codec_interface = { /*.interface_name */ "g729", - /*.implementations */ &g729a_8k_implementation, + /*.implementations */ &g729_8k_implementation, }; static switch_loadable_module_interface_t g729_module_interface = { Modified: freeswitch/branches/james/src/mod/codecs/mod_g729/mod_g729.vcproj ============================================================================== --- freeswitch/branches/james/src/mod/codecs/mod_g729/mod_g729.vcproj (original) +++ freeswitch/branches/james/src/mod/codecs/mod_g729/mod_g729.vcproj Sun Sep 10 07:09:34 2006 @@ -25,7 +25,7 @@ > <Tool Name="VCPreBuildEventTool" - CommandLine="cscript /nologo "$(InputDir)..\..\..\..\w32\vsnet\getlibs.vbs" Mod_CodecG729 Debug" + CommandLine="" /> <Tool Name="VCCustomBuildTool" @@ -109,7 +109,7 @@ > <Tool Name="VCPreBuildEventTool" - CommandLine="cscript /nologo "$(InputDir)..\..\..\..\w32\vsnet\getlibs.vbs" Mod_CodecG729 Release" + CommandLine="" /> <Tool Name="VCCustomBuildTool" @@ -145,6 +145,170 @@ <Tool Name="VCLinkerTool" AdditionalDependencies="libg729.lib FreeSwitchCore.lib" + OutputFile="$(SolutionDir)$(OutDir)/mod/$(InputName).dll" + LinkIncremental="1" + AdditionalLibraryDirectories="..\..\..\..\w32\vsnet\$(OutDir)" + GenerateDebugInformation="true" + ProgramDatabaseFile="$(OutDir)$(TargetName).pdb" + SubSystem="2" + OptimizeReferences="2" + EnableCOMDATFolding="2" + ImportLibrary="$(OutDir)/mod_g729.lib" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Debug Passthrough|Win32" + OutputDirectory="$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + CommandLine="" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + Optimization="0" + AdditionalIncludeDirectories=""$(InputDir)..\..\..\include";"$(InputDir)..\..\..\..\libs\include";"$(InputDir)..\..\..\..\libs\codec\libg729\src\include"" + PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS;G729_PASSTHROUGH" + MinimalRebuild="true" + BasicRuntimeChecks="3" + RuntimeLibrary="1" + UsePrecompiledHeader="0" + WarningLevel="4" + WarnAsError="true" + Detect64BitPortabilityProblems="true" + DebugInformationFormat="3" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" + OutputFile="$(SolutionDir)$(OutDir)/mod/$(InputName).dll" + LinkIncremental="1" + AdditionalLibraryDirectories="..\..\..\..\w32\vsnet\$(OutDir)" + GenerateDebugInformation="true" + ProgramDatabaseFile="$(OutDir)$(TargetName).pdb" + SubSystem="2" + ImportLibrary="$(OutDir)/mod_g729.lib" + TargetMachine="1" + /> + <Tool + Name="VCALinkTool" + /> + <Tool + Name="VCManifestTool" + /> + <Tool + Name="VCXDCMakeTool" + /> + <Tool + Name="VCBscMakeTool" + /> + <Tool + Name="VCFxCopTool" + /> + <Tool + Name="VCAppVerifierTool" + /> + <Tool + Name="VCWebDeploymentTool" + /> + <Tool + Name="VCPostBuildEventTool" + /> + </Configuration> + <Configuration + Name="Release Passthrough|Win32" + OutputDirectory="$(ConfigurationName)" + IntermediateDirectory="$(ConfigurationName)" + ConfigurationType="2" + InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" + CharacterSet="2" + > + <Tool + Name="VCPreBuildEventTool" + CommandLine="" + /> + <Tool + Name="VCCustomBuildTool" + /> + <Tool + Name="VCXMLDataGeneratorTool" + /> + <Tool + Name="VCWebServiceProxyGeneratorTool" + /> + <Tool + Name="VCMIDLTool" + /> + <Tool + Name="VCCLCompilerTool" + AdditionalIncludeDirectories=""$(InputDir)..\..\..\include";"$(InputDir)..\..\..\..\libs\include";"$(InputDir)..\..\..\..\libs\codec\libg729\src\include"" + PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS;G729_PASSTHROUGH" + RuntimeLibrary="0" + UsePrecompiledHeader="0" + WarningLevel="4" + Detect64BitPortabilityProblems="true" + DebugInformationFormat="3" + /> + <Tool + Name="VCManagedResourceCompilerTool" + /> + <Tool + Name="VCResourceCompilerTool" + /> + <Tool + Name="VCPreLinkEventTool" + /> + <Tool + Name="VCLinkerTool" OutputFile="$(SolutionDir)$(OutDir)/mod/$(InputName).dll" LinkIncremental="1" AdditionalLibraryDirectories="..\..\..\..\w32\vsnet\$(OutDir)" Modified: freeswitch/branches/james/src/mod/endpoints/mod_dingaling/mod_dingaling.c ============================================================================== --- freeswitch/branches/james/src/mod/endpoints/mod_dingaling/mod_dingaling.c (original) +++ freeswitch/branches/james/src/mod/endpoints/mod_dingaling/mod_dingaling.c Sun Sep 10 07:09:34 2006 @@ -283,17 +283,13 @@ { switch_channel_t *channel = switch_core_session_get_channel(tech_pvt->session); const char *err; - int ms = 20; + int ms = 0; switch_rtp_flag_t flags; if (switch_rtp_ready(tech_pvt->rtp_session)) { return 1; } - if (!strncasecmp(tech_pvt->codec_name, "ilbc", 4)) { - ms = 30; - } - if (switch_core_codec_init(&tech_pvt->read_codec, tech_pvt->codec_name, tech_pvt->codec_rate, @@ -1693,6 +1689,7 @@ if (!strncasecmp(name, "ilbc", 4)) { name = "ilbc"; } + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "compare %s %d to %s %d\n", payloads[x].name, payloads[x].id, name, tech_pvt->codecs[y]->ianacode); if (tech_pvt->codecs[y]->ianacode > 96) { match = strcasecmp(name, payloads[x].name) ? 0 : 1; } else { Modified: freeswitch/branches/james/src/mod/endpoints/mod_exosip/mod_exosip.c ============================================================================== --- freeswitch/branches/james/src/mod/endpoints/mod_exosip/mod_exosip.c (original) +++ freeswitch/branches/james/src/mod/endpoints/mod_exosip/mod_exosip.c Sun Sep 10 07:09:34 2006 @@ -1439,17 +1439,13 @@ { int rate = atoi(drate); - int ms = globals.codec_ms; + int ms = 0; //globals.codec_ms; if (imp) { ms = imp->microseconds_per_frame / 1000; } - if (!strcasecmp(dname, "ilbc")) { - ms = 30; - } - if (switch_core_codec_init(&tech_pvt->read_codec, dname, rate, @@ -1938,12 +1934,8 @@ if (!switch_test_flag(tech_pvt, TFLAG_USING_CODEC)) { int rate = atoi(drate); - int ms = globals.codec_ms; + int ms = 0; //globals.codec_ms; - if (!strcasecmp(dname, "ilbc")) { - ms = 30; - } - if (imp) { ms = imp->microseconds_per_frame / 1000; } @@ -2273,7 +2265,7 @@ } if (!globals.codec_ms) { - globals.codec_ms = 20; + globals.codec_ms = 0; } if (!globals.port) { Modified: freeswitch/branches/james/src/mod/endpoints/mod_sofia/mod_sofia.c ============================================================================== --- freeswitch/branches/james/src/mod/endpoints/mod_sofia/mod_sofia.c (original) +++ freeswitch/branches/james/src/mod/endpoints/mod_sofia/mod_sofia.c Sun Sep 10 07:09:34 2006 @@ -550,7 +550,11 @@ if (tech_pvt->nh) { if (!switch_test_flag(tech_pvt, TFLAG_BYE)) { - nua_bye(tech_pvt->nh, TAG_END()); + if (switch_test_flag(tech_pvt, TFLAG_ANS)) { + nua_bye(tech_pvt->nh, TAG_END()); + } else { + nua_cancel(tech_pvt->nh, TAG_END()); + } } nua_handle_bind(tech_pvt->nh, NULL); nua_handle_destroy(tech_pvt->nh); @@ -833,8 +837,13 @@ if (tech_pvt->read_frame.datalen > 0) { tech_pvt->last_read = switch_time_now(); - bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_frame; - frames = (tech_pvt->read_frame.datalen / bytes); + + if (tech_pvt->read_codec.implementation->encoded_bytes_per_frame) { + bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_frame; + frames = (tech_pvt->read_frame.datalen / bytes); + } else + frames = 1; + samples = frames * tech_pvt->read_codec.implementation->samples_per_frame; ms = frames * tech_pvt->read_codec.implementation->microseconds_per_frame; tech_pvt->timestamp_recv += (int32_t) samples; @@ -884,8 +893,12 @@ switch_set_flag_locked(tech_pvt, TFLAG_WRITING); - bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_frame; - frames = ((int) frame->datalen / bytes); + if (tech_pvt->read_codec.implementation->encoded_bytes_per_frame) { + bytes = tech_pvt->read_codec.implementation->encoded_bytes_per_frame; + frames = ((int) frame->datalen / bytes); + } else + frames = 1; + samples = frames * tech_pvt->read_codec.implementation->samples_per_frame; #if 0 @@ -1652,6 +1665,8 @@ profile->name = switch_core_strdup(profile->pool, xprofilename); profile->dtmf_duration = 100; + profile->codec_ms = 20; + for (param = switch_xml_child(xprofile, "param"); param; param = param->next) { char *var = (char *) switch_xml_attr_soft(param, "name"); char *val = (char *) switch_xml_attr_soft(param, "value"); @@ -1729,10 +1744,6 @@ profile->rtpip = switch_core_strdup(profile->pool, "127.0.0.1"); } - if (!profile->codec_ms) { - profile->codec_ms = 20; - } - if (!profile->sip_port) { profile->sip_port = 5060; } Modified: freeswitch/branches/james/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c ============================================================================== --- freeswitch/branches/james/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c (original) +++ freeswitch/branches/james/src/mod/endpoints/mod_wanpipe/mod_wanpipe.c Sun Sep 10 07:09:34 2006 @@ -370,6 +370,8 @@ teletone_destroy_session(&tech_pvt->tone_session); + switch_buffer_destroy(&tech_pvt->dtmf_buffer); + return SWITCH_STATUS_SUCCESS; } @@ -623,7 +625,7 @@ if (!tech_pvt->dtmf_buffer) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Allocate DTMF Buffer...."); - if (switch_buffer_create(switch_core_session_get_pool(session), &tech_pvt->dtmf_buffer, 3192) != SWITCH_STATUS_SUCCESS) { + if (switch_buffer_create_dynamic(&tech_pvt->dtmf_buffer, 1024, 3192, 0) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_ERROR, "Failed to allocate DTMF Buffer!\n"); return SWITCH_STATUS_FALSE; } else { Modified: freeswitch/branches/james/src/mod/event_handlers/mod_event_socket/mod_event_socket.c ============================================================================== --- freeswitch/branches/james/src/mod/event_handlers/mod_event_socket/mod_event_socket.c (original) +++ freeswitch/branches/james/src/mod/event_handlers/mod_event_socket/mod_event_socket.c Sun Sep 10 07:09:34 2006 @@ -56,10 +56,10 @@ switch_mutex_t *flag_mutex; uint32_t flags; switch_log_level_t level; - char *retbuf; char *ebuf; uint8_t event_list[SWITCH_EVENT_ALL+1]; switch_hash_t *event_hash; + switch_thread_rwlock_t *rwlock; struct listener *next; }; @@ -282,17 +282,20 @@ if (count == 1) { switch_event_create(event, SWITCH_EVENT_MESSAGE); switch_event_add_header(*event, SWITCH_STACK_BOTTOM, "Command", mbuf); - } else { + } else if (cur) { char *var, *val; - var = mbuf; - if ((val = strchr(var, ':'))) { - *val++ = '\0'; - while(*val == ' ') { - val++; + var = cur; + strip_cr(var); + if (!switch_strlen_zero(var)) { + if ((val = strchr(var, ':'))) { + *val++ = '\0'; + while(*val == ' ') { + val++; + } + } + if (var && val) { + switch_event_add_header(*event, SWITCH_STACK_BOTTOM, var, val); } - } - if (var && val) { - switch_event_add_header(*event, SWITCH_STACK_BOTTOM, var, val); } } @@ -385,6 +388,71 @@ } +struct api_command_struct { + char *api_cmd; + char *arg; + listener_t *listener; + char uuid_str[SWITCH_UUID_FORMATTED_LENGTH + 1]; + uint8_t bg; +}; + +static void *SWITCH_THREAD_FUNC api_exec(switch_thread_t *thread, void *obj) +{ + + struct api_command_struct *acs = (struct api_command_struct *) obj; + switch_stream_handle_t stream = {0}; + + if (switch_thread_rwlock_tryrdlock(acs->listener->rwlock) != SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error! cannot get read lock.\n"); + goto done; + } + + + SWITCH_STANDARD_STREAM(stream); + + if (stream.data) { + if (switch_api_execute(acs->api_cmd, acs->arg, NULL, &stream) == SWITCH_STATUS_SUCCESS) { + + if (acs->bg) { + switch_event_t *event; + + if (switch_event_create(&event, SWITCH_EVENT_BACKGROUND_JOB) == SWITCH_STATUS_SUCCESS) { + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Job-UUID", acs->uuid_str); + switch_event_add_body(event, stream.data); + switch_event_fire(&event); + } + } else { + switch_size_t len; + char buf[1024]; + len = strlen(stream.data) + 1; + snprintf(buf, sizeof(buf), "Content-Type: api/response\nContent-Length: %"APR_SSIZE_T_FMT"\n\n", len); + len = strlen(buf) + 1; + switch_socket_send(acs->listener->sock, buf, &len); + len = strlen(stream.data) + 1; + switch_socket_send(acs->listener->sock, stream.data, &len); + } + } + free(stream.data); + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error!\n"); + } + + switch_thread_rwlock_unlock(acs->listener->rwlock); + + + done: + if (acs && acs->bg) { + if (acs->api_cmd) { + free(acs->api_cmd); + } + if (acs->arg) { + free(acs->arg); + } + free(acs); + } + return NULL; + +} static switch_status_t parse_command(listener_t *listener, switch_event_t *event, char *reply, uint32_t reply_len) { switch_status_t status = SWITCH_STATUS_SUCCESS; @@ -419,38 +487,98 @@ goto done; } - if (!strncasecmp(cmd, "api ", 4)) { + if (!strncasecmp(cmd, "sendmsg", 7)) { + switch_core_session_t *session; + char *uuid = cmd + 8; + + + if (uuid) { + while(*uuid == ' ') { + uuid++; + } + strip_cr(uuid); + } + + if (!uuid) { + uuid = switch_event_get_header(event, "session-id"); + } + + if ((session = switch_core_session_locate(uuid))) { + switch_channel_t *channel = switch_core_session_get_channel(session); + if (!switch_channel_test_flag(channel, CF_CONTROLLED)) { + switch_core_session_rwunlock(session); + session = NULL; + } + } + + if (session) { + if ((status = switch_core_session_queue_private_event(session, &event)) == SWITCH_STATUS_SUCCESS) { + snprintf(reply, reply_len, "+OK"); + } else { + snprintf(reply, reply_len, "-ERR memory error"); + } + switch_core_session_rwunlock(session); + } else { + snprintf(reply, reply_len, "-ERR invalid session id [%s]", uuid); + } + + goto done; + + } else if (!strncasecmp(cmd, "api ", 4)) { + struct api_command_struct acs = {0}; char *api_cmd = cmd + 4; - switch_stream_handle_t stream = {0}; - char *arg; + char *arg = NULL; + strip_cr(api_cmd); - if (!listener->retbuf) { - listener->retbuf = switch_core_alloc(listener->pool, CMD_BUFLEN); + if ((arg = strchr(api_cmd, ' '))) { + *arg++ = '\0'; } - stream.data = listener->retbuf; - stream.end = stream.data; - stream.data_size = CMD_BUFLEN; - stream.write_function = switch_console_stream_write; + acs.listener = listener; + acs.api_cmd = api_cmd; + acs.arg = arg; + acs.bg = 0; + api_exec(NULL, (void *) &acs); + snprintf(reply, reply_len, "+OK"); + + return SWITCH_STATUS_SUCCESS; + } else if (!strncasecmp(cmd, "bgapi ", 6)) { + struct api_command_struct *acs; + char *api_cmd = cmd + 6; + char *arg = NULL; strip_cr(api_cmd); if ((arg = strchr(api_cmd, ' '))) { *arg++ = '\0'; } - - if (switch_api_execute(api_cmd, arg, NULL, &stream) == SWITCH_STATUS_SUCCESS) { - switch_size_t len; - char buf[1024]; - len = strlen(listener->retbuf) + 1; - snprintf(buf, sizeof(buf), "Content-Type: api/response\nContent-Length: %"APR_SSIZE_T_FMT"\n\n", len); - len = strlen(buf) + 1; - switch_socket_send(listener->sock, buf, &len); - len = strlen(listener->retbuf) + 1; - switch_socket_send(listener->sock, listener->retbuf, &len); - return SWITCH_STATUS_SUCCESS; - } + if ((acs = malloc(sizeof(*acs)))) { + switch_thread_t *thread; + switch_threadattr_t *thd_attr = NULL; + switch_uuid_t uuid; + + memset(acs, 0, sizeof(*acs)); + acs->listener = listener; + if (api_cmd) { + acs->api_cmd = strdup(api_cmd); + } + if (arg) { + acs->arg = strdup(arg); + } + acs->bg = 1; + switch_threadattr_create(&thd_attr, listener->pool); + switch_threadattr_detach_set(thd_attr, 1); + switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); + switch_thread_create(&thread, thd_attr, api_exec, acs, listener->pool); + switch_uuid_get(&uuid); + switch_uuid_format(acs->uuid_str, &uuid); + snprintf(reply, reply_len, "+OK Job-UUID: %s", acs->uuid_str); + } else { + snprintf(reply, reply_len, "-ERR memory error!"); + } + + return SWITCH_STATUS_SUCCESS; } else if (!strncasecmp(cmd, "log", 3)) { char *level_s; @@ -643,8 +771,16 @@ remove_listener(listener); } + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Thread done, waiting for children\n"); + + switch_thread_rwlock_wrlock(listener->rwlock); + switch_thread_rwlock_unlock(listener->rwlock); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Connection Closed\n"); + + if (listener->pool) { switch_memory_pool_t *pool = listener->pool; switch_core_destroy_memory_pool(&pool); @@ -734,6 +870,8 @@ if (rv) goto fail; rv = switch_socket_create(&listen_list.sock, sa->family, SOCK_STREAM, APR_PROTO_TCP, pool); if (rv) goto sock_fail; + rv = switch_socket_opt_set(listen_list.sock, SWITCH_SO_REUSEADDR, 1); + if (rv) goto sock_fail; rv = switch_socket_bind(listen_list.sock, sa); if (rv) goto sock_fail; rv = switch_socket_listen(listen_list.sock, 5); @@ -742,7 +880,7 @@ break; sock_fail: switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Socket Error!\n"); - switch_yield(1000000); + switch_yield(100000); } listen_list.ready = 1; @@ -771,6 +909,7 @@ break; } + switch_thread_rwlock_create(&listener->rwlock, listener_pool); switch_queue_create(&listener->event_queue, SWITCH_CORE_QUEUE_LEN, listener_pool); switch_queue_create(&listener->log_queue, SWITCH_CORE_QUEUE_LEN, listener_pool); Modified: freeswitch/branches/james/src/mod/languages/mod_perl/fs_perl.pm ============================================================================== --- freeswitch/branches/james/src/mod/languages/mod_perl/fs_perl.pm (original) +++ freeswitch/branches/james/src/mod/languages/mod_perl/fs_perl.pm Sun Sep 10 07:09:34 2006 @@ -61,6 +61,7 @@ *fs_channel_get_variable = *fs_perlc::fs_channel_get_variable; *fs_channel_set_state = *fs_perlc::fs_channel_set_state; *fs_ivr_play_file = *fs_perlc::fs_ivr_play_file; +*fs_ivr_play_file2 = *fs_perlc::fs_ivr_play_file2; # ------- VARIABLE STUBS -------- Modified: freeswitch/branches/james/src/mod/languages/mod_perl/switch_swig.c ============================================================================== --- freeswitch/branches/james/src/mod/languages/mod_perl/switch_swig.c (original) +++ freeswitch/branches/james/src/mod/languages/mod_perl/switch_swig.c Sun Sep 10 07:09:34 2006 @@ -6,8 +6,8 @@ #ifdef _MSC_VER -#include <perlibs.h> -#pragma comment(lib, PERL_LIB) +#include <php.h> +#pragma comment(lib, PHP_LIB) #endif void fs_core_set_globals(void) @@ -55,9 +55,15 @@ return 0; } -void fs_console_log(char *msg) +void fs_console_log(char *level_str, char *msg) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, msg); + switch_log_level_t level = SWITCH_LOG_DEBUG; + + if (level_str) { + level = switch_log_str2level(level_str); + } + + switch_log_printf(SWITCH_CHANNEL_LOG, level, msg); } void fs_console_clean(char *msg) @@ -67,7 +73,13 @@ switch_core_session_t *fs_core_session_locate(char *uuid) { - return switch_core_session_locate(uuid); + switch_core_session_t *session; + + if ((session = switch_core_session_locate(uuid))) { + switch_core_session_rwunlock(session); + } + + return session; } void fs_channel_answer(switch_core_session_t *session) @@ -123,6 +135,17 @@ } status = switch_ivr_play_file(session, NULL, file, timer_name, NULL, NULL, 0); + return status == SWITCH_STATUS_SUCCESS ? 1 : 0; +} + + +int fs_ivr_play_file2(switch_core_session_t *session, + char *file) + +{ + switch_status_t status; + + status = switch_ivr_play_file(session, NULL, file, NULL, NULL, NULL, 0); return status == SWITCH_STATUS_SUCCESS ? 1 : 0; } Modified: freeswitch/branches/james/src/mod/languages/mod_perl/switch_swig_wrap.c ============================================================================== --- freeswitch/branches/james/src/mod/languages/mod_perl/switch_swig_wrap.c (original) +++ freeswitch/branches/james/src/mod/languages/mod_perl/switch_swig_wrap.c Sun Sep 10 07:09:34 2006 @@ -1,6 +1,6 @@ /* ---------------------------------------------------------------------------- * This file was automatically generated by SWIG (http://www.swig.org). - * Version 1.3.26 + * Version 1.3.21 * * 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 @@ -8,113 +8,72 @@ * interface file instead. * ----------------------------------------------------------------------------- */ -/*********************************************************************** +/*************************************************************** -*- c -*- + * perl5/precommon.swg * - * This section contains generic SWIG labels for method/variable - * declarations/attributes, and other compiler dependent labels. + * Rename all exported symbols from common.swg, to avoid symbol + * clashes if multiple interpreters are included * ************************************************************************/ -/* template workaround for compilers that cannot correctly implement the C++ standard */ -#ifndef SWIGTEMPLATEDISAMBIGUATOR -# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) -# define SWIGTEMPLATEDISAMBIGUATOR template -# else -# define SWIGTEMPLATEDISAMBIGUATOR -# endif -#endif +#define SWIG_TypeRegister SWIG_Perl_TypeRegister +#define SWIG_TypeCheck SWIG_Perl_TypeCheck +#define SWIG_TypeCast SWIG_Perl_TypeCast +#define SWIG_TypeDynamicCast SWIG_Perl_TypeDynamicCast +#define SWIG_TypeName SWIG_Perl_TypeName +#define SWIG_TypeQuery SWIG_Perl_TypeQuery +#define SWIG_TypeClientData SWIG_Perl_TypeClientData +#define SWIG_PackData SWIG_Perl_PackData +#define SWIG_UnpackData SWIG_Perl_UnpackData -/* inline attribute */ -#ifndef SWIGINLINE -# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) -# define SWIGINLINE inline -# else -# define SWIGINLINE -# endif -#endif -/* attribute recognised by some compilers to avoid 'unused' warnings */ -#ifndef SWIGUNUSED -# if defined(__GNUC__) || defined(__ICC) -# define SWIGUNUSED __attribute__ ((unused)) -# else -# define SWIGUNUSED -# endif -#endif - -/* internal SWIG method */ -#ifndef SWIGINTERN -# define SWIGINTERN static SWIGUNUSED -#endif - -/* internal inline SWIG method */ -#ifndef SWIGINTERNINLINE -# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE -#endif - -/* exporting methods for Windows DLLs */ -#ifndef SWIGEXPORT -# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) -# if defined(STATIC_LINKED) -# define SWIGEXPORT -# else -# define SWIGEXPORT __declspec(dllexport) -# endif -# else -# define SWIGEXPORT -# endif -#endif - -/* calling conventions for Windows */ -#ifndef SWIGSTDCALL -# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) -# define SWIGSTDCALL __stdcall -# else -# define SWIGSTDCALL -# endif -#endif - - /*********************************************************************** - * swigrun.swg + * common.swg * - * This file contains generic CAPI SWIG runtime support for pointer - * type checking. + * This file contains generic SWIG runtime support for pointer + * type checking as well as a few commonly used macros to control + * external linkage. * + * Author : David Beazley (beazley@cs.uchicago.edu) + * + * Copyright (c) 1999-2000, The University of Chicago + * + * This file may be freely redistributed without license or fee provided + * this copyright message remains intact. ************************************************************************/ -/* 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 "2" +#include <string.h> +#include <switch.h> -/* define SWIG_TYPE_TABLE_NAME as "SWIG_TYPE_TABLE" */ -#ifdef SWIG_TYPE_TABLE -# define SWIG_QUOTE_STRING(x) #x -# define SWIG_EXPAND_AND_QUOTE_STRING(x) SWIG_QUOTE_STRING(x) -# define SWIG_TYPE_TABLE_NAME SWIG_EXPAND_AND_QUOTE_STRING(SWIG_TYPE_TABLE) +#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# if defined(_MSC_VER) || defined(__GNUC__) +# if defined(STATIC_LINKED) +# define SWIGEXPORT(a) a +# define SWIGIMPORT(a) extern a +# else +# define SWIGEXPORT(a) __declspec(dllexport) a +# define SWIGIMPORT(a) extern a +# endif +# else +# if defined(__BORLANDC__) +# define SWIGEXPORT(a) a _export +# define SWIGIMPORT(a) a _export +# else +# define SWIGEXPORT(a) a +# define SWIGIMPORT(a) a +# endif +# endif #else -# define SWIG_TYPE_TABLE_NAME +# define SWIGEXPORT(a) a +# define SWIGIMPORT(a) a #endif -/* - You can use the SWIGRUNTIME and SWIGRUNTIMEINLINE macros for - creating a static or dynamic library from the swig runtime code. - In 99.9% of the cases, swig just needs to declare them as 'static'. - - But only do this if is strictly necessary, ie, if you have problems - with your compiler or so. -*/ - -#ifndef SWIGRUNTIME -# define SWIGRUNTIME SWIGINTERN +#ifdef SWIG_GLOBAL +# define SWIGRUNTIME(a) SWIGEXPORT(a) +#else +# define SWIGRUNTIME(a) static a #endif -#ifndef SWIGRUNTIMEINLINE -# define SWIGRUNTIMEINLINE SWIGRUNTIME SWIGINLINE -#endif - -#include <string.h> - #ifdef __cplusplus extern "C" { #endif @@ -122,141 +81,106 @@ typedef void *(*swig_converter_func)(void *); typedef struct swig_type_info *(*swig_dycast_func)(void **); -/* Structure to store inforomation on one type */ typedef struct swig_type_info { - const char *name; /* mangled name of this type */ - const char *str; /* human readable name of this type */ - swig_dycast_func dcast; /* dynamic cast function down a hierarchy */ - struct swig_cast_info *cast; /* linked list of types that can cast into this type */ - void *clientdata; /* language specific type data */ + const char *name; + swig_converter_func converter; + const char *str; + void *clientdata; + swig_dycast_func dcast; + struct swig_type_info *next; + struct swig_type_info *prev; } swig_type_info; -/* Structure to store a type and conversion function used for casting */ -typedef struct swig_cast_info { - swig_type_info *type; /* pointer to type that is equivalent to this type */ - swig_converter_func converter; /* function to cast the void pointers */ - struct swig_cast_info *next; /* pointer to next cast in linked list */ - struct swig_cast_info *prev; /* pointer to the previous cast */ -} swig_cast_info; +#ifdef SWIG_NOINCLUDE -/* Structure used to store module information - * Each module generates one structure like this, and the runtime collects - * all of these structures and stores them in a circularly linked list.*/ -typedef struct swig_module_info { - swig_type_info **types; /* Array of pointers to swig_type_info structures that are in this module */ - size_t size; /* Number of types in this module */ - struct swig_module_info *next; /* Pointer to next element in circularly linked list */ - swig_type_info **type_initial; /* Array of initially generated type structures */ - swig_cast_info **cast_initial; /* Array of initially generated casting structures */ - void *clientdata; /* Language specific module data */ -} swig_module_info; +SWIGIMPORT(swig_type_info *) SWIG_TypeRegister(swig_type_info *); +SWIGIMPORT(swig_type_info *) SWIG_TypeCheck(char *c, swig_type_info *); +SWIGIMPORT(void *) SWIG_TypeCast(swig_type_info *, void *); +SWIGIMPORT(swig_type_info *) SWIG_TypeDynamicCast(swig_type_info *, void **); +SWIGIMPORT(const char *) SWIG_TypeName(const swig_type_info *); +SWIGIMPORT(swig_type_info *) SWIG_TypeQuery(const char *); +SWIGIMPORT(void) SWIG_TypeClientData(swig_type_info *, void *); +SWIGIMPORT(char *) SWIG_PackData(char *, void *, int); +SWIGIMPORT(char *) SWIG_UnpackData(char *, void *, int); +#else -/* - Compare two type names skipping the space characters, therefore - "char*" == "char *" and "Class<int>" == "Class<int >", etc. +static swig_type_info *swig_type_list = 0; - Return 0 when the two name types are equivalent, as in - strncmp, but skipping ' '. -*/ -SWIGRUNTIME int -SWIG_TypeNameComp(const char *f1, const char *l1, - const char *f2, const char *l2) { - for (;(f1 != l1) && (f2 != l2); ++f1, ++f2) { - while ((*f1 == ' ') && (f1 != l1)) ++f1; - while ((*f2 == ' ') && (f2 != l2)) ++f2; - if (*f1 != *f2) return (int)(*f1 - *f2); +/* Register a type mapping with the type-checking */ +SWIGRUNTIME(swig_type_info *) +SWIG_TypeRegister(swig_type_info *ti) { + swig_type_info *tc, *head, *ret, *next; + /* Check to see if this type has already been registered */ + tc = swig_type_list; + while (tc) { + if (strcmp(tc->name, ti->name) == 0) { + /* Already exists in the table. Just add additional types to the list */ + if (tc->clientdata) ti->clientdata = tc->clientdata; + head = tc; + next = tc->next; + goto l1; + } + tc = tc->prev; } - return (l1 - f1) - (l2 - f2); -} + head = ti; + next = 0; -/* - Check type equivalence in a name list like <name1>|<name2>|... - Return 0 if not equal, 1 if equal -*/ -SWIGRUNTIME int -SWIG_TypeEquiv(const char *nb, const char *tb) { - int equiv = 0; - const char* te = tb + strlen(tb); - const char* ne = nb; - while (!equiv && *ne) { - for (nb = ne; *ne; ++ne) { - if (*ne == '|') break; - } - equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; - if (*ne) ++ne; + /* Place in list */ + ti->prev = swig_type_list; + swig_type_list = ti; + + /* Build linked lists */ + l1: + ret = head; + tc = ti + 1; + /* Patch up the rest of the links */ + while (tc->name) { + head->next = tc; + tc->prev = head; + head = tc; + tc++; } - return equiv; + if (next) next->prev = head; + head->next = next; + return ret; } -/* - Check type equivalence in a name list like <name1>|<name2>|... - Return 0 if equal, -1 if nb < tb, 1 if nb > tb -*/ -SWIGRUNTIME int -SWIG_TypeCompare(const char *nb, const char *tb) { - int equiv = 0; - const char* te = tb + strlen(tb); - const char* ne = nb; - while (!equiv && *ne) { - for (nb = ne; *ne; ++ne) { - if (*ne == '|') break; +/* Check the typename */ +SWIGRUNTIME(swig_type_info *) +SWIG_TypeCheck(char *c, swig_type_info *ty) { + swig_type_info *s; + if (!ty) return 0; /* Void pointer */ + s = ty->next; /* First element always just a name */ + do { + if (strcmp(s->name,c) == 0) { + if (s == ty->next) return s; + /* Move s to the top of the linked list */ + s->prev->next = s->next; + if (s->next) { + s->next->prev = s->prev; + } + /* Insert s as second element in the list */ + s->next = ty->next; + if (ty->next) ty->next->prev = s; + ty->next = s; + s->prev = ty; + return s; } - equiv = (SWIG_TypeNameComp(nb, ne, tb, te) == 0) ? 1 : 0; - if (*ne) ++ne; - } - return equiv; + s = s->next; + } while (s && (s != ty->next)); + return 0; } - -/* think of this as a c++ template<> or a scheme macro */ -#define SWIG_TypeCheck_Template(comparison, ty) \ - if (ty) { \ - swig_cast_info *iter = ty->cast; \ - while (iter) { \ - if (comparison) { \ - if (iter == ty->cast) return iter; \ - /* Move iter to the top of the linked list */ \ - iter->prev->next = iter->next; \ - if (iter->next) \ - iter->next->prev = iter->prev; \ - iter->next = ty->cast; \ - iter->prev = 0; \ - if (ty->cast) ty->cast->prev = iter; \ - ty->cast = iter; \ - return iter; \ - } \ - iter = iter->next; \ - } \ - } \ - return 0 - -/* - Check the typename -*/ -SWIGRUNTIME swig_cast_info * -SWIG_TypeCheck(const char *c, swig_type_info *ty) { - SWIG_TypeCheck_Template(strcmp(iter->type->name, c) == 0, ty); +/* Cast a pointer up an inheritance hierarchy */ +SWIGRUNTIME(void *) +SWIG_TypeCast(swig_type_info *ty, void *ptr) { + if ((!ty) || (!ty->converter)) return ptr; + return (*ty->converter)(ptr); } -/* Same as previous function, except strcmp is replaced with a pointer comparison */ -SWIGRUNTIME swig_cast_info * -SWIG_TypeCheckStruct(swig_type_info *from, swig_type_info *into) { - SWIG_TypeCheck_Template(iter->type == from, into); -} - -/* - 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); -} - -/* - Dynamic pointer casting. Down an inheritance hierarchy -*/ -SWIGRUNTIME swig_type_info * +/* Dynamic pointer casting. Down an inheritance hierarchy */ +SWIGRUNTIME(swig_type_info *) SWIG_TypeDynamicCast(swig_type_info *ty, void **ptr) { swig_type_info *lastty = ty; if (!ty || !ty->dcast) return ty; @@ -267,234 +191,84 @@ return lastty; } -/* - Return the name associated with this type -*/ -SWIGRUNTIMEINLINE const char * +/* Return the name associated with this type */ +SWIGRUNTIME(const char *) SWIG_TypeName(const swig_type_info *ty) { return ty->name; } -/* - Return the pretty name associated with this type, - that is an unmangled type name in a form presentable to the user. -*/ -SWIGRUNTIME const char * -SWIG_TypePrettyName(const swig_type_info *type) { - /* The "str" field contains the equivalent pretty names of the - type, separated by vertical-bar characters. We choose - to print the last name, as it is often (?) the most - specific. */ - if (type->str != NULL) { - const char *last_name = type->str; - const char *s; - for (s = type->str; *s; s++) - if (*s == '|') last_name = s+1; - return last_name; +/* Search for a swig_type_info structure */ +SWIGRUNTIME(swig_type_info *) +SWIG_TypeQuery(const char *name) { + swig_type_info *ty = swig_type_list; + while (ty) { + if (ty->str && (strcmp(name,ty->str) == 0)) return ty; + if (ty->name && (strcmp(name,ty->name) == 0)) return ty; + ty = ty->prev; } - else - return type->name; + return 0; } -/* - Set the clientdata field for a type -*/ -SWIGRUNTIME void +/* Set the clientdata field for a type */ +SWIGRUNTIME(void) SWIG_TypeClientData(swig_type_info *ti, void *clientdata) { - swig_cast_info *cast = ti->cast; - /* if (ti->clientdata == clientdata) return; */ + swig_type_info *tc, *equiv; + if (ti->clientdata == clientdata) return; ti->clientdata = clientdata; - - while (cast) { - if (!cast->converter) { - swig_type_info *tc = cast->type; - if (!tc->clientdata) { - SWIG_TypeClientData(tc, clientdata); + equiv = ti->next; + while (equiv) { + if (!equiv->converter) { + tc = swig_type_list; + while (tc) { + if ((strcmp(tc->name, equiv->name) == 0)) + SWIG_TypeClientData(tc,clientdata); + tc = tc->prev; } - } - cast = cast->next; - } -} - -/* - Search for a swig_type_info structure only by mangled name - Search is a O(log #types) - - We start searching at module start, and finish searching when start == end. - Note: if start == end at the beginning of the function, we go all the way around - the circular list. -*/ -SWIGRUNTIME swig_type_info * -SWIG_MangledTypeQueryModule(swig_module_info *start, - swig_module_info *end, - const char *name) { - swig_module_info *iter = start; - do { - if (iter->size) { - register size_t l = 0; - register size_t r = iter->size - 1; - do { - /* since l+r >= 0, we can (>> 1) instead (/ 2) */ - register size_t i = (l + r) >> 1; - const char *iname = iter->types[i]->name; - if (iname) { - register int compare = strcmp(name, iname); - if (compare == 0) { - return iter->types[i]; - } else if (compare < 0) { - if (i) { - r = i - 1; - } else { - break; - } - } else if (compare > 0) { - l = i + 1; - } - } else { - break; /* should never happen */ - } - } while (l <= r); } - iter = iter->next; - } while (iter != end); - return 0; -} - -/* - Search for a swig_type_info structure for either a mangled name or a human readable name. - It first searches the mangled names of the types, which is a O(log #types) - If a type is not found it then searches the human readable names, which is O(#types). - - We start searching at module start, and finish searching when start == end. - Note: if start == end at the beginning of the function, we go all the way around - the circular list. -*/ -SWIGRUNTIME swig_type_info * -SWIG_TypeQueryModule(swig_module_info *start, - swig_module_info *end, - const char *name) { - /* STEP 1: Search the name field using binary search */ - swig_type_info *ret = SWIG_MangledTypeQueryModule(start, end, name); - if (ret) { - return ret; - } else { - /* STEP 2: If the type hasn't been found, do a complete search - of the str field (the human readable name) */ - swig_module_info *iter = start; - do { - register size_t i = 0; - for (; i < iter->size; ++i) { - if (iter->types[i]->str && (SWIG_TypeEquiv(iter->types[i]->str, name))) - return iter->types[i]; - } - iter = iter->next; - } while (iter != end); + equiv = equiv->next; } - - /* neither found a match */ - return 0; } - -/* - Pack binary data into a string -*/ -SWIGRUNTIME char * -SWIG_PackData(char *c, void *ptr, size_t sz) { - static const char hex[17] = "0123456789abcdef"; - register const unsigned char *u = (unsigned char *) ptr; - register const unsigned char *eu = u + sz; - for (; u != eu; ++u) { - register unsigned char uu = *u; +/* Pack binary data into a string */ +SWIGRUNTIME(char *) +SWIG_PackData(char *c, void *ptr, int sz) { + static char hex[17] = "0123456789abcdef"; + int i; + unsigned char *u = (unsigned char *) ptr; + register unsigned char uu; + for (i = 0; i < sz; i++,u++) { + uu = *u; *(c++) = hex[(uu & 0xf0) >> 4]; *(c++) = hex[uu & 0xf]; } return c; } -/* - Unpack binary data from a string -*/ -SWIGRUNTIME const char * -SWIG_UnpackData(const char *c, void *ptr, size_t sz) { - register unsigned char *u = (unsigned char *) ptr; - register const unsigned char *eu = u + sz; - for (; u != eu; ++u) { - register char d = *(c++); - register unsigned char uu = 0; +/* Unpack binary data from a string */ +SWIGRUNTIME(char *) +SWIG_UnpackData(char *c, void *ptr, int sz) { + register unsigned char uu = 0; + register int d; + unsigned char *u = (unsigned char *) ptr; + int i; + for (i = 0; i < sz; i++, u++) { + d = *(c++); if ((d >= '0') && (d <= '9')) uu = ((d - '0') << 4); else if ((d >= 'a') && (d <= 'f')) uu = ((d - ('a'-10)) << 4); - else - return (char *) 0; d = *(c++); if ((d >= '0') && (d <= '9')) uu |= (d - '0'); else if ((d >= 'a') && (d <= 'f')) uu |= (d - ('a'-10)); - else - return (char *) 0; *u = uu; } return c; } -/* - Pack 'void *' into a string buffer. -*/ -SWIGRUNTIME char * -SWIG_PackVoidPtr(char *buff, void *ptr, const char *name, size_t bsz) { - char *r = buff; - if ((2*sizeof(void *) + 2) > bsz) return 0; - *(r++) = '_'; - r = SWIG_PackData(r,&ptr,sizeof(void *)); - if (strlen(name) + 1 > (bsz - (r - buff))) return 0; - strcpy(r,name); - return buff; -} +#endif -SWIGRUNTIME const char * -SWIG_UnpackVoidPtr(const char *c, void **ptr, const char *name) { - if (*c != '_') { - if (strcmp(c,"NULL") == 0) { - *ptr = (void *) 0; - return name; - } else { - return 0; - } - } - return SWIG_UnpackData(++c,ptr,sizeof(void *)); -} - -SWIGRUNTIME char * -SWIG_PackDataName(char *buff, void *ptr, size_t sz, const char *name, size_t bsz) { - char *r = buff; - size_t lname = (name ? strlen(name) : 0); - if ((2*sz + 2 + lname) > bsz) return 0; - *(r++) = '_'; - r = SWIG_PackData(r,ptr,sz); - if (lname) { - strncpy(r,name,lname+1); - } else { - *r = 0; - } - return buff; -} - -SWIGRUNTIME const char * -SWIG_UnpackDataName(const char *c, void *ptr, size_t sz, const char *name) { - if (*c != '_') { - if (strcmp(c,"NULL") == 0) { - memset(ptr,0,sz); - return name; - } else { - return 0; - } - } - return SWIG_UnpackData(++c,ptr,sz); -} - #ifdef __cplusplus } #endif @@ -503,7 +277,7 @@ * perl5.swg * * Perl5 runtime library - * $Header: /cvsroot/swig/SWIG/Lib/perl5/perlrun.swg,v 1.21 2005/02/01 00:08:17 wuzzeb Exp $ + * $Header: /cvsroot/SWIG/Lib/perl5/perlrun.swg,v 1.14 2003/12/04 19:14:14 beazley Exp $ * ----------------------------------------------------------------------------- */ #define SWIGPERL @@ -643,19 +417,19 @@ SWIG_Perl_ConvertPacked(obj, p, s, type, flags) #endif -/* Runtime API */ -#define SWIG_GetModule(clientdata) SWIG_Perl_GetModule() -#define SWIG_SetModule(clientdata, pointer) SWIG_Perl_SetModule(pointer) - /* Perl-specific API */ #ifdef PERL_OBJECT # define SWIG_MakePtr(sv, ptr, type, flags) \ SWIG_Perl_MakePtr(pPerl, sv, ptr, type, flags) +# define SWIG_TypeCheckRV(rv, ty) \ + SWIG_Perl_TypeCheckRV(pPerl, rv, ty) # define SWIG_SetError(str) \ SWIG_Perl_SetError(pPerl, str) #else # define SWIG_MakePtr(sv, ptr, type, flags) \ SWIG_Perl_MakePtr(sv, ptr, type, flags) +# define SWIG_TypeCheckRV(rv, ty) \ + SWIG_Perl_TypeCheckRV(rv, ty) # define SWIG_SetError(str) \ SWIG_Perl_SetError(str) # define SWIG_SetErrorSV(str) \ @@ -671,16 +445,48 @@ # define SWIG_MAYBE_PERL_OBJECT #endif -static swig_cast_info * +#ifdef SWIG_NOINCLUDE + +SWIGIMPORT(int) SWIG_Perl_ConvertPtr(SWIG_MAYBE_PERL_OBJECT SV *, void **, swig_type_info *, int flags); +SWIGIMPORT(void) SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *, void *, swig_type_info *, int flags); +SWIGIMPORT(SV *) SWIG_Perl_NewPointerObj(SWIG_MAYBE_PERL_OBJECT void *, swig_type_info *, int flags); +SWIGIMPORT(void) SWIG_Perl_MakePackedObj(SWIG_MAYBE_PERL_OBJECT SV *, void *, int, swig_type_info *); +SWIGIMPORT(int) SWIG_Perl_ConvertPacked(SWIG_MAYBE_PERL_OBJECT SV *, void *, int, swig_type_info *, int flags); +SWIGIMPORT(swig_type_info *) SWIG_Perl_TypeCheckRV(SWIG_MAYBE_PERL_OBJECT SV *rv, swig_type_info *ty); +SWIGIMPORT(SV *) SWIG_Perl_SetError(SWIG_MAYBE_PERL_OBJECT char *); + +#else + +SWIGRUNTIME(swig_type_info *) SWIG_Perl_TypeCheckRV(SWIG_MAYBE_PERL_OBJECT SV *rv, swig_type_info *ty) { - SWIG_TypeCheck_Template(sv_derived_from(rv, (char *) iter->type->name), ty); + swig_type_info *s; + if (!ty) return 0; /* Void pointer */ + s = ty->next; /* First element always just a name */ + do { + if (sv_derived_from(rv, (char *) s->name)) { + if (s == ty->next) return s; + /* Move s to the top of the linked list */ + s->prev->next = s->next; + if (s->next) { + s->next->prev = s->prev; + } + /* Insert s as second element in the list */ + s->next = ty->next; + if (ty->next) ty->next->prev = s; + ty->next = s; + s->prev = ty; + return s; + } + s = s->next; + } while (s && (s != ty->next)); + return 0; } /* Function for getting a pointer value */ -static int +SWIGRUNTIME(int) SWIG_Perl_ConvertPtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void **ptr, swig_type_info *_t, int flags) { - swig_cast_info *tc; + swig_type_info *tc; void *voidptr = (void *)0; /* If magical, apply more magic */ @@ -696,9 +502,9 @@ if (SvMAGICAL(tsv)) { mg = mg_find(tsv,'P'); if (mg) { - sv = mg->mg_obj; - if (sv_isobject(sv)) { - tmp = SvIV((SV*)SvRV(sv)); + SV *rsv = mg->mg_obj; + if (sv_isobject(rsv)) { + tmp = SvIV((SV*)SvRV(rsv)); } } } else { @@ -727,8 +533,7 @@ } if (_t) { /* Now see if the types match */ - char *_c = HvNAME(SvSTASH(SvRV(sv))); - tc = SWIG_TypeCheck(_c,_t); + tc = SWIG_TypeCheckRV(sv,_t); if (!tc) { *ptr = voidptr; return -1; @@ -740,7 +545,7 @@ return 0; } -static void +SWIGRUNTIME(void) SWIG_Perl_MakePtr(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, swig_type_info *t, int flags) { if (ptr && (flags & SWIG_SHADOW)) { SV *self; @@ -769,14 +574,14 @@ } } -static SWIGINLINE SV * +SWIGRUNTIME(SV *) SWIG_Perl_NewPointerObj(SWIG_MAYBE_PERL_OBJECT void *ptr, swig_type_info *t, int flags) { SV *result = sv_newmortal(); SWIG_MakePtr(result, ptr, t, flags); return result; } -static void +SWIGRUNTIME(void) SWIG_Perl_MakePackedObj(SWIG_MAYBE_PERL_OBJECT SV *sv, void *ptr, int sz, swig_type_info *type) { char result[1024]; char *r = result; @@ -788,10 +593,10 @@ } /* Convert a packed value value */ -static int +SWIGRUNTIME(int) SWIG_Perl_ConvertPacked(SWIG_MAYBE_PERL_OBJECT SV *obj, void *ptr, int sz, swig_type_info *ty, int flags) { - swig_cast_info *tc; - const char *c = 0; + swig_type_info *tc; + char *c = 0; if ((!obj) || (!SvOK(obj))) return -1; c = SvPV(obj, PL_na); @@ -806,17 +611,17 @@ return 0; } -static SWIGINLINE void +SWIGRUNTIME(void) SWIG_Perl_SetError(SWIG_MAYBE_PERL_OBJECT const char *error) { if (error) sv_setpv(perl_get_sv("@", TRUE), error); } -static SWIGINLINE void +SWIGRUNTIME(void) SWIG_Perl_SetErrorSV(SWIG_MAYBE_PERL_OBJECT SV *error) { if (error) sv_setsv(perl_get_sv("@", TRUE), error); } -static void +SWIGRUNTIME(void) SWIG_Perl_SetErrorf(const char *fmt, ...) { va_list args; va_start(args, fmt); @@ -824,6 +629,8 @@ va_end(args); } +#endif + /* Macros for low-level exception handling */ #define SWIG_fail goto fail #define SWIG_croak(x) { SWIG_SetError(x); goto fail; } @@ -895,31 +702,10 @@ } -static swig_module_info * -SWIG_Perl_GetModule() { - static void *type_pointer = (void *)0; - SV *pointer; - /* first check if pointer already created */ - if (!type_pointer) { - pointer = get_sv("swig_runtime_data::type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, FALSE); - if (pointer && SvOK(pointer)) { - type_pointer = INT2PTR(swig_type_info **, SvIV(pointer)); - } - } - return (swig_module_info *) type_pointer; -} -static void -SWIG_Perl_SetModule(swig_module_info *module) { - SV *pointer; - /* create a new pointer */ - pointer = get_sv("swig_runtime_data::type_pointer" SWIG_RUNTIME_VERSION SWIG_TYPE_TABLE_NAME, TRUE); - sv_setiv(pointer, PTR2IV(module)); -} - #ifdef do_open #undef do_open #endif @@ -974,29 +760,13 @@ #ifdef ENTER #undef ENTER #endif -#ifdef read - #undef read -#endif -#ifdef write - #undef write -#endif -#ifdef eof - #undef eof -#endif -#ifdef bool - #undef bool -#endif - /* -------- TYPES TABLE (BEGIN) -------- */ -#define SWIGTYPE_p_switch_core_session_t swig_types[0] -#define SWIGTYPE_p_switch_input_callback_function_t swig_types[1] +#define SWIGTYPE_p_switch_core_session_t swig_types[0] +#define SWIGTYPE_p_switch_input_callback_function_t swig_types[1] static swig_type_info *swig_types[3]; -static swig_module_info swig_module = {swig_types, 2, 0, 0, 0, 0}; -#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) -#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) /* -------- TYPES TABLE (END) -------- */ @@ -1010,14 +780,31 @@ #endif #ifndef PERL_OBJECT #ifndef MULTIPLICITY -SWIGEXPORT void SWIG_init (CV* cv); +SWIGEXPORT(void) SWIG_init (CV* cv); #else -SWIGEXPORT void SWIG_init (pTHXo_ CV* cv); +SWIGEXPORT(void) SWIG_init (pTHXo_ CV* cv); #endif #else -SWIGEXPORT void SWIG_init (CV *cv, CPerlObj *); +SWIGEXPORT(void) SWIG_init (CV *cv, CPerlObj *); #endif +extern void fs_core_set_globals(void); +extern int fs_core_init(char *); +extern int fs_core_destroy(void); +extern int fs_loadable_module_init(void); +extern int fs_loadable_module_shutdown(void); +extern int fs_console_loop(void); +extern void fs_console_log(char *,char *); +extern void fs_console_clean(char *); +extern switch_core_session_t *fs_core_session_locate(char *); +extern void fs_channel_answer(switch_core_session_t *); +extern void fs_channel_pre_answer(switch_core_session_t *); +extern void fs_channel_hangup(switch_core_session_t *,char *); +extern void fs_channel_set_variable(switch_core_session_t *,char *,char *); +extern void fs_channel_get_variable(switch_core_session_t *,char *); +extern void fs_channel_set_state(switch_core_session_t *,char *); +extern int fs_ivr_play_file(switch_core_session_t *,char *,char *,switch_input_callback_function_t,void *,unsigned int); +extern int fs_ivr_play_file2(switch_core_session_t *,char *); #include <switch.h> @@ -1064,7 +851,7 @@ XS(_wrap_fs_core_init) { { - char *arg1 = (char *) 0 ; + char *arg1 ; int result; int argvi = 0; dXSARGS; @@ -1172,16 +959,19 @@ XS(_wrap_fs_console_log) { { - char *arg1 = (char *) 0 ; + char *arg1 ; + char *arg2 ; int argvi = 0; dXSARGS; - if ((items < 1) || (items > 1)) { - SWIG_croak("Usage: fs_console_log(msg);"); + if ((items < 2) || (items > 2)) { + SWIG_croak("Usage: fs_console_log(level_str,msg);"); } if (!SvOK((SV*) ST(0))) arg1 = 0; else arg1 = (char *) SvPV(ST(0), PL_na); - fs_console_log(arg1); + if (!SvOK((SV*) ST(1))) arg2 = 0; + else arg2 = (char *) SvPV(ST(1), PL_na); + fs_console_log(arg1,arg2); XSRETURN(argvi); @@ -1194,7 +984,7 @@ XS(_wrap_fs_console_clean) { { - char *arg1 = (char *) 0 ; + char *arg1 ; int argvi = 0; dXSARGS; @@ -1216,7 +1006,7 @@ XS(_wrap_fs_core_session_locate) { { - char *arg1 = (char *) 0 ; + char *arg1 ; switch_core_session_t *result; int argvi = 0; dXSARGS; @@ -1291,7 +1081,7 @@ XS(_wrap_fs_channel_hangup) { { switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; - char *arg2 = (char *) 0 ; + char *arg2 ; int argvi = 0; dXSARGS; @@ -1319,8 +1109,8 @@ XS(_wrap_fs_channel_set_variable) { { switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; - char *arg2 = (char *) 0 ; - char *arg3 = (char *) 0 ; + char *arg2 ; + char *arg3 ; int argvi = 0; dXSARGS; @@ -1350,7 +1140,7 @@ XS(_wrap_fs_channel_get_variable) { { switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; - char *arg2 = (char *) 0 ; + char *arg2 ; int argvi = 0; dXSARGS; @@ -1378,7 +1168,7 @@ XS(_wrap_fs_channel_set_state) { { switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; - char *arg2 = (char *) 0 ; + char *arg2 ; int argvi = 0; dXSARGS; @@ -1406,8 +1196,8 @@ XS(_wrap_fs_ivr_play_file) { { switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; - char *arg2 = (char *) 0 ; - char *arg3 = (char *) 0 ; + char *arg2 ; + char *arg3 ; switch_input_callback_function_t arg4 ; void *arg5 = (void *) 0 ; unsigned int arg6 ; @@ -1452,36 +1242,59 @@ } +XS(_wrap_fs_ivr_play_file2) { + { + switch_core_session_t *arg1 = (switch_core_session_t *) 0 ; + char *arg2 ; + int result; + int argvi = 0; + dXSARGS; + + if ((items < 2) || (items > 2)) { + SWIG_croak("Usage: fs_ivr_play_file2(session,file);"); + } + { + if (SWIG_ConvertPtr(ST(0), (void **) &arg1, SWIGTYPE_p_switch_core_session_t,0) < 0) { + SWIG_croak("Type error in argument 1 of fs_ivr_play_file2. Expected _p_switch_core_session_t"); + } + } + if (!SvOK((SV*) ST(1))) arg2 = 0; + else arg2 = (char *) SvPV(ST(1), PL_na); + result = (int)fs_ivr_play_file2(arg1,arg2); + + ST(argvi) = sv_newmortal(); + sv_setiv(ST(argvi++), (IV) result); + XSRETURN(argvi); + fail: + ; + } + croak(Nullch); +} -/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ -static swig_type_info _swigt__p_switch_core_session_t = {"_p_switch_core_session_t", "switch_core_session_t *", 0, 0, 0}; -static swig_type_info _swigt__p_switch_input_callback_function_t = {"_p_switch_input_callback_function_t", "switch_input_callback_function_t *", 0, 0, 0}; -static swig_type_info *swig_type_initial[] = { - &_swigt__p_switch_core_session_t, - &_swigt__p_switch_input_callback_function_t, -}; +/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ -static swig_cast_info _swigc__p_switch_core_session_t[] = { {&_swigt__p_switch_core_session_t, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_switch_input_callback_function_t[] = { {&_swigt__p_switch_input_callback_function_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_type_info _swigt__p_switch_core_session_t[] = {{"_p_switch_core_session_t", 0, "switch_core_session_t *", 0},{"_p_switch_core_session_t"},{0}}; +static swig_type_info _swigt__p_switch_input_callback_function_t[] = {{"_p_switch_input_callback_function_t", 0, "switch_input_callback_function_t *", 0},{"_p_switch_input_callback_function_t"},{0}}; -static swig_cast_info *swig_cast_initial[] = { - _swigc__p_switch_core_session_t, - _swigc__p_switch_input_callback_function_t, +static swig_type_info *swig_types_initial[] = { +_swigt__p_switch_core_session_t, +_swigt__p_switch_input_callback_function_t, +0 }; /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */ static swig_constant_info swig_constants[] = { -{0,0,0,0,0,0} +{0} }; #ifdef __cplusplus } #endif static swig_variable_info swig_variables[] = { -{0,0,0,0} +{0} }; static swig_command_info swig_commands[] = { {"fs_perlc::fs_core_set_globals", _wrap_fs_core_set_globals}, @@ -1500,169 +1313,24 @@ {"fs_perlc::fs_channel_get_variable", _wrap_fs_channel_get_variable}, {"fs_perlc::fs_channel_set_state", _wrap_fs_channel_set_state}, {"fs_perlc::fs_ivr_play_file", _wrap_fs_ivr_play_file}, +{"fs_perlc::fs_ivr_play_file2", _wrap_fs_ivr_play_file2}, {0,0} }; -/************************************************************************* - * Type initialization: - * This problem is tough by the requirement that no dynamic - * memory is used. Also, since swig_type_info structures store pointers to - * swig_cast_info structures and swig_cast_info structures store pointers back - * to swig_type_info structures, we need some lookup code at initialization. - * The idea is that swig generates all the structures that are needed. - * The runtime then collects these partially filled structures. - * The SWIG_InitializeModule function takes these initial arrays out of - * swig_module, and does all the lookup, filling in the swig_module.types - * array with the correct data and linking the correct swig_cast_info - * structures together. - * The generated swig_type_info structures are assigned staticly to an initial - * array. We just loop though that array, and handle each type individually. - * First we lookup if this type has been already loaded, and if so, use the - * loaded structure instead of the generated one. Then we have to fill in the - * cast linked list. The cast data is initially stored in something like a - * two-dimensional array. Each row corresponds to a type (there are the same - * number of rows as there are in the swig_type_initial array). Each entry in - * a column is one of the swig_cast_info structures for that type. - * The cast_initial array is actually an array of arrays, because each row has - * a variable number of columns. So to actually build the cast linked list, - * we find the array of casts associated with the type, and loop through it - * adding the casts to the list. The one last trick we need to do is making - * sure the type pointer in the swig_cast_info struct is correct. - - * First off, we lookup the cast->type name to see if it is already loaded. - * There are three cases to handle: - * 1) If the cast->type has already been loaded AND the type we are adding - * casting info to has not been loaded (it is in this module), THEN we - * replace the cast->type pointer with the type pointer that has already - * been loaded. - * 2) If BOTH types (the one we are adding casting info to, and the - * cast->type) are loaded, THEN the cast info has already been loaded by - * the previous module so we just ignore it. - * 3) Finally, if cast->type has not already been loaded, then we add that - * swig_cast_info to the linked list (because the cast->type) pointer will - * be correct. -**/ - #ifdef __cplusplus -extern "C" { -#endif - - SWIGRUNTIME void - SWIG_InitializeModule(void *clientdata) { - swig_type_info *type, *ret; - swig_cast_info *cast; - size_t i; - swig_module_info *module_head; - static int init_run = 0; - - clientdata = clientdata; - - if (init_run) return; - init_run = 1; - - /* Initialize the swig_module */ - swig_module.type_initial = swig_type_initial; - swig_module.cast_initial = swig_cast_initial; - - /* Try and load any already created modules */ - module_head = SWIG_GetModule(clientdata); - if (module_head) { - swig_module.next = module_head->next; - module_head->next = &swig_module; - } else { - /* This is the first module loaded */ - swig_module.next = &swig_module; - SWIG_SetModule(clientdata, &swig_module); - } - - /* Now work on filling in swig_module.types */ - for (i = 0; i < swig_module.size; ++i) { - type = 0; - - /* if there is another module already loaded */ - if (swig_module.next != &swig_module) { - type = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, swig_module.type_initial[i]->name); - } - if (type) { - /* Overwrite clientdata field */ - if (swig_module.type_initial[i]->clientdata) type->clientdata = swig_module.type_initial[i]->clientdata; - } else { - type = swig_module.type_initial[i]; - } - - /* Insert casting types */ - cast = swig_module.cast_initial[i]; - while (cast->type) { - /* Don't need to add information already in the list */ - ret = 0; - if (swig_module.next != &swig_module) { - ret = SWIG_MangledTypeQueryModule(swig_module.next, &swig_module, cast->type->name); - } - if (ret && type == swig_module.type_initial[i]) { - cast->type = ret; - ret = 0; - } - - if (!ret) { - if (type->cast) { - type->cast->prev = cast; - cast->next = type->cast; - } - type->cast = cast; - } - - cast++; - } - - /* Set entry in modules->types array equal to the type */ - swig_module.types[i] = type; - } - swig_module.types[i] = 0; - } - - /* This function will propagate the clientdata field of type to - * any new swig_type_info structures that have been added into the list - * of equivalent types. It is like calling - * SWIG_TypeClientData(type, clientdata) a second time. - */ - SWIGRUNTIME void - SWIG_PropagateClientData(void) { - size_t i; - swig_cast_info *equiv; - static int init_run = 0; - - if (init_run) return; - init_run = 1; - - for (i = 0; i < swig_module.size; i++) { - if (swig_module.types[i]->clientdata) { - equiv = swig_module.types[i]->cast; - while (equiv) { - if (!equiv->converter) { - if (equiv->type && !equiv->type->clientdata) - SWIG_TypeClientData(equiv->type, swig_module.types[i]->clientdata); - } - equiv = equiv->next; - } - } - } - } - -#ifdef __cplusplus -} -#endif - - - -#ifdef __cplusplus extern "C" #endif XS(SWIG_init) { dXSARGS; int i; - - SWIG_InitializeModule(0); + static int _init = 0; + if (!_init) { + for (i = 0; swig_types_initial[i]; i++) { + swig_types[i] = SWIG_TypeRegister(swig_types_initial[i]); + } + _init = 1; + } /* Install commands */ for (i = 0; swig_commands[i].name; i++) { Modified: freeswitch/branches/james/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c ============================================================================== --- freeswitch/branches/james/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c (original) +++ freeswitch/branches/james/src/mod/languages/mod_spidermonkey/mod_spidermonkey.c Sun Sep 10 07:09:34 2006 @@ -32,7 +32,8 @@ #ifndef HAVE_CURL #define HAVE_CURL #endif -#define JS_BUFFER_SIZE 131072 +#define JS_BUFFER_SIZE 1024 * 32 +#define JS_BLOCK_SIZE JS_BUFFER_SIZE #ifdef __ICC #pragma warning (disable:310 193 1418) #endif @@ -2007,7 +2008,7 @@ } } - switch_buffer_create(pool, &tto->audio_buffer, JS_BUFFER_SIZE); + switch_buffer_create_dynamic(&tto->audio_buffer, JS_BLOCK_SIZE, JS_BUFFER_SIZE, 0); tto->pool = pool; tto->obj = obj; tto->cx = cx; @@ -2027,6 +2028,8 @@ switch_core_timer_destroy(tto->timer); } teletone_destroy_session(&tto->ts); + switch_buffer_destroy(&tto->audio_buffer); + switch_buffer_destroy(&tto->loop_buffer); switch_core_codec_destroy(&tto->codec); pool = tto->pool; tto->pool = NULL; @@ -2088,7 +2091,7 @@ } loops--; if (!tto->loop_buffer) { - switch_buffer_create(tto->pool, &tto->loop_buffer, JS_BUFFER_SIZE); + switch_buffer_create_dynamic(&tto->loop_buffer, JS_BLOCK_SIZE, JS_BUFFER_SIZE, 0); } } Modified: freeswitch/branches/james/src/switch_buffer.c ============================================================================== --- freeswitch/branches/james/src/switch_buffer.c (original) +++ freeswitch/branches/james/src/switch_buffer.c Sun Sep 10 07:09:34 2006 @@ -34,10 +34,17 @@ static uint32_t buffer_id = 0; +typedef enum { + SWITCH_BUFFER_FLAG_DYNAMIC = (1 << 0) +} switch_buffer_flag_t; + struct switch_buffer { unsigned char *data; switch_size_t used; switch_size_t datalen; + switch_size_t max_len; + switch_size_t blocksize; + uint32_t flags; uint32_t id; }; @@ -55,6 +62,37 @@ return SWITCH_STATUS_MEMERR; } +SWITCH_DECLARE(switch_status_t) switch_buffer_create_dynamic(switch_buffer_t **buffer, + switch_size_t blocksize, + switch_size_t start_len, + switch_size_t max_len) +{ + switch_buffer_t *new_buffer; + + if ((new_buffer = malloc(sizeof(*new_buffer)))) { + memset(new_buffer, 0, sizeof(*new_buffer)); + + if (start_len) { + if (!(new_buffer->data = malloc(start_len))) { + free(new_buffer); + return SWITCH_STATUS_MEMERR; + } + memset(new_buffer->data, 0, start_len); + } + + new_buffer->max_len = max_len; + new_buffer->datalen = start_len; + new_buffer->id = buffer_id++; + new_buffer->blocksize = blocksize; + switch_set_flag(new_buffer, SWITCH_BUFFER_FLAG_DYNAMIC); + + *buffer = new_buffer; + return SWITCH_STATUS_SUCCESS; + } + + return SWITCH_STATUS_MEMERR; +} + SWITCH_DECLARE(switch_size_t) switch_buffer_len(switch_buffer_t *buffer) { @@ -69,7 +107,15 @@ { assert(buffer != NULL); + if (switch_test_flag(buffer, SWITCH_BUFFER_FLAG_DYNAMIC)) { + if (buffer->max_len) { + return (switch_size_t) (buffer->max_len - buffer->used); + } + return 1000000; + } + return (switch_size_t) (buffer->datalen - buffer->used); + } SWITCH_DECLARE(switch_size_t) switch_buffer_inuse(switch_buffer_t *buffer) @@ -131,8 +177,30 @@ assert(buffer != NULL); assert(data != NULL); assert(buffer->data != NULL); + + freespace = buffer->datalen - buffer->used; + + if (switch_test_flag(buffer, SWITCH_BUFFER_FLAG_DYNAMIC)) { + if (freespace < datalen) { + switch_size_t new_size, new_block_size; + + new_size = buffer->datalen + datalen; + new_block_size = buffer->datalen + buffer->blocksize; + + if (new_block_size > new_size) { + new_size = new_block_size; + } + + if (!(buffer->data = realloc(buffer->data, new_size))) { + return 0; + } + + buffer->datalen = new_size; + } + } freespace = buffer->datalen - buffer->used; + if (freespace < datalen) { return 0; } else { @@ -151,4 +219,14 @@ buffer->used = 0; +} + +SWITCH_DECLARE(void) switch_buffer_destroy(switch_buffer_t **buffer) +{ + if (*buffer && switch_test_flag((*buffer), SWITCH_BUFFER_FLAG_DYNAMIC)) { + free((*buffer)->data); + free(*buffer); + } + + *buffer = NULL; } Modified: freeswitch/branches/james/src/switch_channel.c ============================================================================== --- freeswitch/branches/james/src/switch_channel.c (original) +++ freeswitch/branches/james/src/switch_channel.c Sun Sep 10 07:09:34 2006 @@ -104,8 +104,8 @@ const switch_state_handler_table_t *state_handlers[SWITCH_MAX_STATE_HANDLERS]; int state_handler_index; switch_hash_t *variables; + switch_hash_t *private_hash; switch_channel_timetable_t *times; - void *private_info; switch_call_cause_t hangup_cause; int freq; int bits; @@ -163,7 +163,9 @@ } switch_core_hash_init(&(*channel)->variables, pool); - switch_buffer_create(pool, &(*channel)->dtmf_buffer, 128); + switch_core_hash_init(&(*channel)->private_hash, pool); + switch_buffer_create_dynamic(&(*channel)->dtmf_buffer, 128, 128, 0); + switch_mutex_init(&(*channel)->dtmf_mutex, SWITCH_MUTEX_NESTED, pool); switch_mutex_init(&(*channel)->flag_mutex, SWITCH_MUTEX_NESTED, pool); switch_mutex_init(&(*channel)->profile_mutex, SWITCH_MUTEX_NESTED, pool); @@ -281,6 +283,11 @@ } +SWITCH_DECLARE(void) switch_channel_uninit(switch_channel_t *channel) +{ + switch_buffer_destroy(&channel->dtmf_buffer); +} + SWITCH_DECLARE(switch_status_t) switch_channel_init(switch_channel_t *channel, switch_core_session_t *session, switch_channel_state_t state, uint32_t flags) @@ -305,17 +312,17 @@ return switch_hash_first(pool, channel->variables); } -SWITCH_DECLARE(switch_status_t) switch_channel_set_private(switch_channel_t *channel, void *private_info) +SWITCH_DECLARE(switch_status_t) switch_channel_set_private(switch_channel_t *channel, char *key, void *private_info) { assert(channel != NULL); - channel->private_info = private_info; + switch_core_hash_insert_dup(channel->private_hash, switch_core_session_strdup(channel->session, key), private_info); return SWITCH_STATUS_SUCCESS; } -SWITCH_DECLARE(void *) switch_channel_get_private(switch_channel_t *channel) +SWITCH_DECLARE(void *) switch_channel_get_private(switch_channel_t *channel, char *key) { assert(channel != NULL); - return channel->private_info; + return switch_core_hash_find(channel->private_hash, key); } SWITCH_DECLARE(switch_status_t) switch_channel_set_name(switch_channel_t *channel, char *name) @@ -858,7 +865,8 @@ switch_log_printf(SWITCH_CHANNEL_ID_LOG, (char *) file, func, line, SWITCH_LOG_NOTICE, "Hangup %s [%s] [%s]\n", channel->name, state_names[last_state], switch_channel_cause2str(channel->hangup_cause)); - if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_STATE) == SWITCH_STATUS_SUCCESS) { + if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_HANGUP) == SWITCH_STATUS_SUCCESS) { + switch_event_add_header(event, SWITCH_STACK_BOTTOM, "Hangup-Cause", switch_channel_cause2str(channel->hangup_cause)); switch_channel_event_set_data(channel, event); switch_event_fire(&event); } Modified: freeswitch/branches/james/src/switch_console.c ============================================================================== --- freeswitch/branches/james/src/switch_console.c (original) +++ freeswitch/branches/james/src/switch_console.c Sun Sep 10 07:09:34 2006 @@ -32,7 +32,7 @@ #include <switch.h> #include <switch_console.h> #include <switch_version.h> -#define CMD_BUFLEN 1024 * 1000 +#define CMD_BUFLEN 1024; SWITCH_DECLARE(switch_status_t) switch_console_stream_write(switch_stream_handle_t *handle, char *fmt, ...) @@ -58,13 +58,37 @@ va_end(ap); if (data) { - switch_size_t len = handle->data_size - handle->data_len; + switch_size_t remaining = handle->data_size - handle->data_len; + switch_size_t need = strlen(data) + 1; + + + if ((remaining < need) && handle->alloc_len) { + switch_size_t new_len; + + if (need < handle->alloc_chunk) { + need = handle->alloc_chunk; + } - if (len <= strlen(data)) { + new_len = handle->data_size + need; + if ((handle->data = realloc(handle->data, new_len))) { + handle->data_size = handle->alloc_len = new_len; + buf = handle->data; + + remaining = handle->data_size - handle->data_len; + handle->end = (uint8_t *)(handle->data) + handle->data_len; + end = handle->end; + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error!\n"); + free(data); + return SWITCH_STATUS_FALSE; + } + } + + if (remaining < need) { ret = -1; } else { ret = 0; - snprintf(end, len, data); + snprintf(end, remaining, data); handle->data_len = strlen(buf); handle->end = (uint8_t *)(handle->data) + handle->data_len; } @@ -75,7 +99,7 @@ } -static int switch_console_process(char *cmd, char *retbuf, int retlen) +static int switch_console_process(char *cmd) { char *arg = NULL; switch_stream_handle_t stream = {0}; @@ -103,16 +127,19 @@ if ((arg = strchr(cmd, ' ')) != 0) { *arg++ = '\0'; } - - stream.data = retbuf; - stream.end = stream.data; - stream.data_size = retlen; - stream.write_function = switch_console_stream_write; - if (switch_api_execute(cmd, arg, NULL, &stream) == SWITCH_STATUS_SUCCESS) { - switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_CONSOLE, "API CALL [%s(%s)] output:\n%s\n", cmd, arg ? arg : "", retbuf); + + SWITCH_STANDARD_STREAM(stream); + if (stream.data) { + if (switch_api_execute(cmd, arg, NULL, &stream) == SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_CONSOLE, "API CALL [%s(%s)] output:\n%s\n", cmd, arg ? arg : "", stream.data); + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Unknown Command: %s\n", cmd); + } + free(stream.data); } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Unknown Command: %s\n", cmd); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Memory Error!\n"); } + return 1; } @@ -177,14 +204,10 @@ char hostname[256]; char cmd[2048]; int running = 1, activity = 1; - char *retbuf = (char *)malloc(CMD_BUFLEN); switch_size_t x = 0; - assert(retbuf != NULL); gethostname(hostname, sizeof(hostname)); - memset(retbuf, 0, CMD_BUFLEN); - while (running) { if (activity) { switch_log_printf(SWITCH_CHANNEL_LOG_CLEAN, SWITCH_LOG_CONSOLE, "\nfreeswitch@%s> ", hostname); @@ -207,11 +230,9 @@ } if (cmd[0]) { - *retbuf = '\0'; - running = switch_console_process(cmd, retbuf, CMD_BUFLEN); + running = switch_console_process(cmd); } } - free(retbuf); } Modified: freeswitch/branches/james/src/switch_core.c ============================================================================== --- freeswitch/branches/james/src/switch_core.c (original) +++ freeswitch/branches/james/src/switch_core.c Sun Sep 10 07:09:34 2006 @@ -49,6 +49,18 @@ #define SWITCH_EVENT_QUEUE_LEN 256 #define SWITCH_SQL_QUEUE_LEN 2000 + +struct switch_media_bug { + switch_buffer_t *raw_write_buffer; + switch_buffer_t *raw_read_buffer; + switch_media_bug_callback_t callback; + switch_mutex_t *read_mutex; + switch_mutex_t *write_mutex; + switch_core_session_t *session; + void *user_data; + struct switch_media_bug *next; +}; + struct switch_core_session { uint32_t id; char name[80]; @@ -88,6 +100,9 @@ char uuid_str[SWITCH_UUID_FORMATTED_LENGTH + 1]; void *private_info; switch_queue_t *event_queue; + switch_queue_t *private_event_queue; + switch_thread_rwlock_t *bug_rwlock; + switch_media_bug_t *bugs; }; SWITCH_DECLARE_DATA switch_directories SWITCH_GLOBAL_dirs; @@ -136,6 +151,236 @@ } } +static void switch_core_media_bug_destroy(switch_media_bug_t *bug) +{ + switch_buffer_destroy(&bug->raw_read_buffer); + switch_buffer_destroy(&bug->raw_write_buffer); +} + +SWITCH_DECLARE(switch_status_t) switch_core_media_bug_read(switch_media_bug_t *bug, switch_frame_t *frame) +{ + uint32_t bytes = 0; + uint8_t data[SWITCH_RECCOMMENDED_BUFFER_SIZE] = {0}; + uint32_t datalen = 0; + int16_t *dp, *fp; + uint32_t x; + size_t rlen = switch_buffer_inuse(bug->raw_read_buffer); + size_t wlen = switch_buffer_inuse(bug->raw_write_buffer); + uint32_t blen; + size_t rdlen = 0; + uint32_t maxlen; + + if (!rlen && !wlen) { + return SWITCH_STATUS_FALSE; + } + + maxlen = sizeof(data) > frame->buflen ? frame->buflen : sizeof(data); + if ((rdlen = rlen > wlen ? wlen : rlen) > maxlen) { + rdlen = maxlen; + } + + frame->datalen = 0; + + if (rlen) { + switch_mutex_lock(bug->read_mutex); + + frame->datalen = (uint32_t) switch_buffer_read(bug->raw_read_buffer, + frame->data, + rdlen); + switch_mutex_unlock(bug->read_mutex); + } + + if (wlen) { + switch_mutex_lock(bug->write_mutex); + datalen = (uint32_t) switch_buffer_read(bug->raw_write_buffer, + data, + rdlen); + switch_mutex_unlock(bug->write_mutex); + } + + bytes = (datalen > frame->datalen) ? datalen : frame->datalen; + + if (bytes) { + dp = (int16_t *) data; + fp = (int16_t *) frame->data; + + rlen = frame->datalen / 2; + wlen = datalen / 2; + blen = bytes / 2; + + for(x = 0; x < blen; x++) { + int32_t z = 0; + + if (x < rlen) { + z += (int32_t) *(fp+x); + } + if (x < wlen) { + z += (int32_t)*(dp+x); + } + switch_normalize_to_16bit(z); + *(fp+x) = (int16_t) z; + } + + frame->datalen = bytes; + return SWITCH_STATUS_SUCCESS; + } + + return SWITCH_STATUS_FALSE; +} + +#define MAX_BUG_BUFFER 1024 * 512 +SWITCH_DECLARE(switch_status_t) switch_core_media_bug_add(switch_core_session_t *session, + switch_media_bug_callback_t callback, + void *user_data, + switch_media_bug_t **new_bug) + +{ + switch_media_bug_t *bug; + switch_size_t bytes; + + if (!(bug = switch_core_session_alloc(session, sizeof(*bug)))) { + return SWITCH_STATUS_MEMERR; + } + + bug->callback = callback; + bug->user_data = user_data; + bug->session = session; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Attaching BUG to %s\n", switch_channel_get_name(session->channel)); + bytes = session->read_codec->implementation->bytes_per_frame * 2; + switch_buffer_create_dynamic(&bug->raw_read_buffer, bytes, bytes, MAX_BUG_BUFFER); + bytes = session->write_codec->implementation->bytes_per_frame * 2; + switch_buffer_create_dynamic(&bug->raw_write_buffer, bytes, bytes, MAX_BUG_BUFFER); + switch_mutex_init(&bug->read_mutex, SWITCH_MUTEX_NESTED, session->pool); + switch_mutex_init(&bug->write_mutex, SWITCH_MUTEX_NESTED, session->pool); + + switch_thread_rwlock_wrlock(session->bug_rwlock); + bug->next = session->bugs; + session->bugs = bug; + switch_thread_rwlock_unlock(session->bug_rwlock); + *new_bug = bug; + + if (bug->callback) { + bug->callback(bug, bug->user_data, SWITCH_ABC_TYPE_INIT); + } + + return SWITCH_STATUS_SUCCESS; +} + + +SWITCH_DECLARE(switch_status_t) switch_core_media_bug_remove_all(switch_core_session_t *session) +{ + switch_media_bug_t *bp; + + if (session->bugs) { + switch_thread_rwlock_wrlock(session->bug_rwlock); + for (bp = session->bugs; bp; bp = bp->next) { + if (bp->callback) { + bp->callback(bp, bp->user_data, SWITCH_ABC_TYPE_CLOSE); + } + switch_core_media_bug_destroy(bp); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Removing BUG from %s\n", switch_channel_get_name(session->channel)); + } + switch_thread_rwlock_unlock(session->bug_rwlock); + return SWITCH_STATUS_SUCCESS; + } + + return SWITCH_STATUS_FALSE; +} + +SWITCH_DECLARE(switch_status_t) switch_core_media_bug_remove(switch_core_session_t *session, switch_media_bug_t **bug) +{ + switch_media_bug_t *bp = NULL, *last = NULL; + + if (session->bugs) { + switch_thread_rwlock_wrlock(session->bug_rwlock); + for (bp = session->bugs; bp; bp = bp->next) { + if (bp == *bug) { + if (last) { + last->next = bp->next; + } else { + session->bugs = bp->next; + } + break; + } + last = bp; + } + switch_thread_rwlock_unlock(session->bug_rwlock); + + if (bp) { + if (bp->callback) { + bp->callback(bp, bp->user_data, SWITCH_ABC_TYPE_CLOSE); + } + switch_core_media_bug_destroy(bp); + *bug = NULL; + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Removing BUG from %s\n", switch_channel_get_name(session->channel)); + return SWITCH_STATUS_SUCCESS; + } + } + + return SWITCH_STATUS_FALSE; +} + +struct switch_core_port_allocator { + switch_port_t start; + switch_port_t end; + switch_port_t next; + uint8_t inc; + switch_mutex_t *mutex; + switch_memory_pool_t *pool; +}; + +SWITCH_DECLARE(switch_status_t) switch_core_port_allocator_new(switch_port_t start, + switch_port_t end, + uint8_t inc, + switch_core_port_allocator_t **new_allocator) +{ + switch_status_t status; + switch_memory_pool_t *pool; + switch_core_port_allocator_t *alloc; + + if ((status = switch_core_new_memory_pool(&pool)) != SWITCH_STATUS_SUCCESS) { + return status; + } + + if (!(alloc = switch_core_alloc(pool, sizeof(*alloc)))) { + switch_core_destroy_memory_pool(&pool); + return SWITCH_STATUS_MEMERR; + } + + alloc->start = start; + alloc->next = start; + alloc->end = end; + if (!(alloc->inc = inc)) { + alloc->inc = 2; + } + switch_mutex_init(&alloc->mutex, SWITCH_MUTEX_NESTED, pool); + alloc->pool = pool; + *new_allocator = alloc; + + return SWITCH_STATUS_SUCCESS; +} + +SWITCH_DECLARE(switch_port_t) switch_core_port_allocator_request_port(switch_core_port_allocator_t *alloc) +{ + switch_port_t port; + + switch_mutex_lock(alloc->mutex); + port = alloc->next; + alloc->next = alloc->next + alloc->inc; + if (alloc->next > alloc->end) { + alloc->next = alloc->start; + } + switch_mutex_unlock(alloc->mutex); + return port; +} + +SWITCH_DECLARE(void) switch_core_port_allocator_destroy(switch_core_port_allocator_t **alloc) +{ + switch_memory_pool_t *pool = (*alloc)->pool; + switch_core_destroy_memory_pool(&pool); + *alloc = NULL; +} + SWITCH_DECLARE(switch_core_db_t *) switch_core_db_open_file(char *filename) { switch_core_db_t *db; @@ -439,12 +684,15 @@ } switch_set_flag(codec, SWITCH_CODEC_FLAG_FREE_POOL); } + implementation->init(codec, flags, codec_settings); return SWITCH_STATUS_SUCCESS; } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Codec %s Exists but not at the desired implementation.\n", - codec_name); + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Codec %s Exists but not at the desired implementation. %dhz %dms\n", + codec_name, + rate, + ms); } return SWITCH_STATUS_NOTIMPL; @@ -1192,7 +1440,6 @@ } SWITCH_DECLARE(switch_status_t) switch_core_session_queue_event(switch_core_session_t *session, switch_event_t **event) - { switch_status_t status = SWITCH_STATUS_FALSE; @@ -1238,12 +1485,58 @@ return status; } +SWITCH_DECLARE(switch_status_t) switch_core_session_queue_private_event(switch_core_session_t *session, switch_event_t **event) +{ + switch_status_t status = SWITCH_STATUS_FALSE; + + assert(session != NULL); + + if (!session->private_event_queue) { + switch_queue_create(&session->private_event_queue, SWITCH_EVENT_QUEUE_LEN, session->pool); + } + + if (session->private_event_queue) { + if (switch_queue_trypush(session->private_event_queue, *event) == SWITCH_STATUS_SUCCESS) { + *event = NULL; + status = SWITCH_STATUS_SUCCESS; + } + } + + return status; +} + +SWITCH_DECLARE(int32_t) switch_core_session_private_event_count(switch_core_session_t *session) +{ + if (session->private_event_queue) { + return (int32_t) switch_queue_size(session->private_event_queue); + } + + return -1; +} + +SWITCH_DECLARE(switch_status_t) switch_core_session_dequeue_private_event(switch_core_session_t *session, switch_event_t **event) + +{ + switch_status_t status = SWITCH_STATUS_FALSE; + void *pop; + + assert(session != NULL); + + if (session->private_event_queue) { + if ((status = (switch_status_t) switch_queue_trypop(session->private_event_queue, &pop)) == SWITCH_STATUS_SUCCESS) { + *event = (switch_event_t *) pop; + } + } + + 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_io_event_hook_read_frame_t *ptr; switch_status_t status; - int need_codec, perfect; + int need_codec, perfect, do_bugs = 0; top: status = SWITCH_STATUS_FALSE; @@ -1301,6 +1594,11 @@ need_codec = TRUE; } + if (session->bugs && !need_codec) { + do_bugs = 1; + need_codec = 1; + } + if (status == SWITCH_STATUS_SUCCESS && need_codec) { switch_frame_t *enc_frame, *read_frame = *frame; @@ -1353,14 +1651,32 @@ read_frame->rate = session->read_resampler->to_rate; } + if (session->bugs) { + switch_media_bug_t *bp; + switch_thread_rwlock_rdlock(session->bug_rwlock); + for (bp = session->bugs; bp; bp = bp->next) { + switch_mutex_lock(bp->read_mutex); + switch_buffer_write(bp->raw_read_buffer, read_frame->data, read_frame->datalen); + if (bp->callback) { + bp->callback(bp, bp->user_data, SWITCH_ABC_TYPE_READ); + } + switch_mutex_unlock(bp->read_mutex); + } + switch_thread_rwlock_unlock(session->bug_rwlock); + } + + if (do_bugs) { + goto done; + } + if (session->read_codec) { if ((*frame)->datalen == session->read_codec->implementation->bytes_per_frame) { perfect = TRUE; } else { if (!session->raw_read_buffer) { - switch_size_t bytes = session->read_codec->implementation->bytes_per_frame * 10; + switch_size_t bytes = session->read_codec->implementation->bytes_per_frame * 2; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Engaging Read Buffer at %u bytes\n", bytes); - switch_buffer_create(session->pool, &session->raw_read_buffer, bytes); + switch_buffer_create_dynamic(&session->raw_read_buffer, bytes, bytes, 0); } if (!switch_buffer_write(session->raw_read_buffer, read_frame->data, read_frame->datalen)) { status = SWITCH_STATUS_MEMERR; @@ -1452,11 +1768,14 @@ { /* sweep theese under the rug, they wont be leaked they will be reclaimed when the session ends. - */ - session->raw_write_buffer = NULL; - session->raw_read_buffer = NULL; + */ + session->read_resampler = NULL; session->write_resampler = NULL; + + /* wipe theese, they will be recreated if need be */ + switch_buffer_destroy(&session->raw_read_buffer); + switch_buffer_destroy(&session->raw_write_buffer); } SWITCH_DECLARE(switch_status_t) switch_core_session_write_frame(switch_core_session_t *session, switch_frame_t *frame, @@ -1465,7 +1784,7 @@ 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; + unsigned int flag = 0, need_codec = 0, perfect = 0, do_bugs = 0, do_write = 0; switch_io_flag_t io_flag = SWITCH_IO_FLAG_NOOP; assert(session != NULL); @@ -1498,6 +1817,11 @@ need_codec = TRUE; } + if (session->bugs && !need_codec) { + do_bugs = 1; + need_codec = 1; + } + if (need_codec) { if (frame->codec) { session->raw_write_frame.datalen = session->raw_write_frame.buflen; @@ -1558,19 +1882,36 @@ write_frame->rate = session->write_resampler->to_rate; } - + if (session->bugs) { + switch_media_bug_t *bp; + switch_thread_rwlock_rdlock(session->bug_rwlock); + for (bp = session->bugs; bp; bp = bp->next) { + switch_mutex_lock(bp->write_mutex); + switch_buffer_write(bp->raw_write_buffer, write_frame->data, write_frame->datalen); + switch_mutex_unlock(bp->write_mutex); + if (bp->callback) { + bp->callback(bp, bp->user_data, SWITCH_ABC_TYPE_WRITE); + } + } + switch_thread_rwlock_unlock(session->bug_rwlock); + } + if (do_bugs) { + do_write = 1; + write_frame = frame; + goto done; + } if (session->write_codec) { if (write_frame->datalen == session->write_codec->implementation->bytes_per_frame) { perfect = TRUE; } else { if (!session->raw_write_buffer) { - switch_size_t bytes = session->write_codec->implementation->bytes_per_frame * 10; + switch_size_t bytes = session->write_codec->implementation->bytes_per_frame * 2; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Engaging Write Buffer at %u bytes to accomodate %u->%u\n", bytes, write_frame->datalen, session->write_codec->implementation->bytes_per_frame); if ((status = - switch_buffer_create(session->pool, &session->raw_write_buffer, bytes)) != SWITCH_STATUS_SUCCESS) { + switch_buffer_create_dynamic(&session->raw_write_buffer, bytes, bytes, 0)) != SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Write Buffer Failed!\n"); return status; } @@ -1697,6 +2038,11 @@ } } } else { + do_write = 1; + } + + done: + if (do_write) { return perform_write(session, frame, timeout, io_flag, stream_id); } @@ -2536,6 +2882,11 @@ switch_event_fire(&event); } + switch_core_media_bug_remove_all(*session); + switch_buffer_destroy(&(*session)->raw_read_buffer); + switch_buffer_destroy(&(*session)->raw_write_buffer); + switch_channel_uninit((*session)->channel); + pool = (*session)->pool; *session = NULL; apr_pool_destroy(pool); @@ -2763,6 +3114,7 @@ session->enc_read_frame.buflen = sizeof(session->enc_read_buf); switch_mutex_init(&session->mutex, SWITCH_MUTEX_NESTED, session->pool); + switch_thread_rwlock_create(&session->bug_rwlock, session->pool); switch_thread_cond_create(&session->cond, session->pool); switch_thread_rwlock_create(&session->rwlock, session->pool); Modified: freeswitch/branches/james/src/switch_event.c ============================================================================== --- freeswitch/branches/james/src/switch_event.c (original) +++ freeswitch/branches/james/src/switch_event.c Sun Sep 10 07:09:34 2006 @@ -101,6 +101,8 @@ "CHANNEL_UNBRIDGE", "CHANNEL_PROGRESS", "CHANNEL_OUTGOING", + "CHANNEL_PARK", + "CHANNEL_UNPARK", "API", "LOG", "INBOUND_CHAN", @@ -116,6 +118,7 @@ "DTMF", "MESSAGE", "CODEC", + "BACKGROUND_JOB", "ALL" }; Modified: freeswitch/branches/james/src/switch_ivr.c ============================================================================== --- freeswitch/branches/james/src/switch_ivr.c (original) +++ freeswitch/branches/james/src/switch_ivr.c Sun Sep 10 07:09:34 2006 @@ -75,6 +75,90 @@ return status; } + +static void switch_ivr_parse_event(switch_core_session_t *session, switch_event_t *event) +{ + switch_channel_t *channel = switch_core_session_get_channel(session); + char *cmd = switch_event_get_header(event, "call-command"); + unsigned long cmd_hash; + apr_ssize_t hlen = APR_HASH_KEY_STRING; + unsigned long CMD_EXECUTE = apr_hashfunc_default("execute", &hlen); + unsigned long CMD_HANGUP = apr_hashfunc_default("hangup", &hlen); + + assert(channel != NULL); + hlen = (switch_size_t) strlen(cmd); + cmd_hash = apr_hashfunc_default(cmd, &hlen); + + if (!switch_strlen_zero(cmd)) { + if (cmd_hash == CMD_EXECUTE) { + const switch_application_interface_t *application_interface; + char *app_name = switch_event_get_header(event, "execute-app-name"); + char *app_arg = switch_event_get_header(event, "execute-app-arg"); + + if (app_name && app_arg) { + if ((application_interface = switch_loadable_module_get_application_interface(app_name))) { + if (application_interface->application_function) { + application_interface->application_function(session, app_arg); + } + } + } + } else if (cmd_hash == CMD_HANGUP) { + char *cause_name = switch_event_get_header(event, "hangup-cause"); + switch_call_cause_t cause = SWITCH_CAUSE_NORMAL_CLEARING; + + if (cause_name) { + cause = switch_channel_str2cause(cause_name); + } + + switch_channel_hangup(channel, cause); + } + } +} + +SWITCH_DECLARE(switch_status_t) switch_ivr_park(switch_core_session_t *session) +{ + switch_status_t status = SWITCH_STATUS_SUCCESS; + switch_channel_t *channel; + switch_frame_t *frame; + int stream_id; + switch_event_t *event; + + channel = switch_core_session_get_channel(session); + assert(channel != NULL); + + switch_channel_answer(channel); + + if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_PARK) == SWITCH_STATUS_SUCCESS) { + switch_channel_event_set_data(channel, event); + switch_event_fire(&event); + } + + switch_channel_set_flag(channel, CF_CONTROLLED); + while (switch_channel_ready(channel)) { + for (stream_id = 0; stream_id < switch_core_session_get_stream_count(session); stream_id++) { + if ((status = switch_core_session_read_frame(session, &frame, -1, stream_id)) == SWITCH_STATUS_SUCCESS) { + if (!SWITCH_READ_ACCEPTABLE(status)) { + break; + } + + if (switch_core_session_dequeue_private_event(session, &event) == SWITCH_STATUS_SUCCESS) { + switch_ivr_parse_event(session, event); + switch_event_destroy(&event); + } + + } + } + } + switch_channel_clear_flag(channel, CF_CONTROLLED); + + if (switch_event_create(&event, SWITCH_EVENT_CHANNEL_UNPARK) == SWITCH_STATUS_SUCCESS) { + switch_channel_event_set_data(channel, event); + switch_event_fire(&event); + } + + return status; +} + SWITCH_DECLARE(switch_status_t) switch_ivr_collect_digits_callback(switch_core_session_t *session, switch_input_callback_function_t input_callback, void *buf, @@ -96,6 +180,12 @@ char dtmf[128]; + + if (switch_core_session_dequeue_private_event(session, &event) == SWITCH_STATUS_SUCCESS) { + switch_ivr_parse_event(session, event); + switch_event_destroy(&event); + } + if (switch_channel_has_dtmf(channel)) { switch_channel_dequeue_dtmf(channel, dtmf, sizeof(dtmf)); status = input_callback(session, dtmf, SWITCH_INPUT_TYPE_DTMF, buf, buflen); @@ -159,6 +249,7 @@ while(switch_channel_ready(channel)) { switch_frame_t *read_frame; + switch_event_t *event; if (timeout) { elapsed = (unsigned int)((switch_time_now() - started) / 1000); @@ -167,6 +258,11 @@ } } + if (switch_core_session_dequeue_private_event(session, &event) == SWITCH_STATUS_SUCCESS) { + switch_ivr_parse_event(session, event); + switch_event_destroy(&event); + } + if (switch_channel_has_dtmf(channel)) { char dtmf[128]; switch_channel_dequeue_dtmf(channel, dtmf, sizeof(dtmf)); @@ -302,6 +398,12 @@ switch_size_t len; switch_event_t *event; + + if (switch_core_session_dequeue_private_event(session, &event) == SWITCH_STATUS_SUCCESS) { + switch_ivr_parse_event(session, event); + switch_event_destroy(&event); + } + if (input_callback || buf) { /* dtmf handler function you can hook up to be executed when a digit is dialed during playback @@ -346,6 +448,138 @@ return status; } +static void record_callback(switch_media_bug_t *bug, void *user_data, switch_abc_type_t type) +{ + switch_file_handle_t *fh = (switch_file_handle_t *) user_data; + uint8_t data[SWITCH_RECCOMMENDED_BUFFER_SIZE]; + switch_frame_t frame = {0}; + + frame.data = data; + frame.buflen = SWITCH_RECCOMMENDED_BUFFER_SIZE; + + switch(type) { + case SWITCH_ABC_TYPE_INIT: + break; + case SWITCH_ABC_TYPE_CLOSE: + switch_core_file_close(fh); + case SWITCH_ABC_TYPE_READ: + if (fh) { + switch_size_t len; + + if (switch_core_media_bug_read(bug, &frame) == SWITCH_STATUS_SUCCESS) { + len = (switch_size_t) frame.datalen / 2; + switch_core_file_write(fh, frame.data, &len); + } + } + break; + case SWITCH_ABC_TYPE_WRITE: + break; + } +} + +SWITCH_DECLARE(switch_status_t) switch_ivr_stop_record_session(switch_core_session_t *session, char *file) +{ + switch_media_bug_t *bug; + switch_channel_t *channel = switch_core_session_get_channel(session); + + assert(channel != NULL); + if ((bug = switch_channel_get_private(channel, file))) { + switch_channel_set_private(channel, file, NULL); + switch_core_media_bug_remove(session, &bug); + return SWITCH_STATUS_SUCCESS; + } + + return SWITCH_STATUS_FALSE; + +} + +SWITCH_DECLARE(switch_status_t) switch_ivr_record_session(switch_core_session_t *session, char *file, switch_file_handle_t *fh) +{ + switch_channel_t *channel; + switch_codec_t *read_codec; + char *p; + const char *vval; + switch_media_bug_t *bug; + switch_status_t status; + + if (!fh) { + if (!(fh = switch_core_session_alloc(session, sizeof(*fh)))) { + return SWITCH_STATUS_MEMERR; + } + } + + channel = switch_core_session_get_channel(session); + assert(channel != NULL); + + read_codec = switch_core_session_get_read_codec(session); + assert(read_codec != NULL); + + fh->channels = read_codec->implementation->number_of_channels; + fh->samplerate = read_codec->implementation->samples_per_second; + + + if (switch_core_file_open(fh, + file, + SWITCH_FILE_FLAG_WRITE | SWITCH_FILE_DATA_SHORT, + switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) { + switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); + switch_core_session_reset(session); + return SWITCH_STATUS_GENERR; + } + + switch_channel_answer(channel); + + if ((p = switch_channel_get_variable(channel, "RECORD_TITLE"))) { + vval = (const char *) switch_core_session_strdup(session, p); + switch_core_file_set_string(fh, SWITCH_AUDIO_COL_STR_TITLE, vval); + switch_channel_set_variable(channel, "RECORD_TITLE", NULL); + } + + if ((p = switch_channel_get_variable(channel, "RECORD_COPYRIGHT"))) { + vval = (const char *) switch_core_session_strdup(session, p); + switch_core_file_set_string(fh, SWITCH_AUDIO_COL_STR_COPYRIGHT, vval); + switch_channel_set_variable(channel, "RECORD_COPYRIGHT", NULL); + } + + if ((p = switch_channel_get_variable(channel, "RECORD_SOFTWARE"))) { + vval = (const char *) switch_core_session_strdup(session, p); + switch_core_file_set_string(fh, SWITCH_AUDIO_COL_STR_SOFTWARE, vval); + switch_channel_set_variable(channel, "RECORD_SOFTWARE", NULL); + } + + if ((p = switch_channel_get_variable(channel, "RECORD_ARTIST"))) { + vval = (const char *) switch_core_session_strdup(session, p); + switch_core_file_set_string(fh, SWITCH_AUDIO_COL_STR_ARTIST, vval); + switch_channel_set_variable(channel, "RECORD_ARTIST", NULL); + } + + if ((p = switch_channel_get_variable(channel, "RECORD_COMMENT"))) { + vval = (const char *) switch_core_session_strdup(session, p); + switch_core_file_set_string(fh, SWITCH_AUDIO_COL_STR_COMMENT, vval); + switch_channel_set_variable(channel, "RECORD_COMMENT", NULL); + } + + if ((p = switch_channel_get_variable(channel, "RECORD_DATE"))) { + vval = (const char *) switch_core_session_strdup(session, p); + switch_core_file_set_string(fh, SWITCH_AUDIO_COL_STR_DATE, vval); + switch_channel_set_variable(channel, "RECORD_DATE", NULL); + } + + + + if ((status = switch_core_media_bug_add(session, + record_callback, + fh, + &bug)) != SWITCH_STATUS_SUCCESS) { + switch_core_file_close(fh); + return status; + } + + switch_channel_set_private(channel, file, bug); + + return SWITCH_STATUS_SUCCESS; +} + SWITCH_DECLARE(switch_status_t) switch_ivr_play_file(switch_core_session_t *session, switch_file_handle_t *fh, char *file, @@ -494,6 +728,12 @@ int last_speed = -1; switch_event_t *event; + + if (switch_core_session_dequeue_private_event(session, &event) == SWITCH_STATUS_SUCCESS) { + switch_ivr_parse_event(session, event); + switch_event_destroy(&event); + } + if (input_callback || buf) { /* dtmf handler function you can hook up to be executed when a digit is dialed during playback @@ -711,6 +951,11 @@ while(switch_channel_ready(channel)) { switch_event_t *event; + if (switch_core_session_dequeue_private_event(session, &event) == SWITCH_STATUS_SUCCESS) { + switch_ivr_parse_event(session, event); + switch_event_destroy(&event); + } + if (input_callback || buf) { /* dtmf handler function you can hook up to be executed when a digit is dialed during playback @@ -1015,8 +1260,13 @@ ans_a++; } + if (switch_core_session_dequeue_private_event(session_a, &event) == SWITCH_STATUS_SUCCESS) { + switch_channel_set_flag(chan_b, CF_HOLD); + switch_ivr_parse_event(session_a, event); + switch_channel_clear_flag(chan_b, CF_HOLD); + switch_event_destroy(&event); + } - /* if 1 channel has DTMF pass it to the other */ if (switch_channel_has_dtmf(chan_a)) { char dtmf[128]; @@ -1092,8 +1342,8 @@ channel = switch_core_session_get_channel(session); assert(channel != NULL); - if ((arg = switch_channel_get_private(channel))) { - switch_channel_set_private(channel, NULL); + if ((arg = switch_channel_get_private(channel, "_bridge_"))) { + switch_channel_set_private(channel, "_bridge_", NULL); audio_bridge_thread(NULL, (void *) arg); } else { switch_channel_hangup(channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER); @@ -1308,7 +1558,7 @@ int32_t idx = -1; switch_codec_t write_codec = {0}; switch_frame_t write_frame = {0}; - uint8_t err = 0, fdata[1024]; + uint8_t err = 0, fdata[1024], pass = 0; char *file = NULL, *key = NULL, *odata, *var; write_frame.data = fdata; @@ -1453,11 +1703,15 @@ peer_channels[i] = switch_core_session_get_channel(peer_sessions[i]); assert(peer_channels[i] != NULL); - if (!table) { + if (table == &noop_state_handler) { + table = NULL; + } else if (!table) { table = &audio_bridge_peer_state_handlers; } - switch_channel_add_state_handler(peer_channels[i], table); + if (table) { + switch_channel_add_state_handler(peer_channels[i], table); + } if (switch_core_session_runing(peer_sessions[i])) { switch_channel_set_state(peer_channels[i], CS_RING); @@ -1508,24 +1762,26 @@ read_codec = switch_core_session_get_read_codec(session); assert(read_codec != NULL); - if (switch_core_codec_init(&write_codec, - "L16", - read_codec->implementation->samples_per_second, - read_codec->implementation->microseconds_per_frame / 1000, - 1, - SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, - NULL, - pool) == SWITCH_STATUS_SUCCESS) { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Raw Codec Activation Success L16@%uhz 1 channel %dms\n", - read_codec->implementation->samples_per_second, - read_codec->implementation->microseconds_per_frame / 1000); - write_frame.codec = &write_codec; - write_frame.datalen = read_codec->implementation->bytes_per_frame; - write_frame.samples = write_frame.datalen / 2; - memset(write_frame.data, 255, write_frame.datalen); - } else { - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec Error!"); - switch_channel_hangup(caller_channel, SWITCH_CAUSE_NORMAL_TEMPORARY_FAILURE); + if (!(pass = (uint8_t)switch_test_flag(read_codec, SWITCH_CODEC_FLAG_PASSTHROUGH))) { + if (switch_core_codec_init(&write_codec, + "L16", + read_codec->implementation->samples_per_second, + read_codec->implementation->microseconds_per_frame / 1000, + 1, + SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, + NULL, + pool) == SWITCH_STATUS_SUCCESS) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Raw Codec Activation Success L16@%uhz 1 channel %dms\n", + read_codec->implementation->samples_per_second, + read_codec->implementation->microseconds_per_frame / 1000); + write_frame.codec = &write_codec; + write_frame.datalen = read_codec->implementation->bytes_per_frame; + write_frame.samples = write_frame.datalen / 2; + memset(write_frame.data, 255, write_frame.datalen); + } else { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Codec Error!"); + switch_channel_hangup(caller_channel, SWITCH_CAUSE_NORMAL_TEMPORARY_FAILURE); + } } } @@ -1539,7 +1795,7 @@ if (!SWITCH_READ_ACCEPTABLE(status)) { break; } - if (read_frame) { + if (read_frame && !pass) { if (switch_core_session_write_frame(session, &write_frame, 1000, 0) != SWITCH_STATUS_SUCCESS) { break; } @@ -1596,7 +1852,7 @@ if (odata) { free(odata); } - if (write_codec.implementation) { + if (!pass && write_codec.implementation) { switch_core_codec_destroy(&write_codec); } return status; @@ -1672,7 +1928,7 @@ switch_core_session_receive_message(session, &msg); if (switch_core_session_read_lock(peer_session) == SWITCH_STATUS_SUCCESS) { - switch_channel_set_private(peer_channel, other_audio_thread); + switch_channel_set_private(peer_channel, "_bridge_", other_audio_thread); switch_channel_set_state(peer_channel, CS_LOOPBACK); audio_bridge_thread(NULL, (void *) this_audio_thread); @@ -1691,7 +1947,8 @@ this_audio_thread->running = 0; switch_mutex_unlock(this_audio_thread->mutex); - if (!switch_channel_test_flag(peer_channel, CF_TRANSFER) && switch_channel_get_state(peer_channel) < CS_HANGUP) { + if (!switch_channel_test_flag(peer_channel, CF_TRANSFER) && + switch_channel_get_state(peer_channel) < CS_HANGUP) { switch_core_session_kill_channel(peer_session, SWITCH_SIG_KILL); switch_channel_hangup(peer_channel, SWITCH_CAUSE_NORMAL_CLEARING); } Modified: freeswitch/branches/james/src/switch_loadable_module.c ============================================================================== --- freeswitch/branches/james/src/switch_loadable_module.c (original) +++ freeswitch/branches/james/src/switch_loadable_module.c Sun Sep 10 07:09:34 2006 @@ -108,7 +108,7 @@ for (ptr = new_module->module_interface->codec_interface; ptr; ptr = ptr->next) { for (impl = ptr->implementations; impl; impl = impl->next) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, - "Adding Codec '%s' (%s) %dkhz %dms\n", + "Adding Codec '%s' (%s) %dhz %dms\n", impl->iananame, ptr->interface_name, impl->samples_per_second, impl->microseconds_per_frame / 1000);
participants (1)
-
Freeswitch SVN