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>
This commit is contained in:
Jakub Zawadzki 2017-05-15 15:07:34 +02:00 committed by Anders Broman
parent bb6e31d8cc
commit 400bff055f
5 changed files with 79 additions and 42 deletions

View File

@ -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

View File

@ -130,6 +130,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').

View File

@ -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;

View File

@ -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:

View File

@ -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);