You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.0 KiB

#include "settings.h"
// typedef enum {
// } action_result;
// action type
typedef enum {
} action_type;
struct action;
typedef struct action action;
struct action_stack;
typedef struct action_stack action_stack;
struct action_stack {
GArray* stack;
struct server; struct connection; struct vrequest;
typedef handler_t (*ActionFunc)(struct vrequest *vr, gpointer param);
typedef void (*ActionFree)(struct server *srv, gpointer param);
struct action_func {
ActionFunc func;
ActionFree free;
gpointer param;
typedef struct action_func action_func;
#include "condition.h"
#include "plugin.h"
#include "options.h"
struct action {
gint refcount;
action_type type;
union {
option_set setting;
struct {
condition *cond;
action *target; /** action target to jump to if condition is fulfilled */
action *target_else; /** like above but if condition is not fulfilled */
} condition;
action_func function;
GArray* list; /** array of (action*) */
} data;
/* no new/free function, so just use the struct direct (i.e. not a pointer) */
LI_API void action_stack_init(action_stack *as);
LI_API void action_stack_reset(server *srv, action_stack *as);
LI_API void action_stack_clear(server *srv, action_stack *as);
/** handle sublist now, remember current position (stack) */
LI_API void action_enter(struct vrequest *vr, action *a);
LI_API handler_t action_execute(struct vrequest *vr);
LI_API void action_release(server *srv, action *a);
LI_API void action_acquire(action *a);
/* create new action */
LI_API action *action_new_setting(option_set setting);
LI_API action *action_new_function(ActionFunc func, ActionFree free, gpointer param);
LI_API action *action_new_list();
LI_API action *action_new_condition(condition *cond, action *target, action *target_else);