@ -28,13 +28,14 @@
* delivery to the plugin , and from a JSON - object to the internal
* representation :
*
* - ` serialize_payload ` which takes a payload of type ` payload _type`
* - ` serialize_payload ` which takes a payload of type ` cb_arg _type`
* and serializes it into the given ` json_stream ` . `
*
* - ` response_cb ` is called once the plugin has responded ( or with
* buffer = = NULL if there ' s no plugin ) . In addition an arbitrary
* additional argument of type ` cb_arg_type ` can be passed along
* that may contain any additional context necessary .
* that may contain any additional context necessary . It must free
* or otherwise take ownership of the cb_arg_type argument .
*
*
* To make hook invocations easier , each hook registered with
@ -69,7 +70,7 @@ AUTODATA_TYPE(hooks, struct plugin_hook);
* wrappers generated by the ` PLUGIN_HOOK_REGISTER ` macro .
*/
void plugin_hook_call_ ( struct lightningd * ld , const struct plugin_hook * hook ,
void * payload , void * cb_arg ) ;
tal_t * cb_arg STEALS ) ;
/* Create a small facade in from of `plugin_hook_call_` to make sure
@ -78,13 +79,11 @@ void plugin_hook_call_(struct lightningd *ld, const struct plugin_hook *hook,
* the method - name is correct for the call .
*/
/* FIXME: Find a way to avoid back-to-back declaration and definition */
# define PLUGIN_HOOK_CALL_DEF(name, payload_type, response_cb_arg_type) \
# define PLUGIN_HOOK_CALL_DEF(name, cb_arg_type) \
UNNEEDED static inline void plugin_hook_call_ # # name ( \
struct lightningd * ld , payload_type payload , \
response_cb_arg_type cb_arg ) \
struct lightningd * ld , cb_arg_type cb_arg STEALS ) \
{ \
plugin_hook_call_ ( ld , & name # # _hook_gen , ( void * ) payload , \
( void * ) cb_arg ) ; \
plugin_hook_call_ ( ld , & name # # _hook_gen , cb_arg ) ; \
}
/* Typechecked registration of a plugin hook. We check that the
@ -95,23 +94,22 @@ void plugin_hook_call_(struct lightningd *ld, const struct plugin_hook *hook,
* response_cb function accepts the deserialized response format and
* an arbitrary extra argument used to maintain context .
*/
# define REGISTER_PLUGIN_HOOK(name, type, response_cb, response_cb_arg_type, \
serialize_payload , payload_type ) \
# define REGISTER_PLUGIN_HOOK(name, type, response_cb, \
serialize_payload , cb_arg_type ) \
struct plugin_hook name # # _hook_gen = { \
stringify ( name ) , \
type , \
typesafe_cb_cast ( \
void ( * ) ( void * , const char * , const jsmntok_t * ) , \
void ( * ) ( response_cb_arg_type , const char * , \
const jsmntok_t * ) , \
void ( * ) ( void * STEALS , const char * , const jsmntok_t * ) , \
void ( * ) ( cb_arg_type STEALS , const char * , const jsmntok_t * ) , \
response_cb ) , \
typesafe_cb_cast ( void ( * ) ( void * , struct json_stream * ) , \
void ( * ) ( payload _type, struct json_stream * ) , \
void ( * ) ( cb_arg _type, struct json_stream * ) , \
serialize_payload ) , \
NULL , /* .plugins */ \
} ; \
AUTODATA ( hooks , & name # # _hook_gen ) ; \
PLUGIN_HOOK_CALL_DEF ( name , payload_type , response_ cb_arg_type) ;
PLUGIN_HOOK_CALL_DEF ( name , cb_arg_type )
bool plugin_hook_register ( struct plugin * plugin , const char * method ) ;