diff options
author | Guy Harris <guy@alum.mit.edu> | 2014-11-14 10:51:40 -0800 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2014-11-14 18:52:06 +0000 |
commit | 4d3c4c4f12726404549e5c8a99439b5a371da282 (patch) | |
tree | e31b8a12aa7d47758a4c125da3b74f5f394527a8 /epan/stat_tap_ui.c | |
parent | 0dae81b6d5a888a066f1c6c66c248617d045ea0c (diff) |
Rename stat_cmd_args.[ch] to stat_tap_ui.[ch].
The intent is to handle more than just command-line arguments; reflect that.
Change-Id: Ia10efda85a9d11c6579d1bec6f789cee30d9e825
Reviewed-on: https://code.wireshark.org/review/5304
Reviewed-by: Guy Harris <guy@alum.mit.edu>
Diffstat (limited to 'epan/stat_tap_ui.c')
-rw-r--r-- | epan/stat_tap_ui.c | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/epan/stat_tap_ui.c b/epan/stat_tap_ui.c new file mode 100644 index 0000000000..263fd330a9 --- /dev/null +++ b/epan/stat_tap_ui.c @@ -0,0 +1,142 @@ +/* stat_tap_ui.c + * Routines to register UI information for stats + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "config.h" + +#include <stdio.h> + +#include <string.h> + +#include <glib.h> + +#include <epan/stat_tap_ui.h> + +/* structure to keep track of what stats have registered command-line + arguments. + */ +typedef struct _stat_cmd_arg { + stat_tap_ui *ui; + const char *cmd; + void (*func)(const char *arg, void* userdata); + void* userdata; +} stat_cmd_arg; + +static GSList *stat_cmd_arg_list=NULL; + +/* structure to keep track of what stats have been specified on the + command line. + */ +typedef struct { + stat_cmd_arg *sca; + char *arg; +} stat_requested; +static GSList *stats_requested = NULL; + +/* ********************************************************************** + * Function called from stat to register the stat's command-line argument + * and initialization routine + * ********************************************************************** */ +static gint +sort_by_name(gconstpointer a, gconstpointer b) +{ + return strcmp(((const stat_cmd_arg *)a)->cmd, ((const stat_cmd_arg *)b)->cmd); +} + +void +register_stat_tap_ui(stat_tap_ui *ui, void *userdata) +{ + stat_cmd_arg *newsca; + + newsca=(stat_cmd_arg *)g_malloc(sizeof(stat_cmd_arg)); + newsca->cmd=ui->cli_string; + newsca->func=ui->tap_init_cb; + newsca->userdata=userdata; + stat_cmd_arg_list=g_slist_insert_sorted(stat_cmd_arg_list, newsca, sort_by_name); +} + +/* ********************************************************************** + * Function called for a stat command-line argument + * ********************************************************************** */ +gboolean +process_stat_cmd_arg(char *optstr) +{ + GSList *entry; + stat_cmd_arg *sca; + stat_requested *tr; + + for(entry=stat_cmd_arg_list;entry;entry=g_slist_next(entry)){ + sca=(stat_cmd_arg *)entry->data; + if(!strncmp(sca->cmd,optstr,strlen(optstr))){ + tr=(stat_requested *)g_malloc(sizeof (stat_requested)); + tr->sca = sca; + tr->arg=g_strdup(optstr); + stats_requested=g_slist_append(stats_requested, tr); + return TRUE; + } + } + return FALSE; +} + +/* ********************************************************************** + * Function to list all possible tap command-line arguments + * ********************************************************************** */ +void +list_stat_cmd_args(void) +{ + GSList *entry; + stat_cmd_arg *sca; + + for(entry=stat_cmd_arg_list;entry;entry=g_slist_next(entry)){ + sca=(stat_cmd_arg *)entry->data; + fprintf(stderr," %s\n",sca->cmd); + } +} + +/* ********************************************************************** + * Function to process stats requested with command-line arguments + * ********************************************************************** */ +void +start_requested_stats(void) +{ + stat_requested *sr; + + while(stats_requested){ + sr=(stat_requested *)stats_requested->data; + (*sr->sca->func)(sr->arg,sr->sca->userdata); + g_free(sr->arg); + g_free(sr); + stats_requested=g_slist_remove(stats_requested, sr); + } +} + +/* + * Editor modelines + * + * Local Variables: + * c-basic-offset: 4 + * tab-width: 8 + * indent-tabs-mode: nil + * End: + * + * ex: set shiftwidth=4 tabstop=8 expandtab: + * :indentSize=4:tabSize=8:noTabs=true: + */ |