Javascript Engine

From Yate Documentation
(Difference between revisions)
Jump to: navigation, search
(Methods)
 
(17 intermediate revisions by one user not shown)
Line 2: Line 2:
 
This object is frozen.
 
This object is frozen.
  
== Static methods ==
+
== Methods ==
 +
 
 +
* '''output([value1 [, value2 [, ...]]])'''
 +
Output data to console / log.<br>
 +
Concatenate parameters. Put a space between them.<br>
 +
Does nothing if the resulting string is empty.<br>
 +
Engine.output("1",1,"test");
 +
Engine.output("1" + " " + 1 + " test");
 +
// Output: "1 1 test"
 +
 
 +
* '''debug([level, ][value1 [, value2 [, ...]]])'''
 +
Put a debug message in console / log.<br>
 +
Concatenate values. Put a space between them.<br>
 +
Does nothing if the resulting string is empty.<br>
 +
Debug level is handled if the first parameter is an integer value. Defaults to Engine.DebugNote otherwise.<br>
 +
// The following calls will produce the same debug message:
 +
Engine.debug(Engine.DebugNote,"test","out");
 +
Engine.debug(8,"test out");
 +
Engine.debug("test" + " out");
 +
 
 +
* '''alarm([info, ]level, value1 [, value2 [, ...]])'''
 +
Put a debug message. Emits an alarm if a callback is installed.<br>
 +
Concatenate values. Put a space between them.<br>
 +
Does nothing if the resulting string is empty.<br>
 +
Parameters:<br>
 +
'''info''': Optional alarm extra information<br>
 +
'''level''': Debug/Alarm level<br>
 +
Engine.alarm("myscript",Engine.DebugWarn,"Some warning");
 +
// Run time error:
 +
Engine.alarm("some text");
 +
Engine.alarm("myscript",Engine.DebugWarn);
 +
// No alarm, no debug message:
 +
Engine.alarm("myscript",Engine.DebugWarn,"");
 +
 
 +
* '''sleep(seconds)'''
 +
Sleep for a number of seconds.<br>
 +
 
 +
* '''usleep(microseconds)'''
 +
Sleep for a number of microseconds.<br>
  
* '''output()'''
 
* '''debug()'''
 
* '''alarm()'''
 
* '''sleep()'''
 
* '''usleep()'''
 
 
* '''yield()'''
 
* '''yield()'''
 +
Give up the currently running timeslice. Note that on some platforms it also sleeps for the operating system's scheduler resolution.<br>
 +
 
* '''idle()'''
 
* '''idle()'''
* '''restart()'''
+
Sleep for a system dependent period adequate for an idle thread.<br>
* '''dump_r()'''
+
On most operating systems this is a 5 msec sleep.<br>
* '''print_r()'''
+
 
* '''dump_t()'''
+
* '''restart([code [,gracefull]])'''
* '''print_t()'''
+
Stop and restart the engine and the entire program.<br>
* '''debugName()'''
+
Parameters:<br>
* '''debugLevel()'''
+
'''code''': Optional return code of the program. Defaults to 0<br>
* '''debugEnabled()'''
+
'''gracefull''': Optional. Attempt to wait until no plugin is busy<br>
* '''debugAt()'''
+
Return:<br>
* '''setDebug()'''
+
TRUE if restart was initiated, FALSE if exiting or no supervisor or 'allow_abort' is disabled in javascript.conf.<br>
 +
 
 +
* '''dump_r([what])'''
 +
* '''print_r([what])'''
 +
Dump (recursive) current context or specified item methods and properties.<br>
 +
'''dump_r''': Dump to string<br>
 +
'''print_r''': Dump to output<br>
 +
Parameters:<br>
 +
'''what''': Optional item (variable) to dump. Dump current context if missing<br>
 +
Return:<br>
 +
'''dump_r''' returns the string containing dumped data.<br>
 +
 
 +
* '''dump_var_r(what[,flags])'''
 +
* '''print_var_r(what[,flags])'''
 +
Dump (recursive) specified item methods and/or properties.<br>
 +
'''dump_var_r''': Dump to string<br>
 +
'''print_var_r''': Dump to output<br>
 +
Parameters:<br>
 +
'''what''': Variable to dump<br>
 +
'''flags''': Configure dump contents<br>
 +
May be an ORed combination of the following values:<br>
 +
Engine.DumpProp: Dump object properties<br>
 +
Engine.DumpFunc: Dump object functions<br>
 +
Engine.DumpRecursive: Dump contained objects also<br>
 +
Engine.DumpType: Dump type (applies to functions also)<br>
 +
Engine.DumpProto: Dump object prototype<br>
 +
Engine.DumpPropObjType: Dump non basic type if the following conditions are met: Engine.DumpProp flag is set, Engine.DumpFunc is not set, Engine.DumpType is not set<br>
 +
Predefined combinations:<br>
 +
Engine.DumpPropOnly: Engine.DumpRecursive | Engine.DumpPropObjType | Engine.DumpProp<br>
 +
Engine.DumpFuncOnly: Engine.DumpRecursive | Engine.DumpProto | Engine.DumpFunc<br>
 +
Defaults to Engine.DumpPropOnly<br>
 +
Return:<br>
 +
'''dump_var_r''' returns the string containing dumped data.<br>
 +
 
 +
* '''dump_root_r([flags])'''
 +
* '''print_root_r([flags])'''
 +
Same as dump_var_r / print_var_r. '''obj''' is the script context
 +
 
 +
* '''dump_t(table[,hdrpMap[,params]])'''
 +
* '''print_t(table[,hdrpMap[,params]])'''
 +
Dump table to string or output.<br>
 +
The table may be an array of objects or an object containing arrays.<br>
 +
Array:<br>
 +
- Array of objects: each entry describe a new row. Object fields are column names.<br>
 +
- Array of arrays: Each entry describe a new row. First array contains column names.<br>
 +
Object: Each array field describe a column. Field name is the column name.<br>
 +
Parameters:<br>
 +
'''table''': Table to dump<br>
 +
'''hdrMap''': Header name mapping. Object with prop[header name in table]=value[new header display name]. Fields will be re-arranged as found in header mapping. New header display name may be empty if the list is only used to re-arrange fields<br>
 +
'''params''': Dump parameters parameters
 +
* '''force_empty''': Boolean (default: false). Dump table with empty contents (no rows). Ignored if there are no header names
 +
* '''all_headers''': Boolean (default: false). Add the rest of the headers not found in 'hdrMap'. Ignored if 'hdrpMap' is not given
 +
Return:<br>
 +
'''dump_t''' returns the string containing dumped data.<br>
 +
a = [{name1:"val11", name2:"val12"}, {name1:"val21", name3:"val23"}];
 +
a2 = [["name1","name2","name3"], ["val11","val12" ],["val21",undefined,"val23"]];
 +
o = {name1:["val11","val21"], name2:["val12"], name3:[null,"val23"]};
 +
Engine.print_t(a);
 +
Engine.print_t(a2);
 +
Engine.print_t(o);
 +
// Same output:
 +
// name1 name2 name3
 +
// ----- ----- -----
 +
// val11 val12
 +
// val21      val23
 +
 
 +
* '''debugName([name])'''
 +
Set the debug name.<br>
 +
Retrieve debug name if no parameter is given.<br>
 +
Parameters:<br>
 +
'''name''': Debug name to set<br>
 +
 
 +
* '''debugLevel([level])'''
 +
Set the debug level.<br>
 +
Retrieve the debug level if no parameter is given.<br>
 +
Parameters:<br>
 +
'''level''': Debug level to set. Ignored if not an integer value<br>
 +
 
 +
* '''debugEnabled([on])'''
 +
Toggle (set) the debug enabled flag.<br>
 +
Retrieve the debug enabled flag if no parameter is given.<br>
 +
Parameters:<br>
 +
'''on''': TRUE to enable debug output, FALSE to disable it<br>
 +
 
 +
* '''debugAt(level)'''
 +
Check if the current debug level of the module/script is greater or equal to requested level.<br>
 +
Parameters:<br>
 +
'''level''': Integer value to check<br>
 +
Return:<br>
 +
TRUE if the current debug level greater than or equal to '''level''', FALSE otherwise.<br>
 +
 
 +
* '''setDebug(command)'''
 +
Set debug according to command values.<br>
 +
Handled commands:<br>
 +
- '''level <level_value>''': Set debug level to requested level value<br>
 +
- '''reset''': Reset debug level to javascript module debug level<br>
 +
- '''engine''': Reset debug level and debug enabled flag to yate engine settings<br>
 +
- boolean: Set debug enabled flag<br>
 +
All other values are ignored.<br>
 +
 
 
* '''started()'''
 
* '''started()'''
* '''runParams()'''
+
Check if engine is started at the time this method is called (engine.start message was sent).<br>
* '''configFile()'''
+
Return:<br>
* '''setInterval()'''
+
TRUE if engine was started (all modules were loaded and initialized), FALSE if not.<br>
* '''clearInterval()'''
+
 
* '''setTimeout()'''
+
* '''runParams([param])'''
* '''clearTimeout()'''
+
Retrieve engine list of parameters specific to this run or a specified one.<br>
* '''loadLibrary()'''
+
Parameters:<br>
* '''loadObject()'''
+
'''param''': Optional name of parameter to retrieve<br>
* '''replaceParams()'''
+
Return:<br>
 +
Object with fields set to engine parameters or string with requested parameter value.<br>
 +
 
 +
* '''configFile(name [,user])'''
 +
Retrieve the full path of a configuration file. Add the '.conf' extension to name.<br>
 +
Parameters:<br>
 +
'''name''': Configuration file name<br>
 +
'''user''': Optional. Set it to TRUE to build the path from user settings<br>
 +
Return:<br>
 +
Path to requested file.<br>
 +
 
 +
* '''setInterval(callback, milliseconds)'''
 +
* '''setTimeout(callback, milliseconds)'''
 +
Install a timer event. Request 'callback' function call on given interval.<br>
 +
'''setInterval''': Repeat function call on requested interval.<br>
 +
'''setTimeout''': Remove timer after first call.<br>
 +
Parameters:<br>
 +
'''callback''': Function to call<br>
 +
'''milliseconds''': Timer interval in milliseconds<br>
 +
Return:<br>
 +
Timer id.<br>
 +
 
 +
* '''clearInterval(id)'''
 +
* '''clearTimeout(id)'''
 +
Remove requested timer.<br>
 +
Parameters:<br>
 +
'''id''': Timer id to remove<br>
 +
Return:<br>
 +
TRUE on success, FALSE if not found.<br>
 +
 
 +
* '''loadLibrary(name [,name1 ...])'''
 +
* '''loadObject(name [,name1 ...])'''
 +
Load an object (loadObject) or a set of objects (loadLibrary) into script context.<br>
 +
These methods can be used to load custom C++ objects exposed to javascript.<br>
 +
An example of such module can be found in modules/test/jsext.cpp.<br>
 +
Parameters:<br>
 +
'''name''': Library of object name(s). Single name or comma separated list<br>
 +
Return:<br>
 +
TRUE on success, FALSE on failure (library/object) not given or not found. <br>
 +
// The following load objects defined in jsext module:
 +
loadLibrary("jsext");
 +
loadObject("ExtObj");
 +
// Unsafe to check return value:
 +
ok = loadLibrary("lib1","lib2","lib3");
 +
if (!ok) {
 +
    // Unsafe: the list may be partially loaded. e.g. lib1 and lib3 loaded but not lib2
 +
}
 +
 
 +
* '''replaceParams(buf, params [,sqlEscape [,extraEsc]])'''
 +
Replace ${paramname} instances in 'buf' string from 'params' field values.<br>
 +
Parameters:<br>
 +
'''buf''': String containing the replacements<br>
 +
'''params''': Object whose fields are used to replace<br>
 +
'''sqlEscape''': Optional. True to apply SQL escaping to parameter values<br>
 +
'''extraEsc''': Character to escape other than the SQL default ones<br>
 +
Return:<br>
 +
String with replacements done. 'buf' if 'params' is an invalid object.<br>
 +
  params = {a:"first", b:"second", c:"not found"};
 +
  s = "Test a=${a} empty=${missing} b=${b}";
 +
  repl = Engine.replaceParams(s,params);
 +
  // repl: "Test a=first empty= b=second"
  
 
* '''atob'''
 
* '''atob'''
Line 90: Line 284:
  
 
== Properties ==
 
== Properties ==
 +
 +
* '''DebugFail, DebugTest, DebugGoOn, DebugConf, DebugStub, DebugWarn, DebugMild, DebugCall, DebugNote, DebugInfo, DebugAll'''
 +
Debug levels to be used when calling '''Engine.debug()''' or '''Engine.alarm()'''.<br>
 +
'''NOTE:''': Debug level is clamped to interval [DebugTest .. DebugAll] unless 'allow_abort' is enabled in javascript.conf (in this case the debug level is clamped to interval [DebugFail .. DebugAll].<br>
 +
 +
* '''shared'''
 +
Provides access to [[Javascript Shared|Shared]] object.<br>
 +
 +
* '''name'''
 +
Script name. It may not be available.<br>
 +
This is the name assigned to the script.<br>
 +
This property is missing when running '''javascript eval''' command.<br>
 +
Example:
 +
javascript.conf:
 +
[scripts]
 +
test=some_script.js
 +
 +
in some_script.js
 +
Engine.name property value is "test"

Latest revision as of 14:25, 8 December 2022

Javascript static Engine object.
This object is frozen.

[edit] Methods

  • output([value1 [, value2 [, ...]]])

Output data to console / log.
Concatenate parameters. Put a space between them.
Does nothing if the resulting string is empty.

Engine.output("1",1,"test");
Engine.output("1" + " " + 1 + " test");
// Output: "1 1 test"
  • debug([level, ][value1 [, value2 [, ...]]])

Put a debug message in console / log.
Concatenate values. Put a space between them.
Does nothing if the resulting string is empty.
Debug level is handled if the first parameter is an integer value. Defaults to Engine.DebugNote otherwise.

// The following calls will produce the same debug message:
Engine.debug(Engine.DebugNote,"test","out");
Engine.debug(8,"test out");
Engine.debug("test" + " out");
  • alarm([info, ]level, value1 [, value2 [, ...]])

Put a debug message. Emits an alarm if a callback is installed.
Concatenate values. Put a space between them.
Does nothing if the resulting string is empty.
Parameters:
info: Optional alarm extra information
level: Debug/Alarm level

Engine.alarm("myscript",Engine.DebugWarn,"Some warning");
// Run time error:
Engine.alarm("some text");
Engine.alarm("myscript",Engine.DebugWarn);
// No alarm, no debug message:
Engine.alarm("myscript",Engine.DebugWarn,"");
  • sleep(seconds)

Sleep for a number of seconds.

  • usleep(microseconds)

Sleep for a number of microseconds.

  • yield()

Give up the currently running timeslice. Note that on some platforms it also sleeps for the operating system's scheduler resolution.

  • idle()

Sleep for a system dependent period adequate for an idle thread.
On most operating systems this is a 5 msec sleep.

  • restart([code [,gracefull]])

Stop and restart the engine and the entire program.
Parameters:
code: Optional return code of the program. Defaults to 0
gracefull: Optional. Attempt to wait until no plugin is busy
Return:
TRUE if restart was initiated, FALSE if exiting or no supervisor or 'allow_abort' is disabled in javascript.conf.

  • dump_r([what])
  • print_r([what])

Dump (recursive) current context or specified item methods and properties.
dump_r: Dump to string
print_r: Dump to output
Parameters:
what: Optional item (variable) to dump. Dump current context if missing
Return:
dump_r returns the string containing dumped data.

  • dump_var_r(what[,flags])
  • print_var_r(what[,flags])

Dump (recursive) specified item methods and/or properties.
dump_var_r: Dump to string
print_var_r: Dump to output
Parameters:
what: Variable to dump
flags: Configure dump contents
May be an ORed combination of the following values:
Engine.DumpProp: Dump object properties
Engine.DumpFunc: Dump object functions
Engine.DumpRecursive: Dump contained objects also
Engine.DumpType: Dump type (applies to functions also)
Engine.DumpProto: Dump object prototype
Engine.DumpPropObjType: Dump non basic type if the following conditions are met: Engine.DumpProp flag is set, Engine.DumpFunc is not set, Engine.DumpType is not set
Predefined combinations:
Engine.DumpPropOnly: Engine.DumpRecursive | Engine.DumpPropObjType | Engine.DumpProp
Engine.DumpFuncOnly: Engine.DumpRecursive | Engine.DumpProto | Engine.DumpFunc
Defaults to Engine.DumpPropOnly
Return:
dump_var_r returns the string containing dumped data.

  • dump_root_r([flags])
  • print_root_r([flags])

Same as dump_var_r / print_var_r. obj is the script context

  • dump_t(table[,hdrpMap[,params]])
  • print_t(table[,hdrpMap[,params]])

Dump table to string or output.
The table may be an array of objects or an object containing arrays.
Array:
- Array of objects: each entry describe a new row. Object fields are column names.
- Array of arrays: Each entry describe a new row. First array contains column names.
Object: Each array field describe a column. Field name is the column name.
Parameters:
table: Table to dump
hdrMap: Header name mapping. Object with prop[header name in table]=value[new header display name]. Fields will be re-arranged as found in header mapping. New header display name may be empty if the list is only used to re-arrange fields
params: Dump parameters parameters

  • force_empty: Boolean (default: false). Dump table with empty contents (no rows). Ignored if there are no header names
  • all_headers: Boolean (default: false). Add the rest of the headers not found in 'hdrMap'. Ignored if 'hdrpMap' is not given

Return:
dump_t returns the string containing dumped data.

a = [{name1:"val11", name2:"val12"}, {name1:"val21", name3:"val23"}];
a2 = [["name1","name2","name3"], ["val11","val12" ],["val21",undefined,"val23"]];
o = {name1:["val11","val21"], name2:["val12"], name3:[null,"val23"]};
Engine.print_t(a);
Engine.print_t(a2);
Engine.print_t(o);
// Same output:
// name1 name2 name3
// ----- ----- -----
// val11 val12
// val21       val23
  • debugName([name])

Set the debug name.
Retrieve debug name if no parameter is given.
Parameters:
name: Debug name to set

  • debugLevel([level])

Set the debug level.
Retrieve the debug level if no parameter is given.
Parameters:
level: Debug level to set. Ignored if not an integer value

  • debugEnabled([on])

Toggle (set) the debug enabled flag.
Retrieve the debug enabled flag if no parameter is given.
Parameters:
on: TRUE to enable debug output, FALSE to disable it

  • debugAt(level)

Check if the current debug level of the module/script is greater or equal to requested level.
Parameters:
level: Integer value to check
Return:
TRUE if the current debug level greater than or equal to level, FALSE otherwise.

  • setDebug(command)

Set debug according to command values.
Handled commands:
- level <level_value>: Set debug level to requested level value
- reset: Reset debug level to javascript module debug level
- engine: Reset debug level and debug enabled flag to yate engine settings
- boolean: Set debug enabled flag
All other values are ignored.

  • started()

Check if engine is started at the time this method is called (engine.start message was sent).
Return:
TRUE if engine was started (all modules were loaded and initialized), FALSE if not.

  • runParams([param])

Retrieve engine list of parameters specific to this run or a specified one.
Parameters:
param: Optional name of parameter to retrieve
Return:
Object with fields set to engine parameters or string with requested parameter value.

  • configFile(name [,user])

Retrieve the full path of a configuration file. Add the '.conf' extension to name.
Parameters:
name: Configuration file name
user: Optional. Set it to TRUE to build the path from user settings
Return:
Path to requested file.

  • setInterval(callback, milliseconds)
  • setTimeout(callback, milliseconds)

Install a timer event. Request 'callback' function call on given interval.
setInterval: Repeat function call on requested interval.
setTimeout: Remove timer after first call.
Parameters:
callback: Function to call
milliseconds: Timer interval in milliseconds
Return:
Timer id.

  • clearInterval(id)
  • clearTimeout(id)

Remove requested timer.
Parameters:
id: Timer id to remove
Return:
TRUE on success, FALSE if not found.

  • loadLibrary(name [,name1 ...])
  • loadObject(name [,name1 ...])

Load an object (loadObject) or a set of objects (loadLibrary) into script context.
These methods can be used to load custom C++ objects exposed to javascript.
An example of such module can be found in modules/test/jsext.cpp.
Parameters:
name: Library of object name(s). Single name or comma separated list
Return:
TRUE on success, FALSE on failure (library/object) not given or not found.

// The following load objects defined in jsext module:
loadLibrary("jsext");
loadObject("ExtObj");
// Unsafe to check return value:
ok = loadLibrary("lib1","lib2","lib3");
if (!ok) {
    // Unsafe: the list may be partially loaded. e.g. lib1 and lib3 loaded but not lib2
}
  • replaceParams(buf, params [,sqlEscape [,extraEsc]])

Replace ${paramname} instances in 'buf' string from 'params' field values.
Parameters:
buf: String containing the replacements
params: Object whose fields are used to replace
sqlEscape: Optional. True to apply SQL escaping to parameter values
extraEsc: Character to escape other than the SQL default ones
Return:
String with replacements done. 'buf' if 'params' is an invalid object.

 params = {a:"first", b:"second", c:"not found"};
 s = "Test a=${a} empty=${missing} b=${b}";
 repl = Engine.replaceParams(s,params);
 // repl: "Test a=first empty= b=second"
  • atob

Decode Base64 data.
Parameters:
b64_str: Mandatory, Base64 encoded data
Return:
Decoded data, boolean false on failure (invalid Base64 data)

str = Engine.atob(b64_str)
  • btoa

Encode string data to Base64.
Parameters:
str: Mandatory, data to encode
line_len: Optional line length (split encoded data, add end of line after each line_len chars)
add_eol: Optional, add an extra end of line after encoded data
Return:
Base64 encoded data

b64_str = Engine.btoa(str[,line_len[,add_eol]])
  • atoh

Decode Base64 data.
Parameters:
b64_str: Mandatory, Base64 encoded data
hex_sep: Optional separator to use between octets. Set it to 'undefined' if not used and hex_upcase is given
hex_upcase: Optional, use upper case characters in hexa
Return:
Hexified string, boolean false on failure (invalid Base64 data)

hex_str = Engine.atoh(b64_str[,hex_sep[,hex_upcase]])
  • htoa

Encode hexified binary (string) data to Base64.
Parameters:
hex_str: Mandatory, data to encode
line_len: Optional line length (split encoded data, add end of line after each line_len chars)
add_eol: Optional, add an extra end of line after encoded data
Return:
The string, boolean false on failure (invalid input string).

b64_str = Engine.htob(hex_str[,line_len[,add_eol]])
  • btoh

Convert binary (string) data to hexified string.
Parameters:
str: Mandatory, data to hexify
hex_sep: Optional separator to use between octets. Set it to 'undefined' if not used and hex_upcase is given
hex_upcase: Optional, use upper case characters in hexa
Return:
Hexified string

hex_str = Engine.btoh(str[,hex_sep[,hex_upcase]])
  • htob

Unhexify binary (string) data.
Parameters:
hex_str: Mandatory, data to unhexify
hex_sep: Optional separator between octets. Set it to 'undefined' if missing or unknown (autodetect)
Return:
The string, boolean false on failure (invalid input string).

str = Engine.htob(hex_str[,hex_sep])

[edit] Properties

  • DebugFail, DebugTest, DebugGoOn, DebugConf, DebugStub, DebugWarn, DebugMild, DebugCall, DebugNote, DebugInfo, DebugAll

Debug levels to be used when calling Engine.debug() or Engine.alarm().
NOTE:: Debug level is clamped to interval [DebugTest .. DebugAll] unless 'allow_abort' is enabled in javascript.conf (in this case the debug level is clamped to interval [DebugFail .. DebugAll].

  • shared

Provides access to Shared object.

  • name

Script name. It may not be available.
This is the name assigned to the script.
This property is missing when running javascript eval command.
Example:

javascript.conf:
[scripts]
test=some_script.js

in some_script.js
Engine.name property value is "test"
Personal tools
Namespaces

Variants
Actions
Preface
Configuration
Administrators
Developers