aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AUTHORS1
-rw-r--r--packet-x11.c675
-rw-r--r--x11-fields33
3 files changed, 653 insertions, 56 deletions
diff --git a/AUTHORS b/AUTHORS
index 03372a0205..fa35b12a9e 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -48,6 +48,7 @@ Laurent Deniel <laurent.deniel[AT]free.fr> {
Ability to mark the frames and associated features
"Protocol Properties..." menu item
Ring buffer rework
+ X11 decoding enhancements and fixes
Miscellaneous enhancements and fixes
}
diff --git a/packet-x11.c b/packet-x11.c
index 6f791e1823..d5ccff8aaa 100644
--- a/packet-x11.c
+++ b/packet-x11.c
@@ -3,7 +3,7 @@
* Copyright 2000, Christophe Tronche <ch.tronche@computer.org>
* Copyright 2003, Michael Shuldman
*
- * $Id: packet-x11.c,v 1.55 2004/02/25 23:12:49 guy Exp $
+ * $Id: packet-x11.c,v 1.56 2004/03/22 22:53:56 deniel Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -76,9 +76,10 @@
* the initial connection request, and the byte order of the connection.
*
* An opcode of -3 means we haven't yet seen any requests yet.
- * An opcode of -2 means we're not expecting a reply.
- * An opcode of -1 means means we're waiting for a reply to the initial
+ * An opcode of -2 means we're not expecting a reply (unused).
+ * An opcode of -1 means we're waiting for a reply to the initial
* connection request.
+ * An opcode of 0 means the request was not seen (or unknown).
* Other values are the opcode of the request for which we're expecting
* a reply.
*
@@ -86,6 +87,9 @@
#define NOTHING_SEEN -3
#define NOTHING_EXPECTED -2
#define INITIAL_CONN -1
+#define UNKNOWN_OPCODE 0
+
+#define MAX_OPCODES (255 + 1) /* 255 + INITIAL_CONN */
#define BYTE_ORDER_BE 0
#define BYTE_ORDER_LE 1
@@ -119,16 +123,20 @@ Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask };
#define NoSymbol 0L /* special KeySym */
typedef struct {
- GHashTable *seqtable; /* hashtable of sequncenumber <-> opcode. */
+ GHashTable *seqtable; /* hashtable of sequencenumber <-> opcode. */
+ GHashTable *valtable;/* hashtable of sequencenumber <-> &opcode_vals */
+ /* major opcodes including extensions (NULL terminated) */
+ value_string opcode_vals[MAX_OPCODES+1];
int sequencenumber; /* sequencenumber of current packet. */
guint32 iconn_frame; /* frame # of initial connection request */
guint32 iconn_reply; /* frame # of initial connection reply */
int byte_order; /* byte order of connection */
+ gboolean resync; /* resynchronization of sequence number performed */
int *keycodemap[256]; /* keycode to keysymvalue map. */
int keysyms_per_keycode;
int first_keycode;
- int *modifiermap[array_length(modifiers)];/* modifier to keycode. */
+ int *modifiermap[array_length(modifiers)];/* modifier to keycode.*/
int keycodes_per_modifier;
union {
@@ -367,18 +375,39 @@ static const value_string close_down_mode_vals[] = {
{ 0, NULL }
};
+static const value_string colormap_state_vals[] = {
+ { 0, "Uninstalled" },
+ { 1, "Installed" },
+ { 0, NULL }
+};
+
static const value_string coordinate_mode_vals[] = {
{ 0, "Origin" },
{ 1, "Previous" },
{ 0, NULL }
};
+static const value_string destination_vals[] = {
+ { 0, "PointerWindow" },
+ { 1, "InputFocus" },
+ { 0, NULL }
+};
+
static const value_string direction_vals[] = {
{ 0, "RaiseLowest" },
{ 1, "LowerHighest" },
{ 0, NULL }
};
+static const value_string event_detail_vals[] = {
+ { 0, "Ancestor" },
+ { 1, "Virtual" },
+ { 2, "Inferior" },
+ { 3, "Nonlinear" },
+ { 4, "NonlinearVirtual" },
+ { 0, NULL }
+};
+
#define FAMILY_INTERNET 0
#define FAMILY_DECNET 1
#define FAMILY_CHAOS 2
@@ -404,6 +433,26 @@ static const value_string fill_style_vals[] = {
{ 0, NULL }
};
+static const value_string focus_detail_vals[] = {
+ { 0, "Ancestor" },
+ { 1, "Virtual" },
+ { 2, "Inferior" },
+ { 3, "Nonlinear" },
+ { 4, "NonlinearVirtual" },
+ { 5, "Pointer" },
+ { 6, "PointerRoot" },
+ { 7, "None" },
+ { 0, NULL }
+};
+
+static const value_string focus_mode_vals[] = {
+ { 0, "Normal" },
+ { 1, "Grab" },
+ { 2, "Ungrab" },
+ { 3, "WhileGrabbed" },
+ { 0, NULL }
+};
+
static const value_string focus_vals[] = {
{ 0, "None" },
{ 1, "PointerRoot" },
@@ -430,6 +479,22 @@ static const value_string function_vals[] = {
{ 0, NULL }
};
+static const value_string grab_mode_vals[] = {
+ { 0, "Normal" },
+ { 1, "Grab" },
+ { 2, "Ungrab" },
+ { 0, NULL }
+};
+
+static const value_string grab_status_vals[] = {
+ { 0, "Success" },
+ { 1, "AlreadyGrabbed" },
+ { 2, "InvalidTime" },
+ { 3, "NotViewable" },
+ { 4, "Frozen" },
+ { 0, NULL }
+};
+
static const value_string gravity_vals[] = {
{ 1, "NorthWest" },
{ 2, "North" },
@@ -491,6 +556,25 @@ static const value_string on_off_vals[] = {
{ 0, NULL }
};
+static const value_string place_vals[] = {
+ { 0, "Top" },
+ { 1, "Bottom" },
+ { 0, NULL }
+};
+
+static const value_string property_state_vals[] = {
+ { 0, "NewValue" },
+ { 1, "Deleted" },
+ { 0, NULL }
+};
+
+static const value_string visibility_state_vals[] = {
+ { 0, "Unobscured" },
+ { 1, "PartiallyObscured" },
+ { 2, "FullyObscured" },
+ { 0, NULL }
+};
+
/* Requestcodes. From <X11/Xproto.h>. */
#define X_CreateWindow 1
#define X_ChangeWindowAttributes 2
@@ -612,6 +696,8 @@ static const value_string on_off_vals[] = {
#define X_SetModifierMapping 118
#define X_GetModifierMapping 119
#define X_NoOperation 127
+#define X_FirstExtension 128
+#define X_LastExtension 255
static const value_string opcode_vals[] = {
{ INITIAL_CONN, "Initial connection request" },
@@ -639,7 +725,7 @@ static const value_string opcode_vals[] = {
{ X_SetSelectionOwner, "SetSelectionOwner" },
{ X_GetSelectionOwner, "GetSelectionOwner" },
{ X_ConvertSelection, "ConvertSelection" },
- /* { X_SendEvent, "SendEvent" }, */
+ { X_SendEvent, "SendEvent" },
{ X_GrabPointer, "GrabPointer" },
{ X_UngrabPointer, "UngrabPointer" },
{ X_GrabButton, "GrabButton" },
@@ -772,6 +858,8 @@ static const value_string opcode_vals[] = {
#define ColormapNotify 32
#define ClientMessage 33
#define MappingNotify 34
+#define FirstExtensionEvent 64
+#define LastExtensionEvent 127
static const value_string eventcode_vals[] = {
{ KeyPress, "KeyPress" },
@@ -1058,6 +1146,7 @@ keysyms_per_keycode) {\
#define SETofEVENT(name) { setOfEvent(tvb, offsetp, t, little_endian); }
#define SETofDEVICEEVENT(name) { setOfDeviceEvent(tvb, offsetp, t, little_endian);}
#define SETofKEYMASK(name) { setOfKeyButMask(tvb, offsetp, t, little_endian, 0); }
+#define SETofKEYBUTMASK(name) { setOfKeyButMask(tvb, offsetp, t, little_endian, 1); }
#define SETofPOINTEREVENT(name) { setOfPointerEvent(tvb, offsetp, t, little_endian); }
#define STRING8(name, length) { string8(tvb, offsetp, t, hf_x11_##name, length); }
#define STRING16(name, length) { string16(tvb, offsetp, t, hf_x11_##name, hf_x11_##name##_bytes, length, little_endian); }
@@ -1094,7 +1183,7 @@ keysyms_per_keycode) {\
*offsetp, sizeof(seqno), seqno, \
"sequencenumber: %d (%s)", \
(int)seqno, \
- val_to_str(opcode, opcode_vals, "<Unknown opcode %d>")); \
+ val_to_str(opcode, state->opcode_vals, "<Unknown opcode %d>")); \
*offsetp += sizeof(seqno); \
} while (0)
@@ -2802,7 +2891,7 @@ static void dissect_x11_initial_conn(tvbuff_t *tvb, packet_info *pinfo,
*/
state->sequencenumber = 0;
g_hash_table_insert(state->seqtable, (int *)state->sequencenumber,
- (int *)INITIAL_CONN);
+ (int *)INITIAL_CONN);
}
static void dissect_x11_initial_reply(tvbuff_t *tvb, packet_info *pinfo,
@@ -2868,11 +2957,12 @@ static void dissect_x11_request(tvbuff_t *tvb, packet_info *pinfo,
int next_offset;
proto_item *ti;
proto_tree *t;
- int length, opcode;
+ int length, opcode, i;
guint8 v8, v8_2, v8_3;
guint16 v16;
guint32 v32;
gint left;
+ gchar *name;
length = VALUE16(tvb, 2) * 4;
@@ -2893,16 +2983,47 @@ static void dissect_x11_request(tvbuff_t *tvb, packet_info *pinfo,
if (check_col(pinfo->cinfo, COL_INFO))
col_append_fstr(pinfo->cinfo, COL_INFO, "%s %s", sep,
- val_to_str(opcode, opcode_vals, "<Unknown opcode %d>"));
+ val_to_str(opcode, state->opcode_vals,
+ "<Unknown opcode %d>"));
proto_item_append_text(ti, ", Request, opcode: %d (%s)",
- opcode, val_to_str(opcode, opcode_vals,
- "<Unknown opcode %d>"));
+ opcode, val_to_str(opcode, state->opcode_vals,
+ "<Unknown opcode %d>"));
/*
* Does this request expect a reply?
*/
switch(opcode) {
+
+ case X_QueryExtension:
+
+ /* necessary processing even if tree == NULL */
+
+ v16 = VALUE16(tvb, 4);
+ name = g_malloc(v16 + 1);
+ stringCopy(name, tvb_get_ptr(tvb, 8, v16), v16);
+
+ /* store string of extension, opcode will be set at reply */
+ i = 0;
+ while(i < MAX_OPCODES) {
+ if (state->opcode_vals[i].strptr == NULL) {
+ state->opcode_vals[i].strptr = name;
+ g_hash_table_insert(state->valtable,
+ (int *)state->sequencenumber,
+ (int *)&state->opcode_vals[i]);
+ break;
+ } else if (strcmp(state->opcode_vals[i].strptr,
+ name) == 0) {
+ g_hash_table_insert(state->valtable,
+ (int *)state->sequencenumber,
+ (int *)&state->opcode_vals[i]);
+ break;
+ }
+ i++;
+ }
+
+ /* QueryExtension expects a reply, fall through */
+
case X_AllocColor:
case X_AllocColorCells:
case X_AllocColorPlanes:
@@ -2934,7 +3055,6 @@ static void dissect_x11_request(tvbuff_t *tvb, packet_info *pinfo,
case X_LookupColor:
case X_QueryBestSize:
case X_QueryColors:
- case X_QueryExtension:
case X_QueryFont:
case X_QueryKeymap:
case X_QueryPointer:
@@ -2946,13 +3066,22 @@ static void dissect_x11_request(tvbuff_t *tvb, packet_info *pinfo,
/*
* Those requests expect a reply.
*/
-
g_hash_table_insert(state->seqtable,
- (int *)state->sequencenumber, (int *)opcode);
+ (int *)state->sequencenumber,
+ (int *)opcode);
break;
default:
+ /*
+ * With Extension, we don't know, so assume there could be one
+ */
+ if (opcode >= X_FirstExtension && opcode <= X_LastExtension) {
+ g_hash_table_insert(state->seqtable,
+ (int *)state->sequencenumber,
+ (int *)opcode);
+ }
+
/*
* No reply is expected from any other request.
*/
@@ -3123,6 +3252,14 @@ static void dissect_x11_request(tvbuff_t *tvb, packet_info *pinfo,
TIMESTAMP(time);
break;
+ case X_SendEvent:
+ BOOL(propagate);
+ REQUEST_LENGTH();
+ WINDOW(destination);
+ SETofEVENT(event_mask);
+ UNDECODED(32);
+ break;
+
case X_GrabPointer:
BOOL(owner_events);
REQUEST_LENGTH();
@@ -4222,11 +4359,26 @@ static void
x11_stateinit(x11_conv_data_t **state, conversation_t *conversation)
{
static x11_conv_data_t stateinit;
+ int i = 0;
*state = g_mem_chunk_alloc(x11_state_chunk);
**state = stateinit;
+ /* initialise opcodes */
+ while (1) {
+ if (opcode_vals[i].strptr == NULL) break;
+ (*state)->opcode_vals[i].value = opcode_vals[i].value;
+ (*state)->opcode_vals[i].strptr = opcode_vals[i].strptr;
+ i++;
+ }
+ while (i <= MAX_OPCODES) {
+ (*state)->opcode_vals[i].value = 0;
+ (*state)->opcode_vals[i].strptr = NULL;
+ i++;
+ }
+
(*state)->seqtable = g_hash_table_new(g_direct_hash, g_direct_equal);
+ (*state)->valtable = g_hash_table_new(g_direct_hash, g_direct_equal);
g_hash_table_insert((*state)->seqtable, (int *)0, (int *)NOTHING_SEEN);
(*state)->byte_order = BYTE_ORDER_UNKNOWN; /* don't know yet*/
conversation_add_proto_data(conversation, proto_x11, *state);
@@ -4379,6 +4531,8 @@ dissect_x11_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
gboolean little_endian)
{
int offset = 0, *offsetp = &offset, length, left, opcode;
+ int major_opcode, sequence_number;
+ value_string *vals_p;
proto_item *ti;
proto_tree *t;
@@ -4394,8 +4548,9 @@ dissect_x11_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
* 1) the request sequence number wraps in the lower 16
* bits;
*
- * 2) we don't see the initial connection request and thus
- * don't have the right sequence numbers;
+ * 2) we don't see the initial connection request and the
+ * resynchronization of sequence number fails and thus
+ * don't have the right sequence numbers
*
* 3) we don't have all the packets in the capture and
* get out of sequence.
@@ -4404,26 +4559,73 @@ dissect_x11_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
* the most recent not-already-replied-to request in the same
* connection. That also might mismatch replies to requests if
* packets are lost, but there's nothing you can do to fix that.
- *
- * XXX - if "opcode" is 0, we shouldn't say "Unknown opcode",
- * we should say that we don't have the request for the reply.
*/
+
+ sequence_number = VALUE16(tvb, offset + 2);
opcode = (int)g_hash_table_lookup(state->seqtable,
- (int *)VALUE16(tvb, offset + 2));
+ (int *)sequence_number);
- if (check_col(pinfo->cinfo, COL_INFO))
- col_append_fstr(pinfo->cinfo, COL_INFO, "%s %s",
- sep,
- /*
- * don't print opcode value since if it's
- * unknown, we didn't know to save the
- * request opcode.
- */
- val_to_str(opcode, opcode_vals, "<Unknown opcode %d>"));
+ if (state->iconn_frame == 0 && state->resync == FALSE) {
- proto_item_append_text(ti, ", Reply, opcode: %d (%s)",
- opcode, val_to_str(opcode, opcode_vals,
- "<Unknown opcode %d>"));
+ /*
+ * We don't see the initial connection request and no
+ * resynchronization has been performed yet (first reply),
+ * set the current sequence number to the one of the
+ * current reply (this is only performed once).
+ */
+ state->sequencenumber = sequence_number;
+ state->resync = TRUE;
+ }
+
+ if (opcode == UNKNOWN_OPCODE) {
+ if (check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO,
+ "%s to unknown request", sep);
+ proto_item_append_text(ti, ", Reply to unknown request");
+ } else {
+ if (check_col(pinfo->cinfo, COL_INFO))
+ col_append_fstr(pinfo->cinfo, COL_INFO, "%s %s",
+ sep,
+ val_to_str(opcode, state->opcode_vals,
+ "<Unknown opcode %d>"));
+
+ proto_item_append_text(ti, ", Reply, opcode: %d (%s)",
+ opcode, val_to_str(opcode,
+ state->opcode_vals,
+ "<Unknown opcode %d>"));
+ }
+
+ switch (opcode) {
+
+ /*
+ * Replies that need special processing outside tree
+ */
+
+ case X_QueryExtension:
+
+ /*
+ * if extension is present and request is known:
+ * store opcode of extension in value_string of
+ * opcodes
+ */
+ if (!VALUE8(tvb, offset + 8)) {
+ /* not present */
+ break;
+ }
+
+ vals_p = g_hash_table_lookup(state->valtable,
+ (int *)sequence_number);
+ if (vals_p != NULL) {
+ major_opcode = VALUE8(tvb, offset + 9);
+ vals_p->value = major_opcode;
+ g_hash_table_remove(state->valtable,
+ (int *)sequence_number);
+ }
+ break;
+
+ default:
+ break;
+ }
if (tree == NULL)
return;
@@ -4431,12 +4633,39 @@ dissect_x11_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
switch (opcode) {
/*
* Requests that expect a reply.
- */
+ */
case X_GetWindowAttributes:
+ REPLYCONTENTS_COMMON();
+ break;
+
case X_GetGeometry:
+ REPLY(reply);
+ CARD8(depth);
+ SEQUENCENUMBER_REPLY(sequencenumber);
+ REPLYLENGTH(replylength);
+ WINDOW(rootwindow);
+ INT16(x);
+ INT16(y);
+ CARD16(width);
+ CARD16(height);
+ CARD16(border_width);
+ UNUSED(10);
+ break;
+
case X_QueryTree:
+ REPLYCONTENTS_COMMON();
+ break;
+
case X_InternAtom:
+ REPLY(reply);
+ UNUSED(1);
+ SEQUENCENUMBER_REPLY(sequencenumber);
+ REPLYLENGTH(replylength);
+ ATOM(atom);
+ UNUSED(20);
+ break;
+
case X_GetAtomName:
REPLYCONTENTS_COMMON();
break;
@@ -4453,48 +4682,187 @@ dissect_x11_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
break;
case X_ListProperties:
+ REPLY(reply);
+ UNUSED(1);
+ SEQUENCENUMBER_REPLY(sequencenumber);
+ REPLYLENGTH(replylength);
+ length = CARD16(property_number);
+ UNUSED(22);
+ LISTofATOM(properties, length*4);
+ break;
+
case X_GetSelectionOwner:
+ REPLY(reply);
+ UNUSED(1);
+ SEQUENCENUMBER_REPLY(sequencenumber);
+ REPLYLENGTH(replylength);
+ WINDOW(owner);
+ UNUSED(20);
+ break;
+
case X_GrabPointer:
case X_GrabKeyboard:
+ REPLY(reply);
+ ENUM8(grab_status);
+ SEQUENCENUMBER_REPLY(sequencenumber);
+ REPLYLENGTH(replylength);
+ UNUSED(24);
+ break;
+
case X_QueryPointer:
+ REPLY(reply);
+ BOOL(same_screen);
+ SEQUENCENUMBER_REPLY(sequencenumber);
+ REPLYLENGTH(replylength);
+ WINDOW(rootwindow);
+ WINDOW(childwindow);
+ INT16(root_x);
+ INT16(root_y);
+ INT16(win_x);
+ INT16(win_y);
+ SETofKEYBUTMASK(mask);
+ UNUSED(6);
+ break;
+
case X_GetMotionEvents:
- case X_TranslateCoords:
REPLYCONTENTS_COMMON();
break;
+ case X_TranslateCoords:
+ REPLY(reply);
+ BOOL(same_screen);
+ SEQUENCENUMBER_REPLY(sequencenumber);
+ REPLYLENGTH(replylength);
+ WINDOW(childwindow);
+ INT16(dst_x);
+ INT16(dst_y);
+ UNUSED(16);
+ break;
+
+ case X_GetInputFocus:
+ REPLY(reply);
+ ENUM8(revert_to);
+ SEQUENCENUMBER_REPLY(sequencenumber);
+ REPLYLENGTH(replylength);
+ WINDOW(focus);
+ UNUSED(20);
+ break;
+
case X_QueryKeymap:
+ REPLY(reply);
+ UNUSED(1);
+ SEQUENCENUMBER_REPLY(sequencenumber);
+ REPLYLENGTH(replylength);
+ LISTofCARD8(keys, 32);
+ break;
+
case X_QueryFont:
case X_QueryTextExtents:
case X_ListFonts:
case X_GetImage:
case X_ListInstalledColormaps:
+ REPLYCONTENTS_COMMON();
+ break;
+
case X_AllocColor:
+ REPLY(reply);
+ UNUSED(1);
+ SEQUENCENUMBER_REPLY(sequencenumber);
+ REPLYLENGTH(replylength);
+ CARD16(red);
+ CARD16(green);
+ CARD16(blue);
+ UNUSED(2);
+ CARD32(pixel);
+ UNUSED(12);
+ break;
+
case X_QueryColors:
+ REPLYCONTENTS_COMMON();
+ break;
+
case X_LookupColor:
+ REPLY(reply);
+ UNUSED(1);
+ SEQUENCENUMBER_REPLY(sequencenumber);
+ REPLYLENGTH(replylength);
+ CARD16(exact_red);
+ CARD16(exact_green);
+ CARD16(exact_blue);
+ CARD16(visual_red);
+ CARD16(visual_green);
+ CARD16(visual_blue);
+ UNUSED(12);
+ break;
+
case X_QueryBestSize:
+ REPLY(reply);
+ UNUSED(1);
+ SEQUENCENUMBER_REPLY(sequencenumber);
+ REPLYLENGTH(replylength);
+ CARD16(width);
+ CARD16(height);
+ UNUSED(20);
+ break;
+
case X_QueryExtension:
+ REPLY(reply);
+ UNUSED(1);
+ SEQUENCENUMBER_REPLY(sequencenumber);
+ REPLYLENGTH(replylength);
+ BOOL(present);
+ CARD8(major_opcode);
+ CARD8(first_event);
+ CARD8(first_error);
+ UNUSED(20);
+ break;
+
case X_ListExtensions:
REPLYCONTENTS_COMMON();
break;
case X_GetKeyboardMapping:
- state->first_keycode
- = state->request.GetKeyboardMapping.first_keycode,
+ state->first_keycode =
+ state->request.GetKeyboardMapping.first_keycode;
REPLY(reply);
- state->keysyms_per_keycode
- = FIELD8(keysyms_per_keycode);
+ state->keysyms_per_keycode =
+ FIELD8(keysyms_per_keycode);
SEQUENCENUMBER_REPLY(sequencenumber);
length = REPLYLENGTH(replylength);
UNUSED(24);
LISTofKEYSYM(keysyms, state->keycodemap,
- state->request.GetKeyboardMapping.first_keycode,
- length / state->keysyms_per_keycode,
- state->keysyms_per_keycode);
+ state->request.GetKeyboardMapping.first_keycode,
+ length / state->keysyms_per_keycode,
+ state->keysyms_per_keycode);
break;
case X_GetKeyboardControl:
+ REPLYCONTENTS_COMMON();
+ break;
+
case X_GetPointerControl:
+ REPLY(reply);
+ UNUSED(1);
+ SEQUENCENUMBER_REPLY(sequencenumber);
+ REPLYLENGTH(replylength);
+ CARD16(acceleration_numerator);
+ CARD16(acceleration_denominator);
+ CARD16(threshold);
+ UNUSED(18);
+ break;
+
case X_GetScreenSaver:
+ REPLY(reply);
+ UNUSED(1);
+ SEQUENCENUMBER_REPLY(sequencenumber);
+ REPLYLENGTH(replylength);
+ CARD16(timeout);
+ CARD16(interval);
+ ENUM8(prefer_blanking);
+ ENUM8(allow_exposures);
+ UNUSED(18);
+ break;
+
case X_ListHosts:
case X_SetPointerMapping:
case X_GetPointerMapping:
@@ -4504,13 +4872,13 @@ dissect_x11_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
case X_GetModifierMapping:
REPLY(reply);
- state->keycodes_per_modifier
- = FIELD8(keycodes_per_modifier);
+ state->keycodes_per_modifier =
+ FIELD8(keycodes_per_modifier);
SEQUENCENUMBER_REPLY(sequencenumber);
REPLYLENGTH(replylength);
UNUSED(24);
LISTofKEYCODE(state->modifiermap, keycodes,
- state->keycodes_per_modifier);
+ state->keycodes_per_modifier);
break;
default:
@@ -4592,37 +4960,245 @@ dissect_x11_event(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
case EnterNotify:
case LeaveNotify:
- CARD8(detail);
+ ENUM8(event_detail);
CARD16(event_sequencenumber);
EVENTCONTENTS_COMMON();
+ ENUM8(grab_mode);
CARD8(same_screen);
break;
case FocusIn:
case FocusOut:
+ ENUM8(focus_detail);
+ CARD16(event_sequencenumber);
+ WINDOW(eventwindow);
+ ENUM8(focus_mode);
+ UNUSED(23);
+ break;
+
case KeymapNotify:
+ break;
+
case Expose:
+ UNUSED(1);
+ CARD16(event_sequencenumber);
+ WINDOW(eventwindow);
+ INT16(x);
+ INT16(y);
+ CARD16(width);
+ CARD16(height);
+ CARD16(count);
+ UNUSED(14);
+ break;
+
case GraphicsExpose:
+ UNUSED(1);
+ CARD16(event_sequencenumber);
+ DRAWABLE(drawable);
+ CARD16(x);
+ CARD16(y);
+ CARD16(width);
+ CARD16(height);
+ CARD16(minor_opcode);
+ CARD16(count);
+ CARD8(major_opcode);
+ UNUSED(11);
+ break;
+
case NoExpose:
+ UNUSED(1);
+ CARD16(event_sequencenumber);
+ DRAWABLE(drawable);
+ CARD16(minor_opcode);
+ CARD8(major_opcode);
+ UNUSED(21);
+ break;
+
case VisibilityNotify:
+ UNUSED(1);
+ CARD16(event_sequencenumber);
+ WINDOW(eventwindow);
+ ENUM8(visibility_state);
+ UNUSED(23);
+ break;
+
case CreateNotify:
+ UNUSED(1);
+ CARD16(event_sequencenumber);
+ WINDOW(parent);
+ WINDOW(eventwindow);
+ INT16(x);
+ INT16(y);
+ CARD16(width);
+ CARD16(height);
+ CARD16(border_width);
+ BOOL(override_redirect);
+ UNUSED(9);
+ break;
+
case DestroyNotify:
+ UNUSED(1);
+ CARD16(event_sequencenumber);
+ WINDOW(eventwindow);
+ WINDOW(window);
+ UNUSED(20);
+ break;
+
case UnmapNotify:
+ UNUSED(1);
+ CARD16(event_sequencenumber);
+ WINDOW(eventwindow);
+ WINDOW(window);
+ BOOL(from_configure);
+ UNUSED(19);
+ break;
+
case MapNotify:
+ UNUSED(1);
+ CARD16(event_sequencenumber);
+ WINDOW(eventwindow);
+ WINDOW(window);
+ BOOL(override_redirect);
+ UNUSED(19);
+ break;
+
case MapRequest:
+ UNUSED(1);
+ CARD16(event_sequencenumber);
+ WINDOW(parent);
+ WINDOW(eventwindow);
+ UNUSED(20);
+ break;
+
case ReparentNotify:
+ UNUSED(1);
+ CARD16(event_sequencenumber);
+ WINDOW(eventwindow);
+ WINDOW(window);
+ WINDOW(parent);
+ INT16(x);
+ INT16(y);
+ BOOL(override_redirect);
+ UNUSED(11);
+ break;
+
case ConfigureNotify:
+ UNUSED(1);
+ CARD16(event_sequencenumber);
+ WINDOW(eventwindow);
+ WINDOW(window);
+ WINDOW(above_sibling);
+ INT16(x);
+ INT16(y);
+ CARD16(width);
+ CARD16(height);
+ CARD16(border_width);
+ BOOL(override_redirect);
+ UNUSED(5);
+ break;
+
case ConfigureRequest:
+ break;
+
case GravityNotify:
+ UNUSED(1);
+ CARD16(event_sequencenumber);
+ WINDOW(eventwindow);
+ WINDOW(window);
+ INT16(x);
+ INT16(y);
+ UNUSED(16);
+ break;
+
case ResizeRequest:
+ UNUSED(1);
+ CARD16(event_sequencenumber);
+ WINDOW(eventwindow);
+ CARD16(width);
+ CARD16(height);
+ UNUSED(20);
+ break;
+
case CirculateNotify:
+ UNUSED(1);
+ CARD16(event_sequencenumber);
+ WINDOW(eventwindow);
+ WINDOW(window);
+ UNUSED(4);
+ ENUM8(place);
+ UNUSED(15);
+ break;
+
case CirculateRequest:
+ UNUSED(1);
+ CARD16(event_sequencenumber);
+ WINDOW(parent);
+ WINDOW(eventwindow);
+ UNUSED(4);
+ ENUM8(place);
+ UNUSED(15);
+ break;
+
case PropertyNotify:
+ UNUSED(1);
+ CARD16(event_sequencenumber);
+ WINDOW(eventwindow);
+ ATOM(atom);
+ TIMESTAMP(time);
+ ENUM8(property_state);
+ UNUSED(15);
+ break;
+
case SelectionClear:
+ UNUSED(1);
+ CARD16(event_sequencenumber);
+ TIMESTAMP(time);
+ WINDOW(owner);
+ ATOM(selection);
+ UNUSED(16);
+ break;
+
case SelectionRequest:
+ UNUSED(1);
+ CARD16(event_sequencenumber);
+ TIMESTAMP(time);
+ WINDOW(owner);
+ WINDOW(requestor);
+ ATOM(selection);
+ ATOM(target);
+ ATOM(property);
+ UNUSED(4);
+ break;
+
case SelectionNotify:
+ UNUSED(1);
+ CARD16(event_sequencenumber);
+ TIMESTAMP(time);
+ WINDOW(requestor);
+ ATOM(selection);
+ ATOM(target);
+ ATOM(property);
+ UNUSED(8);
+ break;
+
case ColormapNotify:
+ UNUSED(1);
+ CARD16(event_sequencenumber);
+ WINDOW(eventwindow);
+ COLORMAP(cmap);
+ BOOL(new);
+ ENUM8(colormap_state);
+ UNUSED(18);
+ break;
+
case ClientMessage:
+ CARD8(format);
+ CARD16(event_sequencenumber);
+ WINDOW(eventwindow);
+ ATOM(type);
+ LISTofBYTE(data, 20);
+ break;
+
case MappingNotify:
default:
break;
@@ -4714,13 +5290,6 @@ void proto_register_x11(void)
/* Setup list of header fields */
static hf_register_info hf[] = {
-/*
- { &hf_x11_FIELDABBREV,
- { "FIELDNAME", "x11.FIELDABBREV",
- FIELDTYPE, FIELDBASE, FIELDCONVERT, BITMASK,
- "FIELDDESCR", HFILL }
- },
-*/
#include "x11-register-info.h"
};
diff --git a/x11-fields b/x11-fields
index 3bfb4c54f4..2db7c7848b 100644
--- a/x11-fields
+++ b/x11-fields
@@ -3,7 +3,7 @@
#
# Copyright 2000, Christophe Tronche <ch.tronche@computer.org>
#
-# $Id: x11-fields,v 1.11 2004/01/04 10:57:18 guy Exp $
+# $Id: x11-fields,v 1.12 2004/03/22 22:53:56 deniel Exp $
#
# Ethereal - Network traffic analyzer
# By Gerald Combs <gerald@ethereal.com>
@@ -24,6 +24,7 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
+above-sibling UINT32 HEX
acceleration-denominator INT16 DEC
acceleration-numerator INT16 DEC
access-mode UINT8 DEC VALS
@@ -88,7 +89,7 @@ clip-y-origin INT16 DEC
close-down-mode UINT8 DEC VALS
cmap UINT32 HEX
colormap UINT32 HEX
-
+colormap-state UINT8 DEC VALS
color-items NONE NONE
coloritem NONE NONE
@@ -151,6 +152,9 @@ eventbutton UINT8 DEC eventbutton
eventcode UINT8 DEC VALS eventcode
eventwindow UINT32 HEX eventwindow
+first-event UINT8 DEC
+first-error UINT8 DEC
+
gc-dashes UINT8 DEC
gc-value-mask UINT32 HEX
@@ -185,6 +189,7 @@ data-length UINT32 DEC
delete BOOLEAN NONE Delete this property after reading
delta INT16 DEC
depth UINT8 DEC
+destination UINT8 DEC VALS
direction UINT8 DEC VALS
drawable UINT32 HEX
dst-drawable UINT32 HEX
@@ -192,6 +197,7 @@ dst-gc UINT32 HEX
dst-window UINT32 HEX
dst-x INT16 DEC
dst-y INT16 DEC
+event-detail UINT8 DEC VALS
event-mask UINT32 HEX
KeyPress BOOLEAN 32 0x00000001
@@ -221,6 +227,9 @@ event-mask UINT32 HEX
OwnerGrabButton BOOLEAN 32 0x01000000
erroneous-bits BOOLEAN 32 0xfe000000
+exact-blue UINT16 DEC
+exact-green UINT16 DEC
+exact-red UINT16 DEC
exposures BOOLEAN NONE
family UINT8 DEC VALS
fid UINT32 HEX Font id
@@ -228,16 +237,21 @@ fill-rule UINT8 DEC VALS
fill-style UINT8 DEC VALS
first-keycode UINT8 DEC
focus UINT8 DEC VALS
+focus-detail UINT8 DEC VALS
+focus-mode UINT8 DEC VALS
font UINT32 HEX
fore-blue UINT16 DEC
fore-green UINT16 DEC
fore-red UINT16 DEC
foreground UINT32 HEX
format UINT8 DEC
+from-configure BOOLEAN NONE
function UINT8 DEC VALS
gc UINT32 HEX
get-property-type UINT32 HEX VALS(zero_is_any_property_type)
-grab_window UINT32 HEX
+grab-mode UINT8 DEC VALS
+grab-status UINT8 DEC VALS
+grab-window UINT32 HEX
graphics-exposures BOOLEAN NONE
height UINT16 DEC
image-byte-order UINT8 HEX VALS
@@ -271,6 +285,8 @@ keycodes NONE NONE
keycodes-per-modifier UINT8 DEC
+keys UINT8 DEC
+
keysyms NONE NONE
item NONE NONE
keysym UINT32 HEX
@@ -318,6 +334,7 @@ modifiers-mask UINT16 HEX
motion-buffer-size UINT16 DEC motion buffer size
+new BOOLEAN NONE
number-of-formats-in-pixmap-formats UINT8 DEC number of formats in pixmap formats
number-of-screens-in-roots UINT8 DEC number of screens in roots
@@ -343,6 +360,7 @@ pixel UINT32 HEX
pixels NONE NONE
pixels_item UINT32 HEX
pixmap UINT32 HEX
+place UINT8 DEC VALS
plane-mask UINT32 HEX VALS
planes UINT16 DEC
point NONE NONE
@@ -368,12 +386,15 @@ pointer-event-mask UINT16 HEX
pointer-mode UINT8 DEC VALS(pointer_keyboard_mode)
prefer-blanking UINT8 DEC VALS(yes_no_default)
+present BOOLEAN NONE
+propagate BOOLEAN NONE
properties NONE NONE
item UINT32 HEX
property UINT32 HEX
property-number UINT16 DEC
+property-state UINT8 DEC VALS
protocol-major-version UINT16 DEC
protocol-minor-version UINT16 DEC
reason STRING HEX reason
@@ -459,13 +480,19 @@ undecoded NONE NONE Yet undecoded by dissector
unused NONE NONE
valuelength UINT32 DEC valuelength
vendor STRING HEX vendor
+visibility-state UINT8 DEC VALS
visual UINT32 HEX
+visual-blue UINT16 DEC
+visual-green UINT16 DEC
+visual-red UINT16 DEC
visualid 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
width UINT16 DEC
win-gravity UINT8 DEC VALS(gravity)
+win-x INT16 DEC
+win-y INT16 DEC
window UINT32 HEX
window-class UINT16 DEC VALS Window class