diff --git a/README.md b/README.md index b353d10..c74ac72 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,24 @@ -I2P native plugin generation tool -================================= +ShellService Plugin Generator +============================= -I wrote this way faster than I documented it. Shocking, right? + Generates a valid ShellService plugin from a single script or executable. A +ShellService plugin is an application which runs as a process which is managed +by the I2P sofware. This allows I2P to manage the lifetime of a non-JVM +application by monitoring it. That way, plugins don't risk outliving the I2P +router because the router loses track of them. -This is a handy little tool for assembling I2P plugins when those -plugins don't have a clean way to interface with the JVM, or just don't -need one. Think of it a little like `checkinstall` but for I2P Plugins. -Right now it mostly works, and it's pretty cleanly put together. + A ShellService plugin should not "daemonize" itself or othewise fork itself to the +background. The I2P router will manage it as a "Client Application" and daemonizing +it will break this. If your process forks itself to the background by default, it +must have this feature disabled to work as a ShellService. -There are some examples in the Makefile for now. - -Here's a copy of the usage while I work on a better README.md: + ShellService adds additional "arguments" to the applications in question, +which are used to configure the ShellService. In order to function correctly, +the ShellService must be named so that the name of the Plugin, i.e. `name` in +plugin.config, must match the `-shellservice.name` argument added by the +ShellService class. If it does not, the ShellService will be unable to look up +the plugin process. If the final elements of the ShellService name are `-$OS-$ARCH` +or `-$OS` they may be optionally omitted. ```markdown Usage of i2p.plugin.native: diff --git a/cmd/i2p.plugin.native/client-config.go b/cmd/i2p.plugin.native/client-config.go index 7d52f9c..7efd3a2 100644 --- a/cmd/i2p.plugin.native/client-config.go +++ b/cmd/i2p.plugin.native/client-config.go @@ -17,16 +17,15 @@ type ClientConfig struct { NoShellService *bool CommandInPath *bool ExtendClassPath string + JavaShellService *string } func karenConfig() string { return "" } -var javaShellService = "net.i2p.router.web.ShellService" - func (cc *ClientConfig) Print() string { - r := "clientApp.0.main=" + javaShellService + "\n" + r := "clientApp.0.main=" + *cc.JavaShellService + "\n" r += cc.PrintClientName() r += cc.PrintCommand() r += cc.PrintStop() diff --git a/cmd/i2p.plugin.native/main.go b/cmd/i2p.plugin.native/main.go index 4bc0487..e4a46a6 100644 --- a/cmd/i2p.plugin.native/main.go +++ b/cmd/i2p.plugin.native/main.go @@ -46,6 +46,8 @@ func find(root, ext string) []string { return a } +var javaShellService = "net.i2p.router.web.ShellService" + func flagsSet() { pc.PluginName = flag.String("name", "", "Name of the plugin") pc.KeyName = flag.String("key", "", "Key to use(omit for su3)") @@ -85,6 +87,7 @@ func flagsSet() { resdir = flag.String("res", "", "a directory of additional resources to include in the plugin") targetos = flag.String("targetos", os.Getenv("GOOS"), "Target to run the plugin on") noautosuffixwindows = flag.Bool("noautosuffixwindows", false, "Don't automatically add .exe to exename on Windows") + cc.JavaShellService = flag.String("javashellservice", javaShellService, "specify ShellService java path") flag.Parse() cc.ClientDisplayName = pc.ConsoleLinkName }