summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Zawadzki <darkjames-ws@darkjames.pl>2017-05-15 15:07:34 +0200
committerAnders Broman <a.broman58@gmail.com>2017-05-16 04:27:05 +0000
commit400bff055f697534ca0f1de034c4e38f13454a09 (patch)
treecc1834380d8ff0cb7e82a99de48cb1ab475113db
parentbb6e31d8cce2d8b1c56722a816ef608555ece45f (diff)
downloadwireshark-400bff055f697534ca0f1de034c4e38f13454a09.tar.gz
sharkd: export uat records.
Move gtk's fld_tostr() to epan API as uat_fld_tostr. Change-Id: I01e3b66ca9ea3cd1e2e06e2122190ee42b9ad44b Reviewed-on: https://code.wireshark.org/review/21664 Petri-Dish: Jakub Zawadzki <darkjames-ws@darkjames.pl> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Anders Broman <a.broman58@gmail.com>
-rw-r--r--debian/libwireshark0.symbols1
-rw-r--r--epan/uat-int.h6
-rw-r--r--epan/uat.c36
-rw-r--r--sharkd_session.c32
-rw-r--r--ui/gtk/uat_gui.c46
5 files changed, 79 insertions, 42 deletions
diff --git a/debian/libwireshark0.symbols b/debian/libwireshark0.symbols
index f7bdddbfd3..07839a867e 100644
--- a/debian/libwireshark0.symbols
+++ b/debian/libwireshark0.symbols
@@ -1683,6 +1683,7 @@ libwireshark.so.0 libwireshark0 #MINVER#
uat_fld_chk_str_isdigit@Base 1.9.1
uat_fld_chk_str_isprint@Base 1.9.1
uat_fld_chk_str_isxdigit@Base 1.9.1
+ uat_fld_tostr@Base 2.3.0
uat_foreach_table@Base 1.9.1
uat_get_actual_filename@Base 1.12.0~rc1
uat_get_table_by_name@Base 1.9.1
diff --git a/epan/uat-int.h b/epan/uat-int.h
index 2624779e2a..c36a5c136e 100644
--- a/epan/uat-int.h
+++ b/epan/uat-int.h
@@ -131,6 +131,12 @@ gboolean uat_save(uat_t *uat, char **error);
void uat_load_all(void);
/**
+ * Dump given UAT record to string in form, which can be later loaded with uat_load_str().
+ */
+WS_DLL_PUBLIC
+char *uat_fld_tostr(void *rec, uat_field_t *f);
+
+/**
* Exposes the array of valid records to the UAT consumer (dissectors), updating
* the contents of 'data_ptr' and 'num_items_ptr' (see 'uat_new').
*/
diff --git a/epan/uat.c b/epan/uat.c
index 385779a7c5..3c1a0ec7dc 100644
--- a/epan/uat.c
+++ b/epan/uat.c
@@ -262,6 +262,42 @@ uat_t* uat_get_table_by_name(const char* name) {
return NULL;
}
+char *uat_fld_tostr(void *rec, uat_field_t *f) {
+ guint len;
+ char *ptr;
+ char *out;
+
+ f->cb.tostr(rec, &ptr, &len, f->cbdata.tostr, f->fld_data);
+
+ switch(f->mode) {
+ case PT_TXTMOD_NONE:
+ case PT_TXTMOD_STRING:
+ case PT_TXTMOD_ENUM:
+ case PT_TXTMOD_FILENAME:
+ case PT_TXTMOD_DIRECTORYNAME:
+ out = g_strndup(ptr, len);
+ break;
+ case PT_TXTMOD_HEXBYTES: {
+ GString *s = g_string_sized_new( len*2 + 1 );
+ guint i;
+
+ for (i=0; i<len;i++) g_string_append_printf(s, "%.2X", ((const guint8*)ptr)[i]);
+
+ out = g_strdup(s->str);
+
+ g_string_free(s, TRUE);
+ break;
+ }
+ default:
+ g_assert_not_reached();
+ out = NULL;
+ break;
+ }
+
+ g_free(ptr);
+ return out;
+}
+
static void putfld(FILE* fp, void* rec, uat_field_t* f) {
guint fld_len;
char* fld_ptr;
diff --git a/sharkd_session.c b/sharkd_session.c
index 16655e63f2..591aa5ce02 100644
--- a/sharkd_session.c
+++ b/sharkd_session.c
@@ -3128,6 +3128,38 @@ sharkd_session_process_dumpconf_cb(pref_t *pref, gpointer d)
}
case PREF_UAT:
+ {
+ uat_t *uat = prefs_get_uat_value(pref);
+ guint idx;
+
+ printf("\"t\":[");
+ for (idx = 0; idx < uat->raw_data->len; idx++)
+ {
+ void *rec = UAT_INDEX_PTR(uat, idx);
+ guint colnum;
+
+ if (idx)
+ printf(",");
+
+ printf("[");
+ for (colnum = 0; colnum < uat->ncols; colnum++)
+ {
+ char *str = uat_fld_tostr(rec, &(uat->fields[colnum]));
+
+ if (colnum)
+ printf(",");
+
+ json_puts_string(str);
+ g_free(str);
+ }
+
+ printf("]");
+ }
+
+ printf("]");
+ break;
+ }
+
case PREF_COLOR:
case PREF_CUSTOM:
case PREF_STATIC_TEXT:
diff --git a/ui/gtk/uat_gui.c b/ui/gtk/uat_gui.c
index aea06302cb..13c89489d9 100644
--- a/ui/gtk/uat_gui.c
+++ b/ui/gtk/uat_gui.c
@@ -167,44 +167,6 @@ static void limit_buttons(uat_t *uat) {
gtk_widget_set_sensitive (uat->rep->bt_clear, FALSE);
}
-static char *fld_tostr(void *rec, uat_field_t *f) {
- guint len;
- char *ptr;
- char *out;
-
- f->cb.tostr(rec, &ptr, &len, f->cbdata.tostr, f->fld_data);
-
- switch(f->mode) {
- case PT_TXTMOD_NONE:
- case PT_TXTMOD_STRING:
- case PT_TXTMOD_ENUM:
- case PT_TXTMOD_FILENAME:
- case PT_TXTMOD_DIRECTORYNAME:
- out = g_strndup(ptr, len);
- break;
- case PT_TXTMOD_HEXBYTES: {
- GString *s = g_string_sized_new( len*2 + 1 );
- guint i;
-
- for (i=0; i<len;i++) g_string_append_printf(s, "%.2X", ((const guint8*)ptr)[i]);
-
- out = g_strdup(s->str);
-
- g_string_free(s, TRUE);
- break;
- }
- default:
- g_assert_not_reached();
- out = NULL;
- break;
- }
-
- g_free(ptr);
- return out;
-}
-
-
-
static void append_row(uat_t *uat, guint idx) {
void *rec = UAT_INDEX_PTR(uat, idx);
uat_field_t *f = uat->fields;
@@ -216,7 +178,7 @@ static void append_row(uat_t *uat, guint idx) {
gtk_list_store_insert_before(uat->rep->list_store, &iter, NULL);
for ( colnum = 0; colnum < uat->ncols; colnum++ ) {
- tmp_str = fld_tostr(rec, &(f[colnum]));
+ tmp_str = uat_fld_tostr(rec, &(f[colnum]));
gtk_list_store_set(uat->rep->list_store, &iter, colnum, tmp_str, -1);
g_free(tmp_str);
}
@@ -238,7 +200,7 @@ static void reset_row(uat_t *uat, guint idx) {
}
for ( colnum = 0; colnum < uat->ncols; colnum++ ) {
- tmp_str = fld_tostr(rec, &(f[colnum]));
+ tmp_str = uat_fld_tostr(rec, &(f[colnum]));
gtk_list_store_set(uat->rep->list_store, &iter, colnum, tmp_str, -1);
g_free(tmp_str);
}
@@ -511,7 +473,7 @@ static void uat_edit_dialog(uat_t *uat, gint row, gboolean copy) {
for ( colnum = 0; colnum < uat->ncols; colnum++ ) {
GtkWidget *entry, *label, *event_box;
- char *text = fld_tostr(dd->rec, &(f[colnum]));
+ char *text = uat_fld_tostr(dd->rec, &(f[colnum]));
char *label_text;
gchar *fc_filename;
@@ -681,7 +643,7 @@ static void uat_del_dlg(uat_t *uat, int idx) {
for ( colnum = 0; colnum < uat->ncols; colnum++ ) {
GtkWidget *label;
- char *text = fld_tostr(rec, &(f[colnum]));
+ char *text = uat_fld_tostr(rec, &(f[colnum]));
tmp_str = g_strdup_printf("%s:", f[colnum].title);
label = gtk_label_new(tmp_str);