diff -r 000000000000 -r 6474c204b198 b2g/simulator/packages/subprocess/README.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/b2g/simulator/packages/subprocess/README.md Wed Dec 31 06:09:35 2014 +0100
@@ -0,0 +1,124 @@
+
What's that?
+Simply package enigmail hard work on providing IPC feature in mozilla platform.
+So we are able to launch child proccesses from javascript,
+and in our case, from addon-sdk libraries :)
+
+Sample of code:
+ This object allows to start a process, and read/write data to/from it
+ using stdin/stdout/stderr streams.
+ Usage example:
+
+ const subprocess = require("subprocess");
+ var p = subprocess.call({
+ command: '/bin/foo',
+ arguments: ['-v', 'foo'],
+ environment: [ "XYZ=abc", "MYVAR=def" ],
+ charset: 'UTF-8',
+ workdir: '/home/foo',
+ //stdin: "some value to write to stdin\nfoobar",
+ stdin: function(stdin) {
+ stdin.write("some value to write to stdin\nfoobar");
+ stdin.close();
+ },
+ stdout: function(data) {
+ dump("got data on stdout:" + data + "\n");
+ },
+ stderr: function(data) {
+ dump("got data on stderr:" + data + "\n");
+ },
+ done: function(result) {
+ dump("process terminated with " + result.exitCode + "\n");
+ },
+ mergeStderr: false
+ });
+ p.wait(); // wait for the subprocess to terminate
+ // this will block the main thread,
+ // only do if you can wait that long
+
+
+ Description of parameters:
+ --------------------------
+ Apart from , all arguments are optional.
+
+ command: either a |nsIFile| object pointing to an executable file or a
+ String containing the platform-dependent path to an executable
+ file.
+
+ arguments: optional string array containing the arguments to the command.
+
+ environment: optional string array containing environment variables to pass
+ to the command. The array elements must have the form
+ "VAR=data". Please note that if environment is defined, it
+ replaces any existing environment variables for the subprocess.
+
+ charset: Output is decoded with given charset and a string is returned.
+ If charset is undefined, "UTF-8" is used as default.
+ To get binary data, set this to null and the returned string
+ is not decoded in any way.
+
+ workdir: optional; String containing the platform-dependent path to a
+ directory to become the current working directory of the subprocess.
+
+ stdin: optional input data for the process to be passed on standard
+ input. stdin can either be a string or a function.
+ A |string| gets written to stdin and stdin gets closed;
+ A |function| gets passed an object with write and close function.
+ Please note that the write() function will return almost immediately;
+ data is always written asynchronously on a separate thread.
+
+ stdout: an optional function that can receive output data from the
+ process. The stdout-function is called asynchronously; it can be
+ called mutliple times during the execution of a process.
+ At a minimum at each occurance of \n or \r.
+ Please note that null-characters might need to be escaped
+ with something like 'data.replace(/\0/g, "\\0");'.
+
+ stderr: an optional function that can receive stderr data from the
+ process. The stderr-function is called asynchronously; it can be
+ called mutliple times during the execution of a process. Please
+ note that null-characters might need to be escaped with
+ something like 'data.replace(/\0/g, "\\0");'.
+ (on windows it only gets called once right now)
+
+ done: optional function that is called when the process has terminated.
+ The exit code from the process available via result.exitCode. If
+ stdout is not defined, then the output from stdout is available
+ via result.stdout. stderr data is in result.stderr
+
+ mergeStderr: optional boolean value. If true, stderr is merged with stdout;
+ no data will be provided to stderr.
+
+
+ Description of object returned by subprocess.call(...)
+ ------------------------------------------------------
+ The object returned by subprocess.call offers a few methods that can be
+ executed:
+
+ wait(): waits for the subprocess to terminate. It is not required to use
+ wait; done will be called in any case when the subprocess terminated.
+
+ kill(hardKill): kill the subprocess. Any open pipes will be closed and
+ done will be called.
+ hardKill [ignored on Windows]:
+ - false: signal the process terminate (SIGTERM)
+ - true: kill the process (SIGKILL)
+
+
+ Other methods in subprocess
+ ---------------------------
+
+ registerDebugHandler(functionRef): register a handler that is called to get
+ debugging information
+ registerLogHandler(functionRef): register a handler that is called to get error
+ messages
+
+ example:
+ subprocess.registerLogHandler( function(s) { dump(s); } );
+
+
+Credits:
+All enigmail team working on IPC component.
+ The Initial Developer of this code is Jan Gerber.
+ Portions created by Jan Gerber ,
+ Patrick Brunschwig (author of almost all code) ,
+ Ramalingam Saravanan (from enigmail team)