aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/ftypes/ftype-bytes.c152
-rw-r--r--epan/ftypes/ftype-double.c6
-rw-r--r--epan/ftypes/ftype-integer.c24
-rw-r--r--epan/ftypes/ftype-ipv4.c4
-rw-r--r--epan/ftypes/ftype-none.c4
-rw-r--r--epan/ftypes/ftype-string.c8
-rw-r--r--epan/ftypes/ftype-time.c6
-rw-r--r--epan/ftypes/ftype-tvbuff.c4
-rw-r--r--epan/ftypes/ftypes-int.h6
-rw-r--r--epan/ftypes/ftypes.c16
-rw-r--r--epan/ftypes/ftypes.h8
-rw-r--r--epan/proto.c31
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: