File: LuaEngine.h

package info (click to toggle)
ntopng 5.2.1%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 121,832 kB
  • sloc: javascript: 143,431; cpp: 71,175; ansic: 11,108; sh: 4,687; makefile: 911; python: 587; sql: 512; pascal: 234; perl: 118; ruby: 52; exp: 4
file content (196 lines) | stat: -rw-r--r-- 6,256 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
/*
 *
 * (C) 2013-22 - ntop.org
 *
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 *
 */

#ifndef _LUA_H_
#define _LUA_H_

#include "ntop_includes.h"
/** @defgroup LuaEngine LuaEngine
 * Main ntopng lua group.
 */

/* ******************************* */

/** @class LuaEngine
 *  @brief Main class of lua.
 *
 *  @ingroup LuaEngine
 *
 */

class ThreadedActivity;
class ThreadedActivityStats;

class LuaEngine {
 protected:
  lua_State *L; /**< The LuaEngine state.*/
  char *loaded_script_path;
  
  void lua_register_classes(lua_State *L, bool http_mode);

 public:
  /**
  * @brief A Constructor
  * @details Creating a new lua state.
  *
  * @return A new instance of lua.
  */
  LuaEngine(lua_State *vm);
 
  /**
   * @brief A Destructor.
   *
   */
  virtual ~LuaEngine();

  /* Set Hosts and Networks into the Lua context */
  void setHost(Host* h);
  void setNetwork(NetworkStats* ns);
  void setFlow(Flow*f);

  /* Set the deadline into the Lua context from an existing vm */
  void setThreadedActivityData(lua_State* from);
  /* Set the deadline into the Lua context from a threaded activity and a deadline */
  void setThreadedActivityData(const ThreadedActivity *ta, ThreadedActivityStats *tas, time_t deadline);

  inline Host* getHost()     { return(getLuaVMContext(L)->host); }
  inline NetworkInterface* getNetworkInterface() { return(getLuaVMContext(L)->iface); }
  NetworkStats* getNetwork() { return(getLuaVMContext(L)->network); }

  int load_script(char *script_path, NetworkInterface *iface);
  int run_loaded_script();

  /**
   * @brief Handling of request info of script.
   * @details Read from the request the parameters and put the GET parameters and the _SESSION parameters into the environment. 
   * Once all parameters have been load we running the script.
   * 
   * @param conn This structure contains handle for the individual connection.
   * @param request_info This structure contains information about the HTTP request.
   * @param script_path Full path of lua script.
   * @return The result of the execution of the script.
   */
  int handle_script_request(struct mg_connection *conn,
			    const struct mg_request_info *request_info, 
			    char *script_path, bool *attack_attempt, const char *user, const char *group,
			    const char *session_csrf, bool localuser);

  bool setParamsTable(lua_State* vm,
		      const struct mg_request_info *request_info,
		      const char* table_name,
		      const char* query) const;

  void luaRegister(lua_State *L, const char *class_name, luaL_Reg *class_methods);

  inline lua_State* getState() const { return(L); }

  bool switchInterface(struct lua_State *vm, const char *ifid, const char *observation_point_id, const char *user, const char * group, const char *session);
  void setInterface(const char * user, char * const ifname, u_int16_t ifname_len, bool * const is_allowed) const;
};

/**
 * @brief Push string value to table entry specify the key.
 * 
 * @param L The lua state.
 * @param key The key of hash table.
 * @param value The value of hash table.
 */
extern void lua_push_str_table_entry(lua_State *L, const char * const key, const char * const value);

/**
 * @brief Push null value to table entry specify the key.
 * 
 * @param L The lua state.
 * @param key The key of hash table.
 */
extern void lua_push_nil_table_entry(lua_State *L, const char *key);

/**
 * @brief Push int value to table entry specify the key.
 * 
 * @param L The lua state.
 * @param key The key of hash table.
 * @param value The value of hash table.
 */
extern void lua_push_uint64_table_entry(lua_State *L, const char *key, u_int64_t value);

/**
 * @brief Push int32 value to table entry specify the key.
 * 
 * @param L The lua state.
 * @param key The key of hash table.
 * @param value The value of hash table.
 */
void lua_push_int32_table_entry(lua_State *L, const char *key, int32_t value);

/**
 * @brief Push uint32 value to table entry specify the key.
 * 
 * @param L The lua state.
 * @param key The key of hash table.
 * @param value The value of hash table.
 */
void lua_push_uint32_table_entry(lua_State *L, const char *key, u_int32_t value);

/**
 * @brief Push bool value to table entry specify the key.
 * @details Using LUA_NUMBER (double: 64 bit) in place of LUA_INTEGER (ptrdiff_t: 32 or 64 bit
   * according to the platform) to handle big counters. (luaconf.h)
   * 
 * @param L The lua state.
 * @param key The key of hash table.
 * @param value The value of hash table.
 */
extern void lua_push_bool_table_entry(lua_State *L, const char *key, bool value);

/**
 * @brief Push float value to table entry specify the key.
 * 
 * @param L The lua state.
 * @param key The key of hash table.
 * @param value The value of hash table.
 */
extern void lua_push_float_table_entry(lua_State *L, const char *key, float value);

/**
 * @brief Push boolean value to table entry specify the key.
 * 
 * @param L The lua state.
 * @param key The key of hash table.
 * @param value The value of hash table.
 */
extern void lua_push_bool_table_entry(lua_State *L, const char *key, bool value);

int ntop_lua_check(lua_State* vm, const char* func, int pos, int expected_type);

/**
 * @brief Checks the lua stack after a C function is called
 * 
 * @param vm The lua state.
 * @param function_name The function name that triggered the error
 * @param val The return value
 */
extern int ntop_lua_return_value(lua_State* vm, const char *function_name, int val);

extern void get_host_vlan_info(char* lua_ip, char** host_ip,
			VLANid* vlan_id, char *buf, u_int buf_len);

#endif /* _LUA_H_ */