diff options
-rw-r--r-- | epan/ftypes/ftype-bytes.c | 152 | ||||
-rw-r--r-- | epan/ftypes/ftype-double.c | 6 | ||||
-rw-r--r-- | epan/ftypes/ftype-integer.c | 24 | ||||
-rw-r--r-- | epan/ftypes/ftype-ipv4.c | 4 | ||||
-rw-r--r-- | epan/ftypes/ftype-none.c | 4 | ||||
-rw-r--r-- | epan/ftypes/ftype-string.c | 8 | ||||
-rw-r--r-- | epan/ftypes/ftype-time.c | 6 | ||||
-rw-r--r-- | epan/ftypes/ftype-tvbuff.c | 4 | ||||
-rw-r--r-- | epan/ftypes/ftypes-int.h | 6 | ||||
-rw-r--r-- | epan/ftypes/ftypes.c | 16 | ||||
-rw-r--r-- | epan/ftypes/ftypes.h | 8 | ||||
-rw-r--r-- | epan/proto.c | 31 |
12 files changed, 183 insertions, 86 deletions
diff --git a/epan/ftypes/ftype-bytes.c b/epan/ftypes/ftype-bytes.c index 0bd220394b..546195442b 100644 --- a/epan/ftypes/ftype-bytes.c +++ b/epan/ftypes/ftype-bytes.c @@ -1,5 +1,5 @@ /* - * $Id: ftype-bytes.c,v 1.13 2002/08/28 20:41:00 jmayer Exp $ + * $Id: ftype-bytes.c,v 1.14 2003/02/08 04:22:37 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -57,6 +57,40 @@ bytes_fvalue_set(fvalue_t *fv, gpointer value, gboolean already_copied) fv->value.bytes = value; } +static int +bytes_strlen(fvalue_t *fv) +{ + /* 3 bytes for each byte of the byte "NN:" minus 1 byte + * as there's no trailing ":" */ + return fv->value.bytes->len * 3 - 1; +} + +static char * +bytes_to_string(fvalue_t *fv) +{ + guint8 *c; + char *buf; + char *write_cursor; + unsigned int i; + + c = fv->value.bytes->data; + buf = g_malloc0(bytes_strlen(fv)); + write_cursor = buf; + + for (i = 0; i < fv->value.bytes->len; i++) { + if (i == 0) { + sprintf(write_cursor, "%02x", *c++); + write_cursor += 2; + + } + else { + sprintf(write_cursor, ":%02x", *c++); + write_cursor += 3; + } + } + return buf; +} + static void common_fvalue_set(fvalue_t *fv, guint8* data, guint len) { @@ -557,6 +591,8 @@ ftype_register_bytes(void) bytes_fvalue_new, /* new_value */ bytes_fvalue_free, /* free_value */ val_from_string, /* val_from_string */ + bytes_to_string, /* val_to_string_repr */ + bytes_strlen, /* len_string_repr */ bytes_fvalue_set, /* set_value */ NULL, /* set_value_integer */ @@ -564,7 +600,7 @@ ftype_register_bytes(void) value_get, /* get_value */ NULL, /* get_value_integer */ - NULL, + NULL, /* get_value_floating */ cmp_eq, cmp_ne, @@ -584,6 +620,8 @@ ftype_register_bytes(void) bytes_fvalue_new, /* new_value */ bytes_fvalue_free, /* free_value */ val_from_string, /* val_from_string */ + bytes_to_string, /* val_to_string_repr */ + bytes_strlen, /* len_string_repr */ bytes_fvalue_set, /* set_value */ NULL, /* set_value_integer */ @@ -591,7 +629,7 @@ ftype_register_bytes(void) value_get, /* get_value */ NULL, /* get_value_integer */ - NULL, + NULL, /* get_value_floating */ cmp_eq, cmp_ne, @@ -605,20 +643,22 @@ ftype_register_bytes(void) }; static ftype_t ether_type = { - "FT_ETHER", - "Ethernet or other MAC address", - ETHER_LEN, - bytes_fvalue_new, - bytes_fvalue_free, - ether_from_string, + "FT_ETHER", /* name */ + "Ethernet or other MAC address",/* pretty_name */ + ETHER_LEN, /* wire_size */ + bytes_fvalue_new, /* new_value */ + bytes_fvalue_free, /* free_value */ + ether_from_string, /* val_from_string */ + bytes_to_string, /* val_to_string_repr */ + bytes_strlen, /* len_string_repr */ - ether_fvalue_set, - NULL, - NULL, + ether_fvalue_set, /* set_value */ + NULL, /* set_value_integer */ + NULL, /* set_value_floating */ - value_get, - NULL, - NULL, + value_get, /* get_value */ + NULL, /* get_value_integer */ + NULL, /* get_value_floating */ cmp_eq, cmp_ne, @@ -632,20 +672,22 @@ ftype_register_bytes(void) }; static ftype_t ipv6_type = { - "FT_IPv6", - "IPv6 address", - IPv6_LEN, - bytes_fvalue_new, - bytes_fvalue_free, - ipv6_from_string, + "FT_IPv6", /* name */ + "IPv6 address", /* pretty_name */ + IPv6_LEN, /* wire_size */ + bytes_fvalue_new, /* new_value */ + bytes_fvalue_free, /* free_value */ + ipv6_from_string, /* val_from_string */ + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ - ipv6_fvalue_set, - NULL, - NULL, + ipv6_fvalue_set, /* set_value */ + NULL, /* set_value_integer */ + NULL, /* set_value_floating */ - value_get, - NULL, - NULL, + value_get, /* get_value */ + NULL, /* get_value_integer */ + NULL, /* get_value_floating */ cmp_eq, cmp_ne, @@ -659,20 +701,22 @@ ftype_register_bytes(void) }; static ftype_t u64_type = { - "FT_UINT64", - "Unsigned 64-bit integer", - U64_LEN, - bytes_fvalue_new, - bytes_fvalue_free, - u64_from_string, + "FT_UINT64", /* name */ + "Unsigned 64-bit integer", /* pretty_name */ + U64_LEN, /* wire_size */ + bytes_fvalue_new, /* new_value */ + bytes_fvalue_free, /* free_value */ + u64_from_string, /* val_from_string */ + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ - u64_fvalue_set, - NULL, - NULL, + u64_fvalue_set, /* set_value */ + NULL, /* set_value_integer */ + NULL, /* set_value_floating */ - value_get, - NULL, - NULL, + value_get, /* get_value */ + NULL, /* get_value_integer */ + NULL, /* get_value_floating */ cmp_eq, cmp_ne, @@ -686,20 +730,22 @@ ftype_register_bytes(void) }; static ftype_t i64_type = { - "FT_INT64", - "Signed 64-bit integer", - U64_LEN, - bytes_fvalue_new, - bytes_fvalue_free, - i64_from_string, - - u64_fvalue_set, - NULL, - NULL, - - value_get, - NULL, - NULL, + "FT_INT64", /* name */ + "Signed 64-bit integer", /* pretty_name */ + U64_LEN, /* wire_size */ + bytes_fvalue_new, /* new_value */ + bytes_fvalue_free, /* free_value */ + i64_from_string, /* val_from_string */ + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ + + u64_fvalue_set, /* set_value */ + NULL, /* set_value_integer */ + NULL, /* set_value_floating */ + + value_get, /* get_value */ + NULL, /* get_value_integer */ + NULL, /* get_value_floating */ cmp_eq, cmp_ne, diff --git a/epan/ftypes/ftype-double.c b/epan/ftypes/ftype-double.c index b798365dd3..2091bda846 100644 --- a/epan/ftypes/ftype-double.c +++ b/epan/ftypes/ftype-double.c @@ -1,5 +1,5 @@ /* - * $Id: ftype-double.c,v 1.7 2002/08/28 20:41:00 jmayer Exp $ + * $Id: ftype-double.c,v 1.8 2003/02/08 04:22:37 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -124,6 +124,8 @@ ftype_register_double(void) double_fvalue_new, NULL, val_from_string, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ NULL, NULL, @@ -151,6 +153,8 @@ ftype_register_double(void) double_fvalue_new, NULL, val_from_string, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ NULL, NULL, diff --git a/epan/ftypes/ftype-integer.c b/epan/ftypes/ftype-integer.c index 145de88666..da70ecc2ec 100644 --- a/epan/ftypes/ftype-integer.c +++ b/epan/ftypes/ftype-integer.c @@ -1,5 +1,5 @@ /* - * $Id: ftype-integer.c,v 1.11 2002/12/19 02:58:51 guy Exp $ + * $Id: ftype-integer.c,v 1.12 2003/02/08 04:22:37 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -212,6 +212,8 @@ ftype_register_integers(void) int_fvalue_new, NULL, val_from_string, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ NULL, set_integer, @@ -238,6 +240,8 @@ ftype_register_integers(void) int_fvalue_new, NULL, val_from_string, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ NULL, set_integer, @@ -264,6 +268,8 @@ ftype_register_integers(void) int_fvalue_new, NULL, val_from_string, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ NULL, set_integer, @@ -290,6 +296,8 @@ ftype_register_integers(void) int_fvalue_new, NULL, val_from_string, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ NULL, set_integer, @@ -316,6 +324,8 @@ ftype_register_integers(void) int_fvalue_new, NULL, val_from_string, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ NULL, set_integer, @@ -342,6 +352,8 @@ ftype_register_integers(void) int_fvalue_new, NULL, val_from_string, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ NULL, set_integer, @@ -368,6 +380,8 @@ ftype_register_integers(void) int_fvalue_new, NULL, val_from_string, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ NULL, set_integer, @@ -394,6 +408,8 @@ ftype_register_integers(void) int_fvalue_new, NULL, val_from_string, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ NULL, set_integer, @@ -420,6 +436,8 @@ ftype_register_integers(void) boolean_fvalue_new, NULL, val_from_string, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ NULL, set_integer, @@ -447,6 +465,8 @@ ftype_register_integers(void) int_fvalue_new, NULL, ipxnet_from_string, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ NULL, set_integer, @@ -474,6 +494,8 @@ ftype_register_integers(void) int_fvalue_new, NULL, val_from_string, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ NULL, set_integer, diff --git a/epan/ftypes/ftype-ipv4.c b/epan/ftypes/ftype-ipv4.c index dacf82a68e..ad978a7915 100644 --- a/epan/ftypes/ftype-ipv4.c +++ b/epan/ftypes/ftype-ipv4.c @@ -1,5 +1,5 @@ /* - * $Id: ftype-ipv4.c,v 1.9 2002/08/28 20:41:00 jmayer Exp $ + * $Id: ftype-ipv4.c,v 1.10 2003/02/08 04:22:37 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -168,6 +168,8 @@ ftype_register_ipv4(void) NULL, NULL, val_from_string, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ NULL, set_integer, diff --git a/epan/ftypes/ftype-none.c b/epan/ftypes/ftype-none.c index c3101bb177..864c8a6b9a 100644 --- a/epan/ftypes/ftype-none.c +++ b/epan/ftypes/ftype-none.c @@ -1,5 +1,5 @@ /* - * $Id: ftype-none.c,v 1.4 2002/08/28 20:41:00 jmayer Exp $ + * $Id: ftype-none.c,v 1.5 2003/02/08 04:22:37 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@zing.org> @@ -39,6 +39,8 @@ ftype_register_none(void) NULL, NULL, NULL, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ NULL, NULL, diff --git a/epan/ftypes/ftype-string.c b/epan/ftypes/ftype-string.c index 3a50134dfb..63f508addb 100644 --- a/epan/ftypes/ftype-string.c +++ b/epan/ftypes/ftype-string.c @@ -1,5 +1,5 @@ /* - * $Id: ftype-string.c,v 1.7 2002/08/28 20:41:00 jmayer Exp $ + * $Id: ftype-string.c,v 1.8 2003/02/08 04:22:37 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -130,6 +130,8 @@ ftype_register_string(void) string_fvalue_new, string_fvalue_free, val_from_string, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ string_fvalue_set, NULL, @@ -156,6 +158,8 @@ ftype_register_string(void) string_fvalue_new, string_fvalue_free, val_from_string, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ string_fvalue_set, NULL, @@ -182,6 +186,8 @@ ftype_register_string(void) string_fvalue_new, string_fvalue_free, val_from_string, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ string_fvalue_set, NULL, diff --git a/epan/ftypes/ftype-time.c b/epan/ftypes/ftype-time.c index 77d8f6f1c6..f35483da7b 100644 --- a/epan/ftypes/ftype-time.c +++ b/epan/ftypes/ftype-time.c @@ -1,5 +1,5 @@ /* - * $Id: ftype-time.c,v 1.17 2002/08/28 20:41:00 jmayer Exp $ + * $Id: ftype-time.c,v 1.18 2003/02/08 04:22:37 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -308,6 +308,8 @@ ftype_register_time(void) time_fvalue_new, NULL, absolute_val_from_string, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ time_fvalue_set, NULL, @@ -333,6 +335,8 @@ ftype_register_time(void) time_fvalue_new, NULL, relative_val_from_string, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ time_fvalue_set, NULL, diff --git a/epan/ftypes/ftype-tvbuff.c b/epan/ftypes/ftype-tvbuff.c index f899bfc62a..f051fd3094 100644 --- a/epan/ftypes/ftype-tvbuff.c +++ b/epan/ftypes/ftype-tvbuff.c @@ -1,5 +1,5 @@ /* - * $Id: ftype-tvbuff.c,v 1.7 2002/08/28 20:41:00 jmayer Exp $ + * $Id: ftype-tvbuff.c,v 1.8 2003/02/08 04:22:37 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -85,6 +85,8 @@ ftype_register_tvbuff(void) value_new, NULL, NULL, + NULL, /* val_to_string_repr */ + NULL, /* len_string_repr */ value_set, NULL, diff --git a/epan/ftypes/ftypes-int.h b/epan/ftypes/ftypes-int.h index 0796782b6e..c264ff079a 100644 --- a/epan/ftypes/ftypes-int.h +++ b/epan/ftypes/ftypes-int.h @@ -1,5 +1,5 @@ /* - * $Id: ftypes-int.h,v 1.6 2002/08/28 20:41:00 jmayer Exp $ + * $Id: ftypes-int.h,v 1.7 2003/02/08 04:22:37 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -30,6 +30,8 @@ typedef void (*FvalueNewFunc)(fvalue_t*); typedef void (*FvalueFreeFunc)(fvalue_t*); typedef gboolean (*FvalueFromString)(fvalue_t*, char*, LogFunc); +typedef char* (*FvalueToStringRepr)(fvalue_t*); +typedef int (*FvalueStringReprLen)(fvalue_t*); typedef void (*FvalueSetFunc)(fvalue_t*, gpointer, gboolean); typedef void (*FvalueSetIntegerFunc)(fvalue_t*, guint32); @@ -51,6 +53,8 @@ struct _ftype_t { FvalueNewFunc new_value; FvalueFreeFunc free_value; FvalueFromString val_from_string; + FvalueToStringRepr val_to_string_repr; + FvalueStringReprLen len_string_repr; /* could be union */ FvalueSetFunc set_value; diff --git a/epan/ftypes/ftypes.c b/epan/ftypes/ftypes.c index d681fe037d..a0e0804d57 100644 --- a/epan/ftypes/ftypes.c +++ b/epan/ftypes/ftypes.c @@ -1,5 +1,5 @@ /* - * $Id: ftypes.c,v 1.7 2002/08/28 20:41:00 jmayer Exp $ + * $Id: ftypes.c,v 1.8 2003/02/08 04:22:37 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -271,6 +271,20 @@ fvalue_length(fvalue_t *fv) return fv->ftype->wire_size; } +int +fvalue_string_repr_len(fvalue_t *fv) +{ + g_assert(fv->ftype->len_string_repr); + return fv->ftype->len_string_repr(fv); +} + +char * +fvalue_to_string_repr(fvalue_t *fv) +{ + g_assert(fv->ftype->val_to_string_repr); + return fv->ftype->val_to_string_repr(fv); +} + typedef struct { fvalue_t *fv; GByteArray *bytes; diff --git a/epan/ftypes/ftypes.h b/epan/ftypes/ftypes.h index 869123da64..d4fc926900 100644 --- a/epan/ftypes/ftypes.h +++ b/epan/ftypes/ftypes.h @@ -1,7 +1,7 @@ /* ftypes.h * Definitions for field types * - * $Id: ftypes.h,v 1.15 2002/12/19 02:58:51 guy Exp $ + * $Id: ftypes.h,v 1.16 2003/02/08 04:22:37 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -145,6 +145,12 @@ typedef void (*LogFunc)(char*,...); fvalue_t* fvalue_from_string(ftenum_t ftype, char *s, LogFunc log); +int +fvalue_string_repr_len(fvalue_t *fv); + +char * +fvalue_to_string_repr(fvalue_t *fv); + const char* fvalue_type_name(fvalue_t *fv); diff --git a/epan/proto.c b/epan/proto.c index 3eb3ed441a..874d929130 100644 --- a/epan/proto.c +++ b/epan/proto.c @@ -1,7 +1,7 @@ /* proto.c * Routines for protocol tree * - * $Id: proto.c,v 1.81 2003/01/31 03:17:52 guy Exp $ + * $Id: proto.c,v 1.82 2003/02/08 04:22:30 gram Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -3505,18 +3505,6 @@ proto_alloc_dfilter_string(field_info *finfo, guint8 *pd) fvalue_get_floating(finfo->value)); break; - case FT_ETHER: - /* - * 4 bytes for " == ". - * 17 bytes for "NN:NN:NN:NN:NN:NN". - * 1 byte for the trailing '\0'. - */ - dfilter_len = abbrev_len + 4 + 17 + 1; - buf = g_malloc0(dfilter_len); - snprintf(buf, dfilter_len, "%s == %s", - hfinfo->abbrev, - ether_to_str(fvalue_get(finfo->value))); - break; case FT_ABSOLUTE_TIME: /* @@ -3561,24 +3549,21 @@ proto_alloc_dfilter_string(field_info *finfo, guint8 *pd) hfinfo->abbrev, value_str); break; + case FT_ETHER: case FT_BYTES: case FT_UINT_BYTES: /* * 4 bytes for " == ". - * 3 bytes for each byte of the byte string, as - * "NN:", minus 1 byte as there's no trailing ":". * 1 byte for the trailing '\0'. * - * XXX - what are the other 2 bytes for? */ - dfilter_len = fvalue_length(finfo->value)*3 - 1; - dfilter_len += abbrev_len + 4 + 2 + 1; + dfilter_len = fvalue_string_repr_len(finfo->value); + dfilter_len += abbrev_len + 4 + 1; buf = g_malloc0(dfilter_len); - snprintf(buf, dfilter_len, "%s == %s", - hfinfo->abbrev, - /* XXX - bytes_to_str_punct() will truncate long strings with '...' */ - bytes_to_str_punct(fvalue_get(finfo->value), - fvalue_length(finfo->value),':')); + snprintf(buf, dfilter_len, "%s == ", hfinfo->abbrev); + stringified = fvalue_to_string_repr(finfo->value); + strcat(buf, stringified); + g_free(stringified); break; default: |