/** Hook funktions * * Every path can register a hook function which is called for every received * message. This can be used to debug the data flow, get statistics * or alter the message. * * This file includes some examples. * * @author Steffen Vogel * @copyright 2014, Institute for Automation of Complex Power Systems, EONERC * @file */ #ifndef _HOOKS_H_ #define _HOOKS_H_ struct msg; struct path; /** Callback type of hook function * * @todo Add a way to pass custom data to the hooks * @param m The message which is forwarded * @param p The path which is processing this message. * @retval 0 Success. Continue processing the message. * @retval <0 Error. Drop the message. */ typedef int (*hook_cb_t)(struct msg *m, struct path *p); /** This is a static list of available hooks. * * It's used by hook_lookup to parse hook identfiers from the configuration file. * The list must be terminated by NULL pointers! */ struct hook_id { hook_cb_t cb; const char *name; }; /** Get a function pointer of a hook function by its name * * @param name The name of the requested hook * @retval NULL There is no hook registred with name. * @retval >0 A function pointer to the requested hook_cb_t hook. */ hook_cb_t hook_lookup(const char *name); /** Example hook: Print the message. */ int hook_print(struct msg *m, struct path *p); /** Example hook: Filter the message on some criteria. */ int hook_filter(struct msg *m, struct path *p); /** Example hook: Convert the message values to fixed precision. */ int hook_tofixed(struct msg *m, struct path *p); /** Example hook: Chain multiple hooks */ int hook_multiple(struct msg *m, struct path *p); #endif /* _HOOKS_H_ */