Revision
16333
Author
mikej
Date
2010-01-16 23:48:36 -0600 (Sat, 16 Jan 2010)

Log Message

move mod_spidermoney build to automake, fix spidermoneky dependencies (I think this really fixes -j builds), move mod_spidermonkey sub modules all under the same source directory and bundle their build together as one

Modified Paths

Added Paths

Removed Paths

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*)&param_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*)&param_index);
+	switch_assert(status == JS_TRUE);
+	status = JS_ValueToECMAUint32(cx, argv[1], (uint32*)&param_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="&quot;$(InputDir)..\..\..\..\libs\libteletone\src&quot;"
+				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="&quot;$(InputDir)..\..\..\..\libs\libteletone\src&quot;"
+				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="&quot;$(InputDir)..\..\..\..\libs\libteletone\src&quot;"
+				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="&quot;$(InputDir)..\..\..\..\libs\libteletone\src&quot;"
+				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="&quot;$(InputDir)..\..\..\..\libs\libteletone\src&quot;"
+				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="&quot;$(InputDir)..\..\..\..\libs\libteletone\src&quot;"
+				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