diff options
-rw-r--r-- | AUTHORS | 1 | ||||
-rw-r--r-- | packet-x11.c | 675 | ||||
-rw-r--r-- | x11-fields | 33 |
3 files changed, 653 insertions, 56 deletions
@@ -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 |