diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
commit | e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch) | |
tree | 68cb5ef9081156392f1dd62a00c6ccc1451b93df /epan/wslua/wslua_wtap.c | |
parent | Initial commit. (diff) | |
download | wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.tar.xz wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.zip |
Adding upstream version 4.2.2.upstream/4.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | epan/wslua/wslua_wtap.c | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/epan/wslua/wslua_wtap.c b/epan/wslua/wslua_wtap.c new file mode 100644 index 0000000..524ed7c --- /dev/null +++ b/epan/wslua/wslua_wtap.c @@ -0,0 +1,160 @@ +/* + * wslua_wtap.c + * + * Wireshark's interface to the Lua Programming Language + * for various libwiretap utility functions. + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "config.h" + +/* WSLUA_MODULE Wtap Wtap Functions For Handling Capture File Types */ + +#include <limits.h> + +#include "wslua.h" +#include <wiretap/wtap.h> + +/* + * Solely for the function that gets the table of backwards-compatibility + * Lua names for file types/subtypes. + */ +#include <wiretap/wtap-int.h> + +WSLUA_FUNCTION wslua_wtap_file_type_subtype_description(lua_State* LS) { + /* + Get a string describing a capture file type, given a filetype + value for that file type. + + @since 3.2.12, 3.4.4 + */ +#define WSLUA_ARG_wtap_file_type_subtype_description_FILETYPE 1 /* The type for which the description is to be fetched - a number returned by `wtap_name_to_file_type_subtype()`. */ + lua_Number filetype = luaL_checknumber(LS,WSLUA_ARG_wtap_file_type_subtype_description_FILETYPE); + /* wtap_file_type_subtype_description()'s name isn't really descriptive. */ + if (filetype > INT_MAX) { + /* Too big. */ + lua_pushnil(LS); + } else { + const gchar* str = wtap_file_type_subtype_description((int)filetype); + if (str == NULL) + lua_pushnil(LS); + else + lua_pushstring(LS,str); + } + WSLUA_RETURN(1); /* The description of the file type with that filetype value, or nil if there is no such file type. */ +} + +WSLUA_FUNCTION wslua_wtap_file_type_subtype_name(lua_State* LS) { + /* + Get a string giving the name for a capture file type, given a filetype + value for that file type. + + @since 3.2.12, 3.4.4 + */ +#define WSLUA_ARG_wtap_file_type_subtype_name_FILETYPE 1 /* The type for which the name is to be fetched - a number returned by `wtap_name_to_file_type_subtype()`. */ + lua_Number filetype = luaL_checknumber(LS,WSLUA_ARG_wtap_file_type_subtype_name_FILETYPE); + /* wtap_file_type_subtype_description()'s name isn't really descriptive. */ + if (filetype > INT_MAX) { + /* Too big. */ + lua_pushnil(LS); + } else { + const gchar* str = wtap_file_type_subtype_name((int)filetype); + if (str == NULL) + lua_pushnil(LS); + else + lua_pushstring(LS,str); + } + WSLUA_RETURN(1); /* The name of the file type with that filetype value, or nil if there is no such file type. */ +} + +WSLUA_FUNCTION wslua_wtap_name_to_file_type_subtype(lua_State* LS) { + /* + Get a filetype value for a file type, given the name for that + file type. + + @since 3.2.12, 3.4.4 + */ +#define WSLUA_ARG_wtap_name_to_file_type_subtype_NAME 1 /* The name of a file type. */ + const char* name = luaL_checkstring(LS,WSLUA_ARG_wtap_name_to_file_type_subtype_NAME); + lua_Number filetype = wtap_name_to_file_type_subtype(name); + if (filetype == -1) + lua_pushnil(LS); + else + lua_pushnumber(LS,filetype); + WSLUA_RETURN(1); /* The filetype value for the file type with that name, or nil if there is no such file type. */ +} + +WSLUA_FUNCTION wslua_wtap_pcap_file_type_subtype(lua_State* LS) { + /* + Get the filetype value for pcap files. + + @since 3.2.12, 3.4.4 + */ + lua_Number filetype = wtap_pcap_file_type_subtype(); + lua_pushnumber(LS,filetype); + WSLUA_RETURN(1); /* The filetype value for pcap files. */ +} + +WSLUA_FUNCTION wslua_wtap_pcap_nsec_file_type_subtype(lua_State* LS) { + /* + Get the filetype value for nanosecond-resolution pcap files. + + @since 3.2.12, 3.4.4 + */ + lua_Number filetype = wtap_pcap_nsec_file_type_subtype(); + lua_pushnumber(LS,filetype); + WSLUA_RETURN(1); /* The filetype value for nanosecond-resolution pcap files. */ +} + +WSLUA_FUNCTION wslua_wtap_pcapng_file_type_subtype(lua_State* LS) { + /* + Get the filetype value for pcapng files. + + @since 3.2.12, 3.4.4 + */ + lua_Number filetype = wtap_pcapng_file_type_subtype(); + lua_pushnumber(LS,filetype); + WSLUA_RETURN(1); /* The filetype value for pcapng files. */ +} + +/* + * init.wslua-only function to return a table to assign to + * wtap_filetypes. + */ +extern void wslua_init_wtap_filetypes(lua_State* LS) { + /* Get the GArray from which we initialize this. */ + const GArray *table = get_backwards_compatibility_lua_table(); + + /* + * Create the table; it's indexted by strings, not numbers, + * so none of the entries will be in a sequence. + */ + lua_createtable(LS,0,table->len); + for (guint i = 0; i < table->len; i++) { + struct backwards_compatibiliity_lua_name *entry; + + entry = &g_array_index(table, + struct backwards_compatibiliity_lua_name, i); + /* + * Push the name and the ft, in order, so that the ft, + * which should be the value at the top of the stack, + * is at the top of the stack, and the name, which should + * be the value just below that, is the value just below + * it. + */ + lua_pushstring(LS, entry->name); + lua_pushnumber(LS, entry->ft); + /* + * The -3 is the index, relative to the top of the stack, of + * the table; the two elements on top of it are the ft and + * the name, so it's -3. + */ + lua_settable(LS, -3); + } + lua_setglobal(LS, "wtap_filetypes"); +} |