/* proto.h
* Definitions for protocol display
*
- * $Id: proto.h,v 1.10 1999/09/12 06:11:38 guy Exp $
+ * $Id: proto.h,v 1.21 2000/01/22 04:59:55 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
#define __PROTO_H__
#ifdef HAVE_SYS_TIME_H
- #ifndef _SYS_TIME_H
- #include <sys/time.h>
- #endif
+# ifndef _SYS_TIME_H
+# include <sys/time.h>
+# endif
#endif
#ifdef HAVE_WINSOCK_H
-#include <winsock.h>
+# include <winsock.h>
+#endif
+
+#ifndef __IPV4_H__
+#include "ipv4.h"
#endif
/* needs glib.h */
* need this macro */
#define VALS(x) (struct value_string*)(x)
+/* ... and similarly, */
+#define TFS(x) (struct true_false_string*)(x)
/* field types */
enum ftenum {
FT_BOOLEAN, /* TRUE and FALSE come from <glib.h> */
FT_UINT8,
FT_UINT16,
+ FT_UINT24, /* really a UINT32, but displayed as 3 hex-digits if FD_HEX*/
FT_UINT32,
+ FT_INT8,
+ FT_INT16,
+ FT_INT24,
+ FT_INT32,
FT_DOUBLE,
FT_ABSOLUTE_TIME,
FT_RELATIVE_TIME,
FT_IPv4,
FT_IPv6,
FT_IPXNET,
- FT_VALS_UINT8,
- FT_VALS_UINT16,
- FT_VALS_UINT24,
- FT_VALS_UINT32,
FT_TEXT_ONLY, /* non-filterable, used when converting ethereal
from old-style proto_tree to new-style proto_tree */
NUM_FIELD_TYPES /* last item number plus one */
};
+enum {
+ BASE_NONE,
+ BASE_DEC,
+ BASE_HEX,
+ BASE_OCT,
+ BASE_BIN
+};
+
/* information describing a header field */
typedef struct header_field_info {
char *name;
char *abbrev;
enum ftenum type;
- struct value_string *vals;
- int id; /* assigned by order of registration */
- int parent; /* parent protocol */
+ int display; /* for integers only, so far. Base and Endianness */
+ void *strings; /* val_string or true_false_string */
+ guint32 bitmask;
+ char *blurb; /* Brief description of field. */
+
+ int id; /* assigned by registration function, not programmer */
+ int parent; /* parent protocol */
+ int bitshift; /* bits to shift */
} header_field_info;
/* Used when registering many fields at once */
header_field_info hfinfo;
} hf_register_info;
-#ifdef WIN32
-/* 'boolean' is a reserved word on win32 */
-#define boolean truth_value
-#endif
/* Info stored in each proto_item GNode */
typedef struct field_info {
char *representation; /* for GUI tree */
int visible;
union {
- gboolean boolean;
guint32 numeric;
struct timeval time; /* the whole struct, not a pointer */
gdouble floating;
gchar *string;
+ guint8 *bytes;
guint8 ether[6];
+ ipv4_addr ipv4;
+ guint8 ipv6[16];
} value;
} field_info;
int target;
int parent;
const guint8 *packet_data;
+ guint packet_len;
GNodeTraverseFunc traverse_func;
union {
GArray *array;
/* Frees memory used by proto routines. Called at program shutdown */
void proto_cleanup(void);
+/* Set text of proto_item after having already been created. */
+void proto_item_set_text(proto_item *ti, ...);
+
+/* Set length of proto_item after having already been created. */
void proto_item_set_len(proto_item *ti, gint length);
+
+/* Creates new proto_tree root */
proto_tree* proto_tree_create_root(void);
+
+/* Clear memory for entry proto_tree. Clears proto_tree struct also. */
void proto_tree_free(proto_tree *tree);
+
+/* Create a subtree under an existing item; returns tree pointer */
proto_tree* proto_item_add_subtree(proto_item *ti, gint idx);
int
void
proto_register_field_array(int parent, hf_register_info *hf, int num_records);
+void
+proto_register_subtree_array(gint **indices, int num_indices);
+
proto_item *
proto_tree_add_item(proto_tree *tree, int hfindex, gint start,
gint length, ...);
proto_tree_add_item_format(proto_tree *tree, int hfindex, gint start,
gint length, ...);
+proto_item *
+proto_tree_add_notext(proto_tree *tree, gint start, gint length, ...);
+
proto_item *
proto_tree_add_text(proto_tree *tree, gint start, gint length, ...);
/* Returns number of items (protocols or header fields) registered. */
int proto_registrar_n(void);
+/* Returns char* to name for item # n (0-indexed) */
+char* proto_registrar_get_name(int n);
+
/* Returns char* to abbrev for item # n (0-indexed) */
char* proto_registrar_get_abbrev(int n);
/* Is item #n a protocol? */
gboolean proto_registrar_is_protocol(int n);
+/* Get length of registered field according to field type.
+ * 0 means undeterminable at registration time.
+ * -1 means unknown field */
+gint proto_registrar_get_length(int n);
+
/* Checks for existence any protocol or field within a tree.
* TRUE = found, FALSE = not found */
gboolean proto_check_for_protocol_or_field(proto_tree* tree, int id);
*/
extern gboolean proto_tree_is_visible;
+/* Points to the first element of an array of Booleans, indexed by
+ a subtree item type; that array element is TRUE if subtrees of
+ an item of that type are to be expanded.
+
+ ETT_NONE is reserved for unregistered subtree types. */
+#define ETT_NONE 0
+extern gboolean *tree_is_expanded;
+
+/* Number of elements in that array. */
+extern int num_tree_types;
+
#endif /* proto.h */