summaryrefslogtreecommitdiff
path: root/epan
diff options
context:
space:
mode:
authorMichele Baldessari <michele@acksyn.org>2014-08-23 09:10:13 +0200
committerAlexis La Goutte <alexis.lagoutte@gmail.com>2014-10-02 04:43:12 +0000
commit0efa992d33626948c2ed00f8dde8e4c10b1d6a6f (patch)
tree74ca8297a77d7889425aa4d76e5b308d826a9ca9 /epan
parent67f1fa5e568a0ef3be4827642c299560ca59932f (diff)
downloadwireshark-0efa992d33626948c2ed00f8dde8e4c10b1d6a6f.tar.gz
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>
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-x11.c169
-rw-r--r--epan/dissectors/x11-declarations.h32
-rw-r--r--epan/dissectors/x11-fields36
-rw-r--r--epan/dissectors/x11-register-info.h32
4 files changed, 267 insertions, 2 deletions
diff --git a/epan/dissectors/packet-x11.c b/epan/dissectors/packet-x11.c
index 6c160937b4..26ed6e487c 100644
--- a/epan/dissectors/packet-x11.c
+++ b/epan/dissectors/packet-x11.c
@@ -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[] = {
diff --git a/epan/dissectors/x11-declarations.h b/epan/dissectors/x11-declarations.h
index 597ae33a19..3f3e3bb630 100644
--- a/epan/dissectors/x11-declarations.h
+++ b/epan/dissectors/x11-declarations.h
@@ -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;
diff --git a/epan/dissectors/x11-fields b/epan/dissectors/x11-fields
index 7d02353532..b6b2e64112 100644
--- a/epan/dissectors/x11-fields
+++ b/epan/dissectors/x11-fields
@@ -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
diff --git a/epan/dissectors/x11-register-info.h b/epan/dissectors/x11-register-info.h
index 86a6786685..0c99d34113 100644
--- a/epan/dissectors/x11-register-info.h
+++ b/epan/dissectors/x11-register-info.h
@@ -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 }},