]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-10060 [mod_v8] Add startup scripts support.
authorAndrey Volk <andywolk@gmail.com>
Wed, 22 Feb 2017 15:18:08 +0000 (18:18 +0300)
committerAndrey Volk <andywolk@gmail.com>
Wed, 22 Feb 2017 15:18:08 +0000 (18:18 +0300)
.gitignore
conf/curl/autoload_configs/v8.conf.xml
conf/insideout/autoload_configs/v8.conf.xml
conf/vanilla/autoload_configs/v8.conf.xml
src/mod/languages/mod_v8/conf/autoload_configs/v8.conf.xml
src/mod/languages/mod_v8/mod_v8.cpp
src/mod/languages/mod_v8/mod_v8.h

index ccbebdd2be609d57bb2bd1ab86c1c89efd6c1b23..d7e6933822f5e6fd9900ade14a74a4f8905e8cf0 100644 (file)
@@ -239,4 +239,7 @@ libs/libpng/
 libs/zlib/
 
 libs/libav/
-libs/libx264/
\ No newline at end of file
+libs/libx264/
+
+Win32/*.msi
+x64/*.msi
\ No newline at end of file
index 4f1e5f64f7c1c7fe3d831b4451b8da52503a6948..67c1f1ca06765a1b28c177b0f122323a43ca17c1 100644 (file)
@@ -1,5 +1,7 @@
 <configuration name="v8.conf" description="Google V8 JavaScript Plug-Ins">
   <settings>
+    <!-- <param name="startup-script" value="startup1.js"/> -->
+    <!-- <param name="startup-script" value="startup2.js"/> -->
     <!-- <param name="xml-handler-script" value="directory.js"/> -->
     <!-- <param name="xml-handler-bindings" value="directory"/> -->
     <!-- <hook event="CUSTOM" subclass="sofia::register" script="catch-event.js"/> -->
index 4f1e5f64f7c1c7fe3d831b4451b8da52503a6948..67c1f1ca06765a1b28c177b0f122323a43ca17c1 100644 (file)
@@ -1,5 +1,7 @@
 <configuration name="v8.conf" description="Google V8 JavaScript Plug-Ins">
   <settings>
+    <!-- <param name="startup-script" value="startup1.js"/> -->
+    <!-- <param name="startup-script" value="startup2.js"/> -->
     <!-- <param name="xml-handler-script" value="directory.js"/> -->
     <!-- <param name="xml-handler-bindings" value="directory"/> -->
     <!-- <hook event="CUSTOM" subclass="sofia::register" script="catch-event.js"/> -->
index 4f1e5f64f7c1c7fe3d831b4451b8da52503a6948..67c1f1ca06765a1b28c177b0f122323a43ca17c1 100644 (file)
@@ -1,5 +1,7 @@
 <configuration name="v8.conf" description="Google V8 JavaScript Plug-Ins">
   <settings>
+    <!-- <param name="startup-script" value="startup1.js"/> -->
+    <!-- <param name="startup-script" value="startup2.js"/> -->
     <!-- <param name="xml-handler-script" value="directory.js"/> -->
     <!-- <param name="xml-handler-bindings" value="directory"/> -->
     <!-- <hook event="CUSTOM" subclass="sofia::register" script="catch-event.js"/> -->
index 4f1e5f64f7c1c7fe3d831b4451b8da52503a6948..67c1f1ca06765a1b28c177b0f122323a43ca17c1 100644 (file)
@@ -1,5 +1,7 @@
 <configuration name="v8.conf" description="Google V8 JavaScript Plug-Ins">
   <settings>
+    <!-- <param name="startup-script" value="startup1.js"/> -->
+    <!-- <param name="startup-script" value="startup2.js"/> -->
     <!-- <param name="xml-handler-script" value="directory.js"/> -->
     <!-- <param name="xml-handler-bindings" value="directory"/> -->
     <!-- <hook event="CUSTOM" subclass="sofia::register" script="catch-event.js"/> -->
index fe2ff65de3500a83c56bcca10295a18e325f9d91..d0e5cc4abc90f6b708c25670edbb22ad8e7d5ade 100644 (file)
@@ -276,7 +276,35 @@ static switch_status_t load_modules(void)
        switch_core_hash_init(&module_manager.load_hash);
 
        if ((xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
-               switch_xml_t mods, ld, settings, param, hook;
+               switch_xml_t mods, ld;
+
+               if ((mods = switch_xml_child(cfg, "modules"))) {
+                       for (ld = switch_xml_child(mods, "load"); ld; ld = ld->next) {
+                               const char *val = switch_xml_attr_soft(ld, "module");
+                               if (!zstr(val) && strchr(val, '.') && !strstr(val, ext) && !strstr(val, EXT)) {
+                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Invalid extension for %s\n", val);
+                                       continue;
+                               }
+                               v8_load_module(SWITCH_GLOBAL_dirs.mod_dir, val);
+                               count++;
+                       }
+               }
+               switch_xml_free(xml);
+
+       } else {
+               switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Open of %s failed\n", cf);
+       }
+
+       return SWITCH_STATUS_SUCCESS;
+}
+
+static void load_configuration(void)
+{
+       const char *cf = "v8.conf";
+       switch_xml_t cfg, xml;
+
+       if ((xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
+               switch_xml_t settings, param, hook;
 
                if ((settings = switch_xml_child(cfg, "settings"))) {
                        for (param = switch_xml_child(settings, "param"); param; param = param->next) {
@@ -292,6 +320,11 @@ static switch_status_t load_modules(void)
                                                switch_xml_bind_search_function(v8_fetch, switch_xml_parse_section_string(val), NULL);
                                        }
                                }
+                               else if (!strcmp(var, "startup-script")) {
+                                       if (val) {
+                                               v8_thread_launch(val);
+                                       }
+                               }
                        }
 
                        for (hook = switch_xml_child(settings, "hook"); hook; hook = hook->next) {
@@ -326,24 +359,12 @@ static switch_status_t load_modules(void)
                        }
                }
 
-               if ((mods = switch_xml_child(cfg, "modules"))) {
-                       for (ld = switch_xml_child(mods, "load"); ld; ld = ld->next) {
-                               const char *val = switch_xml_attr_soft(ld, "module");
-                               if (!zstr(val) && strchr(val, '.') && !strstr(val, ext) && !strstr(val, EXT)) {
-                                       switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Invalid extension for %s\n", val);
-                                       continue;
-                               }
-                               v8_load_module(SWITCH_GLOBAL_dirs.mod_dir, val);
-                               count++;
-                       }
-               }
                switch_xml_free(xml);
 
-       } else {
+       }
+       else {
                switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Open of %s failed\n", cf);
        }
-
-       return SWITCH_STATUS_SUCCESS;
 }
 
 static int env_init(JSMain *js)
@@ -1007,6 +1028,8 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_v8_load)
 
        SWITCH_ADD_JSON_API(json_api_interface, "jsjson", "JSON JS Gateway", json_function, "");
 
+       load_configuration();
+
        /* indicate that the module should continue to be loaded */
        return SWITCH_STATUS_NOUNLOAD;
 }
index 6d5c75c8810c1904512edada00310bd5aea3a175..0af8e17e0a6ded344aff4d03a382eacf3abd3dac 100644 (file)
@@ -86,6 +86,7 @@ void v8_remove_event_handler(void *event_handler);
 static switch_xml_t v8_fetch(const char *section,
        const char *tag_name, const char *key_name, const char *key_value, switch_event_t *params, void *user_data);
 static void v8_event_handler(switch_event_t *event);
+void v8_thread_launch(const char *text);
 
 #endif /* MOD_V8_H */