forked from osmocom/wireshark
epan: Add BASE_STR_WSP and use it
This field display type formats the representation string of FT_STRING by replacing all space character with ' '. Instead of "A line end\n" it will output "A line end ". This allows cleaner code using proto_tree_add_item() and avoids the problematic pattern proto_tree_add_string(..., tvb_format_text_wsp(...)); because we only want to affect the way the string value is displayed, not the actual field value stored.
This commit is contained in:
parent
9345bcdae5
commit
f2cc1f2382
|
@ -2705,10 +2705,8 @@ dissect_megaco_topologydescriptor(tvbuff_t *tvb, proto_tree *megaco_tree_command
|
||||||
gint tokenlen;
|
gint tokenlen;
|
||||||
|
|
||||||
tokenlen = (tvb_RBRKT+1) - tvb_previous_offset;
|
tokenlen = (tvb_RBRKT+1) - tvb_previous_offset;
|
||||||
proto_tree_add_string(megaco_tree_command_line, hf_megaco_topology_descriptor, tvb,
|
proto_tree_add_item(megaco_tree_command_line, hf_megaco_topology_descriptor, tvb,
|
||||||
tvb_previous_offset, tokenlen,
|
tvb_previous_offset, tokenlen, ENC_ASCII);
|
||||||
tvb_format_text_wsp(wmem_packet_scope(), tvb, tvb_previous_offset,
|
|
||||||
tokenlen));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
static void
|
static void
|
||||||
|
@ -3753,7 +3751,7 @@ proto_register_megaco(void)
|
||||||
{ "Termination State Descriptor", "megaco.terminationstate", FT_NONE, BASE_NONE, NULL, 0x0,
|
{ "Termination State Descriptor", "megaco.terminationstate", FT_NONE, BASE_NONE, NULL, 0x0,
|
||||||
"Termination State Descriptor in Media Descriptor", HFILL }},
|
"Termination State Descriptor in Media Descriptor", HFILL }},
|
||||||
{ &hf_megaco_topology_descriptor,
|
{ &hf_megaco_topology_descriptor,
|
||||||
{ "Topology Descriptor", "megaco.topology", FT_STRING, BASE_NONE, NULL, 0x0,
|
{ "Topology Descriptor", "megaco.topology", FT_STRING, BASE_STR_WSP, NULL, 0x0,
|
||||||
"Topology Descriptor of the megaco Command", HFILL }},
|
"Topology Descriptor of the megaco Command", HFILL }},
|
||||||
{ &hf_megaco_transaction,
|
{ &hf_megaco_transaction,
|
||||||
{ "Transaction", "megaco.transaction", FT_STRING, BASE_NONE, NULL, 0x0,
|
{ "Transaction", "megaco.transaction", FT_STRING, BASE_NONE, NULL, 0x0,
|
||||||
|
|
38
epan/proto.c
38
epan/proto.c
|
@ -1070,14 +1070,21 @@ proto_registrar_get_id_byname(const char *field_name)
|
||||||
|
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
hfinfo_format_text(wmem_allocator_t *scope, const header_field_info *hfinfo _U_,
|
format_text_hfinfo(wmem_allocator_t *scope, const header_field_info *hfinfo,
|
||||||
const guchar *string)
|
const guchar *string)
|
||||||
{
|
{
|
||||||
return format_text_string(scope, string);
|
char *str = NULL;
|
||||||
|
|
||||||
|
if (FIELD_DISPLAY(hfinfo->display) & BASE_STR_WSP)
|
||||||
|
str = format_text_wsp(scope, string, strlen(string));
|
||||||
|
else
|
||||||
|
str = format_text(scope, string, strlen(string));
|
||||||
|
|
||||||
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
hfinfo_format_bytes(wmem_allocator_t *scope, const header_field_info *hfinfo,
|
format_bytes_hfinfo(wmem_allocator_t *scope, const header_field_info *hfinfo,
|
||||||
const guint8 *bytes, guint length)
|
const guint8 *bytes, guint length)
|
||||||
{
|
{
|
||||||
char *str = NULL;
|
char *str = NULL;
|
||||||
|
@ -3815,33 +3822,33 @@ proto_tree_add_item_ret_display_string_and_length(proto_tree *tree, int hfindex,
|
||||||
switch (hfinfo->type) {
|
switch (hfinfo->type) {
|
||||||
case FT_STRING:
|
case FT_STRING:
|
||||||
value = get_string_value(scope, tvb, start, length, lenretval, encoding);
|
value = get_string_value(scope, tvb, start, length, lenretval, encoding);
|
||||||
*retval = hfinfo_format_text(scope, hfinfo, value);
|
*retval = format_text_hfinfo(scope, hfinfo, value);
|
||||||
break;
|
break;
|
||||||
case FT_STRINGZ:
|
case FT_STRINGZ:
|
||||||
value = get_stringz_value(scope, tree, tvb, start, length, lenretval, encoding);
|
value = get_stringz_value(scope, tree, tvb, start, length, lenretval, encoding);
|
||||||
*retval = hfinfo_format_text(scope, hfinfo, value);
|
*retval = format_text_hfinfo(scope, hfinfo, value);
|
||||||
break;
|
break;
|
||||||
case FT_UINT_STRING:
|
case FT_UINT_STRING:
|
||||||
value = get_uint_string_value(scope, tree, tvb, start, length, lenretval, encoding);
|
value = get_uint_string_value(scope, tree, tvb, start, length, lenretval, encoding);
|
||||||
*retval = hfinfo_format_text(scope, hfinfo, value);
|
*retval = format_text_hfinfo(scope, hfinfo, value);
|
||||||
break;
|
break;
|
||||||
case FT_STRINGZPAD:
|
case FT_STRINGZPAD:
|
||||||
value = get_stringzpad_value(scope, tvb, start, length, lenretval, encoding);
|
value = get_stringzpad_value(scope, tvb, start, length, lenretval, encoding);
|
||||||
*retval = hfinfo_format_text(scope, hfinfo, value);
|
*retval = format_text_hfinfo(scope, hfinfo, value);
|
||||||
break;
|
break;
|
||||||
case FT_STRINGZTRUNC:
|
case FT_STRINGZTRUNC:
|
||||||
value = get_stringztrunc_value(scope, tvb, start, length, lenretval, encoding);
|
value = get_stringztrunc_value(scope, tvb, start, length, lenretval, encoding);
|
||||||
*retval = hfinfo_format_text(scope, hfinfo, value);
|
*retval = format_text_hfinfo(scope, hfinfo, value);
|
||||||
break;
|
break;
|
||||||
case FT_BYTES:
|
case FT_BYTES:
|
||||||
value = tvb_get_ptr(tvb, start, length);
|
value = tvb_get_ptr(tvb, start, length);
|
||||||
*retval = hfinfo_format_bytes(scope, hfinfo, value, length);
|
*retval = format_bytes_hfinfo(scope, hfinfo, value, length);
|
||||||
*lenretval = length;
|
*lenretval = length;
|
||||||
break;
|
break;
|
||||||
case FT_UINT_BYTES:
|
case FT_UINT_BYTES:
|
||||||
n = get_uint_value(tree, tvb, start, length, encoding);
|
n = get_uint_value(tree, tvb, start, length, encoding);
|
||||||
value = tvb_get_ptr(tvb, start + length, n);
|
value = tvb_get_ptr(tvb, start + length, n);
|
||||||
*retval = hfinfo_format_bytes(scope, hfinfo, value, n);
|
*retval = format_bytes_hfinfo(scope, hfinfo, value, n);
|
||||||
*lenretval = length + n;
|
*lenretval = length + n;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -6483,7 +6490,7 @@ proto_item_fill_display_label(field_info *finfo, gchar *display_label_str, const
|
||||||
|
|
||||||
case FT_UINT_BYTES:
|
case FT_UINT_BYTES:
|
||||||
case FT_BYTES:
|
case FT_BYTES:
|
||||||
tmp_str = hfinfo_format_bytes(NULL,
|
tmp_str = format_bytes_hfinfo(NULL,
|
||||||
hfinfo,
|
hfinfo,
|
||||||
fvalue_get_bytes(&finfo->value),
|
fvalue_get_bytes(&finfo->value),
|
||||||
fvalue_length(&finfo->value));
|
fvalue_length(&finfo->value));
|
||||||
|
@ -6702,7 +6709,7 @@ proto_item_fill_display_label(field_info *finfo, gchar *display_label_str, const
|
||||||
case FT_STRINGZPAD:
|
case FT_STRINGZPAD:
|
||||||
case FT_STRINGZTRUNC:
|
case FT_STRINGZTRUNC:
|
||||||
str = fvalue_get_string(&finfo->value);
|
str = fvalue_get_string(&finfo->value);
|
||||||
tmp_str = hfinfo_format_text(NULL, hfinfo, str);
|
tmp_str = format_text_hfinfo(NULL, hfinfo, str);
|
||||||
label_len = protoo_strlcpy(display_label_str, tmp_str, label_str_size);
|
label_len = protoo_strlcpy(display_label_str, tmp_str, label_str_size);
|
||||||
wmem_free(NULL, tmp_str);
|
wmem_free(NULL, tmp_str);
|
||||||
break;
|
break;
|
||||||
|
@ -8764,6 +8771,7 @@ tmp_fld_check_assert(header_field_info *hfinfo)
|
||||||
case FT_STRINGZTRUNC:
|
case FT_STRINGZTRUNC:
|
||||||
switch (hfinfo->display) {
|
switch (hfinfo->display) {
|
||||||
case BASE_NONE:
|
case BASE_NONE:
|
||||||
|
case BASE_STR_WSP:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -9240,7 +9248,7 @@ proto_item_fill_label(field_info *fi, gchar *label_str)
|
||||||
|
|
||||||
case FT_BYTES:
|
case FT_BYTES:
|
||||||
case FT_UINT_BYTES:
|
case FT_UINT_BYTES:
|
||||||
tmp = hfinfo_format_bytes(NULL, hfinfo,
|
tmp = format_bytes_hfinfo(NULL, hfinfo,
|
||||||
fvalue_get_bytes(&fi->value),
|
fvalue_get_bytes(&fi->value),
|
||||||
fvalue_length(&fi->value));
|
fvalue_length(&fi->value));
|
||||||
label_fill(label_str, 0, hfinfo, tmp);
|
label_fill(label_str, 0, hfinfo, tmp);
|
||||||
|
@ -9466,7 +9474,7 @@ proto_item_fill_label(field_info *fi, gchar *label_str)
|
||||||
case FT_STRINGZPAD:
|
case FT_STRINGZPAD:
|
||||||
case FT_STRINGZTRUNC:
|
case FT_STRINGZTRUNC:
|
||||||
str = fvalue_get_string(&fi->value);
|
str = fvalue_get_string(&fi->value);
|
||||||
tmp = hfinfo_format_text(NULL, hfinfo, str);
|
tmp = format_text_hfinfo(NULL, hfinfo, str);
|
||||||
label_fill(label_str, 0, hfinfo, tmp);
|
label_fill(label_str, 0, hfinfo, tmp);
|
||||||
wmem_free(NULL, tmp);
|
wmem_free(NULL, tmp);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -696,6 +696,9 @@ typedef enum {
|
||||||
ABSOLUTE_TIME_UTC = 19, /**< UTC, with month and day */
|
ABSOLUTE_TIME_UTC = 19, /**< UTC, with month and day */
|
||||||
ABSOLUTE_TIME_DOY_UTC = 20, /**< UTC, with 1-origin day-of-year */
|
ABSOLUTE_TIME_DOY_UTC = 20, /**< UTC, with 1-origin day-of-year */
|
||||||
ABSOLUTE_TIME_NTP_UTC = 21, /**< UTC, with "NULL" when timestamp is all zeros */
|
ABSOLUTE_TIME_NTP_UTC = 21, /**< UTC, with "NULL" when timestamp is all zeros */
|
||||||
|
|
||||||
|
/* String types */
|
||||||
|
BASE_STR_WSP = 22, /**< Replace all whitespace characters (newline, formfeed, etc) with "space". */
|
||||||
} field_display_e;
|
} field_display_e;
|
||||||
|
|
||||||
#define FIELD_DISPLAY(d) ((d) & FIELD_DISPLAY_E_MASK)
|
#define FIELD_DISPLAY(d) ((d) & FIELD_DISPLAY_E_MASK)
|
||||||
|
|
Loading…
Reference in New Issue