Extend X11 response parsing

Add support to parse screens, depths, visual-types and
pixel-formats in the X11 connection initial response.

v1->v2:
- Do not show unused bytes when their length is 0
- Fix up tabs

Change-Id: If62f0eab65a18e050fb3f830a6bd7574ab1f2de6
Reviewed-on: https://code.wireshark.org/review/4249
Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
This commit is contained in:
Michele Baldessari 2014-08-23 09:10:13 +02:00 committed by Alexis La Goutte
parent 67f1fa5e56
commit 0efa992d33
4 changed files with 267 additions and 2 deletions

View File

@ -204,6 +204,14 @@ static gint ett_x11_configure_window_mask = -1; /* XXX - unused */
static gint ett_x11_keyboard_value_mask = -1; /* XXX - unused */
static gint ett_x11_same_screen_focus = -1;
static gint ett_x11_event = -1;
static gint ett_x11_list_of_pixmap_format = -1;
static gint ett_x11_pixmap_format = -1;
static gint ett_x11_list_of_screen = -1;
static gint ett_x11_screen = -1;
static gint ett_x11_list_of_depth_detail = -1;
static gint ett_x11_depth_detail = -1;
static gint ett_x11_list_of_visualtype= -1;
static gint ett_x11_visualtype= -1;
static expert_field ei_x11_invalid_format = EI_INIT;
static expert_field ei_x11_request_length = EI_INIT;
@ -1186,6 +1194,8 @@ static const value_string zero_is_none_vals[] = {
listOfKeysyms(tvb, pinfo, offsetp, t, hf_x11_##name, hf_x11_##name##_item, map, (keycode_first), (keycode_count), (keysyms_per_keycode), byte_order); }
#define LISTofPOINT(name, length) { listOfPoint(tvb, offsetp, t, hf_x11_##name, (length) / 4, byte_order); }
#define LISTofRECTANGLE(name) { listOfRectangle(tvb, offsetp, t, hf_x11_##name, (next_offset - *offsetp) / 8, byte_order); }
#define LISTofPIXMAPFORMAT(name, length) { listOfPixmapFormat(tvb, offsetp, t, hf_x11_##name, (length), byte_order); }
#define LISTofSCREEN(name, length) { listOfScreen(tvb, offsetp, t, hf_x11_##name, (length), byte_order); }
#define LISTofSEGMENT(name) { listOfSegment(tvb, offsetp, t, hf_x11_##name, (next_offset - *offsetp) / 8, byte_order); }
#define LISTofSTRING8(name, length) { listOfString8(tvb, offsetp, t, hf_x11_##name, hf_x11_##name##_string, (length), byte_order); }
#define LISTofTEXTITEM8(name) { listOfTextItem(tvb, offsetp, t, hf_x11_##name, FALSE, next_offset, byte_order); }
@ -2107,6 +2117,145 @@ static void listOfSegment(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf,
}
}
static void listOfVisualTypes(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf,
int length, guint byte_order)
{
proto_item *ti = proto_tree_add_item(t, hf, tvb, *offsetp, length * 24, byte_order);
proto_tree *tt = proto_item_add_subtree(ti, ett_x11_list_of_visualtype);
while(length--) {
proto_item *tti;
proto_tree *ttt;
tti = proto_tree_add_none_format(tt, hf_x11_visualtype, tvb, *offsetp, 24,
"visualtype");
ttt = proto_item_add_subtree(tti, ett_x11_visualtype);
proto_tree_add_item(ttt, hf_x11_visualtype_visualid, tvb, *offsetp, 4, byte_order);
*offsetp += 4;
proto_tree_add_item(ttt, hf_x11_visualtype_class, tvb, *offsetp, 1, byte_order);
*offsetp += 1;
proto_tree_add_item(ttt, hf_x11_visualtype_bits_per_rgb_value, tvb, *offsetp, 1, byte_order);
*offsetp += 1;
proto_tree_add_item(ttt, hf_x11_visualtype_colormap_entries, tvb, *offsetp, 2, byte_order);
*offsetp += 2;
proto_tree_add_item(ttt, hf_x11_visualtype_red_mask, tvb, *offsetp, 4, byte_order);
*offsetp += 4;
proto_tree_add_item(ttt, hf_x11_visualtype_green_mask, tvb, *offsetp, 4, byte_order);
*offsetp += 4;
proto_tree_add_item(ttt, hf_x11_visualtype_blue_mask, tvb, *offsetp, 4, byte_order);
*offsetp += 4;
proto_tree_add_item(ttt, hf_x11_unused, tvb, *offsetp, 4, byte_order);
*offsetp += 4;
}
}
static void listOfDepth(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf,
int length, guint byte_order)
{
guint8 number_of_visualtypes;
proto_item *ti;
proto_tree *tt;
ti = proto_tree_add_item(t, hf, tvb, *offsetp, -1, byte_order);
tt = proto_item_add_subtree(ti, ett_x11_list_of_depth_detail);
while(length--) {
proto_item *tti;
proto_tree *ttt;
number_of_visualtypes = VALUE16(tvb, *offsetp + 2);
tti = proto_tree_add_none_format(tt, hf_x11_depth_detail, tvb, *offsetp, 8 + 24 * number_of_visualtypes,
"depth-detail");
ttt = proto_item_add_subtree(tti, ett_x11_screen);
proto_tree_add_item(ttt, hf_x11_depth_detail_depth, tvb, *offsetp, 1, byte_order);
*offsetp += 1;
proto_tree_add_item(ttt, hf_x11_unused, tvb, *offsetp, 1, byte_order);
*offsetp += 1;
proto_tree_add_item(ttt, hf_x11_depth_detail_visualtypes_numbers, tvb, *offsetp, 2, byte_order);
*offsetp += 2;
proto_tree_add_item(ttt, hf_x11_unused, tvb, *offsetp, 4, byte_order);
*offsetp += 4;
if (number_of_visualtypes > 0)
listOfVisualTypes(tvb, offsetp, ttt, hf_x11_visualtype, number_of_visualtypes, byte_order);
}
}
static void listOfScreen(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf,
int length, guint byte_order)
{
proto_item *ti = proto_tree_add_item(t, hf, tvb, *offsetp, -1, byte_order);
proto_tree *tt = proto_item_add_subtree(ti, ett_x11_list_of_screen);
while(length--) {
guint8 number_of_depths, root_depth;
guint16 width_in_pixels, height_in_pixels;
guint32 screen_root;
proto_item *tti;
proto_tree *ttt;
screen_root = VALUE32(tvb, *offsetp);
width_in_pixels = VALUE16(tvb, *offsetp + 20);
height_in_pixels = VALUE16(tvb, *offsetp + 22);
root_depth = VALUE8(tvb, *offsetp + 38);
tti = proto_tree_add_none_format(tt, hf_x11_screen, tvb, *offsetp, 0,
"screen (%08x: %d x %d x %d)", screen_root,
width_in_pixels, height_in_pixels, root_depth);
ttt = proto_item_add_subtree(tti, ett_x11_screen);
proto_tree_add_item(ttt, hf_x11_screen_root, tvb, *offsetp, 4, byte_order);
*offsetp += 4;
proto_tree_add_item(ttt, hf_x11_screen_default_colormap, tvb, *offsetp, 4, byte_order);
*offsetp += 4;
proto_tree_add_item(ttt, hf_x11_screen_white_pixel, tvb, *offsetp, 4, byte_order);
*offsetp += 4;
proto_tree_add_item(ttt, hf_x11_screen_black_pixel, tvb, *offsetp, 4, byte_order);
*offsetp += 4;
proto_tree_add_item(ttt, hf_x11_screen_current_input_masks, tvb, *offsetp, 4, byte_order);
*offsetp += 4;
proto_tree_add_item(ttt, hf_x11_screen_width_in_pixels, tvb, *offsetp, 2, byte_order);
*offsetp += 2;
proto_tree_add_item(ttt, hf_x11_screen_height_in_pixels, tvb, *offsetp, 2, byte_order);
*offsetp += 2;
proto_tree_add_item(ttt, hf_x11_screen_width_in_millimeters, tvb, *offsetp, 2, byte_order);
*offsetp += 2;
proto_tree_add_item(ttt, hf_x11_screen_height_in_millimeters, tvb, *offsetp, 2, byte_order);
*offsetp += 2;
proto_tree_add_item(ttt, hf_x11_screen_min_installed_maps, tvb, *offsetp, 2, byte_order);
*offsetp += 2;
proto_tree_add_item(ttt, hf_x11_screen_max_installed_maps, tvb, *offsetp, 2, byte_order);
*offsetp += 2;
proto_tree_add_item(ttt, hf_x11_screen_root_visual, tvb, *offsetp, 4, byte_order);
*offsetp += 4;
proto_tree_add_item(ttt, hf_x11_screen_backing_stores, tvb, *offsetp, 1, byte_order);
*offsetp += 1;
proto_tree_add_item(ttt, hf_x11_screen_save_unders, tvb, *offsetp, 1, byte_order);
*offsetp += 1;
proto_tree_add_item(ttt, hf_x11_screen_root_depth, tvb, *offsetp, 1, byte_order);
*offsetp += 1;
number_of_depths = VALUE8(tvb, *offsetp);
proto_tree_add_item(ttt, hf_x11_screen_allowed_depths_len, tvb, *offsetp, 1, byte_order);
*offsetp += 1;
listOfDepth(tvb, offsetp, ttt, hf_x11_depth_detail, number_of_depths, byte_order);
}
}
static void listOfPixmapFormat(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf,
int length, guint byte_order)
{
proto_item *ti = proto_tree_add_item(t, hf, tvb, *offsetp, length * 8, byte_order);
proto_tree *tt = proto_item_add_subtree(ti, ett_x11_list_of_pixmap_format);
while(length--) {
proto_item *tti;
proto_tree *ttt;
tti = proto_tree_add_none_format(tt, hf_x11_pixmap_format, tvb, *offsetp, 8,
"pixmap-format");
ttt = proto_item_add_subtree(tti, ett_x11_pixmap_format);
proto_tree_add_item(ttt, hf_x11_pixmap_format_depth, tvb, *offsetp, 1, byte_order);
*offsetp += 1;
proto_tree_add_item(ttt, hf_x11_pixmap_format_bits_per_pixel, tvb, *offsetp, 1, byte_order);
*offsetp += 1;
proto_tree_add_item(ttt, hf_x11_pixmap_format_scanline_pad, tvb, *offsetp, 1, byte_order);
*offsetp += 1;
proto_tree_add_item(ttt, hf_x11_unused, tvb, *offsetp, 5, byte_order);
*offsetp += 5;
}
}
static void listOfString8(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf,
int hf_item, int length, guint byte_order)
{
@ -2976,6 +3125,9 @@ static void dissect_x11_initial_reply(tvbuff_t *tvb, packet_info *pinfo,
unsigned char success;
int length_of_vendor;
int length_of_reason;
int number_of_formats_in_pixmap_formats;
int number_of_screens_in_roots;
int unused;
proto_item *ti;
proto_tree *t;
@ -3003,8 +3155,8 @@ static void dissect_x11_initial_reply(tvbuff_t *tvb, packet_info *pinfo,
INT32(motion_buffer_size);
length_of_vendor = INT16(length_of_vendor);
INT16(maximum_request_length);
INT8(number_of_screens_in_roots);
INT8(number_of_formats_in_pixmap_formats);
number_of_screens_in_roots = INT8(number_of_screens_in_roots);
number_of_formats_in_pixmap_formats = INT8(number_of_formats_in_pixmap_formats);
INT8(image_byte_order);
INT8(bitmap_format_bit_order);
INT8(bitmap_format_scanline_unit);
@ -3013,6 +3165,11 @@ static void dissect_x11_initial_reply(tvbuff_t *tvb, packet_info *pinfo,
INT8(max_keycode);
UNUSED(4);
STRING8(vendor, length_of_vendor);
unused = (4 - (length_of_vendor % 4)) % 4;
if (unused > 0)
UNUSED(unused);
LISTofPIXMAPFORMAT(pixmap_format, number_of_formats_in_pixmap_formats);
LISTofSCREEN(screen, number_of_screens_in_roots);
} else {
STRING8(reason, length_of_reason);
}
@ -5676,6 +5833,14 @@ void proto_register_x11(void)
&ett_x11_keyboard_value_mask,
&ett_x11_same_screen_focus,
&ett_x11_event,
&ett_x11_list_of_pixmap_format,
&ett_x11_pixmap_format,
&ett_x11_list_of_screen,
&ett_x11_screen,
&ett_x11_list_of_depth_detail,
&ett_x11_depth_detail,
&ett_x11_list_of_visualtype,
&ett_x11_visualtype,
};
static ei_register_info ei[] = {

View File

@ -178,6 +178,9 @@ static int hf_x11_data_length = -1;
static int hf_x11_delete = -1;
static int hf_x11_delta = -1;
static int hf_x11_depth = -1;
static int hf_x11_depth_detail = -1;
static int hf_x11_depth_detail_depth = -1;
static int hf_x11_depth_detail_visualtypes_numbers = -1;
static int hf_x11_destination = -1;
static int hf_x11_direction = -1;
static int hf_x11_drawable = -1;
@ -336,6 +339,10 @@ static int hf_x11_pixel = -1;
static int hf_x11_pixels = -1;
static int hf_x11_pixels_item = -1;
static int hf_x11_pixmap = -1;
static int hf_x11_pixmap_format = -1;
static int hf_x11_pixmap_format_depth = -1;
static int hf_x11_pixmap_format_bits_per_pixel = -1;
static int hf_x11_pixmap_format_scanline_pad = -1;
static int hf_x11_place = -1;
static int hf_x11_plane_mask = -1;
static int hf_x11_planes = -1;
@ -400,6 +407,23 @@ static int hf_x11_same_screen_focus_mask_same_screen = -1;
static int hf_x11_success = -1;
static int hf_x11_save_set_mode = -1;
static int hf_x11_save_under = -1;
static int hf_x11_screen = -1;
static int hf_x11_screen_root = -1;
static int hf_x11_screen_default_colormap = -1;
static int hf_x11_screen_white_pixel = -1;
static int hf_x11_screen_black_pixel = -1;
static int hf_x11_screen_current_input_masks = -1;
static int hf_x11_screen_width_in_pixels = -1;
static int hf_x11_screen_height_in_pixels = -1;
static int hf_x11_screen_width_in_millimeters = -1;
static int hf_x11_screen_height_in_millimeters = -1;
static int hf_x11_screen_min_installed_maps = -1;
static int hf_x11_screen_max_installed_maps = -1;
static int hf_x11_screen_root_visual = -1;
static int hf_x11_screen_backing_stores = -1;
static int hf_x11_screen_save_unders = -1;
static int hf_x11_screen_root_depth = -1;
static int hf_x11_screen_allowed_depths_len = -1;
static int hf_x11_screen_saver_mode = -1;
static int hf_x11_segment = -1;
static int hf_x11_segments = -1;
@ -456,6 +480,14 @@ static int hf_x11_visual_blue = -1;
static int hf_x11_visual_green = -1;
static int hf_x11_visual_red = -1;
static int hf_x11_visualid = -1;
static int hf_x11_visualtype = -1;
static int hf_x11_visualtype_visualid = -1;
static int hf_x11_visualtype_class = -1;
static int hf_x11_visualtype_bits_per_rgb_value = -1;
static int hf_x11_visualtype_colormap_entries = -1;
static int hf_x11_visualtype_red_mask = -1;
static int hf_x11_visualtype_green_mask = -1;
static int hf_x11_visualtype_blue_mask = -1;
static int hf_x11_warp_pointer_dst_window = -1;
static int hf_x11_warp_pointer_src_window = -1;
static int hf_x11_wid = -1;

View File

@ -192,6 +192,10 @@ data-length UINT32 DEC
delete BOOLEAN NONE Delete this property after reading
delta INT16 DEC
depth UINT8 DEC
depth-detail NONE NONE
depth UINT8 DEC
visualtypes-numbers UINT16 DEC
destination UINT8 DEC VALS
direction UINT8 DEC VALS
drawable UINT32 HEX
@ -365,6 +369,11 @@ pixel UINT32 HEX
pixels NONE NONE
pixels_item UINT32 HEX
pixmap UINT32 HEX
pixmap-format NONE NONE Pixmap Formats
depth UINT8 DEC
bits-per-pixel UINT8 DEC
scanline-pad UINT8 DEC
place UINT8 DEC VALS
plane-mask UINT32 HEX VALS
planes UINT16 DEC
@ -434,6 +443,24 @@ same-screen-focus-mask UINT8 HEX
success UINT8 DEC
save-set-mode UINT8 DEC VALS(insert_delete)
save-under BOOLEAN NONE
screen NONE NONE
root UINT32 HEX
default_colormap UINT32 HEX
white_pixel UINT32 HEX
black_pixel UINT32 HEX
current_input_masks UINT32 HEX
width_in_pixels UINT16 DEC
height_in_pixels UINT16 DEC
width_in_millimeters UINT16 DEC
height_in_millimeters UINT16 DEC
min_installed_maps UINT16 DEC
max_installed_maps UINT16 DEC
root_visual UINT32 HEX
backing_stores UINT8 HEX
save_unders BOOLEAN NONE
root_depth UINT8 DEC
allowed_depths_len UINT8 DEC
screen-saver-mode UINT8 DEC VALS
segment NONE NONE
segments NONE NONE
@ -494,6 +521,15 @@ visual-blue UINT16 DEC
visual-green UINT16 DEC
visual-red UINT16 DEC
visualid UINT32 HEX
visualtype NONE NONE
visualid UINT32 HEX
class UINT8 DEC
bits-per-rgb-value UINT8 DEC
colormap-entries UINT16 DEC
red-mask UINT32 HEX
green-mask UINT32 HEX
blue-mask UINT32 HEX
warp-pointer-dst-window UINT32 HEX VALS(zero_is_none)
warp-pointer-src-window UINT32 HEX VALS(zero_is_none)
wid UINT32 HEX Window id

View File

@ -178,6 +178,9 @@
{ &hf_x11_delete, { "delete", "x11.delete", FT_BOOLEAN, BASE_NONE, NULL, 0, "Delete this property after reading", HFILL }},
{ &hf_x11_delta, { "delta", "x11.delta", FT_INT16, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_depth, { "depth", "x11.depth", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_depth_detail, { "depth-detail", "x11.depth-detail", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
{ &hf_x11_depth_detail_depth, { "depth", "x11.depth-detail.depth", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_depth_detail_visualtypes_numbers, { "visualtypes-numbers", "x11.depth-detail.visualtypes-numbers", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_destination, { "destination", "x11.destination", FT_UINT8, BASE_DEC, VALS(destination_vals), 0, NULL, HFILL }},
{ &hf_x11_direction, { "direction", "x11.direction", FT_UINT8, BASE_DEC, VALS(direction_vals), 0, NULL, HFILL }},
{ &hf_x11_drawable, { "drawable", "x11.drawable", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
@ -336,6 +339,10 @@
{ &hf_x11_pixels, { "pixels", "x11.pixels", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
{ &hf_x11_pixels_item, { "pixels_item", "x11.pixels_item", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
{ &hf_x11_pixmap, { "pixmap", "x11.pixmap", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
{ &hf_x11_pixmap_format, { "pixmap-format", "x11.pixmap-format", FT_NONE, BASE_NONE, NULL, 0, "Pixmap Formats", HFILL }},
{ &hf_x11_pixmap_format_depth, { "depth", "x11.pixmap-format.depth", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_pixmap_format_bits_per_pixel, { "bits-per-pixel", "x11.pixmap-format.bits-per-pixel", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_pixmap_format_scanline_pad, { "scanline-pad", "x11.pixmap-format.scanline-pad", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_place, { "place", "x11.place", FT_UINT8, BASE_DEC, VALS(place_vals), 0, NULL, HFILL }},
{ &hf_x11_plane_mask, { "plane-mask", "x11.plane-mask", FT_UINT32, BASE_HEX, VALS(plane_mask_vals), 0, NULL, HFILL }},
{ &hf_x11_planes, { "planes", "x11.planes", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
@ -400,6 +407,23 @@
{ &hf_x11_success, { "success", "x11.success", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_save_set_mode, { "save-set-mode", "x11.save-set-mode", FT_UINT8, BASE_DEC, VALS(insert_delete_vals), 0, NULL, HFILL }},
{ &hf_x11_save_under, { "save-under", "x11.save-under", FT_BOOLEAN, BASE_NONE, NULL, 0, NULL, HFILL }},
{ &hf_x11_screen, { "screen", "x11.screen", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
{ &hf_x11_screen_root, { "root", "x11.screen.root", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
{ &hf_x11_screen_default_colormap, { "default_colormap", "x11.screen.default_colormap", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
{ &hf_x11_screen_white_pixel, { "white_pixel", "x11.screen.white_pixel", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
{ &hf_x11_screen_black_pixel, { "black_pixel", "x11.screen.black_pixel", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
{ &hf_x11_screen_current_input_masks, { "current_input_masks", "x11.screen.current_input_masks", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
{ &hf_x11_screen_width_in_pixels, { "width_in_pixels", "x11.screen.width_in_pixels", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_screen_height_in_pixels, { "height_in_pixels", "x11.screen.height_in_pixels", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_screen_width_in_millimeters, { "width_in_millimeters", "x11.screen.width_in_millimeters", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_screen_height_in_millimeters, { "height_in_millimeters", "x11.screen.height_in_millimeters", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_screen_min_installed_maps, { "min_installed_maps", "x11.screen.min_installed_maps", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_screen_max_installed_maps, { "max_installed_maps", "x11.screen.max_installed_maps", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_screen_root_visual, { "root_visual", "x11.screen.root_visual", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
{ &hf_x11_screen_backing_stores, { "backing_stores", "x11.screen.backing_stores", FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL }},
{ &hf_x11_screen_save_unders, { "save_unders", "x11.screen.save_unders", FT_BOOLEAN, BASE_NONE, NULL, 0, NULL, HFILL }},
{ &hf_x11_screen_root_depth, { "root_depth", "x11.screen.root_depth", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_screen_allowed_depths_len, { "allowed_depths_len", "x11.screen.allowed_depths_len", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_screen_saver_mode, { "screen-saver-mode", "x11.screen-saver-mode", FT_UINT8, BASE_DEC, VALS(screen_saver_mode_vals), 0, NULL, HFILL }},
{ &hf_x11_segment, { "segment", "x11.segment", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
{ &hf_x11_segments, { "segments", "x11.segments", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
@ -456,6 +480,14 @@
{ &hf_x11_visual_green, { "visual-green", "x11.visual-green", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_visual_red, { "visual-red", "x11.visual-red", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_visualid, { "visualid", "x11.visualid", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
{ &hf_x11_visualtype, { "visualtype", "x11.visualtype", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
{ &hf_x11_visualtype_visualid, { "visualid", "x11.visualtype.visualid", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
{ &hf_x11_visualtype_class, { "class", "x11.visualtype.class", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_visualtype_bits_per_rgb_value, { "bits-per-rgb-value", "x11.visualtype.bits-per-rgb-value", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_visualtype_colormap_entries, { "colormap-entries", "x11.visualtype.colormap-entries", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
{ &hf_x11_visualtype_red_mask, { "red-mask", "x11.visualtype.red-mask", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
{ &hf_x11_visualtype_green_mask, { "green-mask", "x11.visualtype.green-mask", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
{ &hf_x11_visualtype_blue_mask, { "blue-mask", "x11.visualtype.blue-mask", FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL }},
{ &hf_x11_warp_pointer_dst_window, { "warp-pointer-dst-window", "x11.warp-pointer-dst-window", FT_UINT32, BASE_HEX, VALS(zero_is_none_vals), 0, NULL, HFILL }},
{ &hf_x11_warp_pointer_src_window, { "warp-pointer-src-window", "x11.warp-pointer-src-window", FT_UINT32, BASE_HEX, VALS(zero_is_none_vals), 0, NULL, HFILL }},
{ &hf_x11_wid, { "wid", "x11.wid", FT_UINT32, BASE_HEX, NULL, 0, "Window id", HFILL }},