31 static const char htp_tx[] =
"suricata:http:tx";
37 static int LuaHttpGetTx(
lua_State *luastate)
54 luaL_getmetatable(luastate, htp_tx);
55 lua_setmetatable(luastate, -2);
60 static int LuaHttpGetRequestHost(
lua_State *luastate)
64 lua_pushnil(luastate);
68 const struct bstr *host = htp_tx_request_hostname(txptr);
70 lua_pushnil(luastate);
77 static int LuaHttpGetRequestUriRaw(
lua_State *luastate)
81 lua_pushnil(luastate);
85 const struct bstr *uri = htp_tx_request_uri(txptr);
87 lua_pushnil(luastate);
94 static int LuaHttpGetRequestUriNormalized(
lua_State *luastate)
98 lua_pushnil(luastate);
102 bstr *request_uri_normalized = (bstr *)htp_tx_normalized_uri(txptr);
104 if (request_uri_normalized == NULL || bstr_ptr(request_uri_normalized) == NULL ||
105 bstr_len(request_uri_normalized) == 0)
109 luastate, bstr_ptr(request_uri_normalized), bstr_len(request_uri_normalized));
112 static int LuaHttpGetRequestLine(
lua_State *luastate)
116 lua_pushnil(luastate);
121 const struct bstr *line = htp_tx_request_line(txptr);
123 lua_pushnil(luastate);
130 static int LuaHttpGetResponseLine(
lua_State *luastate)
134 lua_pushnil(luastate);
139 const struct bstr *line = htp_tx_response_line(txptr);
141 lua_pushnil(luastate);
148 static int LuaHttpGetHeader(
lua_State *luastate,
int dir)
152 lua_pushnil(luastate);
163 const htp_header_t *h = NULL;
166 h = htp_tx_request_header(txptr,
name);
168 h = htp_tx_response_header(txptr,
name);
171 if (h == NULL || htp_header_value_len(h) == 0) {
178 static int LuaHttpGetRequestHeader(
lua_State *luastate)
180 return LuaHttpGetHeader(luastate, 0 );
183 static int LuaHttpGetResponseHeader(
lua_State *luastate)
185 return LuaHttpGetHeader(luastate, 1 );
188 static int LuaHttpGetRawHeaders(
lua_State *luastate,
int dir)
192 lua_pushnil(luastate);
205 if (raw == NULL || raw_len == 0)
211 static int LuaHttpGetRawRequestHeaders(
lua_State *luastate)
213 return LuaHttpGetRawHeaders(luastate, 0);
216 static int LuaHttpGetRawResponseHeaders(
lua_State *luastate)
218 return LuaHttpGetRawHeaders(luastate, 1);
221 static int LuaHttpGetHeaders(
lua_State *luastate,
int dir)
225 lua_pushnil(luastate);
230 const htp_headers_t *table = htp_tx_request_headers(txptr);
232 table = htp_tx_response_headers(txptr);
234 lua_pushnil(luastate);
238 lua_newtable(luastate);
239 const htp_header_t *h = NULL;
241 size_t no_of_headers = htp_headers_size(table);
242 for (; i < no_of_headers; i++) {
243 h = htp_headers_get_index(table, i);
246 lua_settable(luastate, -3);
252 static int LuaHttpGetRequestHeaders(
lua_State *luastate)
254 return LuaHttpGetHeaders(luastate, 0);
258 static int LuaHttpGetResponseHeaders(
lua_State *luastate)
260 return LuaHttpGetHeaders(luastate, 1);
263 static int LuaHttpGetBody(
lua_State *luastate,
int dir)
267 lua_pushnil(luastate);
280 if (body->
first == NULL) {
286 lua_newtable(luastate);
287 while (chunk != NULL) {
288 lua_pushinteger(luastate, index);
290 const uint8_t *data = NULL;
291 uint32_t data_len = 0;
295 lua_settable(luastate, -3);
302 lua_pushinteger(luastate, body->
first->
sbseg.stream_offset);
303 lua_pushinteger(luastate, body->
last->
sbseg.stream_offset + body->
last->
sbseg.segment_len);
310 static int LuaHttpGetRequestBody(
lua_State *luastate)
312 return LuaHttpGetBody(luastate, 0);
315 static int LuaHttpGetResponseBody(
lua_State *luastate)
317 return LuaHttpGetBody(luastate, 1);
320 static const struct luaL_Reg txlib[] = {
322 {
"request_header", LuaHttpGetRequestHeader},
323 {
"response_header", LuaHttpGetResponseHeader},
324 {
"request_line", LuaHttpGetRequestLine},
325 {
"response_line", LuaHttpGetResponseLine},
326 {
"request_headers_raw", LuaHttpGetRawRequestHeaders},
327 {
"response_headers_raw", LuaHttpGetRawResponseHeaders},
328 {
"request_uri_raw", LuaHttpGetRequestUriRaw},
329 {
"request_uri_normalized", LuaHttpGetRequestUriNormalized},
330 {
"request_headers", LuaHttpGetRequestHeaders},
331 {
"response_headers", LuaHttpGetResponseHeaders},
332 {
"request_host", LuaHttpGetRequestHost},
333 {
"request_body", LuaHttpGetRequestBody},
334 {
"response_body", LuaHttpGetResponseBody},
339 static const struct luaL_Reg htplib[] = {
341 {
"get_tx", LuaHttpGetTx },
348 luaL_newmetatable(luastate, htp_tx);
349 lua_pushvalue(luastate, -1);
350 lua_setfield(luastate, -2,
"__index");
351 luaL_setfuncs(luastate, txlib, 0);
352 luaL_newlib(luastate, htplib);