blob: 1241778114b027218f2b9f3b7f410ed4f337ebb6 [file] [log] [blame]
#ifndef _TYPES_HLUA_H
#define _TYPES_HLUA_H
#include <lua.h>
#define CLASS_CORE "Core"
#define CLASS_TXN "TXN"
struct session;
enum hlua_state {
HLUA_STOP = 0,
HLUA_RUN,
};
enum hlua_exec {
HLUA_E_OK = 0,
HLUA_E_AGAIN, /* LUA yield, must resume the stack execution later, when
the associatedtask is waked. */
HLUA_E_ERRMSG, /* LUA stack execution failed with a string error message
in the top of stack. */
HLUA_E_ERR, /* LUA stack execution failed without error message. */
};
struct hlua {
lua_State *T; /* The LUA stack. */
int Tref; /* The reference of the stack in coroutine case.
-1 for the main lua stack. */
int Mref; /* The reference of the memory context in coroutine case.
-1 if the memory context is not used. */
int nargs; /* The number of arguments in the stack at the start of execution. */
enum hlua_state state; /* The current execution state. */
struct task *task; /* The task associated with the lua stack execution.
We must wake this task to continue the task execution */
struct list com; /* The list head of the signals attached to this task. */
struct ebpt_node node;
};
struct hlua_com {
struct list purge_me; /* Part of the list of signals to be purged in the
case of the LUA execution stack crash. */
struct list wake_me; /* Part of list of signals to be targeted if an
event occurs. */
struct task *task; /* The task to be wake if an event occurs. */
};
/* This is a part of the list containing references to functions
* called at the initialisation time.
*/
struct hlua_init_function {
struct list l;
int function_ref;
};
/* This struct contains the pointer provided on the most
* of internal HAProxy calls during the processing of
* rules, converters and sample-fetches. This struct is
* associated with the lua object called "TXN".
*/
struct hlua_txn {
struct session *s;
struct proxy *p;
void *l7;
};
/* This struct is used as a closure argument associated
* with dynamic sample-fetch created fucntions. This contains
* a pointer to the original sample_fetch struct. It is used
* to identify the function to execute with the sample fetch
* wrapper.
*/
struct hlua_sample_fetch {
struct sample_fetch *f;
};
#endif /* _TYPES_HLUA_H */