Browse Source

plugin: Basic scaffolding for the plugin subsystem

trytravis
Christian Decker 6 years ago
parent
commit
b6a1735929
  1. 1
      lightningd/Makefile
  2. 35
      lightningd/plugin.c
  3. 38
      lightningd/plugin.h

1
lightningd/Makefile

@ -78,6 +78,7 @@ LIGHTNINGD_SRC := \
lightningd/peer_control.c \ lightningd/peer_control.c \
lightningd/peer_htlcs.c \ lightningd/peer_htlcs.c \
lightningd/ping.c \ lightningd/ping.c \
lightningd/plugin.c \
lightningd/subd.c \ lightningd/subd.c \
lightningd/watch.c lightningd/watch.c

35
lightningd/plugin.c

@ -0,0 +1,35 @@
#include "lightningd/plugin.h"
#include <ccan/list/list.h>
#include <ccan/tal/str/str.h>
struct plugin {
int stdin, stdout;
pid_t pid;
char *cmd;
};
struct plugins {
struct plugin **plugins;
};
struct plugins *plugins_new(const tal_t *ctx){
struct plugins *p;
p = tal(ctx, struct plugins);
p->plugins = tal_arr(p, struct plugin *, 0);
return p;
}
void plugin_register(struct plugins *plugins, const char* path TAKES)
{
struct plugin *p;
size_t n = tal_count(plugins->plugins);
tal_resize(&plugins->plugins, n+1);
p = tal(plugins, struct plugin);
plugins->plugins[n] = p;
p->cmd = tal_strdup(p, path);
}
void plugins_init(struct plugins *plugins)
{
}

38
lightningd/plugin.h

@ -0,0 +1,38 @@
#ifndef LIGHTNING_LIGHTNINGD_PLUGIN_H
#define LIGHTNING_LIGHTNINGD_PLUGIN_H
#include "config.h"
#include <ccan/take/take.h>
#include <ccan/tal/tal.h>
/**
* A collection of plugins, and some associated information.
*
* Mainly used as root context for calls in the plugin subsystem.
*/
struct plugins;
/**
* Create a new plugins context.
*/
struct plugins *plugins_new(const tal_t *ctx);
/**
* Initialize the registered plugins.
*
* Initialization includes spinning up the plugins, reading their
* manifest, and registering the JSON-RPC passthrough and command line
* arguments. In order to read the getmanifest reply from the plugins
* we spin up our own io_loop that exits once all plugins have
* responded.
*/
void plugins_init(struct plugins *plugins);
/**
* Register a plugin for initialization and execution.
*
* @param plugins: Plugin context
* @param path: The path of the executable for this plugin
*/
void plugin_register(struct plugins *plugins, const char* path TAKES);
#endif /* LIGHTNING_LIGHTNINGD_PLUGIN_H */
Loading…
Cancel
Save