Diff
Modified: freeswitch/trunk/Freeswitch.2005.unsupported.sln (16332 => 16333)
--- freeswitch/trunk/Freeswitch.2005.unsupported.sln 2010-01-17 03:11:56 UTC (rev 16332)
+++ freeswitch/trunk/Freeswitch.2005.unsupported.sln 2010-01-17 05:48:36 UTC (rev 16333)
@@ -249,7 +249,7 @@
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_core_db", "src\mod\languages\mod_spidermonkey_core_db\mod_spidermonkey_core_db.vcproj", "{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_core_db", "src\mod\languages\mod_spidermonkey\mod_spidermonkey_core_db.vcproj", "{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}"
ProjectSection(ProjectDependencies) = postProject
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
@@ -257,7 +257,7 @@
{204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_teletone", "src\mod\languages\mod_spidermonkey_teletone\mod_spidermonkey_teletone.vcproj", "{8F992C49-6C51-412F-B2A3-34EAB708EB65}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_teletone", "src\mod\languages\mod_spidermonkey\mod_spidermonkey_teletone.vcproj", "{8F992C49-6C51-412F-B2A3-34EAB708EB65}"
ProjectSection(ProjectDependencies) = postProject
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
@@ -274,7 +274,7 @@
{4043FC6A-9A30-4577-8AD5-9B233C9575D8} = {4043FC6A-9A30-4577-8AD5-9B233C9575D8}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_odbc", "src\mod\languages\mod_spidermonkey_odbc\mod_spidermonkey_odbc.vcproj", "{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_odbc", "src\mod\languages\mod_spidermonkey\mod_spidermonkey_odbc.vcproj", "{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}"
ProjectSection(ProjectDependencies) = postProject
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
@@ -371,7 +371,7 @@
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_socket", "src\mod\languages\mod_spidermonkey_socket\mod_spidermonkey_socket.vcproj", "{028C7278-05D7-4E18-82FE-BE231B844F41}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_socket", "src\mod\languages\mod_spidermonkey\mod_spidermonkey_socket.vcproj", "{028C7278-05D7-4E18-82FE-BE231B844F41}"
ProjectSection(ProjectDependencies) = postProject
{204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
@@ -751,7 +751,7 @@
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_curl", "src\mod\languages\mod_spidermonkey_curl\mod_spidermonkey_curl.vcproj", "{2CCED6DC-26FF-40F2-9585-E9E1049A4599}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_curl", "src\mod\languages\mod_spidermonkey\mod_spidermonkey_curl.vcproj", "{2CCED6DC-26FF-40F2-9585-E9E1049A4599}"
ProjectSection(ProjectDependencies) = postProject
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
Modified: freeswitch/trunk/Freeswitch.2008.express.sln (16332 => 16333)
--- freeswitch/trunk/Freeswitch.2008.express.sln 2010-01-17 03:11:56 UTC (rev 16332)
+++ freeswitch/trunk/Freeswitch.2008.express.sln 2010-01-17 05:48:36 UTC (rev 16333)
@@ -216,7 +216,7 @@
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_core_db", "src\mod\languages\mod_spidermonkey_core_db\mod_spidermonkey_core_db.2008.vcproj", "{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_core_db", "src\mod\languages\mod_spidermonkey\mod_spidermonkey_core_db.2008.vcproj", "{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}"
ProjectSection(ProjectDependencies) = postProject
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
@@ -224,7 +224,7 @@
{204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_teletone", "src\mod\languages\mod_spidermonkey_teletone\mod_spidermonkey_teletone.2008.vcproj", "{8F992C49-6C51-412F-B2A3-34EAB708EB65}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_teletone", "src\mod\languages\mod_spidermonkey\mod_spidermonkey_teletone.2008.vcproj", "{8F992C49-6C51-412F-B2A3-34EAB708EB65}"
ProjectSection(ProjectDependencies) = postProject
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
@@ -241,7 +241,7 @@
{4043FC6A-9A30-4577-8AD5-9B233C9575D8} = {4043FC6A-9A30-4577-8AD5-9B233C9575D8}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_odbc", "src\mod\languages\mod_spidermonkey_odbc\mod_spidermonkey_odbc.2008.vcproj", "{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_odbc", "src\mod\languages\mod_spidermonkey\mod_spidermonkey_odbc.2008.vcproj", "{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}"
ProjectSection(ProjectDependencies) = postProject
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
@@ -290,7 +290,7 @@
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_socket", "src\mod\languages\mod_spidermonkey_socket\mod_spidermonkey_socket.2008.vcproj", "{028C7278-05D7-4E18-82FE-BE231B844F41}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_socket", "src\mod\languages\mod_spidermonkey\mod_spidermonkey_socket.2008.vcproj", "{028C7278-05D7-4E18-82FE-BE231B844F41}"
ProjectSection(ProjectDependencies) = postProject
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
@@ -375,7 +375,7 @@
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_curl", "src\mod\languages\mod_spidermonkey_curl\mod_spidermonkey_curl.2008.vcproj", "{36E854E3-CE12-4348-A125-CCF3F9D74813}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_curl", "src\mod\languages\mod_spidermonkey\mod_spidermonkey_curl.2008.vcproj", "{36E854E3-CE12-4348-A125-CCF3F9D74813}"
ProjectSection(ProjectDependencies) = postProject
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
Modified: freeswitch/trunk/Freeswitch.2008.sln (16332 => 16333)
--- freeswitch/trunk/Freeswitch.2008.sln 2010-01-17 03:11:56 UTC (rev 16332)
+++ freeswitch/trunk/Freeswitch.2008.sln 2010-01-17 05:48:36 UTC (rev 16333)
@@ -589,7 +589,7 @@
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_core_db", "src\mod\languages\mod_spidermonkey_core_db\mod_spidermonkey_core_db.2008.vcproj", "{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_core_db", "src\mod\languages\mod_spidermonkey\mod_spidermonkey_core_db.2008.vcproj", "{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}"
ProjectSection(ProjectDependencies) = postProject
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
@@ -597,7 +597,7 @@
{204FA0DE-305D-4414-AE2E-F195A23F390D} = {204FA0DE-305D-4414-AE2E-F195A23F390D}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_teletone", "src\mod\languages\mod_spidermonkey_teletone\mod_spidermonkey_teletone.2008.vcproj", "{8F992C49-6C51-412F-B2A3-34EAB708EB65}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_teletone", "src\mod\languages\mod_spidermonkey\mod_spidermonkey_teletone.2008.vcproj", "{8F992C49-6C51-412F-B2A3-34EAB708EB65}"
ProjectSection(ProjectDependencies) = postProject
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
@@ -614,7 +614,7 @@
{4043FC6A-9A30-4577-8AD5-9B233C9575D8} = {4043FC6A-9A30-4577-8AD5-9B233C9575D8}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_odbc", "src\mod\languages\mod_spidermonkey_odbc\mod_spidermonkey_odbc.2008.vcproj", "{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_odbc", "src\mod\languages\mod_spidermonkey\mod_spidermonkey_odbc.2008.vcproj", "{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}"
ProjectSection(ProjectDependencies) = postProject
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
@@ -663,7 +663,7 @@
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_socket", "src\mod\languages\mod_spidermonkey_socket\mod_spidermonkey_socket.2008.vcproj", "{028C7278-05D7-4E18-82FE-BE231B844F41}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_socket", "src\mod\languages\mod_spidermonkey\mod_spidermonkey_socket.2008.vcproj", "{028C7278-05D7-4E18-82FE-BE231B844F41}"
ProjectSection(ProjectDependencies) = postProject
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
@@ -748,7 +748,7 @@
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_curl", "src\mod\languages\mod_spidermonkey_curl\mod_spidermonkey_curl.2008.vcproj", "{36E854E3-CE12-4348-A125-CCF3F9D74813}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_curl", "src\mod\languages\mod_spidermonkey\mod_spidermonkey_curl.2008.vcproj", "{36E854E3-CE12-4348-A125-CCF3F9D74813}"
ProjectSection(ProjectDependencies) = postProject
{1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F} = {1AD3F51E-BBB6-4090-BA39-9DFAB1EF1F5F}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
Modified: freeswitch/trunk/Makefile.am (16332 => 16333)
--- freeswitch/trunk/Makefile.am 2010-01-17 03:11:56 UTC (rev 16332)
+++ freeswitch/trunk/Makefile.am 2010-01-17 05:48:36 UTC (rev 16333)
@@ -355,11 +355,6 @@
fi ; \
fi ;
-JS_DIR=$(switch_srcdir)/libs/js
-JSLA=$(JS_DIR)/libjs.la
-$(JSLA): mod_spidermonkey-all
-mod_spidermonkey_curl-all mod_spidermonkey_teletone-all mod_spidermonkey_core_db-all mod_spidermonkey_socket-all mod_spidermonky_odbc-all mod_spidermonkey_curl-install mod_spidermonkey_teletone-install mod_spidermonkey_core_db-install mod_spidermonkey_socket-install mod_spidermonky_odbc-install: $(JSLA)
-
##
## Dependency targets
##
Modified: freeswitch/trunk/build/modules.conf.in (16332 => 16333)
--- freeswitch/trunk/build/modules.conf.in 2010-01-17 03:11:56 UTC (rev 16332)
+++ freeswitch/trunk/build/modules.conf.in 2010-01-17 05:48:36 UTC (rev 16333)
@@ -76,11 +76,6 @@
#formats/mod_shell_stream
#languages/mod_python
languages/mod_spidermonkey
-languages/mod_spidermonkey_curl
-languages/mod_spidermonkey_teletone
-languages/mod_spidermonkey_core_db
-languages/mod_spidermonkey_socket
-#languages/mod_spidermonkey_odbc
languages/mod_lua
#languages/mod_perl
#languages/mod_yaml
Modified: freeswitch/trunk/configure.in (16332 => 16333)
--- freeswitch/trunk/configure.in 2010-01-17 03:11:56 UTC (rev 16332)
+++ freeswitch/trunk/configure.in 2010-01-17 05:48:36 UTC (rev 16333)
@@ -705,7 +705,7 @@
AC_SUBST(GETSOUNDS)
-LIBCURL_CHECK_CONFIG([yes], [7.13.0], [LIBCURL_DEPS=''], [LIBCURL_DEPS='${switch_srcdir}/libs/curl/lib/libcurl.la';LIBCURL='${switch_srcdir}/libs/curl/lib/libcurl.la';LIBCURL_CPPFLAGS='-I${switch_srcdir}/libs/curl/include'])
+LIBCURL_CHECK_CONFIG([yes], [7.13.0], [LIBCURL_DEPS=''], [LIBCURL_DEPS='${switch_builddir}/libs/curl/lib/libcurl.la';LIBCURL='${switch_builddir}/libs/curl/lib/libcurl.la';LIBCURL_CPPFLAGS='-I${switch_srcdir}/libs/curl/include'])
AC_SUBST(LIBCURL_DEPS)
@@ -870,6 +870,7 @@
src/mod/asr_tts/mod_unimrcp/Makefile
src/mod/languages/mod_java/Makefile
src/mod/languages/mod_python/Makefile
+ src/mod/languages/mod_spidermonkey/Makefile
src/mod/event_handlers/mod_erlang_event/Makefile
src/include/switch_am_config.h
build/getsounds.sh
Modified: freeswitch/trunk/debian/rules (16332 => 16333)
--- freeswitch/trunk/debian/rules 2010-01-17 03:11:56 UTC (rev 16332)
+++ freeswitch/trunk/debian/rules 2010-01-17 05:48:36 UTC (rev 16333)
@@ -8,8 +8,6 @@
export DH_COMPAT=4
export DEB_DH_INSTALL_SOURCEDIR=debian/tmp
export PASSTHRU_CODEC_MODULES=codecs/mod_g729 codecs/mod_g723_1 codecs/mod_amr
-export SPIDERMONKEY_MODULES=languages/mod_spidermonkey languages/mod_spidermonkey_core_db languages/mod_spidermonkey_odbc \
- languages/mod_spidermonkey_socket languages/mod_spidermonkey_teletone
# Modules listed by those built by default, then those that are added in this package
export APPLICATIONS_MODULES=applications/mod_cluechoo applications/mod_commands applications/mod_conference applications/mod_dptools \
applications/mod_enum applications/mod_esf applications/mod_expr applications/mod_fifo applications/mod_fsv \
@@ -26,15 +24,15 @@
endpoints/mod_loopback ../../libs/openzap/mod_openzap endpoints/mod_skypiax
export EVENT_HANDLERS_MODULES=event_handlers/mod_event_multicast event_handlers/mod_event_socket event_handlers/mod_cdr_csv
export FORMATS_MODULES=formats/mod_local_stream formats/mod_native_file formats/mod_sndfile formats/mod_tone_stream formats/mod_shout
-export LANGUAGES_MODULES=languages/mod_perl languages/mod_lua
+export LANGUAGES_MODULES=languages/mod_spidermonkey languages/mod_perl languages/mod_lua
export LOGGERS_MODULES=loggers/mod_console loggers/mod_logfile loggers/mod_syslog
export SAY_MODULES=say/mod_say_en say/mod_say_it say/mod_say_de say/mod_say_fr say/mod_say_es say/mod_say_nl say/mod_say_ru
export TIMERS_MODULES=
export DISABLED_MODULES=applications/mod_soundtouch directories/mod_ldap languages/mod_java languages/mod_python \
- languages/mod_spidermonkey_skel ast_tts/mod_cepstral asr_tts/mod_lumenvox endpoints/mod_wanpipe \
+ asr_tts/mod_cepstral asr_tts/mod_lumenvox endpoints/mod_wanpipe \
event_handlers/mod_event_test event_handlers/mod_radius_cdr event_handlers/mod_zeroconf
export XML_INT_MODULES=xml_int/mod_xml_rpc xml_int/mod_xml_curl xml_int/mod_xml_cdr
-export MYMODULES=$(PASSTHRU_CODEC_MODULES) $(SPIDERMONKEY_MODULES) $(APPLICATIONS_MODULES) $(ASR_TTS_MODULES) $(CODECS_MODULES) $(DIALPLANS_MODULES) $(DIRECTORIES_MODULES) $(DOTNET_MODULES) $(ENDPOINTS_MODULES) $(EVENT_HANDLERS_MODULES) $(FORMATS_MODULES) $(LANGUAGES_MODULES) $(LOGGERS_MODULES) $(SAY_MODULES) $(TIMERS_MODULES) $(XML_INT_MODULES)
+export MYMODULES=$(PASSTHRU_CODEC_MODULES) $(APPLICATIONS_MODULES) $(ASR_TTS_MODULES) $(CODECS_MODULES) $(DIALPLANS_MODULES) $(DIRECTORIES_MODULES) $(DOTNET_MODULES) $(ENDPOINTS_MODULES) $(EVENT_HANDLERS_MODULES) $(FORMATS_MODULES) $(LANGUAGES_MODULES) $(LOGGERS_MODULES) $(SAY_MODULES) $(TIMERS_MODULES) $(XML_INT_MODULES)
export MODULES=$(MYMODULES)
ifndef AUTOCONF
Modified: freeswitch/trunk/freeswitch.spec (16332 => 16333)
--- freeswitch/trunk/freeswitch.spec 2010-01-17 03:11:56 UTC (rev 16332)
+++ freeswitch/trunk/freeswitch.spec 2010-01-17 05:48:36 UTC (rev 16333)
@@ -228,7 +228,6 @@
%endif
PASSTHRU_CODEC_MODULES="codecs/mod_g729 codecs/mod_g723_1 codecs/mod_amr codecs/mod_amrwb"
-SPIDERMONKEY_MODULES="languages/mod_spidermonkey languages/mod_spidermonkey_curl languages/mod_spidermonkey_core_db languages/mod_spidermonkey_odbc languages/mod_spidermonkey_socket languages/mod_spidermonkey_teletone"
APPLICATIONS_MODULES="applications/mod_commands applications/mod_conference applications/mod_dptools applications/mod_enum applications/mod_esf applications/mod_expr applications/mod_fifo applications/mod_limit applications/mod_rss applications/mod_voicemail applications/mod_directory applications/mod_fsv applications/mod_lcr applications/mod_easyroute applications/mod_stress applications/mod_vmd applications/mod_limit applications/mod_soundtouch applications/mod_fax"
CODECS_MODULES="codecs/mod_ilbc codecs/mod_h26x codecs/mod_voipcodecs codecs/mod_speex codecs/mod_celt codecs/mod_siren codecs/mod_bv"
DIALPLANS_MODULES="dialplans/mod_dialplan_asterisk dialplans/mod_dialplan_directory dialplans/mod_dialplan_xml"
@@ -237,13 +236,13 @@
ASR_TTS_MODULES="asr_tts/mod_pocketsphinx asr_tts/mod_flite asr_tts/mod_unimrcp"
EVENT_HANDLERS_MODULES="event_handlers/mod_event_multicast event_handlers/mod_event_socket event_handlers/mod_cdr_csv"
FORMATS_MODULES="formats/mod_local_stream formats/mod_native_file formats/mod_sndfile formats/mod_tone_stream formats/mod_shout"
-LANGUAGES_MODULES="languages/mod_perl languages/mod_lua languages/mod_python"
+LANGUAGES_MODULES="languages/mod_spidermonkey languages/mod_perl languages/mod_lua languages/mod_python"
LOGGERS_MODULES="loggers/mod_console loggers/mod_logfile loggers/mod_syslog"
SAY_MODULES="say/mod_say_en say/mod_say_de say/mod_say_fr"
TIMERS_MODULES=
-DISABLED_MODULES="applications/mod_soundtouch languages/mod_spidermonkey_skel ast_tts/mod_cepstral asr_tts/mod_lumenvox event_handlers/mod_event_test event_handlers/mod_radius_cdr event_handlers/mod_zeroconf languages/mod_managed languages/mod_java say/mod_say_it say/mod_say_es say/mod_say_nl languages/mod_yaml"
+DISABLED_MODULES="applications/mod_soundtouch asr_tts/mod_cepstral asr_tts/mod_lumenvox event_handlers/mod_event_test event_handlers/mod_radius_cdr event_handlers/mod_zeroconf languages/mod_managed languages/mod_java say/mod_say_it say/mod_say_es say/mod_say_nl languages/mod_yaml"
XML_INT_MODULES="xml_int/mod_xml_rpc xml_int/mod_xml_curl xml_int/mod_xml_cdr "
-MYMODULES="$PASSTHRU_CODEC_MODULES $SPIDERMONKEY_MODULES $APPLICATIONS_MODULES $CODECS_MODULES $DIALPLANS_MODULES $DIRECTORIES_MODULES $ENDPOINTS_MODULES $ASR_TTS_MODULES $EVENT_HANDLERS_MODULES $FORMATS_MODULES $LANGUAGES_MODULES $LOGGERS_MODULES $SAY_MODULES $TIMERS_MODULES $XML_INT_MODULES"
+MYMODULES="$PASSTHRU_CODEC_MODULES $APPLICATIONS_MODULES $CODECS_MODULES $DIALPLANS_MODULES $DIRECTORIES_MODULES $ENDPOINTS_MODULES $ASR_TTS_MODULES $EVENT_HANDLERS_MODULES $FORMATS_MODULES $LANGUAGES_MODULES $LOGGERS_MODULES $SAY_MODULES $TIMERS_MODULES $XML_INT_MODULES"
export MODULES=$MYMODULES
test ! -f modules.conf || rm -f modules.conf
Modified: freeswitch/trunk/src/mod/Makefile.am (16332 => 16333)
--- freeswitch/trunk/src/mod/Makefile.am 2010-01-17 03:11:56 UTC (rev 16332)
+++ freeswitch/trunk/src/mod/Makefile.am 2010-01-17 05:48:36 UTC (rev 16333)
@@ -35,11 +35,6 @@
fi; \
test -z "$$fail" ;
-JS_DIR=$(switch_srcdir)/libs/js
-JSLA=$(JS_DIR)/libjs.la
-$(JSLA): mod_spidermonkey-all
-mod_spidermonkey_curl-all mod_spidermonkey_teletone-all mod_spidermonkey_core_db-all mod_spidermonkey_socket-all mod_spidermonky_odbc-all mod_spidermonkey_curl-install mod_spidermonkey_teletone-install mod_spidermonkey_core_db-install mod_spidermonkey_socket-install mod_spidermonky_odbc-install: $(JSLA)
-
.DEFAULT:
@if test -z "`echo $@ | grep all`"; then $(MAKE) $(AM_MAKEFLAGS) $@-all ; else echo Unknown target `echo $@ | sed -e 's|-all||'`; exit 1; fi
Deleted: freeswitch/trunk/src/mod/languages/mod_spidermonkey/Makefile
Added: freeswitch/trunk/src/mod/languages/mod_spidermonkey/Makefile.am (0 => 16333)
--- freeswitch/trunk/src/mod/languages/mod_spidermonkey/Makefile.am (rev 0)
+++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/Makefile.am 2010-01-17 05:48:36 UTC (rev 16333)
@@ -0,0 +1,71 @@
+include $(top_srcdir)/build/modmake.rulesam
+
+MODNAME=mod_spidermonkey
+
+CURL_DIR=$(switch_srcdir)/libs/curl
+CURL_BUILDDIR=$(switch_builddir)/libs/curl
+CURLLA=${switch_builddir}/libs/curl/lib/libcurl.la
+
+JS_DIR=$(switch_srcdir)/libs/js
+JS_BUILDDIR=$(switch_builddir)/libs/js
+JSLA=$(JS_BUILDDIR)/libjs.la
+
+AM_CFLAGS += -I. -I$(JS_DIR)/src -I$(JS_DIR)/nsprpub/dist/include/nspr
+AM_CFLAGS += -DXP_UNIX -DJS_THREADSAFE -DJS_HAS_FILE_OBJECT=1 -DJS_HAS_XML_SUPPORT=1
+AM_LIBADD = $(switch_builddir)/libfreeswitch.la $(JSLA)
+AM_LDFLAGS += -avoid-version -module -no-undefined -shared
+AM_LDFLAGS += -L$(JS_BUILDDIR)/nsprpub/dist/lib -lnspr4 $(JS_BUILDDIR)/nsprpub/pr/src/libnspr4.*
+BUILT_SOURCES = $(JSLA) $(LIBCURL_DEPS)
+
+mod_LTLIBRARIES = mod_spidermonkey.la
+mod_spidermonkey_la_SOURCES = mod_spidermonkey.c
+mod_spidermonkey_la_CFLAGS = $(AM_CFLAGS) $(LIBCURL_CPPFLAGS)
+mod_spidermonkey_la_LIBADD = $(AM_LIBADD)
+mod_spidermonkey_la_LDFLAGS = $(AM_LDFLAGS) $(LIBCURL)
+
+mod_LTLIBRARIES += mod_spidermonkey_curl.la
+mod_spidermonkey_curl_la_SOURCES = mod_spidermonkey_curl.c
+mod_spidermonkey_curl_la_CFLAGS = $(AM_CFLAGS) $(LIBCURL_CPPFLAGS)
+mod_spidermonkey_curl_la_LIBADD = $(AM_LIBADD)
+mod_spidermonkey_curl_la_LDFLAGS = $(AM_LDFLAGS) $(LIBCURL)
+
+mod_LTLIBRARIES += mod_spidermonkey_socket.la
+mod_spidermonkey_socket_la_SOURCES = mod_spidermonkey_socket.c
+mod_spidermonkey_socket_la_CFLAGS = $(AM_CFLAGS)
+mod_spidermonkey_socket_la_LIBADD = $(AM_LIBADD)
+mod_spidermonkey_socket_la_LDFLAGS = $(AM_LDFLAGS)
+
+mod_LTLIBRARIES += mod_spidermonkey_core_db.la
+mod_spidermonkey_core_db_la_SOURCES = mod_spidermonkey_core_db.c
+mod_spidermonkey_core_db_la_CFLAGS = $(AM_CFLAGS)
+mod_spidermonkey_core_db_la_LIBADD = $(AM_LIBADD)
+mod_spidermonkey_core_db_la_LDFLAGS = $(AM_LDFLAGS)
+
+mod_LTLIBRARIES += mod_spidermonkey_teletone.la
+mod_spidermonkey_teletone_la_SOURCES = mod_spidermonkey_teletone.c
+mod_spidermonkey_teletone_la_CFLAGS = $(AM_CFLAGS) -I$(switch_srcdir)/libs/libteletone/src
+mod_spidermonkey_teletone_la_LIBADD = $(AM_LIBADD)
+mod_spidermonkey_teletone_la_LDFLAGS = $(AM_LDFLAGS)
+
+if HAVE_ODBC
+mod_LTLIBRARIES += mod_spidermonkey_odbc.la
+mod_spidermonkey_odbc_la_SOURCES = mod_spidermonkey_odbc.c
+mod_spidermonkey_odbc_la_CFLAGS = $(AM_CFLAGS)
+mod_spidermonkey_odbc_la_LIBADD = $(AM_LIBADD)
+mod_spidermonkey_odbc_la_LDFLAGS = $(AM_LDFLAGS)
+endif
+
+$(SOURCES): $(BUILT_SOURCES)
+
+$(JSLA): $(JS_DIR) $(JS_DIR)/.update
+ cd $(JS_BUILDDIR)/nsprpub && $(MAKE) -j1 && cd $(JS_BUILDDIR) && $(MAKE)
+ $(TOUCH_TARGET)
+
+$(CURLLA):
+ @cd $(CURL_BUILDDIR) && $(MAKE)
+ $(TOUCH_TARGET)
+
+install-exec-local: $(DESTDIR)$(libdir)/libjs.la
+
+$(DESTDIR)$(libdir)/libjs.la: $(JSLA)
+ cd $(JS_BUILDDIR)/nsprpub/ && $(MAKE) -j1 install && cd $(JS_BUILDDIR) && $(MAKE) install
Copied: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_core_db.2008.vcproj (from rev 16304, freeswitch/trunk/src/mod/languages/mod_spidermonkey_core_db/mod_spidermonkey_core_db.2008.vcproj) (0 => 16333)
--- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_core_db.2008.vcproj (rev 0)
+++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_core_db.2008.vcproj 2010-01-17 05:48:36 UTC (rev 16333)
@@ -0,0 +1,295 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="mod_spidermonkey_core_db"
+ ProjectGUID="{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}"
+ RootNamespace="mod_spidermonkey_core_db"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_debug.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_debug.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(SolutionDir)$(PlatformName)\$(ConfigurationName)/mod/$(ProjectName).dll"
+ AdditionalLibraryDirectories=""
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_release.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_release.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(SolutionDir)$(PlatformName)\$(ConfigurationName)/mod/$(ProjectName).dll"
+ AdditionalLibraryDirectories=""
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\mod_spidermonkey_core_db.c"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Copied: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_core_db.c (from rev 16304, freeswitch/trunk/src/mod/languages/mod_spidermonkey_core_db/mod_spidermonkey_core_db.c) (0 => 16333)
--- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_core_db.c (rev 0)
+++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_core_db.c 2010-01-17 05:48:36 UTC (rev 16333)
@@ -0,0 +1,474 @@
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2005-2009, Anthony Minessale II <anthm@freeswitch.org>
+ *
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * Anthony Minessale II <anthm@freeswitch.org>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Anthony Minessale II <anthm@freeswitch.org>
+ *
+ *
+ * mod_spidermonkey_DB.c -- DB Javascript Module
+ *
+ */
+#include "mod_spidermonkey.h"
+
+static const char modname[] = "CoreDB";
+
+struct db_obj {
+ switch_memory_pool_t *pool;
+ switch_core_db_t *db;
+ switch_core_db_stmt_t *stmt;
+ char *dbname;
+ char code_buffer[2048];
+ JSContext *cx;
+ JSObject *obj;
+};
+
+
+/* DB Object */
+/*********************************************************************************/
+static JSBool db_construct(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ switch_memory_pool_t *pool;
+ switch_core_db_t *db;
+ struct db_obj *dbo;
+
+ if (argc > 0) {
+ char *dbname = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
+ switch_core_new_memory_pool(&pool);
+ if (!(db = switch_core_db_open_file(dbname))) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot Open DB!\n");
+ switch_core_destroy_memory_pool(&pool);
+ return JS_FALSE;
+ }
+ dbo = switch_core_alloc(pool, sizeof(*dbo));
+ dbo->pool = pool;
+ dbo->dbname = switch_core_strdup(pool, dbname);
+ dbo->cx = cx;
+ dbo->obj = obj;
+ dbo->db = db;
+ JS_SetPrivate(cx, obj, dbo);
+ return JS_TRUE;
+ }
+
+ return JS_FALSE;
+}
+
+static JSBool db_close(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ struct db_obj *dbo = JS_GetPrivate(cx, obj);
+
+ if (dbo) {
+ if (dbo->stmt) {
+ switch_core_db_finalize(dbo->stmt);
+ dbo->stmt = NULL;
+ }
+ if (dbo->db) {
+ switch_core_db_close(dbo->db);
+ dbo->db = NULL;
+ }
+ }
+
+ return JS_TRUE;
+}
+
+static void db_destroy(JSContext * cx, JSObject * obj)
+{
+ struct db_obj *dbo = JS_GetPrivate(cx, obj);
+
+ if (dbo) {
+ switch_memory_pool_t *pool = dbo->pool;
+ jsval rval = JS_TRUE;
+
+ db_close(cx, obj, 0, NULL, &rval);
+ switch_core_destroy_memory_pool(&pool);
+ pool = NULL;
+ }
+}
+
+
+static int db_callback(void *pArg, int argc, char **argv, char **columnNames)
+{
+ struct db_obj *dbo = pArg;
+ char code[1024];
+ jsval rval;
+ int x = 0;
+
+ switch_snprintf(code, sizeof(code), "~var _Db_RoW_ = {}");
+ eval_some_js(code, dbo->cx, dbo->obj, &rval);
+
+ for (x = 0; x < argc; x++) {
+ switch_snprintf(code, sizeof(code), "~_Db_RoW_[\"%s\"] = \"%s\"", columnNames[x], argv[x]);
+ eval_some_js(code, dbo->cx, dbo->obj, &rval);
+ }
+
+ switch_snprintf(code, sizeof(code), "~%s(_Db_RoW_)", dbo->code_buffer);
+ eval_some_js(code, dbo->cx, dbo->obj, &rval);
+
+ switch_snprintf(code, sizeof(code), "~delete _Db_RoW_");
+ eval_some_js(code, dbo->cx, dbo->obj, &rval);
+
+ return 0;
+}
+
+static JSBool db_exec(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ struct db_obj *dbo = JS_GetPrivate(cx, obj);
+ *rval = INT_TO_JSVAL(0);
+
+ if (!dbo->db) {
+ return JS_FALSE;
+ }
+
+ if (argc > 0) {
+ char *sql = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
+ char *err = NULL;
+ void *arg = NULL;
+ switch_core_db_callback_func_t cb_func = NULL;
+
+
+ if (argc > 1) {
+ char *js_func = JS_GetStringBytes(JS_ValueToString(cx, argv[1]));
+ switch_copy_string(dbo->code_buffer, js_func, sizeof(dbo->code_buffer));
+ cb_func = db_callback;
+ arg = dbo;
+ }
+
+ switch_core_db_exec(dbo->db, sql, cb_func, arg, &err);
+ if (err) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error %s\n", err);
+ switch_core_db_free(err);
+ *rval = INT_TO_JSVAL(-1);
+ } else {
+ int count = switch_core_db_changes(dbo->db);
+
+ *rval = INT_TO_JSVAL(count);
+ }
+ }
+ return JS_TRUE;
+}
+
+
+/* Evaluate a prepared statement
+ stepSuccessCode expected success code from switch_core_db_step()
+ return true if step return expected success code, false otherwise
+*/
+static JSBool db_step_ex(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval, int stepSuccessCode)
+{
+ struct db_obj *dbo = JS_GetPrivate(cx, obj);
+ *rval = BOOLEAN_TO_JSVAL(JS_FALSE);
+
+ if (!dbo->db) {
+ return JS_FALSE;
+ }
+
+ if (dbo->stmt) {
+ int running = 1;
+ while (running < 5000) {
+ int result = switch_core_db_step(dbo->stmt);
+ if (result == stepSuccessCode) {
+ *rval = BOOLEAN_TO_JSVAL(JS_TRUE);
+ break;
+ } else if (result == SWITCH_CORE_DB_BUSY) {
+ running++;
+ switch_cond_next(); /* wait a bit before retrying */
+ continue;
+ }
+ if (switch_core_db_finalize(dbo->stmt) != SWITCH_CORE_DB_OK) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error %s\n", switch_core_db_errmsg(dbo->db));
+ }
+ dbo->stmt = NULL;
+ break;
+ }
+ }
+
+ return JS_TRUE;
+}
+
+/* Evaluate a prepared statement, to be used with statements that return data
+ return true while data is available, false when done or error
+*/
+static JSBool db_next(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ /* return true until no more rows available */
+ return db_step_ex(cx, obj, argc, argv, rval, SWITCH_CORE_DB_ROW);
+}
+
+/* Evaluate a prepared statement, to be used with statements that return no data
+ return true if statement has finished executing successfully, false otherwise
+*/
+static JSBool db_step(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ /* return true when the statement has finished executing successfully */
+ return db_step_ex(cx, obj, argc, argv, rval, SWITCH_CORE_DB_DONE);
+}
+
+
+static JSBool db_fetch(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ struct db_obj *dbo = JS_GetPrivate(cx, obj);
+ int colcount = switch_core_db_column_count(dbo->stmt);
+ char code[1024];
+ int x;
+
+ if (!dbo->db) {
+ return JS_FALSE;
+ }
+
+ switch_snprintf(code, sizeof(code), "~var _dB_RoW_DaTa_ = {}");
+ eval_some_js(code, dbo->cx, dbo->obj, rval);
+ if (*rval == JS_FALSE) {
+ return JS_TRUE;
+ }
+ for (x = 0; x < colcount; x++) {
+ const char *var = (char *) switch_core_db_column_name(dbo->stmt, x);
+ const char *val = (char *) switch_core_db_column_text(dbo->stmt, x);
+
+ if (var && val) {
+ switch_snprintf(code, sizeof(code), "~_dB_RoW_DaTa_[\"%s\"] = \"%s\"", var, val);
+ eval_some_js(code, dbo->cx, dbo->obj, rval);
+ if (*rval == JS_FALSE) {
+ return JS_TRUE;
+ }
+ }
+ }
+
+ JS_GetProperty(cx, obj, "_dB_RoW_DaTa_", rval);
+
+ return JS_TRUE;
+}
+
+
+static JSBool db_prepare(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ struct db_obj *dbo = JS_GetPrivate(cx, obj);
+
+ *rval = BOOLEAN_TO_JSVAL(JS_FALSE);
+
+ if (!dbo->db) {
+ return JS_FALSE;
+ }
+
+ if (dbo->stmt) {
+ switch_core_db_finalize(dbo->stmt);
+ dbo->stmt = NULL;
+ }
+
+ if (argc > 0) {
+ char *sql = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
+ if (switch_core_db_prepare(dbo->db, sql, -1, &dbo->stmt, 0)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error %s\n", switch_core_db_errmsg(dbo->db));
+ } else {
+ *rval = BOOLEAN_TO_JSVAL(JS_TRUE);
+ }
+ }
+ return JS_TRUE;
+}
+
+static JSBool db_bind_text(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ struct db_obj *dbo = JS_GetPrivate(cx, obj);
+ JSBool status;
+ int32 param_index = -1;
+ char *param_value = NULL;
+
+ *rval = BOOLEAN_TO_JSVAL(JS_FALSE);
+
+ if (!dbo->db) {
+ return JS_FALSE;
+ }
+
+ /* db_prepare() must be called first */
+ if (!dbo->stmt) {
+ return JS_FALSE;
+ }
+
+ /* argv[0] = parameter index
+ argv[1] = parameter value
+ */
+ if (argc < 2) {
+ return JS_FALSE;
+ }
+
+
+
+ /* convert args */
+ status = JS_ValueToECMAUint32(cx, argv[0], (uint32*)¶m_index);
+ switch_assert(status == JS_TRUE);
+ param_value = JS_GetStringBytes(JS_ValueToString(cx, argv[1]));
+ if ((param_index < 1) || (NULL == param_value)) {
+ return JS_FALSE;
+ }
+
+ /* bind param */
+ if (switch_core_db_bind_text(dbo->stmt, param_index, param_value, -1, SWITCH_CORE_DB_STATIC)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error %s\n", switch_core_db_errmsg(dbo->db));
+ return JS_FALSE;
+ } else {
+ *rval = BOOLEAN_TO_JSVAL(JS_TRUE);
+ }
+
+ return JS_TRUE;
+}
+
+static JSBool db_bind_int(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ struct db_obj *dbo = JS_GetPrivate(cx, obj);
+ JSBool status;
+ int32 param_index = -1;
+ int32 param_value = -1;
+
+ *rval = BOOLEAN_TO_JSVAL(JS_FALSE);
+
+ if (!dbo->db) {
+ return JS_FALSE;
+ }
+
+ /* db_prepare() must be called first */
+ if (!dbo->stmt) {
+ return JS_FALSE;
+ }
+
+ /* argv[0] = parameter index
+ argv[1] = parameter value
+ */
+ if (argc < 2) {
+ return JS_FALSE;
+ }
+
+ /* convert args */
+ status = JS_ValueToECMAUint32(cx, argv[0], (uint32*)¶m_index);
+ switch_assert(status == JS_TRUE);
+ status = JS_ValueToECMAUint32(cx, argv[1], (uint32*)¶m_value);
+ switch_assert(status == JS_TRUE);
+
+ if (param_index < 1) {
+ return JS_FALSE;
+ }
+
+ /* bind param */
+ if (switch_core_db_bind_int(dbo->stmt, param_index, param_value)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error %s\n", switch_core_db_errmsg(dbo->db));
+ return JS_FALSE;
+ } else {
+ *rval = BOOLEAN_TO_JSVAL(JS_TRUE);
+ }
+
+ return JS_TRUE;
+}
+
+enum db_tinyid {
+ DB_NAME
+};
+
+static JSFunctionSpec db_methods[] = {
+ {"exec", db_exec, 1},
+ {"close", db_close, 0},
+ {"next", db_next, 0},
+ {"step", db_step, 0},
+ {"fetch", db_fetch, 1},
+ {"prepare", db_prepare, 0},
+ {"bindText", db_bind_text, 2},
+ {"bindInt", db_bind_int, 2},
+ {0}
+};
+
+
+static JSPropertySpec db_props[] = {
+ {"path", DB_NAME, JSPROP_READONLY | JSPROP_PERMANENT},
+ {0}
+};
+
+
+static JSBool db_setProperty(JSContext * cx, JSObject * obj, jsval id, jsval * vp)
+{
+ char *name = JS_GetStringBytes(JS_ValueToString(cx, id));
+
+ if (strcmp(name, "_dB_RoW_DaTa_")) {
+ eval_some_js("~throw new Error(\"this property cannot be changed!\");", cx, obj, vp);
+ *vp = BOOLEAN_TO_JSVAL(JS_FALSE);
+ }
+ return JS_TRUE;
+}
+
+static JSBool db_getProperty(JSContext * cx, JSObject * obj, jsval id, jsval * vp)
+{
+ JSBool res = JS_TRUE;
+ struct db_obj *dbo = JS_GetPrivate(cx, obj);
+ char *name;
+ int param = 0;
+
+ name = JS_GetStringBytes(JS_ValueToString(cx, id));
+ /* numbers are our props anything else is a method */
+ if (name[0] >= 48 && name[0] <= 57) {
+ param = atoi(name);
+ } else {
+ return JS_TRUE;
+ }
+
+ switch (param) {
+ case DB_NAME:
+ *vp = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, dbo->dbname));
+ break;
+ }
+
+ return res;
+}
+
+JSClass db_class = {
+ modname, JSCLASS_HAS_PRIVATE,
+ JS_PropertyStub, JS_PropertyStub, db_getProperty, db_setProperty,
+ JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, db_destroy, NULL, NULL, NULL,
+ db_construct
+};
+
+
+switch_status_t db_load(JSContext * cx, JSObject * obj)
+{
+
+ JS_InitClass(cx, obj, NULL, &db_class, db_construct, 3, db_props, db_methods, db_props, db_methods);
+ return SWITCH_STATUS_SUCCESS;
+}
+
+
+const sm_module_interface_t DB_module_interface = {
+ /*.name = */ modname,
+ /*.spidermonkey_load */ db_load,
+ /*.next */ NULL
+};
+
+SWITCH_MOD_DECLARE_NONSTD(switch_status_t) spidermonkey_init(const sm_module_interface_t **module_interface)
+{
+ *module_interface = &DB_module_interface;
+ return SWITCH_STATUS_SUCCESS;
+}
+
+/* For Emacs:
+ * Local Variables:
+ * mode:c
+ * indent-tabs-mode:t
+ * tab-width:4
+ * c-basic-offset:4
+ * End:
+ * For VIM:
+ * vim:set softtabstop=4 shiftwidth=4 tabstop=4:
+ */
Copied: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_core_db.vcproj (from rev 16304, freeswitch/trunk/src/mod/languages/mod_spidermonkey_core_db/mod_spidermonkey_core_db.vcproj) (0 => 16333)
--- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_core_db.vcproj (rev 0)
+++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_core_db.vcproj 2010-01-17 05:48:36 UTC (rev 16333)
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="mod_spidermonkey_core_db"
+ ProjectGUID="{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}"
+ RootNamespace="mod_spidermonkey_core_db"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_debug.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_release.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\mod_spidermonkey_core_db.c"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Copied: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_curl.2008.vcproj (from rev 16304, freeswitch/trunk/src/mod/languages/mod_spidermonkey_curl/mod_spidermonkey_curl.2008.vcproj) (0 => 16333)
--- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_curl.2008.vcproj (rev 0)
+++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_curl.2008.vcproj 2010-01-17 05:48:36 UTC (rev 16333)
@@ -0,0 +1,295 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="mod_spidermonkey_curl"
+ ProjectGUID="{36E854E3-CE12-4348-A125-CCF3F9D74813}"
+ RootNamespace="mod_spidermonkey_curl"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_debug.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_debug.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(SolutionDir)$(PlatformName)\$(ConfigurationName)/mod/$(ProjectName).dll"
+ AdditionalLibraryDirectories=""
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_release.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_release.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(SolutionDir)$(PlatformName)\$(ConfigurationName)/mod/$(ProjectName).dll"
+ AdditionalLibraryDirectories=""
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\mod_spidermonkey_curl.c"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Copied: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_curl.c (from rev 16304, freeswitch/trunk/src/mod/languages/mod_spidermonkey_curl/mod_spidermonkey_curl.c) (0 => 16333)
--- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_curl.c (rev 0)
+++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_curl.c 2010-01-17 05:48:36 UTC (rev 16333)
@@ -0,0 +1,259 @@
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2005-2009, Anthony Minessale II <anthm@freeswitch.org>
+ *
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * Anthony Minessale II <anthm@freeswitch.org>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Anthony Minessale II <anthm@freeswitch.org>
+ *
+ *
+ * mod_spidermonkey_teletone.c -- TeleTone Javascript Module
+ *
+ */
+#include "mod_spidermonkey.h"
+#include <curl/curl.h>
+
+static const char modname[] = "CURL";
+
+struct curl_obj {
+ CURL *curl_handle;
+ JSContext *cx;
+ JSObject *obj;
+ JSFunction *function;
+ JSObject *user_data;
+ jsrefcount saveDepth;
+ jsval ret;
+};
+
+
+static size_t file_callback(void *ptr, size_t size, size_t nmemb, void *data)
+{
+ register unsigned int realsize = (unsigned int) (size * nmemb);
+ struct curl_obj *co = data;
+ uintN argc = 0;
+ jsval argv[4];
+
+
+ if (!co) {
+ return 0;
+ }
+ if (co->function) {
+ char *ret;
+ argv[argc++] = STRING_TO_JSVAL(JS_NewStringCopyZ(co->cx, (char *) ptr));
+ if (co->user_data) {
+ argv[argc++] = OBJECT_TO_JSVAL(co->user_data);
+ }
+ JS_ResumeRequest(co->cx, co->saveDepth);
+ JS_CallFunction(co->cx, co->obj, co->function, argc, argv, &co->ret);
+ co->saveDepth = JS_SuspendRequest(co->cx);
+
+ if ((ret = JS_GetStringBytes(JS_ValueToString(co->cx, co->ret)))) {
+ if (!strcmp(ret, "true") || !strcmp(ret, "undefined")) {
+ return realsize;
+ } else {
+ return 0;
+ }
+ }
+ }
+
+ return realsize;
+}
+
+
+/* Curl Object */
+/*********************************************************************************/
+static JSBool curl_construct(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ struct curl_obj *co = NULL;
+
+ co = malloc(sizeof(*co));
+ switch_assert(co);
+
+ memset(co, 0, sizeof(*co));
+
+ co->cx = cx;
+ co->obj = obj;
+
+ JS_SetPrivate(cx, obj, co);
+
+ return JS_TRUE;
+}
+
+static void curl_destroy(JSContext * cx, JSObject * obj)
+{
+ struct curl_obj *co = JS_GetPrivate(cx, obj);
+ switch_safe_free(co);
+ JS_SetPrivate(cx, obj, NULL);
+}
+
+static JSBool curl_run(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ struct curl_obj *co = JS_GetPrivate(cx, obj);
+ char *method = NULL, *url, *cred = NULL;
+ char *url_p = NULL, *data = NULL, *durl = NULL;
+ long httpRes = 0;
+ struct curl_slist *headers = NULL;
+ int32 timeout = 0;
+ char ct[80] = "Content-Type: application/x-www-form-urlencoded";
+
+ if (argc < 2 || !co) {
+ return JS_FALSE;
+ }
+
+
+ method = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
+ url = JS_GetStringBytes(JS_ValueToString(cx, argv[1]));
+
+ co->curl_handle = curl_easy_init();
+ if (!strncasecmp(url, "https", 5)) {
+ curl_easy_setopt(co->curl_handle, CURLOPT_SSL_VERIFYPEER, 0);
+ curl_easy_setopt(co->curl_handle, CURLOPT_SSL_VERIFYHOST, 0);
+ }
+
+
+ if (argc > 2) {
+ data = JS_GetStringBytes(JS_ValueToString(cx, argv[2]));
+ }
+
+ if (argc > 3) {
+ co->function = JS_ValueToFunction(cx, argv[3]);
+ }
+
+ if (argc > 4) {
+ JS_ValueToObject(cx, argv[4], &co->user_data);
+ }
+
+ if (argc > 5) {
+ cred = JS_GetStringBytes(JS_ValueToString(cx, argv[5]));
+ if (!zstr(cred)) {
+ curl_easy_setopt(co->curl_handle, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
+ curl_easy_setopt(co->curl_handle, CURLOPT_USERPWD, cred);
+ }
+ }
+
+ if (argc > 6) {
+ JS_ValueToInt32(cx, argv[6], &timeout);
+ if (timeout > 0) {
+ curl_easy_setopt(co->curl_handle, CURLOPT_TIMEOUT, timeout);
+ }
+ }
+
+ if (argc > 7) {
+ char *content_type = JS_GetStringBytes(JS_ValueToString(cx, argv[7]));
+ switch_snprintf(ct, sizeof(ct), "Content-Type: %s", content_type);
+ }
+
+ headers = curl_slist_append(headers, ct);
+
+ curl_easy_setopt(co->curl_handle, CURLOPT_HTTPHEADER, headers);
+
+ url_p = url;
+
+ if (!strcasecmp(method, "post")) {
+ curl_easy_setopt(co->curl_handle, CURLOPT_POST, 1);
+ if (!data) {
+ data = "";
+ }
+ curl_easy_setopt(co->curl_handle, CURLOPT_POSTFIELDS, data);
+ } else if (!zstr(data)) {
+ durl = switch_mprintf("%s?%s", url, data);
+ url_p = durl;
+ }
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Running: method: [%s] url: [%s] data: [%s] cred=[%s] cb: [%s]\n",
+ method, url_p, data, switch_str_nil(cred), co->function ? "yes" : "no");
+
+ curl_easy_setopt(co->curl_handle, CURLOPT_URL, url_p);
+ curl_easy_setopt(co->curl_handle, CURLOPT_WRITEFUNCTION, file_callback);
+ curl_easy_setopt(co->curl_handle, CURLOPT_WRITEDATA, (void *) co);
+
+ curl_easy_setopt(co->curl_handle, CURLOPT_USERAGENT, "freeswitch-spidermonkey-curl/1.0");
+
+ co->saveDepth = JS_SuspendRequest(cx);
+ curl_easy_perform(co->curl_handle);
+
+ curl_easy_getinfo(co->curl_handle, CURLINFO_RESPONSE_CODE, &httpRes);
+ curl_easy_cleanup(co->curl_handle);
+ curl_slist_free_all(headers);
+ co->curl_handle = NULL;
+ co->function = NULL;
+ JS_ResumeRequest(cx, co->saveDepth);
+ switch_safe_free(durl);
+
+
+ return JS_TRUE;
+}
+
+static JSFunctionSpec curl_methods[] = {
+ {"run", curl_run, 2},
+ {0}
+};
+
+
+static JSPropertySpec curl_props[] = {
+ {0}
+};
+
+static JSBool curl_getProperty(JSContext * cx, JSObject * obj, jsval id, jsval * vp)
+{
+ JSBool res = JS_TRUE;
+ return res;
+}
+
+JSClass curl_class = {
+ modname, JSCLASS_HAS_PRIVATE,
+ JS_PropertyStub, JS_PropertyStub, curl_getProperty, DEFAULT_SET_PROPERTY,
+ JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, curl_destroy, NULL, NULL, NULL,
+ curl_construct
+};
+
+
+switch_status_t curl_load(JSContext * cx, JSObject * obj)
+{
+ JS_InitClass(cx, obj, NULL, &curl_class, curl_construct, 3, curl_props, curl_methods, curl_props, curl_methods);
+ return SWITCH_STATUS_SUCCESS;
+}
+
+
+const sm_module_interface_t curl_module_interface = {
+ /*.name = */ modname,
+ /*.spidermonkey_load */ curl_load,
+ /*.next */ NULL
+};
+
+SWITCH_MOD_DECLARE_NONSTD(switch_status_t) spidermonkey_init(const sm_module_interface_t **module_interface)
+{
+ curl_global_init(CURL_GLOBAL_ALL);
+ *module_interface = &curl_module_interface;
+ return SWITCH_STATUS_SUCCESS;
+}
+
+/* For Emacs:
+ * Local Variables:
+ * mode:c
+ * indent-tabs-mode:t
+ * tab-width:4
+ * c-basic-offset:4
+ * End:
+ * For VIM:
+ * vim:set softtabstop=4 shiftwidth=4 tabstop=4:
+ */
Copied: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_curl.vcproj (from rev 16304, freeswitch/trunk/src/mod/languages/mod_spidermonkey_curl/mod_spidermonkey_curl.vcproj) (0 => 16333)
--- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_curl.vcproj (rev 0)
+++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_curl.vcproj 2010-01-17 05:48:36 UTC (rev 16333)
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="mod_spidermonkey_curl"
+ ProjectGUID="{2CCED6DC-26FF-40F2-9585-E9E1049A4599}"
+ RootNamespace="mod_spidermonkey_curl"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_debug.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ />
+ <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|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_release.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ />
+ <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>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\mod_spidermonkey_curl.c"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Copied: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_odbc.2008.vcproj (from rev 16304, freeswitch/trunk/src/mod/languages/mod_spidermonkey_odbc/mod_spidermonkey_odbc.2008.vcproj) (0 => 16333)
--- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_odbc.2008.vcproj (rev 0)
+++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_odbc.2008.vcproj 2010-01-17 05:48:36 UTC (rev 16333)
@@ -0,0 +1,305 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="mod_spidermonkey_odbc"
+ ProjectGUID="{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}"
+ RootNamespace="mod_spidermonkey_odbc"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_debug.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_debug.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(SolutionDir)$(PlatformName)\$(ConfigurationName)/mod/$(ProjectName).dll"
+ AdditionalLibraryDirectories=""
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_release.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories=""
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ LinkTimeCodeGeneration="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_release.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories=""
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(SolutionDir)$(PlatformName)\$(ConfigurationName)/mod/$(ProjectName).dll"
+ AdditionalLibraryDirectories=""
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ LinkTimeCodeGeneration="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\mod_spidermonkey_odbc.c"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Copied: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_odbc.c (from rev 16304, freeswitch/trunk/src/mod/languages/mod_spidermonkey_odbc/mod_spidermonkey_odbc.c) (0 => 16333)
--- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_odbc.c (rev 0)
+++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_odbc.c 2010-01-17 05:48:36 UTC (rev 16333)
@@ -0,0 +1,561 @@
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2005-2009, Anthony Minessale II <anthm@freeswitch.org>
+ *
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * Anthony Minessale II <anthm@freeswitch.org>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Anthony Minessale II <anthm@freeswitch.org>
+ *
+ *
+ * mod_spidermonkey_odbc.c -- ODBC Javascript Module
+ *
+ */
+#include "mod_spidermonkey.h"
+
+#include <sql.h>
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable:4201)
+#include <sqlext.h>
+#pragma warning(pop)
+#else
+#include <sqlext.h>
+#endif
+#include <sqltypes.h>
+
+static const char modname[] = "ODBC";
+
+struct odbc_obj {
+ switch_odbc_handle_t *handle;
+ SQLHSTMT stmt;
+ SQLCHAR *colbuf;
+ int32 cblen;
+ SQLCHAR *code;
+ int32 codelen;
+};
+typedef struct odbc_obj odbc_obj_t;
+
+static odbc_obj_t *new_odbc_obj(char *dsn, char *username, char *password)
+{
+ odbc_obj_t *new_obj;
+
+ if (!(new_obj = malloc(sizeof(*new_obj)))) {
+ goto err;
+ }
+
+ memset(new_obj, 0, sizeof(odbc_obj_t));
+ if (!(new_obj->handle = switch_odbc_handle_new(dsn, username, password))) {
+ goto err;
+ }
+
+ return new_obj;
+
+ err:
+ if (new_obj) {
+ if (new_obj->handle) {
+ switch_odbc_handle_destroy(&new_obj->handle);
+ }
+ switch_safe_free(new_obj);
+ }
+
+ return NULL;
+}
+
+switch_odbc_status_t odbc_obj_connect(odbc_obj_t *obj)
+{
+
+ return switch_odbc_handle_connect(obj->handle);
+}
+
+static void destroy_odbc_obj(odbc_obj_t **objp)
+{
+ odbc_obj_t *obj = *objp;
+ if (obj == NULL)
+ return;
+ if (obj->stmt) {
+ SQLFreeHandle(SQL_HANDLE_STMT, obj->stmt);
+ }
+ if (obj->handle) {
+ switch_odbc_handle_destroy(&obj->handle);
+ }
+ switch_safe_free(obj->colbuf);
+ switch_safe_free(obj->code);
+ switch_safe_free(obj);
+}
+
+
+/* ODBC Object */
+/*********************************************************************************/
+static JSBool odbc_construct(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ odbc_obj_t *odbc_obj = NULL;
+ char *dsn, *username, *password;
+ int32 blen = 1024;
+
+ if (argc < 3) {
+ return JS_FALSE;
+ }
+
+ dsn = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
+ username = JS_GetStringBytes(JS_ValueToString(cx, argv[1]));
+ password = JS_GetStringBytes(JS_ValueToString(cx, argv[2]));
+
+ if (argc > 3) {
+ int32 len;
+ JS_ValueToInt32(cx, argv[3], &len);
+
+ if (len > 0) {
+ blen = len;
+ }
+ }
+
+ if (zstr(username)) {
+ username = NULL;
+ }
+
+ if (zstr(password)) {
+ password = NULL;
+ }
+
+ if (dsn) {
+ odbc_obj = new_odbc_obj(dsn, username, password);
+ }
+
+ if (!odbc_obj) {
+ return JS_FALSE;
+ }
+
+ if (!(odbc_obj->colbuf = (SQLCHAR *) malloc(blen))) {
+ destroy_odbc_obj(&odbc_obj);
+ return JS_FALSE;
+ }
+
+ odbc_obj->cblen = blen;
+
+ blen += 1536;
+
+ if (!(odbc_obj->code = (SQLCHAR *) malloc(blen))) {
+ destroy_odbc_obj(&odbc_obj);
+ return JS_FALSE;
+ }
+
+ odbc_obj->codelen = blen;
+
+ JS_SetPrivate(cx, obj, odbc_obj);
+
+ return JS_TRUE;
+}
+
+static void odbc_destroy(JSContext * cx, JSObject * obj)
+{
+ odbc_obj_t *odbc_obj;
+ if (obj == NULL)
+ return;
+ odbc_obj = (odbc_obj_t *) JS_GetPrivate(cx, obj);
+ if (odbc_obj) {
+ destroy_odbc_obj(&odbc_obj);
+ JS_SetPrivate(cx, obj, NULL);
+ }
+}
+
+static JSBool odbc_connect(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ odbc_obj_t *odbc_obj = (odbc_obj_t *) JS_GetPrivate(cx, obj);
+ JSBool tf = JS_TRUE;
+
+ if (odbc_obj) {
+ if (odbc_obj_connect(odbc_obj) == SWITCH_ODBC_SUCCESS) {
+ tf = JS_TRUE;
+ } else {
+ tf = JS_FALSE;
+ }
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Database handle is not initialized!\n");
+ }
+
+ *rval = BOOLEAN_TO_JSVAL(tf);
+
+ return JS_TRUE;
+}
+
+static JSBool odbc_execute(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ odbc_obj_t *odbc_obj = (odbc_obj_t *) JS_GetPrivate(cx, obj);
+ char *sql;
+ JSBool tf = JS_FALSE;
+ SQLHSTMT stmt;
+
+ if (argc < 1) {
+ goto done;
+ }
+
+ if (!odbc_obj || switch_odbc_handle_get_state(odbc_obj->handle) != SWITCH_ODBC_STATE_CONNECTED) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Database is not connected!\n");
+ goto done;
+ }
+
+ sql = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
+
+ if (switch_odbc_handle_exec(odbc_obj->handle, sql, &stmt, NULL) != SWITCH_ODBC_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[ODBC] Execute failed for: %s\n", sql);
+ goto done;
+ }
+
+ SQLFreeHandle(SQL_HANDLE_STMT, stmt);
+
+ tf = JS_TRUE;
+
+ done:
+
+ *rval = BOOLEAN_TO_JSVAL(tf);
+
+ return JS_TRUE;
+}
+
+static JSBool odbc_exec(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ odbc_obj_t *odbc_obj = (odbc_obj_t *) JS_GetPrivate(cx, obj);
+ char *sql;
+ JSBool tf = JS_FALSE;
+
+ if (argc < 1) {
+ goto done;
+ }
+
+ if (!odbc_obj || switch_odbc_handle_get_state(odbc_obj->handle) != SWITCH_ODBC_STATE_CONNECTED) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Database is not connected!\n");
+ goto done;
+ }
+
+ if (odbc_obj->stmt) {
+ SQLFreeHandle(SQL_HANDLE_STMT, odbc_obj->stmt);
+ odbc_obj->stmt = NULL;
+ }
+
+ sql = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
+
+ if (switch_odbc_handle_exec(odbc_obj->handle, sql, &odbc_obj->stmt, NULL) != SWITCH_ODBC_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "[ODBC] query failed: %s\n", sql);
+ goto done;
+ }
+
+ tf = JS_TRUE;
+
+ done:
+
+ *rval = BOOLEAN_TO_JSVAL(tf);
+
+ return JS_TRUE;
+}
+
+static JSBool odbc_num_rows(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ odbc_obj_t *odbc_obj = (odbc_obj_t *) JS_GetPrivate(cx, obj);
+ SQLLEN row_count = 0;
+
+ if (!odbc_obj || switch_odbc_handle_get_state(odbc_obj->handle) != SWITCH_ODBC_STATE_CONNECTED) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Database is not connected!\n");
+ goto done;
+ }
+
+ if (odbc_obj->stmt) {
+ SQLRowCount(odbc_obj->stmt, &row_count);
+ }
+
+ done:
+
+ *rval = INT_TO_JSVAL(row_count);
+
+ return JS_TRUE;
+
+}
+
+
+static JSBool odbc_num_cols(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ odbc_obj_t *odbc_obj = (odbc_obj_t *) JS_GetPrivate(cx, obj);
+
+ SQLSMALLINT cols = 0;
+
+ if (!odbc_obj || switch_odbc_handle_get_state(odbc_obj->handle) != SWITCH_ODBC_STATE_CONNECTED) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Database is not connected!\n");
+ goto done;
+ }
+
+ if (odbc_obj->stmt) {
+ SQLNumResultCols(odbc_obj->stmt, &cols);
+ }
+
+ done:
+
+ *rval = INT_TO_JSVAL(cols);
+
+ return JS_TRUE;
+
+}
+
+
+static JSBool odbc_next_row(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ odbc_obj_t *odbc_obj = (odbc_obj_t *) JS_GetPrivate(cx, obj);
+ int result = 0;
+ JSBool tf = JS_FALSE;
+
+ if (!odbc_obj || switch_odbc_handle_get_state(odbc_obj->handle) != SWITCH_ODBC_STATE_CONNECTED) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Database is not connected!\n");
+ goto done;
+ }
+
+
+ if (odbc_obj->stmt) {
+ if ((result = SQLFetch(odbc_obj->stmt) == SQL_SUCCESS)) {
+ tf = JS_TRUE;
+ }
+ }
+
+ done:
+
+ *rval = BOOLEAN_TO_JSVAL(tf);
+
+ return JS_TRUE;
+}
+
+static char *escape_data(char *in, char escapeChar)
+{
+ switch_size_t nlen = strlen(in);
+ uint32_t qc = 0;
+ char *p, *q, *r;
+
+ for (p = in; p && *p; p++) {
+ if (*p == '"') {
+ qc += 2;
+ }
+ if (*p == '\'') {
+ qc += 2;
+ }
+ }
+
+ nlen += qc + 1;
+
+ if (!(q = (char *) malloc(nlen))) {
+ return NULL;
+ }
+
+ r = q;
+ qc = 0;
+ for (p = in; p && *p; p++) {
+ if (*p == '"') {
+ *r++ = escapeChar;
+ }
+ if (*p == '\'') {
+ *r++ = escapeChar;
+ }
+ *r++ = *p;
+ if (++qc > nlen) {
+ break;
+ }
+ }
+
+ *r++ = '\0';
+
+ return q;
+
+}
+
+
+static JSBool odbc_get_data(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+
+ odbc_obj_t *odbc_obj = (odbc_obj_t *) JS_GetPrivate(cx, obj);
+ JSBool tf = JS_FALSE;
+
+ if (!odbc_obj || switch_odbc_handle_get_state(odbc_obj->handle) != SWITCH_ODBC_STATE_CONNECTED) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Database is not connected!\n");
+ goto done;
+ }
+
+ if (odbc_obj->stmt) {
+ SQLSMALLINT nColumns = 0, x = 0;
+
+ eval_some_js("~var _oDbC_dB_RoW_DaTa_ = {}", cx, obj, rval);
+ if (*rval == JS_FALSE) {
+ return JS_TRUE;
+ }
+
+ if ( SQLNumResultCols( odbc_obj->stmt, &nColumns ) != SQL_SUCCESS )
+ return JS_FALSE;
+
+ for (x = 1; x <= nColumns; x++) {
+ SQLSMALLINT NameLength, DataType, DecimalDigits, Nullable;
+ SQLULEN ColumnSize;
+ SQLCHAR name[1024] = "";
+ SQLCHAR *data = odbc_obj->colbuf;
+ SQLCHAR *esc = NULL;
+
+ SQLDescribeCol(odbc_obj->stmt, x, name, sizeof(name), &NameLength, &DataType, &ColumnSize, &DecimalDigits, &Nullable);
+ SQLGetData(odbc_obj->stmt, x, SQL_C_CHAR, odbc_obj->colbuf, odbc_obj->cblen, NULL);
+
+ if (strchr((char *) odbc_obj->colbuf, '"')) { /* please don't */
+ esc = (SQLCHAR *) escape_data((char *) odbc_obj->colbuf, '\\');
+ data = esc;
+ }
+
+ switch_snprintf((char *) odbc_obj->code, odbc_obj->codelen, "~_oDbC_dB_RoW_DaTa_[\"%s\"] = \"%s\"", name, data);
+ switch_safe_free(esc);
+
+ eval_some_js((char *) odbc_obj->code, cx, obj, rval);
+
+ if (*rval == JS_FALSE) {
+ return JS_TRUE;
+ }
+ }
+
+ JS_GetProperty(cx, obj, "_oDbC_dB_RoW_DaTa_", rval);
+ return JS_TRUE;
+
+
+ }
+
+ done:
+
+ *rval = BOOLEAN_TO_JSVAL(tf);
+
+ return JS_TRUE;
+
+}
+
+static JSBool odbc_close(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ odbc_destroy(cx, obj);
+ return JS_TRUE;
+}
+
+
+static JSBool odbc_disconnect(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ odbc_obj_t *odbc_obj = (odbc_obj_t *) JS_GetPrivate(cx, obj);
+
+ if (!odbc_obj) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Database handle is not initialized!\n");
+ goto done;
+ }
+
+ if (switch_odbc_handle_get_state(odbc_obj->handle) != SWITCH_ODBC_STATE_CONNECTED) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Database is not connected!\n");
+ goto done;
+ }
+
+ switch_odbc_handle_disconnect(odbc_obj->handle);
+
+ done:
+
+ return JS_TRUE;
+}
+
+enum odbc_tinyid {
+ odbc_NAME
+};
+
+static JSFunctionSpec odbc_methods[] = {
+ {"connect", odbc_connect, 1},
+ {"disconnect", odbc_disconnect, 1},
+ {"exec", odbc_exec, 1},
+ {"query", odbc_exec, 1},
+ {"execute", odbc_execute, 1},
+ {"numRows", odbc_num_rows, 1},
+ {"numCols", odbc_num_cols, 1},
+ {"nextRow", odbc_next_row, 1},
+ {"getData", odbc_get_data, 1},
+ {"close", odbc_close, 1},
+ {0}
+};
+
+
+static JSPropertySpec odbc_props[] = {
+ {"name", odbc_NAME, JSPROP_READONLY | JSPROP_PERMANENT},
+ {0}
+};
+
+static JSBool odbc_setProperty(JSContext * cx, JSObject * obj, jsval id, jsval * vp)
+{
+ char *name = JS_GetStringBytes(JS_ValueToString(cx, id));
+
+ if (strcmp(name, "_oDbC_dB_RoW_DaTa_")) {
+ eval_some_js("~throw new Error(\"this property cannot be changed!\");", cx, obj, vp);
+ *vp = BOOLEAN_TO_JSVAL(JS_FALSE);
+ }
+ return JS_TRUE;
+}
+
+static JSBool odbc_getProperty(JSContext * cx, JSObject * obj, jsval id, jsval * vp)
+{
+ int param;
+ char *name = JS_GetStringBytes(JS_ValueToString(cx, id));
+
+ /* numbers are our props anything else is a method */
+ if (name[0] >= 48 && name[0] <= 57) {
+ param = atoi(name);
+ } else {
+ return JS_TRUE;
+ }
+
+ *vp = BOOLEAN_TO_JSVAL(JS_FALSE);
+ return JS_TRUE;
+}
+
+JSClass odbc_class = {
+ modname, JSCLASS_HAS_PRIVATE,
+ JS_PropertyStub, JS_PropertyStub, odbc_getProperty, odbc_setProperty,
+ JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, odbc_destroy, NULL, NULL, NULL,
+ odbc_construct
+};
+
+
+switch_status_t odbc_load(JSContext * cx, JSObject * obj)
+{
+ JS_InitClass(cx, obj, NULL, &odbc_class, odbc_construct, 3, odbc_props, odbc_methods, odbc_props, odbc_methods);
+ return SWITCH_STATUS_SUCCESS;
+}
+
+
+const sm_module_interface_t odbc_module_interface = {
+ /*.name = */ modname,
+ /*.spidermonkey_load */ odbc_load,
+ /*.next */ NULL
+};
+
+SWITCH_MOD_DECLARE_NONSTD(switch_status_t) spidermonkey_init(const sm_module_interface_t **module_interface)
+{
+ *module_interface = &odbc_module_interface;
+ return SWITCH_STATUS_SUCCESS;
+}
+
+/* For Emacs:
+ * Local Variables:
+ * mode:c
+ * indent-tabs-mode:t
+ * tab-width:4
+ * c-basic-offset:4
+ * End:
+ * For VIM:
+ * vim:set softtabstop=4 shiftwidth=4 tabstop=4:
+ */
Copied: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_odbc.vcproj (from rev 16304, freeswitch/trunk/src/mod/languages/mod_spidermonkey_odbc/mod_spidermonkey_odbc.vcproj) (0 => 16333)
--- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_odbc.vcproj (rev 0)
+++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_odbc.vcproj 2010-01-17 05:48:36 UTC (rev 16333)
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="mod_spidermonkey_odbc"
+ ProjectGUID="{0A6B5EA5-6E9B-4A51-931F-ED25AA87B4DF}"
+ RootNamespace="mod_spidermonkey_odbc"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_debug.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_release.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories=""
+ RuntimeLibrary="2"
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ LinkTimeCodeGeneration="1"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\mod_spidermonkey_odbc.c"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Copied: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_skel.c (from rev 16304, freeswitch/trunk/src/mod/languages/mod_spidermonkey_skel/mod_spidermonkey_skel.c) (0 => 16333)
--- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_skel.c (rev 0)
+++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_skel.c 2010-01-17 05:48:36 UTC (rev 16333)
@@ -0,0 +1,111 @@
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2005-2009, Anthony Minessale II <anthm@freeswitch.org>
+ *
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * Anthony Minessale II <anthm@freeswitch.org>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Anthony Minessale II <anthm@freeswitch.org>
+ *
+ *
+ * mod_spidermonkey_skel.c -- Skel Javascript Module
+ *
+ */
+#include "mod_spidermonkey.h"
+
+static const char modname[] = "Skel";
+
+/* Skel Object */
+/*********************************************************************************/
+static JSBool skel_construct(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ return JS_TRUE;
+}
+
+static void skel_destroy(JSContext * cx, JSObject * obj)
+{
+}
+
+static JSBool skel_my_method(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ return JS_FALSE;
+}
+
+enum skel_tinyid {
+ SKEL_NAME
+};
+
+static JSFunctionSpec skel_methods[] = {
+ {"myMethod", skel_my_method, 1},
+ {0}
+};
+
+
+static JSPropertySpec skel_props[] = {
+ {"name", SKEL_NAME, JSPROP_READONLY | JSPROP_PERMANENT},
+ {0}
+};
+
+
+static JSBool skel_getProperty(JSContext * cx, JSObject * obj, jsval id, jsval * vp)
+{
+ JSBool res = JS_TRUE;
+
+ return res;
+}
+
+JSClass skel_class = {
+ modname, JSCLASS_HAS_PRIVATE,
+ JS_PropertyStub, JS_PropertyStub, skel_getProperty, DEFAULT_SET_PROPERTY,
+ JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, skel_destroy, NULL, NULL, NULL,
+ skel_construct
+};
+
+
+switch_status_t spidermonkey_load(JSContext * cx, JSObject * obj)
+{
+ JS_InitClass(cx, obj, NULL, &skel_class, skel_construct, 3, skel_props, skel_methods, skel_props, skel_methods);
+ return SWITCH_STATUS_SUCCESS;
+}
+
+
+const sm_module_interface_t skel_module_interface = {
+ /*.name = */ modname,
+ /*.spidermonkey_load */ spidermonkey_load,
+ /*.next */ NULL
+};
+
+SWITCH_MOD_DECLARE(switch_status_t) spidermonkey_init(const sm_module_interface_t **module_interface)
+{
+ *module_interface = &skel_module_interface;
+ return SWITCH_STATUS_SUCCESS;
+}
+
+/* For Emacs:
+ * Local Variables:
+ * mode:c
+ * indent-tabs-mode:t
+ * tab-width:4
+ * c-basic-offset:4
+ * End:
+ * For VIM:
+ * vim:set softtabstop=4 shiftwidth=4 tabstop=4:
+ */
Copied: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_socket.2008.vcproj (from rev 16304, freeswitch/trunk/src/mod/languages/mod_spidermonkey_socket/mod_spidermonkey_socket.2008.vcproj) (0 => 16333)
--- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_socket.2008.vcproj (rev 0)
+++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_socket.2008.vcproj 2010-01-17 05:48:36 UTC (rev 16333)
@@ -0,0 +1,291 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="mod_spidermonkey_socket"
+ ProjectGUID="{028C7278-05D7-4E18-82FE-BE231B844F41}"
+ RootNamespace="mod_spidermonkey_socket"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_debug.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_debug.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(SolutionDir)$(PlatformName)\$(ConfigurationName)/mod/$(ProjectName).dll"
+ AdditionalLibraryDirectories=""
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_release.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_release.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(SolutionDir)$(PlatformName)\$(ConfigurationName)/mod/$(ProjectName).dll"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\mod_spidermonkey_socket.c"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Copied: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_socket.c (from rev 16304, freeswitch/trunk/src/mod/languages/mod_spidermonkey_socket/mod_spidermonkey_socket.c) (0 => 16333)
--- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_socket.c (rev 0)
+++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_socket.c 2010-01-17 05:48:36 UTC (rev 16333)
@@ -0,0 +1,342 @@
+/*
+ * Spidermonkey Socket Module
+ * Copyright (C) 2007, Jonas Gauffin <jonas.gauffin@gmail.com>
+ *
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Initial Developer of the Original Code is
+ * Jonas Gauffin
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Jonas Gauffin <jonas.gauffin@gmail.com>
+ *
+ *
+ * mod_spidermonkey_socket.c -- Socket Javascript Module
+ *
+ */
+#include "mod_spidermonkey.h"
+
+static const char modname[] = "Socket";
+
+struct js_socket_obj {
+ switch_socket_t *socket;
+ switch_memory_pool_t *pool;
+ char *read_buffer;
+ switch_size_t buffer_size;
+ int state;
+ jsrefcount saveDepth;
+};
+typedef struct js_socket_obj js_socket_obj_t;
+
+/* Socket Object */
+/*********************************************************************************/
+static JSBool socket_construct(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ js_socket_obj_t *js_socket_obj = 0;
+ switch_memory_pool_t *pool;
+ switch_socket_t *socket;
+ switch_status_t ret;
+
+ switch_core_new_memory_pool(&pool);
+ ret = switch_socket_create(&socket, AF_INET, SOCK_STREAM, SWITCH_PROTO_TCP, pool);
+ if (ret != SWITCH_STATUS_SUCCESS) {
+ switch_core_destroy_memory_pool(&pool);
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Failed to create socket, reason: %d.\n", ret);
+ return JS_FALSE;
+ }
+ // allocate information needed by JS to be able to write to the log.
+ // (needed since multitple js sessions can write to the same log)
+ js_socket_obj = switch_core_alloc(pool, sizeof(js_socket_obj_t));
+ js_socket_obj->pool = pool;
+ js_socket_obj->socket = socket;
+ JS_SetPrivate(cx, obj, js_socket_obj);
+ return JS_TRUE;
+}
+
+static void socket_destroy(JSContext * cx, JSObject * obj)
+{
+ js_socket_obj_t *socket = JS_GetPrivate(cx, obj);
+ if (socket == NULL)
+ return;
+
+ if (socket->socket != 0) {
+ socket->saveDepth = JS_SuspendRequest(cx);
+ switch_socket_shutdown(socket->socket, SWITCH_SHUTDOWN_READWRITE);
+ switch_socket_close(socket->socket);
+ switch_core_destroy_memory_pool(&socket->pool);
+ JS_ResumeRequest(cx, socket->saveDepth);
+ }
+
+}
+
+static JSBool socket_connect(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ js_socket_obj_t *socket = JS_GetPrivate(cx, obj);
+ if (socket == NULL) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to find js object.\n");
+ return JS_FALSE;
+ }
+
+ if (argc == 2) {
+ char *host = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
+ int32 port;
+ switch_sockaddr_t *addr;
+ switch_status_t ret;
+
+ JS_ValueToInt32(cx, argv[1], &port);
+
+ ret = switch_sockaddr_info_get(&addr, host, AF_INET, (switch_port_t) port, 0, socket->pool);
+ if (ret != SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "switch_sockaddr_info_get failed: %d.\n", ret);
+ return JS_FALSE;
+ }
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Connecting to: %s:%d.\n", host, port);
+ socket->saveDepth = JS_SuspendRequest(cx);
+ ret = switch_socket_connect(socket->socket, addr);
+ JS_ResumeRequest(cx, socket->saveDepth);
+ if (ret != SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "switch_socket_connect failed: %d.\n", ret);
+ *rval = BOOLEAN_TO_JSVAL(JS_FALSE);
+ } else
+ *rval = BOOLEAN_TO_JSVAL(JS_TRUE);
+
+ }
+
+ return JS_TRUE;
+}
+
+static JSBool socket_send(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ js_socket_obj_t *socket = JS_GetPrivate(cx, obj);
+ if (socket == NULL) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to find js object.\n");
+ return JS_FALSE;
+ }
+
+ if (argc == 1) {
+ switch_status_t ret;
+ char *buffer = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
+ switch_size_t len = strlen(buffer);
+ socket->saveDepth = JS_SuspendRequest(cx);
+ ret = switch_socket_send(socket->socket, buffer, &len);
+ JS_ResumeRequest(cx, socket->saveDepth);
+ if (ret != SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "switch_socket_send failed: %d.\n", ret);
+ *rval = BOOLEAN_TO_JSVAL(JS_FALSE);
+ } else
+ *rval = BOOLEAN_TO_JSVAL(JS_TRUE);
+ }
+
+ return JS_TRUE;
+}
+
+static JSBool socket_read_bytes(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ js_socket_obj_t *socket = JS_GetPrivate(cx, obj);
+ if (socket == NULL) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to find js object.\n");
+ return JS_FALSE;
+ }
+
+ if (argc == 1) {
+ int32 bytes_to_read;
+ switch_status_t ret;
+ switch_size_t len;
+
+ JS_ValueToInt32(cx, argv[0], &bytes_to_read);
+ len = (switch_size_t) bytes_to_read;
+
+ if (socket->buffer_size < len) {
+ socket->read_buffer = switch_core_alloc(socket->pool, len + 1);
+ socket->buffer_size = bytes_to_read + 1;
+ }
+
+ socket->saveDepth = JS_SuspendRequest(cx);
+ ret = switch_socket_recv(socket->socket, socket->read_buffer, &len);
+ JS_ResumeRequest(cx, socket->saveDepth);
+ if (ret != SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "switch_socket_send failed: %d.\n", ret);
+ *rval = BOOLEAN_TO_JSVAL(JS_FALSE);
+ } else {
+ socket->read_buffer[len] = 0;
+ *rval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, socket->read_buffer));
+ }
+ }
+
+ return JS_TRUE;
+}
+
+static JSBool socket_read(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ js_socket_obj_t *socket = JS_GetPrivate(cx, obj);
+ if (socket == NULL) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to find js object.\n");
+ return JS_FALSE;
+ }
+
+ if (argc >= 0) {
+ char *delimiter = "\n";
+ switch_status_t ret = SWITCH_STATUS_FALSE;
+ switch_size_t len = 1;
+ switch_size_t total_length = 0;
+ int can_run = TRUE;
+ char tempbuf[2];
+
+ if (argc == 1)
+ delimiter = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
+
+
+ if (socket->read_buffer == 0)
+ socket->read_buffer = switch_core_alloc(socket->pool, socket->buffer_size);
+
+ socket->saveDepth = JS_SuspendRequest(cx);
+ while (can_run == TRUE) {
+ ret = switch_socket_recv(socket->socket, tempbuf, &len);
+ if (ret != SWITCH_STATUS_SUCCESS)
+ break;
+
+ tempbuf[1] = 0;
+ if (tempbuf[0] == delimiter[0])
+ break;
+ else if (tempbuf[0] == '\r' && delimiter[0] == '\n')
+ continue;
+ else {
+ // Buffer is full, let's increase it.
+ if (total_length == socket->buffer_size - 1) {
+ switch_size_t new_size = socket->buffer_size + 4196;
+ char *new_buffer = switch_core_alloc(socket->pool, socket->buffer_size);
+ memcpy(new_buffer, socket->read_buffer, total_length);
+ socket->buffer_size = new_size;
+ socket->read_buffer = new_buffer;
+ }
+ socket->read_buffer[total_length] = tempbuf[0];
+ ++total_length;
+ }
+ }
+ JS_ResumeRequest(cx, socket->saveDepth);
+
+ if (ret != SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "socket receive failed: %d.\n", ret);
+ *rval = BOOLEAN_TO_JSVAL(JS_FALSE);
+ } else {
+ socket->read_buffer[total_length] = 0;
+ *rval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, socket->read_buffer));
+ }
+ }
+
+ return JS_TRUE;
+}
+
+static JSBool socket_close(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ js_socket_obj_t *socket = JS_GetPrivate(cx, obj);
+ if (socket == NULL) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to find js object.\n");
+ return JS_FALSE;
+ }
+
+ socket->saveDepth = JS_SuspendRequest(cx);
+ switch_socket_shutdown(socket->socket, SWITCH_SHUTDOWN_READWRITE);
+ switch_socket_close(socket->socket);
+ socket->socket = NULL;
+ JS_ResumeRequest(cx, socket->saveDepth);
+ return JS_TRUE;
+}
+
+static JSFunctionSpec socket_methods[] = {
+ {"connect", socket_connect, 1},
+ {"close", socket_close, 1},
+ {"send", socket_send, 1},
+ {"readBytes", socket_read_bytes, 1},
+ {"read", socket_read, 1},
+ {0}
+};
+
+#define SOCKET_ADDRESS 1
+#define SOCKET_PORT 2
+
+static JSPropertySpec socket_props[] = {
+ {"address", SOCKET_ADDRESS, JSPROP_READONLY | JSPROP_PERMANENT},
+ {"port", SOCKET_PORT, JSPROP_READONLY | JSPROP_PERMANENT},
+ {0}
+};
+
+
+static JSBool socket_getProperty(JSContext * cx, JSObject * obj, jsval id, jsval * vp)
+{
+ JSBool res = JS_TRUE;
+// js_socket_obj_t *socket = JS_GetPrivate(cx, obj);
+ char *name;
+ int param = 0;
+
+ name = JS_GetStringBytes(JS_ValueToString(cx, id));
+ /* numbers are our props anything else is a method */
+ if (name[0] >= 48 && name[0] <= 57) {
+ param = atoi(name);
+ } else {
+ return JS_TRUE;
+ }
+
+ switch (param) {
+ case SOCKET_ADDRESS:
+ *vp = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, "unknown"));
+ break;
+ case SOCKET_PORT:
+ *vp = INT_TO_JSVAL(1234);
+ break;
+ }
+
+ return res;
+}
+
+JSClass socket_class = {
+ modname, JSCLASS_HAS_PRIVATE,
+ JS_PropertyStub, JS_PropertyStub, socket_getProperty, JS_PropertyStub,
+ JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, socket_destroy, NULL, NULL, NULL,
+ socket_construct
+};
+
+
+switch_status_t socket_load(JSContext * cx, JSObject * obj)
+{
+ JS_InitClass(cx, obj, NULL, &socket_class, socket_construct, 3, socket_props, socket_methods, socket_props, socket_methods);
+ return SWITCH_STATUS_SUCCESS;
+}
+
+
+const sm_module_interface_t socket_module_interface = {
+ /*.name = */ modname,
+ /*.spidermonkey_load */ socket_load,
+ /*.next */ NULL
+};
+
+SWITCH_MOD_DECLARE_NONSTD(switch_status_t) spidermonkey_init(const sm_module_interface_t **module_interface)
+{
+ *module_interface = &socket_module_interface;
+ return SWITCH_STATUS_SUCCESS;
+}
+
+/* For Emacs:
+ * Local Variables:
+ * mode:c
+ * indent-tabs-mode:t
+ * tab-width:4
+ * c-basic-offset:4
+ * End:
+ * For VIM:
+ * vim:set softtabstop=4 shiftwidth=4 tabstop=4:
+ */
Copied: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_socket.vcproj (from rev 16304, freeswitch/trunk/src/mod/languages/mod_spidermonkey_socket/mod_spidermonkey_socket.vcproj) (0 => 16333)
--- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_socket.vcproj (rev 0)
+++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_socket.vcproj 2010-01-17 05:48:36 UTC (rev 16333)
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="mod_spidermonkey_socket"
+ ProjectGUID="{028C7278-05D7-4E18-82FE-BE231B844F41}"
+ RootNamespace="mod_spidermonkey_socket"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_debug.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_release.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\mod_spidermonkey_socket.c"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Copied: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_teletone.2008.vcproj (from rev 16304, freeswitch/trunk/src/mod/languages/mod_spidermonkey_teletone/mod_spidermonkey_teletone.2008.vcproj) (0 => 16333)
--- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_teletone.2008.vcproj (rev 0)
+++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_teletone.2008.vcproj 2010-01-17 05:48:36 UTC (rev 16333)
@@ -0,0 +1,301 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="mod_spidermonkey_teletone"
+ ProjectGUID="{8F992C49-6C51-412F-B2A3-34EAB708EB65}"
+ RootNamespace="mod_spidermonkey_teletone"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_debug.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""$(InputDir)..\..\..\..\libs\libteletone\src""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_debug.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""$(InputDir)..\..\..\..\libs\libteletone\src""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(SolutionDir)$(PlatformName)\$(ConfigurationName)/mod/$(ProjectName).dll"
+ AdditionalLibraryDirectories=""
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_release.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""$(InputDir)..\..\..\..\libs\libteletone\src""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ LinkTimeCodeGeneration="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_release.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""$(InputDir)..\..\..\..\libs\libteletone\src""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(SolutionDir)$(PlatformName)\$(ConfigurationName)/mod/$(ProjectName).dll"
+ AdditionalLibraryDirectories=""
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ LinkTimeCodeGeneration="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\mod_spidermonkey_teletone.c"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Copied: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_teletone.c (from rev 16304, freeswitch/trunk/src/mod/languages/mod_spidermonkey_teletone/mod_spidermonkey_teletone.c) (0 => 16333)
--- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_teletone.c (rev 0)
+++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_teletone.c 2010-01-17 05:48:36 UTC (rev 16333)
@@ -0,0 +1,365 @@
+/*
+ * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ * Copyright (C) 2005-2009, Anthony Minessale II <anthm@freeswitch.org>
+ *
+ * Version: MPL 1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
+ *
+ * The Initial Developer of the Original Code is
+ * Anthony Minessale II <anthm@freeswitch.org>
+ * Portions created by the Initial Developer are Copyright (C)
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Anthony Minessale II <anthm@freeswitch.org>
+ *
+ *
+ * mod_spidermonkey_teletone.c -- TeleTone Javascript Module
+ *
+ */
+#include "mod_spidermonkey.h"
+#include <libteletone.h>
+
+static const char modname[] = "TeleTone";
+
+typedef enum {
+ TTF_DTMF = (1 << 0)
+} teletone_flag_t;
+
+
+struct teletone_obj {
+ teletone_generation_session_t ts;
+ JSContext *cx;
+ JSObject *obj;
+ switch_core_session_t *session;
+ switch_codec_t codec;
+ switch_buffer_t *audio_buffer;
+ switch_memory_pool_t *pool;
+ switch_timer_t *timer;
+ switch_timer_t timer_base;
+ JSFunction *function;
+ jsval arg;
+ jsval ret;
+ unsigned int flags;
+};
+
+
+static int teletone_handler(teletone_generation_session_t *ts, teletone_tone_map_t *map)
+{
+ struct teletone_obj *tto = ts->user_data;
+ int wrote;
+
+ if (!tto) {
+ return -1;
+ }
+ wrote = teletone_mux_tones(ts, map);
+ switch_buffer_write(tto->audio_buffer, ts->buffer, wrote * 2);
+
+ return 0;
+}
+
+
+/* TeleTone Object */
+/*********************************************************************************/
+static JSBool teletone_construct(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ JSObject *session_obj;
+ struct teletone_obj *tto = NULL;
+ struct js_session *jss = NULL;
+ switch_memory_pool_t *pool;
+ char *timer_name = NULL;
+ switch_codec_implementation_t read_impl = {0};
+
+
+
+ if (argc > 0) {
+ if (JS_ValueToObject(cx, argv[0], &session_obj)) {
+ if (!(jss = JS_GetPrivate(cx, session_obj))) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot Find Session [1]\n");
+ return JS_FALSE;
+ }
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot Find Session [2]\n");
+ return JS_FALSE;
+ }
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Missing Session Arg\n");
+ return JS_FALSE;
+ }
+ if (argc > 1) {
+ timer_name = JS_GetStringBytes(JS_ValueToString(cx, argv[1]));
+ }
+
+ switch_core_new_memory_pool(&pool);
+
+ if (!(tto = switch_core_alloc(pool, sizeof(*tto)))) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Memory Error\n");
+ return JS_FALSE;
+ }
+
+ switch_core_session_get_read_impl(jss->session, &read_impl);
+
+ if (switch_core_codec_init(&tto->codec,
+ "L16",
+ NULL,
+ read_impl.actual_samples_per_second,
+ read_impl.microseconds_per_packet / 1000,
+ read_impl.number_of_channels,
+ SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, NULL, pool) == SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Raw Codec Activated\n");
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Raw Codec Activation Failed\n");
+ return JS_FALSE;
+ }
+
+ if (timer_name) {
+ unsigned int ms = read_impl.microseconds_per_packet / 1000;
+ if (switch_core_timer_init(&tto->timer_base,
+ timer_name,
+ ms,
+ (read_impl.samples_per_second / 50) *
+ read_impl.number_of_channels, pool) == SWITCH_STATUS_SUCCESS) {
+ tto->timer = &tto->timer_base;
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Timer INIT Success %u\n", ms);
+ } else {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Timer INIT Failed\n");
+ }
+ }
+
+ switch_buffer_create_dynamic(&tto->audio_buffer, JS_BLOCK_SIZE, JS_BUFFER_SIZE, 0);
+ tto->pool = pool;
+ tto->obj = obj;
+ tto->cx = cx;
+ tto->session = jss->session;
+ teletone_init_session(&tto->ts, 0, teletone_handler, tto);
+ JS_SetPrivate(cx, obj, tto);
+
+ return JS_TRUE;
+}
+
+static void teletone_destroy(JSContext * cx, JSObject * obj)
+{
+ struct teletone_obj *tto = JS_GetPrivate(cx, obj);
+ switch_memory_pool_t *pool;
+ if (tto) {
+ if (tto->timer) {
+ switch_core_timer_destroy(tto->timer);
+ }
+ teletone_destroy_session(&tto->ts);
+ switch_buffer_destroy(&tto->audio_buffer);
+ switch_core_codec_destroy(&tto->codec);
+ pool = tto->pool;
+ tto->pool = NULL;
+ if (pool) {
+ switch_core_destroy_memory_pool(&pool);
+ }
+ }
+}
+
+static JSBool teletone_add_tone(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ struct teletone_obj *tto = JS_GetPrivate(cx, obj);
+ if (argc > 2) {
+ int x;
+ char *fval;
+ char *map_str;
+ map_str = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
+
+ for (x = 1; x < TELETONE_MAX_TONES; x++) {
+ fval = JS_GetStringBytes(JS_ValueToString(cx, argv[x]));
+ tto->ts.TONES[(int) *map_str].freqs[x - 1] = strtod(fval, NULL);
+ }
+ return JS_TRUE;
+ }
+
+ return JS_FALSE;
+}
+
+static JSBool teletone_on_dtmf(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ struct teletone_obj *tto = JS_GetPrivate(cx, obj);
+ if (argc > 0) {
+ tto->function = JS_ValueToFunction(cx, argv[0]);
+ if (argc > 1) {
+ tto->arg = argv[1];
+ }
+ switch_set_flag(tto, TTF_DTMF);
+ }
+ return JS_TRUE;
+}
+
+static JSBool teletone_generate(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval)
+{
+ struct teletone_obj *tto = JS_GetPrivate(cx, obj);
+ int32 loops = 0;
+
+ if (argc > 0) {
+ char *script;
+ switch_core_session_t *session;
+ switch_frame_t write_frame = { 0 };
+ unsigned char *fdata[1024];
+ switch_frame_t *read_frame;
+ switch_channel_t *channel;
+
+ if (argc > 1) {
+ if (!JS_ValueToInt32(cx, argv[1], &loops)) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Cannot Convert to INT\n");
+ return JS_FALSE;
+ }
+ loops--;
+ }
+
+ if (tto->audio_buffer) {
+ switch_buffer_zero(tto->audio_buffer);
+ }
+
+ tto->ts.debug = 1;
+ tto->ts.debug_stream = switch_core_get_console();
+
+ script = JS_GetStringBytes(JS_ValueToString(cx, argv[0]));
+ teletone_run(&tto->ts, script);
+
+ session = tto->session;
+ write_frame.codec = &tto->codec;
+ write_frame.data = fdata;
+ write_frame.buflen = sizeof(fdata);
+
+ channel = switch_core_session_get_channel(session);
+
+ if (tto->timer) {
+ switch_core_service_session(session);
+ }
+
+ if (loops) {
+ switch_buffer_set_loops(tto->audio_buffer, loops);
+ }
+
+ for (;;) {
+
+ if (switch_test_flag(tto, TTF_DTMF)) {
+ char dtmf[128];
+ char *ret;
+
+ if (switch_channel_has_dtmf(channel)) {
+ uintN aargc = 0;
+ jsval aargv[4];
+
+ switch_channel_dequeue_dtmf_string(channel, dtmf, sizeof(dtmf));
+ aargv[aargc++] = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, dtmf));
+ JS_CallFunction(cx, obj, tto->function, aargc, aargv, &tto->ret);
+ ret = JS_GetStringBytes(JS_ValueToString(cx, tto->ret));
+ if (strcmp(ret, "true") && strcmp(ret, "undefined")) {
+ *rval = tto->ret;
+ return JS_TRUE;
+ }
+ }
+ }
+
+ if (tto->timer) {
+ if (switch_core_timer_next(tto->timer) != SWITCH_STATUS_SUCCESS) {
+ break;
+ }
+
+ } else {
+ switch_status_t status;
+ status = switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, 0);
+
+ if (!SWITCH_READ_ACCEPTABLE(status)) {
+ break;
+ }
+ }
+ if ((write_frame.datalen = (uint32_t) switch_buffer_read_loop(tto->audio_buffer,
+ fdata, write_frame.codec->implementation->decoded_bytes_per_packet)) <= 0) {
+ break;
+ }
+
+ write_frame.samples = write_frame.datalen / 2;
+ if (switch_core_session_write_frame(session, &write_frame, SWITCH_IO_FLAG_NONE, 0) != SWITCH_STATUS_SUCCESS) {
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Bad Write\n");
+ break;
+ }
+ }
+
+ if (tto->timer) {
+ switch_core_thread_session_end(session);
+ }
+ return JS_TRUE;
+ }
+
+ return JS_FALSE;
+}
+
+enum teletone_tinyid {
+ TELETONE_NAME
+};
+
+static JSFunctionSpec teletone_methods[] = {
+ {"generate", teletone_generate, 1},
+ {"onDTMF", teletone_on_dtmf, 1},
+ {"addTone", teletone_add_tone, 10},
+ {0}
+};
+
+
+static JSPropertySpec teletone_props[] = {
+ {"name", TELETONE_NAME, JSPROP_READONLY | JSPROP_PERMANENT},
+ {0}
+};
+
+
+static JSBool teletone_getProperty(JSContext * cx, JSObject * obj, jsval id, jsval * vp)
+{
+ JSBool res = JS_TRUE;
+
+ return res;
+}
+
+JSClass teletone_class = {
+ modname, JSCLASS_HAS_PRIVATE,
+ JS_PropertyStub, JS_PropertyStub, teletone_getProperty, DEFAULT_SET_PROPERTY,
+ JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, teletone_destroy, NULL, NULL, NULL,
+ teletone_construct
+};
+
+
+switch_status_t teletone_load(JSContext * cx, JSObject * obj)
+{
+ JS_InitClass(cx, obj, NULL, &teletone_class, teletone_construct, 3, teletone_props, teletone_methods, teletone_props, teletone_methods);
+ return SWITCH_STATUS_SUCCESS;
+}
+
+
+const sm_module_interface_t teletone_module_interface = {
+ /*.name = */ modname,
+ /*.spidermonkey_load */ teletone_load,
+ /*.next */ NULL
+};
+
+SWITCH_MOD_DECLARE_NONSTD(switch_status_t) spidermonkey_init(const sm_module_interface_t **module_interface)
+{
+ *module_interface = &teletone_module_interface;
+ return SWITCH_STATUS_SUCCESS;
+}
+
+/* For Emacs:
+ * Local Variables:
+ * mode:c
+ * indent-tabs-mode:t
+ * tab-width:4
+ * c-basic-offset:4
+ * End:
+ * For VIM:
+ * vim:set softtabstop=4 shiftwidth=4 tabstop=4:
+ */
Copied: freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_teletone.vcproj (from rev 16304, freeswitch/trunk/src/mod/languages/mod_spidermonkey_teletone/mod_spidermonkey_teletone.vcproj) (0 => 16333)
--- freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_teletone.vcproj (rev 0)
+++ freeswitch/trunk/src/mod/languages/mod_spidermonkey/mod_spidermonkey_teletone.vcproj 2010-01-17 05:48:36 UTC (rev 16333)
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="mod_spidermonkey_teletone"
+ ProjectGUID="{8F992C49-6C51-412F-B2A3-34EAB708EB65}"
+ RootNamespace="mod_spidermonkey_teletone"
+ Keyword="Win32Proj"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_debug.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""$(InputDir)..\..\..\..\libs\libteletone\src""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\..\..\..\w32\winlibs.vsprops;..\..\..\..\w32\module_release.vsprops;..\..\..\..\w32\spidermonkey.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ CommandLine=""
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""$(InputDir)..\..\..\..\libs\libteletone\src""
+ UsePrecompiledHeader="0"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalLibraryDirectories=""
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ LinkTimeCodeGeneration="1"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\mod_spidermonkey_teletone.c"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
Deleted: freeswitch/trunk/src/mod/languages/mod_spidermonkey/sm.mak