Make the "-G" flag take an argument. If no arugment is specified, or if

the argument is "fields", dump out a table of the fields, as we
currently do; if the argument is "protocols", dump out a table of the
protocols.

svn path=/trunk/; revision=5462
This commit is contained in:
Guy Harris 2002-05-14 10:15:12 +00:00
parent eb4f9a696c
commit e390d7e0cc
4 changed files with 69 additions and 23 deletions

View File

@ -1,7 +1,7 @@
/* proto.c /* proto.c
* Routines for protocol tree * Routines for protocol tree
* *
* $Id: proto.c,v 1.68 2002/05/09 23:50:28 gram Exp $ * $Id: proto.c,v 1.69 2002/05/14 10:15:10 guy Exp $
* *
* Ethereal - Network traffic analyzer * Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com> * By Gerald Combs <gerald@ethereal.com>
@ -2946,12 +2946,34 @@ proto_find_field_from_offset(proto_tree *tree, guint offset, tvbuff_t *tvb)
return offsearch.finfo; return offsearch.finfo;
} }
/* Dumps the protocols in the registration database to stdout. An independent
* program can take this output and format it into nice tables or HTML or
* whatever.
*
* There is one record per line. The fields are tab-delimited.
*
* Field 1 = protocol name
* Field 2 = protocol short name
* Field 3 = protocol filter name
*/
void
proto_registrar_dump_protocols(void)
{
protocol_t *protocol;
int i;
void *cookie;
for (i = proto_get_first_protocol(&cookie); i != -1;
i = proto_get_next_protocol(&cookie)) {
protocol = find_protocol_by_id(i);
printf("%s\t%s\t%s\n", protocol->name, protocol->short_name,
protocol->filter_name);
}
}
/* Dumps the contents of the registration database to stdout. An indepedent
* program can take this output and format it into nice tables or HTML or
/* Dumps the contents of the registration database to stdout. An indepedent program can take * whatever.
* this output and format it into nice tables or HTML or whatever.
* *
* There is one record per line. Each record is either a protocol or a header * There is one record per line. Each record is either a protocol or a header
* field, differentiated by the first field. The fields are tab-delimited. * field, differentiated by the first field. The fields are tab-delimited.
@ -2971,7 +2993,7 @@ proto_find_field_from_offset(proto_tree *tree, guint offset, tvbuff_t *tvb)
* Field 5 = parent protocol abbreviation * Field 5 = parent protocol abbreviation
*/ */
void void
proto_registrar_dump(void) proto_registrar_dump_fields(void)
{ {
header_field_info *hfinfo, *parent_hfinfo; header_field_info *hfinfo, *parent_hfinfo;
int i, len; int i, len;

View File

@ -1,7 +1,7 @@
/* proto.h /* proto.h
* Definitions for protocol display * Definitions for protocol display
* *
* $Id: proto.h,v 1.31 2002/04/29 07:55:31 guy Exp $ * $Id: proto.h,v 1.32 2002/05/14 10:15:10 guy Exp $
* *
* Ethereal - Network traffic analyzer * Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com> * By Gerald Combs <gerald@ethereal.com>
@ -554,8 +554,11 @@ extern gboolean proto_check_for_protocol_or_field(proto_tree* tree, int id);
* tree. */ * tree. */
extern GPtrArray* proto_get_finfo_ptr_array(proto_tree *tree, int hfindex); extern GPtrArray* proto_get_finfo_ptr_array(proto_tree *tree, int hfindex);
/* Dumps a glossary of the protocol registrations to STDOUT */
extern void proto_registrar_dump_protocols(void);
/* Dumps a glossary of the protocol and field registrations to STDOUT */ /* Dumps a glossary of the protocol and field registrations to STDOUT */
extern void proto_registrar_dump(void); extern void proto_registrar_dump_fields(void);
/* Points to the first element of an array of Booleans, indexed by /* Points to the first element of an array of Booleans, indexed by
a subtree item type; that array element is TRUE if subtrees of a subtree item type; that array element is TRUE if subtrees of

View File

@ -1,6 +1,6 @@
/* main.c /* main.c
* *
* $Id: main.c,v 1.247 2002/05/03 03:30:15 guy Exp $ * $Id: main.c,v 1.248 2002/05/14 10:15:12 guy Exp $
* *
* Ethereal - Network traffic analyzer * Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com> * By Gerald Combs <gerald@ethereal.com>
@ -1254,17 +1254,19 @@ main(int argc, char *argv[])
#endif #endif
/* Register all dissectors; we must do this before checking for the /* Register all dissectors; we must do this before checking for the
"-G" flag, as the "-G" flag dumps a list of fields registered "-G" flag, as the "-G" flag dumps information registered by the
by the dissectors, and we must do it before we read the preferences, dissectors, and we must do it before we read the preferences, in
in case any dissectors register preferences. */ case any dissectors register preferences. */
epan_init(PLUGIN_DIR,register_all_protocols,register_all_protocol_handoffs); epan_init(PLUGIN_DIR,register_all_protocols,register_all_protocol_handoffs);
/* Now register the preferences for any non-dissector modules. /* Now register the preferences for any non-dissector modules.
We must do that before we read the preferences as well. */ We must do that before we read the preferences as well. */
prefs_register_modules(); prefs_register_modules();
/* If invoked with the "-G" flag, we dump out a glossary of /* If invoked with the "-G" flag, we dump out information based on
display filter symbols. the argument to the "-G" flag; if no argument is specified,
for backwards compatibility we dump out a glossary of display
filter symbols.
We must do this before calling "gtk_init()", because "gtk_init()" We must do this before calling "gtk_init()", because "gtk_init()"
tries to open an X display, and we don't want to have to do any X tries to open an X display, and we don't want to have to do any X
@ -1281,9 +1283,19 @@ main(int argc, char *argv[])
you must give it as "-G", nothing more, nothing less; you must give it as "-G", nothing more, nothing less;
any arguments after the "-G" flag will not be used. */ the first argument after the "-G" flag, if present, will be used
to specify the information to dump;
arguments after that will not be used. */
if (argc >= 2 && strcmp(argv[1], "-G") == 0) { if (argc >= 2 && strcmp(argv[1], "-G") == 0) {
proto_registrar_dump(); if (argc == 2)
proto_registrar_dump_fields();
else {
if (strcmp(argv[2], "fields") == 0)
proto_registrar_dump_fields();
else if (strcmp(argv[2], "protocols") == 0)
proto_registrar_dump_protocols();
}
exit(0); exit(0);
} }

View File

@ -1,6 +1,6 @@
/* tethereal.c /* tethereal.c
* *
* $Id: tethereal.c,v 1.135 2002/03/31 20:56:59 guy Exp $ * $Id: tethereal.c,v 1.136 2002/05/14 10:15:09 guy Exp $
* *
* Ethereal - Network traffic analyzer * Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com> * By Gerald Combs <gerald@ethereal.com>
@ -321,22 +321,31 @@ main(int argc, char *argv[])
char badopt; char badopt;
/* Register all dissectors; we must do this before checking for the /* Register all dissectors; we must do this before checking for the
"-G" flag, as the "-G" flag dumps a list of fields registered "-G" flag, as the "-G" flag dumps information registered by the
by the dissectors, and we must do it before we read the preferences, dissectors, and we must do it before we read the preferences, in
in case any dissectors register preferences. */ case any dissectors register preferences. */
epan_init(PLUGIN_DIR,register_all_protocols,register_all_protocol_handoffs); epan_init(PLUGIN_DIR,register_all_protocols,register_all_protocol_handoffs);
/* Now register the preferences for any non-dissector modules. /* Now register the preferences for any non-dissector modules.
We must do that before we read the preferences as well. */ We must do that before we read the preferences as well. */
prefs_register_modules(); prefs_register_modules();
/* If invoked with the "-G" flag, we dump out a glossary of /* If invoked with the "-G" flag, we dump out information based on
display filter symbols. the argument to the "-G" flag; if no argument is specified,
for backwards compatibility we dump out a glossary of display
filter symbols.
We do this here to mirror what happens in the GTK+ version, although We do this here to mirror what happens in the GTK+ version, although
it's not necessary here. */ it's not necessary here. */
if (argc >= 2 && strcmp(argv[1], "-G") == 0) { if (argc >= 2 && strcmp(argv[1], "-G") == 0) {
proto_registrar_dump(); if (argc == 2)
proto_registrar_dump_fields();
else {
if (strcmp(argv[2], "fields") == 0)
proto_registrar_dump_fields();
else if (strcmp(argv[2], "protocols") == 0)
proto_registrar_dump_protocols();
}
exit(0); exit(0);
} }