sharkd: Add "capture_types" and "encap_types" to "info" method
Add two new fields `capture_types` and `encap_types` to the output of `sharkd`'s `info` method which replicate the info displayed by `editcap -F` and `editcap -T`, respectively.
This commit is contained in:
parent
7e7cd29372
commit
4b9d0d5c10
|
@ -72,6 +72,7 @@
|
||||||
#include <epan/maxmind_db.h>
|
#include <epan/maxmind_db.h>
|
||||||
|
|
||||||
#include <wsutil/pint.h>
|
#include <wsutil/pint.h>
|
||||||
|
#include <wsutil/strnatcmp.h>
|
||||||
#include <wsutil/strtoi.h>
|
#include <wsutil/strtoi.h>
|
||||||
|
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
|
@ -912,6 +913,63 @@ sharkd_follower_visit_cb(const void *key _U_, void *value, void *user_data _U_)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sharkd_session_print_capture_types(void)
|
||||||
|
{
|
||||||
|
guint i;
|
||||||
|
GArray *writable_type_subtypes;
|
||||||
|
writable_type_subtypes = wtap_get_writable_file_types_subtypes(FT_SORT_BY_NAME);
|
||||||
|
for (i = 0; i < writable_type_subtypes->len; i++) {
|
||||||
|
int ft = g_array_index(writable_type_subtypes, int, i);
|
||||||
|
sharkd_json_object_open(NULL);
|
||||||
|
sharkd_json_value_string("name", wtap_file_type_subtype_name(ft));
|
||||||
|
sharkd_json_value_string("description", wtap_file_type_subtype_description(ft));
|
||||||
|
sharkd_json_object_close();
|
||||||
|
}
|
||||||
|
g_array_free(writable_type_subtypes, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct encap_type_info
|
||||||
|
{
|
||||||
|
const char *name;
|
||||||
|
const char *description;
|
||||||
|
};
|
||||||
|
|
||||||
|
static gint
|
||||||
|
encap_type_info_nat_compare(gconstpointer a, gconstpointer b)
|
||||||
|
{
|
||||||
|
return ws_ascii_strnatcmp(((const struct encap_type_info *)a)->name,
|
||||||
|
((const struct encap_type_info *)b)->name);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
encap_type_info_visit(gpointer data, gpointer user_data _U_)
|
||||||
|
{
|
||||||
|
sharkd_json_object_open(NULL);
|
||||||
|
sharkd_json_value_string("name", ((struct encap_type_info *)data)->name);
|
||||||
|
sharkd_json_value_string("description", ((struct encap_type_info *)data)->description);
|
||||||
|
sharkd_json_object_close();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sharkd_session_print_encap_types(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
struct encap_type_info *encaps;
|
||||||
|
GSList *list = NULL;
|
||||||
|
encaps = g_new(struct encap_type_info, WTAP_NUM_ENCAP_TYPES);
|
||||||
|
for (i = 0; i < WTAP_NUM_ENCAP_TYPES; i++) {
|
||||||
|
encaps[i].name = wtap_encap_name(i);
|
||||||
|
if (encaps[i].name != NULL) {
|
||||||
|
encaps[i].description = wtap_encap_description(i);
|
||||||
|
list = g_slist_insert_sorted(list, &encaps[i], encap_type_info_nat_compare);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
g_slist_foreach(list, encap_type_info_visit, NULL);
|
||||||
|
g_slist_free(list);
|
||||||
|
g_free(encaps);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sharkd_session_process_info()
|
* sharkd_session_process_info()
|
||||||
*
|
*
|
||||||
|
@ -962,6 +1020,13 @@ sharkd_follower_visit_cb(const void *key _U_, void *value, void *user_data _U_)
|
||||||
* 'name' - tap name
|
* 'name' - tap name
|
||||||
* 'tap' - sharkd tap-name
|
* 'tap' - sharkd tap-name
|
||||||
*
|
*
|
||||||
|
* (m) capture_types - available capture types, array of object with attributes:
|
||||||
|
* 'name' - capture type name
|
||||||
|
* 'description' - capture type description
|
||||||
|
*
|
||||||
|
* (m) encap_types - available encapsulation types, array of object with attributes:
|
||||||
|
* 'name' - encapsulation type name
|
||||||
|
* 'description' - encapsulation type description
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
sharkd_session_process_info(void)
|
sharkd_session_process_info(void)
|
||||||
|
@ -1007,6 +1072,14 @@ sharkd_session_process_info(void)
|
||||||
sharkd_json_value_string(NULL, ftype_name((ftenum_t) i));
|
sharkd_json_value_string(NULL, ftype_name((ftenum_t) i));
|
||||||
sharkd_json_array_close();
|
sharkd_json_array_close();
|
||||||
|
|
||||||
|
sharkd_json_array_open("capture_types");
|
||||||
|
sharkd_session_print_capture_types();
|
||||||
|
sharkd_json_array_close();
|
||||||
|
|
||||||
|
sharkd_json_array_open("encap_types");
|
||||||
|
sharkd_session_print_encap_types();
|
||||||
|
sharkd_json_array_close();
|
||||||
|
|
||||||
sharkd_json_value_string("version", get_ws_vcs_version_info_short());
|
sharkd_json_value_string("version", get_ws_vcs_version_info_short());
|
||||||
|
|
||||||
sharkd_json_array_open("nstat");
|
sharkd_json_array_open("nstat");
|
||||||
|
|
|
@ -106,6 +106,8 @@ class TestSharkd:
|
||||||
def test_sharkd_req_info(self, check_sharkd_session):
|
def test_sharkd_req_info(self, check_sharkd_session):
|
||||||
matchTapNameList = MatchList(
|
matchTapNameList = MatchList(
|
||||||
{"tap": MatchAny(str), "name": MatchAny(str)})
|
{"tap": MatchAny(str), "name": MatchAny(str)})
|
||||||
|
matchNameDescriptionList = MatchList(
|
||||||
|
{"name": MatchAny(str), "description": MatchAny(str)})
|
||||||
check_sharkd_session((
|
check_sharkd_session((
|
||||||
{"jsonrpc":"2.0", "id":1, "method":"info"},
|
{"jsonrpc":"2.0", "id":1, "method":"info"},
|
||||||
), (
|
), (
|
||||||
|
@ -121,6 +123,8 @@ class TestSharkd:
|
||||||
"taps": matchTapNameList,
|
"taps": matchTapNameList,
|
||||||
"follow": matchTapNameList,
|
"follow": matchTapNameList,
|
||||||
"ftypes": MatchList(MatchAny(str)),
|
"ftypes": MatchList(MatchAny(str)),
|
||||||
|
"capture_types": matchNameDescriptionList,
|
||||||
|
"encap_types": matchNameDescriptionList,
|
||||||
"nstat": matchTapNameList,
|
"nstat": matchTapNameList,
|
||||||
}},
|
}},
|
||||||
))
|
))
|
||||||
|
|
Loading…
Reference in New Issue