diff options
author | Bill Meier <wmeier@newsguy.com> | 2010-12-14 01:50:31 +0000 |
---|---|---|
committer | Bill Meier <wmeier@newsguy.com> | 2010-12-14 01:50:31 +0000 |
commit | 62e44e3f666dc3de54d13fef9a031936c70b30de (patch) | |
tree | 5e791fba6e6fe18e9b621f88695914df3cf96a43 /epan/dissectors/packet-x11.c | |
parent | 6003c15d6f617aa067ab8fa7c445191b7d798bf3 (diff) |
Minor cleanup:
- Initialize a few static global variables;
- Remove two unnecessary calls to g_hash_table_foreach_remove;
- Do whitespace cleanup and use consistent indentation;
- Fix a few typos and fix up several comments.
svn path=/trunk/; revision=35183
Diffstat (limited to 'epan/dissectors/packet-x11.c')
-rw-r--r-- | epan/dissectors/packet-x11.c | 6836 |
1 files changed, 3418 insertions, 3418 deletions
diff --git a/epan/dissectors/packet-x11.c b/epan/dissectors/packet-x11.c index d48be62c05..02011927fd 100644 --- a/epan/dissectors/packet-x11.c +++ b/epan/dissectors/packet-x11.c @@ -86,39 +86,39 @@ * a reply. * */ -#define NOTHING_SEEN -3 -#define NOTHING_EXPECTED -2 -#define INITIAL_CONN -1 +#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 LastExtensionError 255 -#define LastExtensionEvent 127 +#define MAX_OPCODES (255 + 1) /* 255 + INITIAL_CONN */ +#define LastExtensionError 255 +#define LastExtensionEvent 127 -#define BYTE_ORDER_BE 0 -#define BYTE_ORDER_LE 1 -#define BYTE_ORDER_UNKNOWN -1 +#define BYTE_ORDER_BE 0 +#define BYTE_ORDER_LE 1 +#define BYTE_ORDER_UNKNOWN -1 static const char *modifiers[] = { - "Shift", - "Lock", - "Control", - "Mod1", - "Mod2", - "Mod3", - "Mod4", - "Mod5" + "Shift", + "Lock", + "Control", + "Mod1", + "Mod2", + "Mod3", + "Mod4", + "Mod5" }; /* Keymasks. From <X11/X.h>. */ -#define ShiftMask (1<<0) -#define LockMask (1<<1) -#define ControlMask (1<<2) -#define Mod1Mask (1<<3) -#define Mod2Mask (1<<4) -#define Mod3Mask (1<<5) -#define Mod4Mask (1<<6) -#define Mod5Mask (1<<7) +#define ShiftMask (1<<0) +#define LockMask (1<<1) +#define ControlMask (1<<2) +#define Mod1Mask (1<<3) +#define Mod2Mask (1<<4) +#define Mod3Mask (1<<5) +#define Mod4Mask (1<<6) +#define Mod5Mask (1<<7) static const int modifiermask[] = { ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask }; @@ -128,37 +128,37 @@ Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask }; typedef struct _x11_conv_data { struct _x11_conv_data *next; - GHashTable *seqtable; /* hashtable of sequencenumber <-> opcode. */ - GHashTable *valtable;/* hashtable of sequencenumber <-> &opcode_vals */ + 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]; /* error codes including extensions (NULL terminated) */ value_string errorcode_vals[LastExtensionError + 2]; /* event codes including extensions (NULL terminated) */ value_string eventcode_vals[LastExtensionEvent + 2]; - GHashTable *eventcode_funcs; /* hashtable of eventcode <-> dissect_event() */ - GHashTable *reply_funcs; /* hashtable of opcode <-> dissect_reply() */ + GHashTable *eventcode_funcs; /* hashtable of eventcode <-> dissect_event() */ + GHashTable *reply_funcs; /* hashtable of opcode <-> dissect_reply() */ - 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 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 keycodes_per_modifier; + int *keycodemap[256]; /* keycode to keysymvalue map. */ + int keysyms_per_keycode; + int first_keycode; + int *modifiermap[array_length(modifiers)];/* modifier to keycode.*/ + int keycodes_per_modifier; union { - struct { - int first_keycode; - } GetKeyboardMapping; + struct { + int first_keycode; + } GetKeyboardMapping; } request; } x11_conv_data_t; -static x11_conv_data_t *x11_conv_data_list; +static x11_conv_data_t *x11_conv_data_list = NULL; static GHashTable *extension_table; /* hashtable of extension name <-> dispatch function */ static GHashTable *event_table; /* hashtable of extension name <-> event info list */ @@ -193,28 +193,28 @@ static gint ett_x11_segment = -1; static gint ett_x11_list_of_string8 = -1; static gint ett_x11_list_of_text_item = -1; static gint ett_x11_text_item = -1; -static gint ett_x11_gc_value_mask = -1; /* XXX - unused */ -static gint ett_x11_event_mask = -1; /* XXX - unused */ -static gint ett_x11_do_not_propagate_mask = -1; /* XXX - unused */ +static gint ett_x11_gc_value_mask = -1; /* XXX - unused */ +static gint ett_x11_event_mask = -1; /* XXX - unused */ +static gint ett_x11_do_not_propagate_mask = -1; /* XXX - unused */ static gint ett_x11_set_of_key_mask = -1; -static gint ett_x11_pointer_event_mask = -1; /* XXX - unused */ -static gint ett_x11_window_value_mask = -1; /* XXX - unused */ -static gint ett_x11_configure_window_mask = -1; /* XXX - unused */ -static gint ett_x11_keyboard_value_mask = -1; /* XXX - unused */ +static gint ett_x11_pointer_event_mask = -1; /* XXX - unused */ +static gint ett_x11_window_value_mask = -1; /* XXX - unused */ +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; /* desegmentation of X11 messages */ static gboolean x11_desegment = TRUE; -#define TCP_PORT_X11 6000 -#define TCP_PORT_X11_2 6001 -#define TCP_PORT_X11_3 6002 +#define TCP_PORT_X11 6000 +#define TCP_PORT_X11_2 6001 +#define TCP_PORT_X11_3 6002 /* * Round a length to a multiple of 4 bytes. */ -#define ROUND_LENGTH(n) ((((n) + 3)/4) * 4) +#define ROUND_LENGTH(n) ((((n) + 3)/4) * 4) /************************************************************************ *** *** @@ -223,15 +223,15 @@ static gboolean x11_desegment = TRUE; ************************************************************************/ static const value_string byte_order_vals[] = { - { 'B', "Big-endian" }, - { 'l', "Little-endian" }, - { 0, NULL } + { 'B', "Big-endian" }, + { 'l', "Little-endian" }, + { 0, NULL } }; static const value_string image_byte_order_vals[] = { - { 0, "LSBFirst" }, - { 1, "MSBFirst" }, - { 0, NULL } + { 0, "LSBFirst" }, + { 1, "MSBFirst" }, + { 0, NULL } }; static const value_string access_mode_vals[] = { @@ -426,9 +426,9 @@ static const value_string event_detail_vals[] = { { 0, NULL } }; -#define FAMILY_INTERNET 0 -#define FAMILY_DECNET 1 -#define FAMILY_CHAOS 2 +#define FAMILY_INTERNET 0 +#define FAMILY_DECNET 1 +#define FAMILY_CHAOS 2 static const value_string family_vals[] = { { FAMILY_INTERNET, "Internet" }, @@ -721,8 +721,8 @@ static const value_string mapping_request_vals[] = { #define X_SetModifierMapping 118 #define X_GetModifierMapping 119 #define X_NoOperation 127 -#define X_FirstExtension 128 -#define X_LastExtension 255 +#define X_FirstExtension 128 +#define X_LastExtension 255 static const value_string opcode_vals[] = { { INITIAL_CONN, "Initial connection request" }, @@ -850,125 +850,125 @@ static const value_string opcode_vals[] = { }; /* Eventscodes. From <X11/X.h>. */ -#define KeyPress 2 -#define KeyRelease 3 -#define ButtonPress 4 -#define ButtonRelease 5 -#define MotionNotify 6 -#define EnterNotify 7 -#define LeaveNotify 8 -#define FocusIn 9 -#define FocusOut 10 -#define KeymapNotify 11 -#define Expose 12 -#define GraphicsExpose 13 -#define NoExpose 14 -#define VisibilityNotify 15 -#define CreateNotify 16 -#define DestroyNotify 17 -#define UnmapNotify 18 -#define MapNotify 19 -#define MapRequest 20 -#define ReparentNotify 21 -#define ConfigureNotify 22 -#define ConfigureRequest 23 -#define GravityNotify 24 -#define ResizeRequest 25 -#define CirculateNotify 26 -#define CirculateRequest 27 -#define PropertyNotify 28 -#define SelectionClear 29 -#define SelectionRequest 30 -#define SelectionNotify 31 -#define ColormapNotify 32 -#define ClientMessage 33 -#define MappingNotify 34 +#define KeyPress 2 +#define KeyRelease 3 +#define ButtonPress 4 +#define ButtonRelease 5 +#define MotionNotify 6 +#define EnterNotify 7 +#define LeaveNotify 8 +#define FocusIn 9 +#define FocusOut 10 +#define KeymapNotify 11 +#define Expose 12 +#define GraphicsExpose 13 +#define NoExpose 14 +#define VisibilityNotify 15 +#define CreateNotify 16 +#define DestroyNotify 17 +#define UnmapNotify 18 +#define MapNotify 19 +#define MapRequest 20 +#define ReparentNotify 21 +#define ConfigureNotify 22 +#define ConfigureRequest 23 +#define GravityNotify 24 +#define ResizeRequest 25 +#define CirculateNotify 26 +#define CirculateRequest 27 +#define PropertyNotify 28 +#define SelectionClear 29 +#define SelectionRequest 30 +#define SelectionNotify 31 +#define ColormapNotify 32 +#define ClientMessage 33 +#define MappingNotify 34 static const value_string eventcode_vals[] = { - { KeyPress, "KeyPress" }, - { KeyRelease, "KeyRelease" }, - { ButtonPress, "ButtonPress" }, - { ButtonRelease, "ButtonRelease" }, - { MotionNotify, "MotionNotify" }, - { EnterNotify, "EnterNotify" }, - { LeaveNotify, "LeaveNotify" }, - { FocusIn, "FocusIn" }, - { FocusOut, "FocusOut" }, - { KeymapNotify, "KeymapNotify" }, - { Expose, "Expose" }, - { GraphicsExpose, "GraphicsExpose" }, - { NoExpose, "NoExpose" }, - { VisibilityNotify, "VisibilityNotify" }, - { CreateNotify, "CreateNotify" }, - { DestroyNotify, "DestroyNotify" }, - { UnmapNotify, "UnmapNotify" }, - { MapNotify, "MapNotify" }, - { MapRequest, "MapRequest" }, - { ReparentNotify, "ReparentNotify" }, - { ConfigureNotify, "ConfigureNotify" }, - { ConfigureRequest, "ConfigureRequest" }, - { GravityNotify, "GravityNotify" }, - { ResizeRequest, "ResizeRequest" }, - { CirculateNotify, "CirculateNotify" }, - { CirculateRequest, "CirculateRequest" }, - { PropertyNotify, "PropertyNotify" }, - { SelectionClear, "SelectionClear" }, - { SelectionRequest, "SelectionRequest" }, - { SelectionNotify, "SelectionNotify" }, - { ColormapNotify, "ColormapNotify" }, - { ClientMessage, "ClientMessage" }, - { MappingNotify, "MappingNotify" }, - { 0, NULL } + { KeyPress, "KeyPress" }, + { KeyRelease, "KeyRelease" }, + { ButtonPress, "ButtonPress" }, + { ButtonRelease, "ButtonRelease" }, + { MotionNotify, "MotionNotify" }, + { EnterNotify, "EnterNotify" }, + { LeaveNotify, "LeaveNotify" }, + { FocusIn, "FocusIn" }, + { FocusOut, "FocusOut" }, + { KeymapNotify, "KeymapNotify" }, + { Expose, "Expose" }, + { GraphicsExpose, "GraphicsExpose" }, + { NoExpose, "NoExpose" }, + { VisibilityNotify, "VisibilityNotify" }, + { CreateNotify, "CreateNotify" }, + { DestroyNotify, "DestroyNotify" }, + { UnmapNotify, "UnmapNotify" }, + { MapNotify, "MapNotify" }, + { MapRequest, "MapRequest" }, + { ReparentNotify, "ReparentNotify" }, + { ConfigureNotify, "ConfigureNotify" }, + { ConfigureRequest, "ConfigureRequest" }, + { GravityNotify, "GravityNotify" }, + { ResizeRequest, "ResizeRequest" }, + { CirculateNotify, "CirculateNotify" }, + { CirculateRequest, "CirculateRequest" }, + { PropertyNotify, "PropertyNotify" }, + { SelectionClear, "SelectionClear" }, + { SelectionRequest, "SelectionRequest" }, + { SelectionNotify, "SelectionNotify" }, + { ColormapNotify, "ColormapNotify" }, + { ClientMessage, "ClientMessage" }, + { MappingNotify, "MappingNotify" }, + { 0, NULL } }; /* Errorcodes. From <X11/X.h> */ -#define Success 0 /* everything's okay */ -#define BadRequest 1 /* bad request code */ -#define BadValue 2 /* int parameter out of range */ -#define BadWindow 3 /* parameter not a Window */ -#define BadPixmap 4 /* parameter not a Pixmap */ -#define BadAtom 5 /* parameter not an Atom */ -#define BadCursor 6 /* parameter not a Cursor */ -#define BadFont 7 /* parameter not a Font */ -#define BadMatch 8 /* parameter mismatch */ -#define BadDrawable 9 /* parameter not a Pixmap or Window */ -#define BadAccess 10 /* depending on context: - - key/button already grabbed - - attempt to free an illegal - cmap entry - - attempt to store into a read-only - color map entry. - - attempt to modify the access control - list from other than the local host. - */ -#define BadAlloc 11 /* insufficient resources */ -#define BadColor 12 /* no such colormap */ -#define BadGC 13 /* parameter not a GC */ -#define BadIDChoice 14 /* choice not in range or already used */ -#define BadName 15 /* font or color name doesn't exist */ -#define BadLength 16 /* Request length incorrect */ -#define BadImplementation 17 /* server is defective */ +#define Success 0 /* everything's okay */ +#define BadRequest 1 /* bad request code */ +#define BadValue 2 /* int parameter out of range */ +#define BadWindow 3 /* parameter not a Window */ +#define BadPixmap 4 /* parameter not a Pixmap */ +#define BadAtom 5 /* parameter not an Atom */ +#define BadCursor 6 /* parameter not a Cursor */ +#define BadFont 7 /* parameter not a Font */ +#define BadMatch 8 /* parameter mismatch */ +#define BadDrawable 9 /* parameter not a Pixmap or Window */ +#define BadAccess 10 /* depending on context: + - key/button already grabbed + - attempt to free an illegal + cmap entry + - attempt to store into a read-only + color map entry. + - attempt to modify the access control + list from other than the local host. + */ +#define BadAlloc 11 /* insufficient resources */ +#define BadColor 12 /* no such colormap */ +#define BadGC 13 /* parameter not a GC */ +#define BadIDChoice 14 /* choice not in range or already used */ +#define BadName 15 /* font or color name doesn't exist */ +#define BadLength 16 /* Request length incorrect */ +#define BadImplementation 17 /* server is defective */ static const value_string errorcode_vals[] = { - { Success, "Success" }, - { BadRequest, "BadRequest" }, - { BadValue, "BadValue" }, - { BadWindow, "BadWindow" }, - { BadPixmap, "BadPixmap" }, - { BadAtom, "BadAtom" }, - { BadCursor, "BadCursor" }, - { BadFont, "BadFont" }, - { BadMatch, "BadMatch" }, - { BadDrawable, "BadDrawable" }, - { BadAccess, "BadAccess" }, - { BadAlloc, "BadAlloc" }, - { BadColor, "BadColor" }, - { BadGC, "BadGC" }, - { BadIDChoice, "BadIDChoice" }, - { BadName, "BadName" }, - { BadLength, "BadLength" }, - { BadImplementation, "BadImplementation" }, - { 0, NULL } + { Success, "Success" }, + { BadRequest, "BadRequest" }, + { BadValue, "BadValue" }, + { BadWindow, "BadWindow" }, + { BadPixmap, "BadPixmap" }, + { BadAtom, "BadAtom" }, + { BadCursor, "BadCursor" }, + { BadFont, "BadFont" }, + { BadMatch, "BadMatch" }, + { BadDrawable, "BadDrawable" }, + { BadAccess, "BadAccess" }, + { BadAlloc, "BadAlloc" }, + { BadColor, "BadColor" }, + { BadGC, "BadGC" }, + { BadIDChoice, "BadIDChoice" }, + { BadName, "BadName" }, + { BadLength, "BadLength" }, + { BadImplementation, "BadImplementation" }, + { 0, NULL } }; static const value_string ordering_vals[] = { @@ -1057,7 +1057,7 @@ static const value_string zero_is_none_vals[] = { /* we have not seen packet before. */ #define PACKET_IS_NEW(pinfo) \ - (!((pinfo)->fd->flags.visited)) + (!((pinfo)->fd->flags.visited)) /************************************************************************ *** *** @@ -1075,26 +1075,26 @@ static const value_string zero_is_none_vals[] = { #define FIELD16(name) (field16(tvb, offsetp, t, hf_x11_##name, little_endian)) #define FIELD32(name) (field32(tvb, offsetp, t, hf_x11_##name, little_endian)) -#define BITFIELD(TYPE, position, name) {\ - int unused;\ - int save = *offsetp;\ - proto_tree_add_item(bitmask_tree, hf_x11_##position##_##name, tvb, bitmask_offset, \ - bitmask_size, little_endian); \ - if (bitmask_value & proto_registrar_get_nth(hf_x11_##position##_##name) -> bitmask) {\ - TYPE(name);\ - unused = save + 4 - *offsetp;\ - if (unused)\ - proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, unused, little_endian);\ - *offsetp = save + 4;\ - }\ +#define BITFIELD(TYPE, position, name) { \ + int unused; \ + int save = *offsetp; \ + proto_tree_add_item(bitmask_tree, hf_x11_##position##_##name, tvb, bitmask_offset, \ + bitmask_size, little_endian); \ + if (bitmask_value & proto_registrar_get_nth(hf_x11_##position##_##name) -> bitmask) { \ + TYPE(name); \ + unused = save + 4 - *offsetp; \ + if (unused) \ + proto_tree_add_item(t, hf_x11_unused, tvb, *offsetp, unused, little_endian); \ + *offsetp = save + 4; \ + } \ } #define FLAG(position, name) {\ - proto_tree_add_boolean(bitmask_tree, hf_x11_##position##_mask##_##name, tvb, bitmask_offset, bitmask_size, bitmask_value); } + proto_tree_add_boolean(bitmask_tree, hf_x11_##position##_mask##_##name, tvb, bitmask_offset, bitmask_size, bitmask_value); } #define FLAG_IF_NONZERO(position, name) do {\ - if (bitmask_value & proto_registrar_get_nth(hf_x11_##position##_mask##_##name) -> bitmask)\ - proto_tree_add_boolean(bitmask_tree, hf_x11_##position##_mask##_##name, tvb, bitmask_offset, bitmask_size, bitmask_value); } while (0) + if (bitmask_value & proto_registrar_get_nth(hf_x11_##position##_mask##_##name) -> bitmask) \ + proto_tree_add_boolean(bitmask_tree, hf_x11_##position##_mask##_##name, tvb, bitmask_offset, bitmask_size, bitmask_value); } while (0) #define ATOM(name) { atom(tvb, offsetp, t, hf_x11_##name, little_endian); } #define BITGRAVITY(name) { gravity(tvb, offsetp, t, hf_x11_##name, "Forget"); } @@ -1105,16 +1105,16 @@ static const value_string zero_is_none_vals[] = { int bitmask_size; \ proto_tree *bitmask_tree; \ bitmask_value = ((size == 1) ? (guint32)VALUE8(tvb, *offsetp) : \ - ((size == 2) ? (guint32)VALUE16(tvb, *offsetp) : \ - (guint32)VALUE32(tvb, *offsetp))); \ + ((size == 2) ? (guint32)VALUE16(tvb, *offsetp) : \ + (guint32)VALUE32(tvb, *offsetp))); \ bitmask_offset = *offsetp; \ bitmask_size = size; \ bitmask_ti = proto_tree_add_uint(t, hf_x11_##name##_mask, tvb, *offsetp, size, bitmask_value); \ bitmask_tree = proto_item_add_subtree(bitmask_ti, ett_x11_##name##_mask); \ *offsetp += size; -#define ENDBITMASK } -#define BITMASK8(name) BITMASK(name, 1); -#define BITMASK16(name) BITMASK(name, 2); +#define ENDBITMASK } +#define BITMASK8(name) BITMASK(name, 1); +#define BITMASK16(name) BITMASK(name, 2); #define BITMASK32(name) BITMASK(name, 4); #define BOOL(name) (add_boolean(tvb, offsetp, t, hf_x11_##name)) #define BUTTON(name) FIELD8(name) @@ -1134,36 +1134,36 @@ static const value_string zero_is_none_vals[] = { #define INT16(name) FIELD16(name) #define INT32(name) FIELD32(name) #define KEYCODE(name) FIELD8(name) -#define KEYCODE_DECODED(name, keycode, mask) do { \ - proto_tree_add_uint_format(t, hf_x11_##name, tvb, offset, 1, \ - keycode, "keycode: %d (%s)", \ - keycode, keycode2keysymString(state->keycodemap, \ - state->first_keycode, state->keysyms_per_keycode, \ - state->modifiermap, state->keycodes_per_modifier, \ - keycode, mask)); \ - ++offset; \ +#define KEYCODE_DECODED(name, keycode, mask) do { \ + proto_tree_add_uint_format(t, hf_x11_##name, tvb, offset, 1, \ + keycode, "keycode: %d (%s)", \ + keycode, keycode2keysymString(state->keycodemap, \ + state->first_keycode, state->keysyms_per_keycode, \ + state->modifiermap, state->keycodes_per_modifier, \ + keycode, mask)); \ + ++offset; \ } while (0) #define EVENT() do { \ - tvbuff_t *next_tvb; \ - unsigned char eventcode; \ - const char *sent; \ - proto_item *event_ti; \ - proto_tree *event_proto_tree; \ - next_tvb = tvb_new_subset(tvb, offset, next_offset - offset, \ - next_offset - offset); \ - eventcode = tvb_get_guint8(next_tvb, 0); \ - sent = (eventcode & 0x80) ? "Sent-" : ""; \ - event_ti = proto_tree_add_text(t, next_tvb, 0, -1, \ - "event: %d (%s)", \ - eventcode, \ - val_to_str(eventcode & 0x7F, \ - state->eventcode_vals, \ - "<Unknown eventcode %u>")); \ - event_proto_tree = proto_item_add_subtree(event_ti, \ - ett_x11_event); \ - decode_x11_event(next_tvb, eventcode, sent, event_proto_tree, \ - state, little_endian); \ - offset = next_offset; \ + tvbuff_t *next_tvb; \ + unsigned char eventcode; \ + const char *sent; \ + proto_item *event_ti; \ + proto_tree *event_proto_tree; \ + next_tvb = tvb_new_subset(tvb, offset, next_offset - offset, \ + next_offset - offset); \ + eventcode = tvb_get_guint8(next_tvb, 0); \ + sent = (eventcode & 0x80) ? "Sent-" : ""; \ + event_ti = proto_tree_add_text(t, next_tvb, 0, -1, \ + "event: %d (%s)", \ + eventcode, \ + val_to_str(eventcode & 0x7F, \ + state->eventcode_vals, \ + "<Unknown eventcode %u>")); \ + event_proto_tree = proto_item_add_subtree(event_ti, \ + ett_x11_event); \ + decode_x11_event(next_tvb, eventcode, sent, event_proto_tree, \ + state, little_endian); \ + offset = next_offset; \ } while (0) #define LISTofARC(name) { listOfArc(tvb, offsetp, t, hf_x11_##name, (next_offset - *offsetp) / 12, little_endian); } @@ -1184,12 +1184,12 @@ static const value_string zero_is_none_vals[] = { #define LISTofSTRING8(name, length) { listOfString8(tvb, offsetp, t, hf_x11_##name, hf_x11_##name##_string, (length), little_endian); } #define LISTofTEXTITEM8(name) { listOfTextItem(tvb, offsetp, t, hf_x11_##name, FALSE, next_offset, little_endian); } #define LISTofTEXTITEM16(name) { listOfTextItem(tvb, offsetp, t, hf_x11_##name, TRUE, next_offset, little_endian); } -#define OPCODE() { \ - opcode = VALUE8(tvb, *offsetp); \ - proto_tree_add_uint_format(t, hf_x11_opcode, tvb, *offsetp, \ - 1, opcode, "opcode: %u (%s)", opcode, \ - val_to_str(opcode, state->opcode_vals, "Unknown")); \ - *offsetp += 1; \ +#define OPCODE() { \ + opcode = VALUE8(tvb, *offsetp); \ + proto_tree_add_uint_format(t, hf_x11_opcode, tvb, *offsetp, \ + 1, opcode, "opcode: %u (%s)", opcode, \ + val_to_str(opcode, state->opcode_vals, "Unknown")); \ + *offsetp += 1; \ } #define PIXMAP(name) { FIELD32(name); } @@ -1210,106 +1210,106 @@ static const value_string zero_is_none_vals[] = { #define VISUALID(name) { gint32 v = VALUE32(tvb, *offsetp); \ proto_tree_add_uint_format(t, hf_x11_##name, tvb, *offsetp, 4, v, "Visualid: 0x%08x%s", v, \ - v ? "" : " (CopyFromParent)"); *offsetp += 4; } + v ? "" : " (CopyFromParent)"); *offsetp += 4; } #define REPLY(name) FIELD8(name); #define REPLYLENGTH(name) FIELD32(name); -#define EVENTCONTENTS_COMMON() do { \ - TIMESTAMP(time); \ - WINDOW(rootwindow); \ - WINDOW(eventwindow); \ - WINDOW(childwindow); \ - INT16(root_x); \ - INT16(root_y); \ - INT16(event_x); \ - INT16(event_y); \ - setOfKeyButMask(tvb, offsetp, t, little_endian, 1); \ +#define EVENTCONTENTS_COMMON() do { \ + TIMESTAMP(time); \ + WINDOW(rootwindow); \ + WINDOW(eventwindow); \ + WINDOW(childwindow); \ + INT16(root_x); \ + INT16(root_y); \ + INT16(event_x); \ + INT16(event_y); \ + setOfKeyButMask(tvb, offsetp, t, little_endian, 1); \ } while (0) -#define SEQUENCENUMBER_REPLY(name) do { \ - guint16 seqno; \ - \ - seqno = VALUE16(tvb, *offsetp); \ - proto_tree_add_uint_format(t, hf_x11_reply_##name, tvb, \ - *offsetp, sizeof(seqno), seqno, \ - "sequencenumber: %d (%s)", \ - (int)seqno, \ - val_to_str(opcode & 0xFF, state->opcode_vals, "<Unknown opcode %d>")); \ - *offsetp += sizeof(seqno); \ +#define SEQUENCENUMBER_REPLY(name) do { \ + guint16 seqno; \ + \ + seqno = VALUE16(tvb, *offsetp); \ + proto_tree_add_uint_format(t, hf_x11_reply_##name, tvb, \ + *offsetp, sizeof(seqno), seqno, \ + "sequencenumber: %d (%s)", \ + (int)seqno, \ + val_to_str(opcode & 0xFF, state->opcode_vals, "<Unknown opcode %d>")); \ + *offsetp += sizeof(seqno); \ } while (0) -#define REPLYCONTENTS_COMMON() do { \ - REPLY(reply); \ - proto_tree_add_item(t, hf_x11_undecoded, tvb, *offsetp, \ - 1, little_endian); \ - ++(*offsetp); \ - SEQUENCENUMBER_REPLY(sequencenumber); \ - REPLYLENGTH(replylength); \ - proto_tree_add_item(t, hf_x11_undecoded, tvb, *offsetp, \ - tvb_reported_length_remaining(tvb, *offsetp), little_endian); \ - *offsetp += tvb_reported_length_remaining(tvb, *offsetp); \ +#define REPLYCONTENTS_COMMON() do { \ + REPLY(reply); \ + proto_tree_add_item(t, hf_x11_undecoded, tvb, *offsetp, \ + 1, little_endian); \ + ++(*offsetp); \ + SEQUENCENUMBER_REPLY(sequencenumber); \ + REPLYLENGTH(replylength); \ + proto_tree_add_item(t, hf_x11_undecoded, tvb, *offsetp, \ + tvb_reported_length_remaining(tvb, *offsetp), little_endian); \ + *offsetp += tvb_reported_length_remaining(tvb, *offsetp); \ } while (0) -#define HANDLE_REPLY(plen, length_remaining, str, func) do { \ - if (length_remaining < plen) { \ - if (x11_desegment && pinfo->can_desegment) { \ - pinfo->desegment_offset = offset; \ - pinfo->desegment_len = plen - length_remaining;\ - return; \ - } else { \ - ; /* XXX yes, what then? Need to skip/join. */ \ - } \ - } \ - if (length_remaining > plen) \ - length_remaining = plen; \ - next_tvb = tvb_new_subset(tvb, offset, length_remaining, plen); \ - \ - if (sep == NULL) { \ - if (check_col(pinfo->cinfo, COL_INFO)) \ - col_set_str(pinfo->cinfo, COL_INFO, str); \ - sep = ":"; \ - } \ - \ - TRY { \ - func(next_tvb, pinfo, tree, sep, state, little_endian); \ - } \ - \ - CATCH(BoundsError) { \ - RETHROW; \ - } \ - CATCH(ReportedBoundsError) { \ - show_reported_bounds_error(next_tvb, pinfo, tree); \ - } \ - ENDTRY; \ - \ - sep = ","; \ +#define HANDLE_REPLY(plen, length_remaining, str, func) do { \ + if (length_remaining < plen) { \ + if (x11_desegment && pinfo->can_desegment) { \ + pinfo->desegment_offset = offset; \ + pinfo->desegment_len = plen - length_remaining; \ + return; \ + } else { \ + ; /* XXX yes, what then? Need to skip/join. */ \ + } \ + } \ + if (length_remaining > plen) \ + length_remaining = plen; \ + next_tvb = tvb_new_subset(tvb, offset, length_remaining, plen); \ + \ + if (sep == NULL) { \ + if (check_col(pinfo->cinfo, COL_INFO)) \ + col_set_str(pinfo->cinfo, COL_INFO, str); \ + sep = ":"; \ + } \ + \ + TRY { \ + func(next_tvb, pinfo, tree, sep, state, little_endian); \ + } \ + \ + CATCH(BoundsError) { \ + RETHROW; \ + } \ + CATCH(ReportedBoundsError) { \ + show_reported_bounds_error(next_tvb, pinfo, tree); \ + } \ + ENDTRY; \ + \ + sep = ","; \ } while (0) static void dissect_x11_initial_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, - const char *sep, x11_conv_data_t *volatile state, - gboolean little_endian); + const char *sep, x11_conv_data_t *volatile state, + gboolean little_endian); static void dissect_x11_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, - const char *volatile sep, x11_conv_data_t *volatile state, - gboolean little_endian); + const char *volatile sep, x11_conv_data_t *volatile state, + gboolean little_endian); static void dissect_x11_error(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, - const char *volatile sep, x11_conv_data_t *volatile state, - gboolean little_endian); + const char *volatile sep, x11_conv_data_t *volatile state, + gboolean little_endian); static void dissect_x11_event(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, - const char *volatile sep, x11_conv_data_t *volatile state, - gboolean little_endian); + const char *volatile sep, x11_conv_data_t *volatile state, + gboolean little_endian); static void decode_x11_event(tvbuff_t *tvb, unsigned char eventcode, const char *sent, - proto_tree *t, x11_conv_data_t *volatile state, - gboolean little_endian); + proto_tree *t, x11_conv_data_t *volatile state, + gboolean little_endian); static x11_conv_data_t * x11_stateinit(conversation_t *conversation); @@ -1325,23 +1325,23 @@ keysymString(guint32 v); ************************************************************************/ static void atom(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - gboolean little_endian) + gboolean little_endian) { const char *interpretation = NULL; guint32 v = VALUE32(tvb, *offsetp); if (v >= 1 && v < array_length(atom_predefined_interpretation)) - interpretation = atom_predefined_interpretation[v]; + interpretation = atom_predefined_interpretation[v]; else if (v) - interpretation = "Not a predefined atom"; + interpretation = "Not a predefined atom"; else { - header_field_info *hfi = proto_registrar_get_nth(hf); - if (hfi -> strings) - interpretation = match_strval(v, cVALS(hfi -> strings)); + header_field_info *hfi = proto_registrar_get_nth(hf); + if (hfi -> strings) + interpretation = match_strval(v, cVALS(hfi -> strings)); } if (!interpretation) interpretation = "error in Xlib client program ?"; proto_tree_add_uint_format(t, hf, tvb, *offsetp, 4, v, "%s: %u (%s)", - proto_registrar_get_nth(hf) -> name, v, interpretation); + proto_registrar_get_nth(hf) -> name, v, interpretation); *offsetp += 4; } @@ -1360,109 +1360,109 @@ static void colorFlags(tvbuff_t *tvb, int *offsetp, proto_tree *t) proto_tree *tt; if (do_red_green_blue) { - int sep = FALSE; - emem_strbuf_t *buffer = ep_strbuf_new_label("flags: "); - - if (do_red_green_blue & 0x1) { - ep_strbuf_append(buffer, "DoRed"); - sep = TRUE; - } - - if (do_red_green_blue & 0x2) { - if (sep) ep_strbuf_append(buffer, " | "); - ep_strbuf_append(buffer, "DoGreen"); - sep = TRUE; - } - - if (do_red_green_blue & 0x4) { - if (sep) ep_strbuf_append(buffer, " | "); - ep_strbuf_append(buffer, "DoBlue"); - sep = TRUE; - } - - if (do_red_green_blue & 0xf8) { - if (sep) ep_strbuf_append(buffer, " + trash"); - } - - ti = proto_tree_add_uint_format(t, hf_x11_coloritem_flags, tvb, *offsetp, 1, do_red_green_blue, - "%s", buffer->str); - tt = proto_item_add_subtree(ti, ett_x11_color_flags); - if (do_red_green_blue & 0x1) - proto_tree_add_boolean(tt, hf_x11_coloritem_flags_do_red, tvb, *offsetp, 1, - do_red_green_blue & 0x1); - if (do_red_green_blue & 0x2) - proto_tree_add_boolean(tt, hf_x11_coloritem_flags_do_green, tvb, *offsetp, 1, - do_red_green_blue & 0x2); - if (do_red_green_blue & 0x4) - proto_tree_add_boolean(tt, hf_x11_coloritem_flags_do_blue, tvb, *offsetp, 1, - do_red_green_blue & 0x4); - if (do_red_green_blue & 0xf8) - proto_tree_add_boolean(tt, hf_x11_coloritem_flags_unused, tvb, *offsetp, 1, - do_red_green_blue & 0xf8); + int sep = FALSE; + emem_strbuf_t *buffer = ep_strbuf_new_label("flags: "); + + if (do_red_green_blue & 0x1) { + ep_strbuf_append(buffer, "DoRed"); + sep = TRUE; + } + + if (do_red_green_blue & 0x2) { + if (sep) ep_strbuf_append(buffer, " | "); + ep_strbuf_append(buffer, "DoGreen"); + sep = TRUE; + } + + if (do_red_green_blue & 0x4) { + if (sep) ep_strbuf_append(buffer, " | "); + ep_strbuf_append(buffer, "DoBlue"); + sep = TRUE; + } + + if (do_red_green_blue & 0xf8) { + if (sep) ep_strbuf_append(buffer, " + trash"); + } + + ti = proto_tree_add_uint_format(t, hf_x11_coloritem_flags, tvb, *offsetp, 1, do_red_green_blue, + "%s", buffer->str); + tt = proto_item_add_subtree(ti, ett_x11_color_flags); + if (do_red_green_blue & 0x1) + proto_tree_add_boolean(tt, hf_x11_coloritem_flags_do_red, tvb, *offsetp, 1, + do_red_green_blue & 0x1); + if (do_red_green_blue & 0x2) + proto_tree_add_boolean(tt, hf_x11_coloritem_flags_do_green, tvb, *offsetp, 1, + do_red_green_blue & 0x2); + if (do_red_green_blue & 0x4) + proto_tree_add_boolean(tt, hf_x11_coloritem_flags_do_blue, tvb, *offsetp, 1, + do_red_green_blue & 0x4); + if (do_red_green_blue & 0xf8) + proto_tree_add_boolean(tt, hf_x11_coloritem_flags_unused, tvb, *offsetp, 1, + do_red_green_blue & 0xf8); } else - proto_tree_add_uint_format(t, hf_x11_coloritem_flags, tvb, *offsetp, 1, do_red_green_blue, - "flags: none"); + proto_tree_add_uint_format(t, hf_x11_coloritem_flags, tvb, *offsetp, 1, do_red_green_blue, + "flags: none"); *offsetp += 1; } static void gravity(tvbuff_t *tvb, int *offsetp, proto_tree *t, - int hf, const char *nullInterpretation) + int hf, const char *nullInterpretation) { guint8 v = VALUE8(tvb, *offsetp); if (!v) - proto_tree_add_uint_format(t, hf, tvb, *offsetp, 1, v, "%s: 0 (%s)", - proto_registrar_get_nth(hf) -> name, - nullInterpretation); + proto_tree_add_uint_format(t, hf, tvb, *offsetp, 1, v, "%s: 0 (%s)", + proto_registrar_get_nth(hf) -> name, + nullInterpretation); else - proto_tree_add_uint(t, hf, tvb, *offsetp, 1, v); + proto_tree_add_uint(t, hf, tvb, *offsetp, 1, v); *offsetp += 1; } static void listOfArc(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - int length, gboolean little_endian) + int length, gboolean little_endian) { proto_item *ti = proto_tree_add_item(t, hf, tvb, *offsetp, length * 8, little_endian); proto_tree *tt = proto_item_add_subtree(ti, ett_x11_list_of_arc); while(length--) { - gint16 x = VALUE16(tvb, *offsetp); - gint16 y = VALUE16(tvb, *offsetp + 2); - guint16 width = VALUE16(tvb, *offsetp + 4); - guint16 height = VALUE16(tvb, *offsetp + 6); - gint16 angle1 = VALUE16(tvb, *offsetp + 8); - gint16 angle2 = VALUE16(tvb, *offsetp + 10); - - proto_item *tti = proto_tree_add_none_format(tt, hf_x11_arc, tvb, *offsetp, 12, - "arc: %dx%d+%d+%d, angle %d -> %d (%f degrees -> %f degrees)", - width, height, x, y, angle1, angle2, - angle1 / 64.0, angle2 / 64.0); - proto_tree *ttt = proto_item_add_subtree(tti, ett_x11_arc); - proto_tree_add_int(ttt, hf_x11_arc_x, tvb, *offsetp, 2, x); - *offsetp += 2; - proto_tree_add_int(ttt, hf_x11_arc_y, tvb, *offsetp, 2, y); - *offsetp += 2; - proto_tree_add_uint(ttt, hf_x11_arc_width, tvb, *offsetp, 2, y); - *offsetp += 2; - proto_tree_add_uint(ttt, hf_x11_arc_height, tvb, *offsetp, 2, y); - *offsetp += 2; - proto_tree_add_int(ttt, hf_x11_arc_angle1, tvb, *offsetp, 2, y); - *offsetp += 2; - proto_tree_add_int(ttt, hf_x11_arc_angle2, tvb, *offsetp, 2, y); - *offsetp += 2; + gint16 x = VALUE16(tvb, *offsetp); + gint16 y = VALUE16(tvb, *offsetp + 2); + guint16 width = VALUE16(tvb, *offsetp + 4); + guint16 height = VALUE16(tvb, *offsetp + 6); + gint16 angle1 = VALUE16(tvb, *offsetp + 8); + gint16 angle2 = VALUE16(tvb, *offsetp + 10); + + proto_item *tti = proto_tree_add_none_format(tt, hf_x11_arc, tvb, *offsetp, 12, + "arc: %dx%d+%d+%d, angle %d -> %d (%f degrees -> %f degrees)", + width, height, x, y, angle1, angle2, + angle1 / 64.0, angle2 / 64.0); + proto_tree *ttt = proto_item_add_subtree(tti, ett_x11_arc); + proto_tree_add_int(ttt, hf_x11_arc_x, tvb, *offsetp, 2, x); + *offsetp += 2; + proto_tree_add_int(ttt, hf_x11_arc_y, tvb, *offsetp, 2, y); + *offsetp += 2; + proto_tree_add_uint(ttt, hf_x11_arc_width, tvb, *offsetp, 2, y); + *offsetp += 2; + proto_tree_add_uint(ttt, hf_x11_arc_height, tvb, *offsetp, 2, y); + *offsetp += 2; + proto_tree_add_int(ttt, hf_x11_arc_angle1, tvb, *offsetp, 2, y); + *offsetp += 2; + proto_tree_add_int(ttt, hf_x11_arc_angle2, tvb, *offsetp, 2, y); + *offsetp += 2; } } static void listOfAtom(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - int length, gboolean little_endian) + int length, gboolean little_endian) { proto_item *ti = proto_tree_add_item(t, hf, tvb, *offsetp, length * 4, little_endian); proto_tree *tt = proto_item_add_subtree(ti, ett_x11_list_of_atom); while(length--) - atom(tvb, offsetp, tt, hf_x11_properties_item, little_endian); + atom(tvb, offsetp, tt, hf_x11_properties_item, little_endian); } static void listOfByte(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - int length, gboolean little_endian) + int length, gboolean little_endian) { if (length <= 0) length = 1; proto_tree_add_item(t, hf, tvb, *offsetp, length, little_endian); @@ -1470,115 +1470,115 @@ static void listOfByte(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, } static void listOfCard16(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - int hf_item, int length, gboolean little_endian) + int hf_item, int length, gboolean little_endian) { proto_item *ti = proto_tree_add_item(t, hf, tvb, *offsetp, length * 2, little_endian); proto_tree *tt = proto_item_add_subtree(ti, ett_x11_list_of_card32); while(length--) { - proto_tree_add_uint(tt, hf_item, tvb, *offsetp, 2, VALUE16(tvb, *offsetp)); - *offsetp += 2; + proto_tree_add_uint(tt, hf_item, tvb, *offsetp, 2, VALUE16(tvb, *offsetp)); + *offsetp += 2; } } static void listOfInt16(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - int hf_item, int length, gboolean little_endian) + int hf_item, int length, gboolean little_endian) { proto_item *ti = proto_tree_add_item(t, hf, tvb, *offsetp, length * 2, little_endian); proto_tree *tt = proto_item_add_subtree(ti, ett_x11_list_of_card32); while(length--) { - proto_tree_add_int(tt, hf_item, tvb, *offsetp, 2, VALUE16(tvb, *offsetp)); - *offsetp += 2; + proto_tree_add_int(tt, hf_item, tvb, *offsetp, 2, VALUE16(tvb, *offsetp)); + *offsetp += 2; } } static void listOfCard32(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - int hf_item, int length, gboolean little_endian) + int hf_item, int length, gboolean little_endian) { proto_item *ti = proto_tree_add_item(t, hf, tvb, *offsetp, length * 4, little_endian); proto_tree *tt = proto_item_add_subtree(ti, ett_x11_list_of_card32); while(length--) { - proto_tree_add_uint(tt, hf_item, tvb, *offsetp, 4, VALUE32(tvb, *offsetp)); - *offsetp += 4; + proto_tree_add_uint(tt, hf_item, tvb, *offsetp, 4, VALUE32(tvb, *offsetp)); + *offsetp += 4; } } static void listOfInt32(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - int hf_item, int length, gboolean little_endian) + int hf_item, int length, gboolean little_endian) { proto_item *ti = proto_tree_add_item(t, hf, tvb, *offsetp, length * 4, little_endian); proto_tree *tt = proto_item_add_subtree(ti, ett_x11_list_of_card32); while(length--) { - proto_tree_add_int(tt, hf_item, tvb, *offsetp, 4, VALUE32(tvb, *offsetp)); - *offsetp += 4; + proto_tree_add_int(tt, hf_item, tvb, *offsetp, 4, VALUE32(tvb, *offsetp)); + *offsetp += 4; } } static void listOfFloat(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - int hf_item, int length, gboolean little_endian) + int hf_item, int length, gboolean little_endian) { proto_item *ti = proto_tree_add_item(t, hf, tvb, *offsetp, length * 4, little_endian); proto_tree *tt = proto_item_add_subtree(ti, ett_x11_list_of_float); while(length--) { - proto_tree_add_float(tt, hf_item, tvb, *offsetp, 4, FLOAT(tvb, *offsetp)); - *offsetp += 4; + proto_tree_add_float(tt, hf_item, tvb, *offsetp, 4, FLOAT(tvb, *offsetp)); + *offsetp += 4; } } static void listOfDouble(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - int hf_item, int length, gboolean little_endian) + int hf_item, int length, gboolean little_endian) { proto_item *ti = proto_tree_add_item(t, hf, tvb, *offsetp, length * 8, little_endian); proto_tree *tt = proto_item_add_subtree(ti, ett_x11_list_of_double); while(length--) { - proto_tree_add_double(tt, hf_item, tvb, *offsetp, 8, DOUBLE(tvb, *offsetp)); - *offsetp += 8; + proto_tree_add_double(tt, hf_item, tvb, *offsetp, 8, DOUBLE(tvb, *offsetp)); + *offsetp += 8; } } static void listOfColorItem(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - int length, gboolean little_endian) + int length, gboolean little_endian) { proto_item *ti = proto_tree_add_item(t, hf, tvb, *offsetp, length * 8, little_endian); proto_tree *tt = proto_item_add_subtree(ti, ett_x11_list_of_color_item); while(length--) { - proto_item *tti; - proto_tree *ttt; - unsigned do_red_green_blue; - guint16 red, green, blue; - emem_strbuf_t *buffer; - const char *sep; - - buffer=ep_strbuf_new_label("colorItem "); - red = VALUE16(tvb, *offsetp + 4); - green = VALUE16(tvb, *offsetp + 6); - blue = VALUE16(tvb, *offsetp + 8); - do_red_green_blue = VALUE8(tvb, *offsetp + 10); - - sep = ""; - if (do_red_green_blue & 0x1) { - ep_strbuf_append_printf(buffer, "red = %d", red); - sep = ", "; - } - if (do_red_green_blue & 0x2) { - ep_strbuf_append_printf(buffer, "%sgreen = %d", sep, green); - sep = ", "; - } - if (do_red_green_blue & 0x4) - ep_strbuf_append_printf(buffer, "%sblue = %d", sep, blue); - - tti = proto_tree_add_none_format(tt, hf_x11_coloritem, tvb, *offsetp, 12, "%s", buffer->str); - ttt = proto_item_add_subtree(tti, ett_x11_color_item); - proto_tree_add_item(ttt, hf_x11_coloritem_pixel, tvb, *offsetp, 4, little_endian); - *offsetp += 4; - proto_tree_add_item(ttt, hf_x11_coloritem_red, tvb, *offsetp, 2, little_endian); - *offsetp += 2; - proto_tree_add_item(ttt, hf_x11_coloritem_green, tvb, *offsetp, 2, little_endian); - *offsetp += 2; - proto_tree_add_item(ttt, hf_x11_coloritem_blue, tvb, *offsetp, 2, little_endian); - *offsetp += 2; - colorFlags(tvb, offsetp, ttt); - proto_tree_add_item(ttt, hf_x11_coloritem_unused, tvb, *offsetp, 1, little_endian); - *offsetp += 1; + proto_item *tti; + proto_tree *ttt; + unsigned do_red_green_blue; + guint16 red, green, blue; + emem_strbuf_t *buffer; + const char *sep; + + buffer=ep_strbuf_new_label("colorItem "); + red = VALUE16(tvb, *offsetp + 4); + green = VALUE16(tvb, *offsetp + 6); + blue = VALUE16(tvb, *offsetp + 8); + do_red_green_blue = VALUE8(tvb, *offsetp + 10); + + sep = ""; + if (do_red_green_blue & 0x1) { + ep_strbuf_append_printf(buffer, "red = %d", red); + sep = ", "; + } + if (do_red_green_blue & 0x2) { + ep_strbuf_append_printf(buffer, "%sgreen = %d", sep, green); + sep = ", "; + } + if (do_red_green_blue & 0x4) + ep_strbuf_append_printf(buffer, "%sblue = %d", sep, blue); + + tti = proto_tree_add_none_format(tt, hf_x11_coloritem, tvb, *offsetp, 12, "%s", buffer->str); + ttt = proto_item_add_subtree(tti, ett_x11_color_item); + proto_tree_add_item(ttt, hf_x11_coloritem_pixel, tvb, *offsetp, 4, little_endian); + *offsetp += 4; + proto_tree_add_item(ttt, hf_x11_coloritem_red, tvb, *offsetp, 2, little_endian); + *offsetp += 2; + proto_tree_add_item(ttt, hf_x11_coloritem_green, tvb, *offsetp, 2, little_endian); + *offsetp += 2; + proto_tree_add_item(ttt, hf_x11_coloritem_blue, tvb, *offsetp, 2, little_endian); + *offsetp += 2; + colorFlags(tvb, offsetp, ttt); + proto_tree_add_item(ttt, hf_x11_coloritem_unused, tvb, *offsetp, 1, little_endian); + *offsetp += 1; } } @@ -1596,277 +1596,277 @@ XConvertCase(register int sym, int *lower, int *upper) *upper = sym; switch(sym >> 8) { case 0: /* Latin 1 */ - if ((sym >= XK_A) && (sym <= XK_Z)) - *lower += (XK_a - XK_A); - else if ((sym >= XK_a) && (sym <= XK_z)) - *upper -= (XK_a - XK_A); - else if ((sym >= XK_Agrave) && (sym <= XK_Odiaeresis)) - *lower += (XK_agrave - XK_Agrave); - else if ((sym >= XK_agrave) && (sym <= XK_odiaeresis)) - *upper -= (XK_agrave - XK_Agrave); - else if ((sym >= XK_Ooblique) && (sym <= XK_Thorn)) - *lower += (XK_oslash - XK_Ooblique); - else if ((sym >= XK_oslash) && (sym <= XK_thorn)) - *upper -= (XK_oslash - XK_Ooblique); - break; + if ((sym >= XK_A) && (sym <= XK_Z)) + *lower += (XK_a - XK_A); + else if ((sym >= XK_a) && (sym <= XK_z)) + *upper -= (XK_a - XK_A); + else if ((sym >= XK_Agrave) && (sym <= XK_Odiaeresis)) + *lower += (XK_agrave - XK_Agrave); + else if ((sym >= XK_agrave) && (sym <= XK_odiaeresis)) + *upper -= (XK_agrave - XK_Agrave); + else if ((sym >= XK_Ooblique) && (sym <= XK_Thorn)) + *lower += (XK_oslash - XK_Ooblique); + else if ((sym >= XK_oslash) && (sym <= XK_thorn)) + *upper -= (XK_oslash - XK_Ooblique); + break; case 1: /* Latin 2 */ - /* Assume the KeySym is a legal value (ignore discontinuities) */ - if (sym == XK_Aogonek) - *lower = XK_aogonek; - else if (sym >= XK_Lstroke && sym <= XK_Sacute) - *lower += (XK_lstroke - XK_Lstroke); - else if (sym >= XK_Scaron && sym <= XK_Zacute) - *lower += (XK_scaron - XK_Scaron); - else if (sym >= XK_Zcaron && sym <= XK_Zabovedot) - *lower += (XK_zcaron - XK_Zcaron); - else if (sym == XK_aogonek) - *upper = XK_Aogonek; - else if (sym >= XK_lstroke && sym <= XK_sacute) - *upper -= (XK_lstroke - XK_Lstroke); - else if (sym >= XK_scaron && sym <= XK_zacute) - *upper -= (XK_scaron - XK_Scaron); - else if (sym >= XK_zcaron && sym <= XK_zabovedot) - *upper -= (XK_zcaron - XK_Zcaron); - else if (sym >= XK_Racute && sym <= XK_Tcedilla) - *lower += (XK_racute - XK_Racute); - else if (sym >= XK_racute && sym <= XK_tcedilla) - *upper -= (XK_racute - XK_Racute); - break; + /* Assume the KeySym is a legal value (ignore discontinuities) */ + if (sym == XK_Aogonek) + *lower = XK_aogonek; + else if (sym >= XK_Lstroke && sym <= XK_Sacute) + *lower += (XK_lstroke - XK_Lstroke); + else if (sym >= XK_Scaron && sym <= XK_Zacute) + *lower += (XK_scaron - XK_Scaron); + else if (sym >= XK_Zcaron && sym <= XK_Zabovedot) + *lower += (XK_zcaron - XK_Zcaron); + else if (sym == XK_aogonek) + *upper = XK_Aogonek; + else if (sym >= XK_lstroke && sym <= XK_sacute) + *upper -= (XK_lstroke - XK_Lstroke); + else if (sym >= XK_scaron && sym <= XK_zacute) + *upper -= (XK_scaron - XK_Scaron); + else if (sym >= XK_zcaron && sym <= XK_zabovedot) + *upper -= (XK_zcaron - XK_Zcaron); + else if (sym >= XK_Racute && sym <= XK_Tcedilla) + *lower += (XK_racute - XK_Racute); + else if (sym >= XK_racute && sym <= XK_tcedilla) + *upper -= (XK_racute - XK_Racute); + break; case 2: /* Latin 3 */ - /* Assume the KeySym is a legal value (ignore discontinuities) */ - if (sym >= XK_Hstroke && sym <= XK_Hcircumflex) - *lower += (XK_hstroke - XK_Hstroke); - else if (sym >= XK_Gbreve && sym <= XK_Jcircumflex) - *lower += (XK_gbreve - XK_Gbreve); - else if (sym >= XK_hstroke && sym <= XK_hcircumflex) - *upper -= (XK_hstroke - XK_Hstroke); - else if (sym >= XK_gbreve && sym <= XK_jcircumflex) - *upper -= (XK_gbreve - XK_Gbreve); - else if (sym >= XK_Cabovedot && sym <= XK_Scircumflex) - *lower += (XK_cabovedot - XK_Cabovedot); - else if (sym >= XK_cabovedot && sym <= XK_scircumflex) - *upper -= (XK_cabovedot - XK_Cabovedot); - break; + /* Assume the KeySym is a legal value (ignore discontinuities) */ + if (sym >= XK_Hstroke && sym <= XK_Hcircumflex) + *lower += (XK_hstroke - XK_Hstroke); + else if (sym >= XK_Gbreve && sym <= XK_Jcircumflex) + *lower += (XK_gbreve - XK_Gbreve); + else if (sym >= XK_hstroke && sym <= XK_hcircumflex) + *upper -= (XK_hstroke - XK_Hstroke); + else if (sym >= XK_gbreve && sym <= XK_jcircumflex) + *upper -= (XK_gbreve - XK_Gbreve); + else if (sym >= XK_Cabovedot && sym <= XK_Scircumflex) + *lower += (XK_cabovedot - XK_Cabovedot); + else if (sym >= XK_cabovedot && sym <= XK_scircumflex) + *upper -= (XK_cabovedot - XK_Cabovedot); + break; case 3: /* Latin 4 */ - /* Assume the KeySym is a legal value (ignore discontinuities) */ - if (sym >= XK_Rcedilla && sym <= XK_Tslash) - *lower += (XK_rcedilla - XK_Rcedilla); - else if (sym >= XK_rcedilla && sym <= XK_tslash) - *upper -= (XK_rcedilla - XK_Rcedilla); - else if (sym == XK_ENG) - *lower = XK_eng; - else if (sym == XK_eng) - *upper = XK_ENG; - else if (sym >= XK_Amacron && sym <= XK_Umacron) - *lower += (XK_amacron - XK_Amacron); - else if (sym >= XK_amacron && sym <= XK_umacron) - *upper -= (XK_amacron - XK_Amacron); - break; + /* Assume the KeySym is a legal value (ignore discontinuities) */ + if (sym >= XK_Rcedilla && sym <= XK_Tslash) + *lower += (XK_rcedilla - XK_Rcedilla); + else if (sym >= XK_rcedilla && sym <= XK_tslash) + *upper -= (XK_rcedilla - XK_Rcedilla); + else if (sym == XK_ENG) + *lower = XK_eng; + else if (sym == XK_eng) + *upper = XK_ENG; + else if (sym >= XK_Amacron && sym <= XK_Umacron) + *lower += (XK_amacron - XK_Amacron); + else if (sym >= XK_amacron && sym <= XK_umacron) + *upper -= (XK_amacron - XK_Amacron); + break; case 6: /* Cyrillic */ - /* Assume the KeySym is a legal value (ignore discontinuities) */ - if (sym >= XK_Serbian_DJE && sym <= XK_Serbian_DZE) - *lower -= (XK_Serbian_DJE - XK_Serbian_dje); - else if (sym >= XK_Serbian_dje && sym <= XK_Serbian_dze) - *upper += (XK_Serbian_DJE - XK_Serbian_dje); - else if (sym >= XK_Cyrillic_YU && sym <= XK_Cyrillic_HARDSIGN) - *lower -= (XK_Cyrillic_YU - XK_Cyrillic_yu); - else if (sym >= XK_Cyrillic_yu && sym <= XK_Cyrillic_hardsign) - *upper += (XK_Cyrillic_YU - XK_Cyrillic_yu); + /* Assume the KeySym is a legal value (ignore discontinuities) */ + if (sym >= XK_Serbian_DJE && sym <= XK_Serbian_DZE) + *lower -= (XK_Serbian_DJE - XK_Serbian_dje); + else if (sym >= XK_Serbian_dje && sym <= XK_Serbian_dze) + *upper += (XK_Serbian_DJE - XK_Serbian_dje); + else if (sym >= XK_Cyrillic_YU && sym <= XK_Cyrillic_HARDSIGN) + *lower -= (XK_Cyrillic_YU - XK_Cyrillic_yu); + else if (sym >= XK_Cyrillic_yu && sym <= XK_Cyrillic_hardsign) + *upper += (XK_Cyrillic_YU - XK_Cyrillic_yu); break; case 7: /* Greek */ - /* Assume the KeySym is a legal value (ignore discontinuities) */ - if (sym >= XK_Greek_ALPHAaccent && sym <= XK_Greek_OMEGAaccent) - *lower += (XK_Greek_alphaaccent - XK_Greek_ALPHAaccent); - else if (sym >= XK_Greek_alphaaccent && sym <= XK_Greek_omegaaccent && - sym != XK_Greek_iotaaccentdieresis && - sym != XK_Greek_upsilonaccentdieresis) - *upper -= (XK_Greek_alphaaccent - XK_Greek_ALPHAaccent); - else if (sym >= XK_Greek_ALPHA && sym <= XK_Greek_OMEGA) - *lower += (XK_Greek_alpha - XK_Greek_ALPHA); - else if (sym >= XK_Greek_alpha && sym <= XK_Greek_omega && - sym != XK_Greek_finalsmallsigma) - *upper -= (XK_Greek_alpha - XK_Greek_ALPHA); + /* Assume the KeySym is a legal value (ignore discontinuities) */ + if (sym >= XK_Greek_ALPHAaccent && sym <= XK_Greek_OMEGAaccent) + *lower += (XK_Greek_alphaaccent - XK_Greek_ALPHAaccent); + else if (sym >= XK_Greek_alphaaccent && sym <= XK_Greek_omegaaccent && + sym != XK_Greek_iotaaccentdieresis && + sym != XK_Greek_upsilonaccentdieresis) + *upper -= (XK_Greek_alphaaccent - XK_Greek_ALPHAaccent); + else if (sym >= XK_Greek_ALPHA && sym <= XK_Greek_OMEGA) + *lower += (XK_Greek_alpha - XK_Greek_ALPHA); + else if (sym >= XK_Greek_alpha && sym <= XK_Greek_omega && + sym != XK_Greek_finalsmallsigma) + *upper -= (XK_Greek_alpha - XK_Greek_ALPHA); break; } } static const char * keycode2keysymString(int *keycodemap[256], int first_keycode, - int keysyms_per_keycode, - int *modifiermap[array_length(modifiers)], - int keycodes_per_modifier, - guint32 keycode, guint32 bitmask) + int keysyms_per_keycode, + int *modifiermap[array_length(modifiers)], + int keycodes_per_modifier, + guint32 keycode, guint32 bitmask) { - int *syms; - int groupmodkc, numlockkc, numlockmod, groupmod; - int lockmod_is_capslock = 0, lockmod_is_shiftlock = 0; - int lockmod_is_nosymbol = 1; - int modifier, kc, keysym; - - if ((syms = keycodemap[keycode]) == NULL) - return "<Unknown>"; - - for (kc = first_keycode, groupmodkc = numlockkc = -1; kc < 256; ++kc) - for (keysym = 0; keysym < keysyms_per_keycode; ++keysym) { - if (keycodemap[kc] == NULL) - return "<Unknown>"; - switch (keycodemap[kc][keysym]) { - case 0xff7e: - groupmodkc = kc; - break; - - case 0xff7f: - numlockkc = kc; - break; - - case 0xffe5: - lockmod_is_capslock = kc; - break; - - case 0xffe6: - lockmod_is_shiftlock = kc; - break; - } - } - - - /* - * If we have not seen the modifiermap we don't know what the - * keycode translates to, but we do know it's one of the keys - * in syms (give or take a case-conversion), so we could in - * theory list them all. - */ - if (modifiermap[array_length(modifiers) - 1] == NULL) /* all or none */ - return "<Unknown>"; - - /* find out what the numlockmodifer and groupmodifier is. */ - for (modifier = 0, numlockmod = groupmod = -1; - modifier < (int)array_length(modifiers) && numlockmod == -1; - ++modifier) - for (kc = 0; kc < keycodes_per_modifier; ++kc) - if (modifiermap[modifier][kc] == numlockkc) - numlockmod = modifier; - else if (modifiermap[modifier][kc] == groupmodkc) - groupmod = modifier; - - /* - * ... and what the lockmodifier is interpreted as. - * (X11v4r6 ref, keyboard and pointers section.) - */ - for (kc = 0; kc < keycodes_per_modifier; ++kc) - if (modifiermap[1][kc] == lockmod_is_capslock) { - lockmod_is_shiftlock = lockmod_is_nosymbol = 0; - break; - } - else if (modifiermap[0][kc] == lockmod_is_shiftlock) { - lockmod_is_capslock = lockmod_is_nosymbol = 0; - break; - } + int *syms; + int groupmodkc, numlockkc, numlockmod, groupmod; + int lockmod_is_capslock = 0, lockmod_is_shiftlock = 0; + int lockmod_is_nosymbol = 1; + int modifier, kc, keysym; + + if ((syms = keycodemap[keycode]) == NULL) + return "<Unknown>"; + + for (kc = first_keycode, groupmodkc = numlockkc = -1; kc < 256; ++kc) + for (keysym = 0; keysym < keysyms_per_keycode; ++keysym) { + if (keycodemap[kc] == NULL) + return "<Unknown>"; + switch (keycodemap[kc][keysym]) { + case 0xff7e: + groupmodkc = kc; + break; + + case 0xff7f: + numlockkc = kc; + break; + + case 0xffe5: + lockmod_is_capslock = kc; + break; + + case 0xffe6: + lockmod_is_shiftlock = kc; + break; + } + } + + + /* + * If we have not seen the modifiermap we don't know what the + * keycode translates to, but we do know it's one of the keys + * in syms (give or take a case-conversion), so we could in + * theory list them all. + */ + if (modifiermap[array_length(modifiers) - 1] == NULL) /* all or none */ + return "<Unknown>"; + + /* find out what the numlockmodifer and groupmodifier is. */ + for (modifier = 0, numlockmod = groupmod = -1; + modifier < (int)array_length(modifiers) && numlockmod == -1; + ++modifier) + for (kc = 0; kc < keycodes_per_modifier; ++kc) + if (modifiermap[modifier][kc] == numlockkc) + numlockmod = modifier; + else if (modifiermap[modifier][kc] == groupmodkc) + groupmod = modifier; + + /* + * ... and what the lockmodifier is interpreted as. + * (X11v4r6 ref, keyboard and pointers section.) + */ + for (kc = 0; kc < keycodes_per_modifier; ++kc) + if (modifiermap[1][kc] == lockmod_is_capslock) { + lockmod_is_shiftlock = lockmod_is_nosymbol = 0; + break; + } + else if (modifiermap[0][kc] == lockmod_is_shiftlock) { + lockmod_is_capslock = lockmod_is_nosymbol = 0; + break; + } #if 0 - /* - * This is (how I understand) the X11v4R6 protocol description given - * in A. Nye's book. It is quite different from the - * code in _XTranslateKey() in the file - * "$XConsortium: KeyBind.c /main/55 1996/02/02 14:08:55 kaleb $" - * as shipped with XFree, and doesn't work correctly, nor do I see - * how it could (e.g. the case of lower/uppercase-letters). - * -- Michael Shuldman - */ - - if (numlockmod >= 0 && (bitmask & modifiermask[numlockmod]) - && ((syms[1] >= 0xff80 - && syms[1] <= 0xffbd) - || (syms[1] >= 0x11000000 - && syms[1] <= 0x1100ffff))) { - if ((bitmask & ShiftMask) || lockmod_is_shiftlock) - return keysymString(syms[groupmod + 0]); - else - if (syms[groupmod + 1] == NoSymbol) - return keysymString(syms[groupmod + 0]); - else - return keysymString(syms[groupmod + 1]); - } - else if (!(bitmask & ShiftMask) && !(bitmask & LockMask)) - return keysymString(syms[groupmod + 0]); - else if (!(bitmask & ShiftMask) - && ((bitmask & LockMask) && lockmod_is_capslock)) - if (islower(syms[groupmod + 0])) -/* return toupper(keysymString(syms[groupmod + 0])); */ - return "Uppercase"; /* XXX */ - else - return keysymString(syms[groupmod + 0]); - - else if ((bitmask & ShiftMask) - && ((bitmask & LockMask) && lockmod_is_capslock)) - if (islower(syms[groupmod + 1])) -/* return toupper(keysymString(syms[groupmod + 1])); */ - return "Uppercase"; /* XXX */ - else - return keysymString(syms[groupmod + 1]); - - else if ((bitmask & ShiftMask) - || ((bitmask & LockMask) && lockmod_is_shiftlock)) - return keysymString(syms[groupmod + 1]); + /* + * This is (how I understand) the X11v4R6 protocol description given + * in A. Nye's book. It is quite different from the + * code in _XTranslateKey() in the file + * "$XConsortium: KeyBind.c /main/55 1996/02/02 14:08:55 kaleb $" + * as shipped with XFree, and doesn't work correctly, nor do I see + * how it could (e.g. the case of lower/uppercase-letters). + * -- Michael Shuldman + */ + + if (numlockmod >= 0 && (bitmask & modifiermask[numlockmod]) + && ((syms[1] >= 0xff80 + && syms[1] <= 0xffbd) + || (syms[1] >= 0x11000000 + && syms[1] <= 0x1100ffff))) { + if ((bitmask & ShiftMask) || lockmod_is_shiftlock) + return keysymString(syms[groupmod + 0]); + else + if (syms[groupmod + 1] == NoSymbol) + return keysymString(syms[groupmod + 0]); + else + return keysymString(syms[groupmod + 1]); + } + else if (!(bitmask & ShiftMask) && !(bitmask & LockMask)) + return keysymString(syms[groupmod + 0]); + else if (!(bitmask & ShiftMask) + && ((bitmask & LockMask) && lockmod_is_capslock)) + if (islower(syms[groupmod + 0])) +/* return toupper(keysymString(syms[groupmod + 0])); */ + return "Uppercase"; /* XXX */ + else + return keysymString(syms[groupmod + 0]); + + else if ((bitmask & ShiftMask) + && ((bitmask & LockMask) && lockmod_is_capslock)) + if (islower(syms[groupmod + 1])) +/* return toupper(keysymString(syms[groupmod + 1])); */ + return "Uppercase"; /* XXX */ + else + return keysymString(syms[groupmod + 1]); + + else if ((bitmask & ShiftMask) + || ((bitmask & LockMask) && lockmod_is_shiftlock)) + return keysymString(syms[groupmod + 1]); #else /* _XTranslateKey() based code. */ - while (keysyms_per_keycode > 2 - && keycodemap[keysyms_per_keycode - 1] == NoSymbol) - --keysyms_per_keycode; - if (keysyms_per_keycode > 2 - && (groupmod >= 0 && (modifiermask[groupmod] & bitmask))) { - syms += 2; - keysyms_per_keycode -= 2; - } - - if (numlockmod >= 0 && (bitmask & modifiermask[numlockmod]) - && keysyms_per_keycode > 1 - && ((syms[1] >= 0xff80 && syms[1] <= 0xffbd) - || (syms[1] >= 0x11000000 && syms[1] <= 0x1100ffff))) { - if ((bitmask & ShiftMask) - || (bitmask & LockMask && lockmod_is_shiftlock)) - keysym = syms[0]; - else - keysym = syms[1]; - } - else if (!(bitmask & ShiftMask) - && (!(bitmask & LockMask) || lockmod_is_nosymbol)) { - if (keysyms_per_keycode == 1 - || (keysyms_per_keycode > 1 && syms[1] == NoSymbol)) { - int usym; - - XConvertCase(syms[0], &keysym, &usym); - } - else - keysym = syms[0]; - } - else if (!(bitmask & LockMask) || !lockmod_is_capslock) { - int lsym, usym; - - if (keysyms_per_keycode == 1 - || (keysyms_per_keycode > 1 && (usym = syms[1]) == NoSymbol)) - XConvertCase(syms[0], &lsym, &usym); - keysym = usym; - } - else { - int lsym, usym; - - if (keysyms_per_keycode == 1 - || (keysyms_per_keycode > 1 && syms[1] == NoSymbol)) - keysym = syms[0]; - - XConvertCase(keysym, &lsym, &usym); - - if (!(bitmask & ShiftMask) && keysym != syms[0] - && ((keysym != usym) || (lsym == usym))) - XConvertCase(syms[0], &lsym, &usym); - keysym = usym; - } - - if (keysym == XK_VoidSymbol) - keysym = NoSymbol; - - return ep_strdup_printf("%d, \"%s\"", keysym, keysymString(keysym)); + while (keysyms_per_keycode > 2 + && keycodemap[keysyms_per_keycode - 1] == NoSymbol) + --keysyms_per_keycode; + if (keysyms_per_keycode > 2 + && (groupmod >= 0 && (modifiermask[groupmod] & bitmask))) { + syms += 2; + keysyms_per_keycode -= 2; + } + + if (numlockmod >= 0 && (bitmask & modifiermask[numlockmod]) + && keysyms_per_keycode > 1 + && ((syms[1] >= 0xff80 && syms[1] <= 0xffbd) + || (syms[1] >= 0x11000000 && syms[1] <= 0x1100ffff))) { + if ((bitmask & ShiftMask) + || (bitmask & LockMask && lockmod_is_shiftlock)) + keysym = syms[0]; + else + keysym = syms[1]; + } + else if (!(bitmask & ShiftMask) + && (!(bitmask & LockMask) || lockmod_is_nosymbol)) { + if (keysyms_per_keycode == 1 + || (keysyms_per_keycode > 1 && syms[1] == NoSymbol)) { + int usym; + + XConvertCase(syms[0], &keysym, &usym); + } + else + keysym = syms[0]; + } + else if (!(bitmask & LockMask) || !lockmod_is_capslock) { + int lsym, usym; + + if (keysyms_per_keycode == 1 + || (keysyms_per_keycode > 1 && (usym = syms[1]) == NoSymbol)) + XConvertCase(syms[0], &lsym, &usym); + keysym = usym; + } + else { + int lsym, usym; + + if (keysyms_per_keycode == 1 + || (keysyms_per_keycode > 1 && syms[1] == NoSymbol)) + keysym = syms[0]; + + XConvertCase(keysym, &lsym, &usym); + + if (!(bitmask & ShiftMask) && keysym != syms[0] + && ((keysym != usym) || (lsym == usym))) + XConvertCase(syms[0], &lsym, &usym); + keysym = usym; + } + + if (keysym == XK_VoidSymbol) + keysym = NoSymbol; + + return ep_strdup_printf("%d, \"%s\"", keysym, keysymString(keysym)); #endif } @@ -1877,18 +1877,18 @@ static const char *keysymString(guint32 v) /* This table is so big that we built it only if necessary */ - const value_string *p = keysym_vals_source; - keysymTable = g_tree_new(compareGuint32); - for(; p -> strptr; p++) - g_tree_insert(keysymTable, GINT_TO_POINTER(p -> value), (gpointer) (p -> strptr) ); + const value_string *p = keysym_vals_source; + keysymTable = g_tree_new(compareGuint32); + for(; p -> strptr; p++) + g_tree_insert(keysymTable, GINT_TO_POINTER(p -> value), (gpointer) (p -> strptr) ); } res = g_tree_lookup(keysymTable, GINT_TO_POINTER(v)); return res ? res : "<Unknown>"; } static void listOfKeycode(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - int *modifiermap[], int keycodes_per_modifier, - gboolean little_endian) + int *modifiermap[], int keycodes_per_modifier, + gboolean little_endian) { proto_item *ti = proto_tree_add_item(t, hf, tvb, *offsetp, array_length(modifiers) * keycodes_per_modifier, little_endian); @@ -1897,31 +1897,31 @@ static void listOfKeycode(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, for (m = 0; m < array_length(modifiers); ++m, *offsetp += keycodes_per_modifier) { - const guint8 *p; - proto_item *tikc; - int i; + const guint8 *p; + proto_item *tikc; + int i; - p = tvb_get_ptr(tvb, *offsetp, keycodes_per_modifier); - modifiermap[m] = - g_malloc(sizeof(*modifiermap[m]) * keycodes_per_modifier); + p = tvb_get_ptr(tvb, *offsetp, keycodes_per_modifier); + modifiermap[m] = + g_malloc(sizeof(*modifiermap[m]) * keycodes_per_modifier); - tikc = proto_tree_add_bytes_format(tt, hf_x11_keycodes_item, tvb, - *offsetp, keycodes_per_modifier, p, "item: "); - for(i = 0; i < keycodes_per_modifier; ++i) { - guchar c = p[i]; + tikc = proto_tree_add_bytes_format(tt, hf_x11_keycodes_item, tvb, + *offsetp, keycodes_per_modifier, p, "item: "); + for(i = 0; i < keycodes_per_modifier; ++i) { + guchar c = p[i]; - if (c) - proto_item_append_text(tikc, " %s=%d", modifiers[m], c); + if (c) + proto_item_append_text(tikc, " %s=%d", modifiers[m], c); - modifiermap[m][i] = c; - } + modifiermap[m][i] = c; + } } } static void listOfKeysyms(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - int hf_item, int *keycodemap[256], - int keycode_first, int keycode_count, - int keysyms_per_keycode, gboolean little_endian) + int hf_item, int *keycodemap[256], + int keycode_first, int keycode_count, + int keysyms_per_keycode, gboolean little_endian) { proto_item *ti = proto_tree_add_item(t, hf, tvb, *offsetp, keycode_count * keysyms_per_keycode * 4, little_endian); proto_tree *tt = proto_item_add_subtree(ti, ett_x11_list_of_keysyms); @@ -1934,143 +1934,143 @@ static void listOfKeysyms(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, for (keycode = keycode_first; keycode_count > 0; ++keycode, --keycode_count) { - if (keycode >= 256) { - proto_tree_add_text(tt, tvb, *offsetp, 4 * keysyms_per_keycode, - "keycode value %d is out of range", keycode); - *offsetp += 4 * keysyms_per_keycode; - continue; - } - tti = proto_tree_add_none_format(tt, hf_item, tvb, *offsetp, - 4 * keysyms_per_keycode, "keysyms (keycode %d):", keycode); - - ttt = proto_item_add_subtree(tti, ett_x11_keysym); - - tvb_ensure_bytes_exist(tvb, *offsetp, 4 * keysyms_per_keycode); - keycodemap[keycode] - = g_malloc(sizeof(*keycodemap[keycode]) * keysyms_per_keycode); - - for(i = 0; i < keysyms_per_keycode; ++i) { - /* keysymvalue = byte3 * 256 + byte4. */ - guint32 v = VALUE32(tvb, *offsetp); - - proto_item_append_text(tti, " %s", keysymString(v)); - proto_tree_add_uint_format(ttt, hf_x11_keysyms_item_keysym, - tvb, *offsetp, 4, v, - "keysym (keycode %d): 0x%08x (%s)", - keycode, v, keysymString(v)); - - keycodemap[keycode][i] = v; - *offsetp += 4; - } - - for (i = 1; i < keysyms_per_keycode; ++i) - if (keycodemap[keycode][i] != NoSymbol) - break; - - if (i == keysyms_per_keycode) { - /* all but (possibly) first were NoSymbol. */ - if (keysyms_per_keycode == 4) { - keycodemap[keycode][1] = NoSymbol; - keycodemap[keycode][2] = keycodemap[keycode][0]; - keycodemap[keycode][3] = NoSymbol; - } - - continue; - } - - for (i = 2; i < keysyms_per_keycode; ++i) - if (keycodemap[keycode][i] != NoSymbol) - break; - if (i == keysyms_per_keycode) { - /* all but (possibly) first two were NoSymbol. */ - if (keysyms_per_keycode == 4) { - keycodemap[keycode][2] = keycodemap[keycode][0]; - keycodemap[keycode][3] = keycodemap[keycode][1]; - } - - continue; - } + if (keycode >= 256) { + proto_tree_add_text(tt, tvb, *offsetp, 4 * keysyms_per_keycode, + "keycode value %d is out of range", keycode); + *offsetp += 4 * keysyms_per_keycode; + continue; + } + tti = proto_tree_add_none_format(tt, hf_item, tvb, *offsetp, + 4 * keysyms_per_keycode, "keysyms (keycode %d):", keycode); + + ttt = proto_item_add_subtree(tti, ett_x11_keysym); + + tvb_ensure_bytes_exist(tvb, *offsetp, 4 * keysyms_per_keycode); + keycodemap[keycode] + = g_malloc(sizeof(*keycodemap[keycode]) * keysyms_per_keycode); + + for(i = 0; i < keysyms_per_keycode; ++i) { + /* keysymvalue = byte3 * 256 + byte4. */ + guint32 v = VALUE32(tvb, *offsetp); + + proto_item_append_text(tti, " %s", keysymString(v)); + proto_tree_add_uint_format(ttt, hf_x11_keysyms_item_keysym, + tvb, *offsetp, 4, v, + "keysym (keycode %d): 0x%08x (%s)", + keycode, v, keysymString(v)); + + keycodemap[keycode][i] = v; + *offsetp += 4; + } + + for (i = 1; i < keysyms_per_keycode; ++i) + if (keycodemap[keycode][i] != NoSymbol) + break; + + if (i == keysyms_per_keycode) { + /* all but (possibly) first were NoSymbol. */ + if (keysyms_per_keycode == 4) { + keycodemap[keycode][1] = NoSymbol; + keycodemap[keycode][2] = keycodemap[keycode][0]; + keycodemap[keycode][3] = NoSymbol; + } + + continue; + } + + for (i = 2; i < keysyms_per_keycode; ++i) + if (keycodemap[keycode][i] != NoSymbol) + break; + if (i == keysyms_per_keycode) { + /* all but (possibly) first two were NoSymbol. */ + if (keysyms_per_keycode == 4) { + keycodemap[keycode][2] = keycodemap[keycode][0]; + keycodemap[keycode][3] = keycodemap[keycode][1]; + } + + continue; + } } } static void listOfPoint(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - int length, gboolean little_endian) + int length, gboolean little_endian) { proto_item *ti = proto_tree_add_item(t, hf, tvb, *offsetp, length * 4, little_endian); proto_tree *tt = proto_item_add_subtree(ti, ett_x11_list_of_point); while(length--) { - gint16 x, y; - proto_item *tti; - proto_tree *ttt; - - x = VALUE16(tvb, *offsetp); - y = VALUE16(tvb, *offsetp + 2); - - tti = proto_tree_add_none_format(tt, hf_x11_point, tvb, *offsetp, 4, "point: (%d,%d)", x, y); - ttt = proto_item_add_subtree(tti, ett_x11_point); - proto_tree_add_int(ttt, hf_x11_point_x, tvb, *offsetp, 2, x); - *offsetp += 2; - proto_tree_add_int(ttt, hf_x11_point_y, tvb, *offsetp, 2, y); - *offsetp += 2; + gint16 x, y; + proto_item *tti; + proto_tree *ttt; + + x = VALUE16(tvb, *offsetp); + y = VALUE16(tvb, *offsetp + 2); + + tti = proto_tree_add_none_format(tt, hf_x11_point, tvb, *offsetp, 4, "point: (%d,%d)", x, y); + ttt = proto_item_add_subtree(tti, ett_x11_point); + proto_tree_add_int(ttt, hf_x11_point_x, tvb, *offsetp, 2, x); + *offsetp += 2; + proto_tree_add_int(ttt, hf_x11_point_y, tvb, *offsetp, 2, y); + *offsetp += 2; } } static void listOfRectangle(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - int length, gboolean little_endian) + int length, gboolean little_endian) { proto_item *ti = proto_tree_add_item(t, hf, tvb, *offsetp, length * 8, little_endian); proto_tree *tt = proto_item_add_subtree(ti, ett_x11_list_of_rectangle); while(length--) { - gint16 x, y; - unsigned width, height; - proto_item *tti; - proto_tree *ttt; - - x = VALUE16(tvb, *offsetp); - y = VALUE16(tvb, *offsetp + 2); - width = VALUE16(tvb, *offsetp + 4); - height = VALUE16(tvb, *offsetp + 6); - - tti = proto_tree_add_none_format(tt, hf_x11_rectangle, tvb, *offsetp, 8, - "rectangle: %dx%d+%d+%d", width, height, x, y); - ttt = proto_item_add_subtree(tti, ett_x11_rectangle); - proto_tree_add_int(ttt, hf_x11_rectangle_x, tvb, *offsetp, 2, x); - *offsetp += 2; - proto_tree_add_int(ttt, hf_x11_rectangle_y, tvb, *offsetp, 2, y); - *offsetp += 2; - proto_tree_add_uint(ttt, hf_x11_rectangle_width, tvb, *offsetp, 2, width); - *offsetp += 2; - proto_tree_add_uint(ttt, hf_x11_rectangle_height, tvb, *offsetp, 2, height); - *offsetp += 2; + gint16 x, y; + unsigned width, height; + proto_item *tti; + proto_tree *ttt; + + x = VALUE16(tvb, *offsetp); + y = VALUE16(tvb, *offsetp + 2); + width = VALUE16(tvb, *offsetp + 4); + height = VALUE16(tvb, *offsetp + 6); + + tti = proto_tree_add_none_format(tt, hf_x11_rectangle, tvb, *offsetp, 8, + "rectangle: %dx%d+%d+%d", width, height, x, y); + ttt = proto_item_add_subtree(tti, ett_x11_rectangle); + proto_tree_add_int(ttt, hf_x11_rectangle_x, tvb, *offsetp, 2, x); + *offsetp += 2; + proto_tree_add_int(ttt, hf_x11_rectangle_y, tvb, *offsetp, 2, y); + *offsetp += 2; + proto_tree_add_uint(ttt, hf_x11_rectangle_width, tvb, *offsetp, 2, width); + *offsetp += 2; + proto_tree_add_uint(ttt, hf_x11_rectangle_height, tvb, *offsetp, 2, height); + *offsetp += 2; } } static void listOfSegment(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - int length, gboolean little_endian) + int length, gboolean little_endian) { proto_item *ti = proto_tree_add_item(t, hf, tvb, *offsetp, length * 8, little_endian); proto_tree *tt = proto_item_add_subtree(ti, ett_x11_list_of_segment); while(length--) { - gint16 x1, y1, x2, y2; - proto_item *tti; - proto_tree *ttt; - - x1 = VALUE16(tvb, *offsetp); - y1 = VALUE16(tvb, *offsetp + 2); - x2 = VALUE16(tvb, *offsetp + 4); - y2 = VALUE16(tvb, *offsetp + 6); - - tti = proto_tree_add_none_format(tt, hf_x11_segment, tvb, *offsetp, 8, - "segment: (%d,%d)-(%d,%d)", x1, y1, x2, y2); - ttt = proto_item_add_subtree(tti, ett_x11_segment); - proto_tree_add_item(ttt, hf_x11_segment_x1, tvb, *offsetp, 2, little_endian); - *offsetp += 2; - proto_tree_add_item(ttt, hf_x11_segment_y1, tvb, *offsetp, 2, little_endian); - *offsetp += 2; - proto_tree_add_item(ttt, hf_x11_segment_x2, tvb, *offsetp, 2, little_endian); - *offsetp += 2; - proto_tree_add_item(ttt, hf_x11_segment_y2, tvb, *offsetp, 2, little_endian); - *offsetp += 2; + gint16 x1, y1, x2, y2; + proto_item *tti; + proto_tree *ttt; + + x1 = VALUE16(tvb, *offsetp); + y1 = VALUE16(tvb, *offsetp + 2); + x2 = VALUE16(tvb, *offsetp + 4); + y2 = VALUE16(tvb, *offsetp + 6); + + tti = proto_tree_add_none_format(tt, hf_x11_segment, tvb, *offsetp, 8, + "segment: (%d,%d)-(%d,%d)", x1, y1, x2, y2); + ttt = proto_item_add_subtree(tti, ett_x11_segment); + proto_tree_add_item(ttt, hf_x11_segment_x1, tvb, *offsetp, 2, little_endian); + *offsetp += 2; + proto_tree_add_item(ttt, hf_x11_segment_y1, tvb, *offsetp, 2, little_endian); + *offsetp += 2; + proto_tree_add_item(ttt, hf_x11_segment_x2, tvb, *offsetp, 2, little_endian); + *offsetp += 2; + proto_tree_add_item(ttt, hf_x11_segment_y2, tvb, *offsetp, 2, little_endian); + *offsetp += 2; } } @@ -2080,15 +2080,15 @@ static void stringCopy(char *dest, const char *source, int length) { guchar c; while(length--) { - c = *source++; - if (!isgraph(c) && c != ' ') c = '.'; - *dest++ = c; + c = *source++; + if (!isgraph(c) && c != ' ') c = '.'; + *dest++ = c; } *dest++ = '\0'; } static void listOfString8(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - int hf_item, int length, gboolean little_endian) + int hf_item, int length, gboolean little_endian) { char *s = NULL; guint allocated = 0; @@ -2100,23 +2100,23 @@ static void listOfString8(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, int scanning_offset = *offsetp; /* Scanning pointer */ for(i = length; i; i--) { - int l; - l = tvb_get_guint8(tvb, scanning_offset); - scanning_offset += 1 + l; + int l; + l = tvb_get_guint8(tvb, scanning_offset); + scanning_offset += 1 + l; } ti = proto_tree_add_item(t, hf, tvb, *offsetp, scanning_offset - *offsetp, little_endian); tt = proto_item_add_subtree(ti, ett_x11_list_of_string8); while(length--) { - unsigned l = VALUE8(tvb, *offsetp); - if (allocated < (l + 1)) { - s = ep_alloc(l + 1); - allocated = l + 1; - } - stringCopy(s, (gchar *)tvb_get_ptr(tvb, *offsetp + 1, l), l); /* Nothing better for now. We need a better string handling API. */ - proto_tree_add_string_format(tt, hf_item, tvb, *offsetp, l + 1, s, "\"%s\"", s); - *offsetp += l + 1; + unsigned l = VALUE8(tvb, *offsetp); + if (allocated < (l + 1)) { + s = ep_alloc(l + 1); + allocated = l + 1; + } + stringCopy(s, (gchar *)tvb_get_ptr(tvb, *offsetp + 1, l), l); /* Nothing better for now. We need a better string handling API. */ + proto_tree_add_string_format(tt, hf_item, tvb, *offsetp, l + 1, s, "\"%s\"", s); + *offsetp += l + 1; } } @@ -2126,8 +2126,8 @@ static int stringIsActuallyAn8BitString(tvbuff_t *tvb, int offset, unsigned leng { if (length > STRING16_MAX_DISPLAYED_LENGTH) length = STRING16_MAX_DISPLAYED_LENGTH; for(; length > 0; offset += 2, length--) { - if (tvb_get_guint8(tvb, offset)) - return FALSE; + if (tvb_get_guint8(tvb, offset)) + return FALSE; } return TRUE; } @@ -2135,45 +2135,45 @@ static int stringIsActuallyAn8BitString(tvbuff_t *tvb, int offset, unsigned leng /* length is the length of the _byte_zone_ (that is, twice the length of the string) */ static void string16_with_buffer_preallocated(tvbuff_t *tvb, proto_tree *t, - int hf, int hf_bytes, - int offset, unsigned length, - char **s, int *sLength, - gboolean little_endian) + int hf, int hf_bytes, + int offset, unsigned length, + char **s, int *sLength, + gboolean little_endian) { int truncated = FALSE; unsigned l = length / 2; if (stringIsActuallyAn8BitString(tvb, offset, l)) { - char *dp; - int soffset = offset; - - if (l > STRING16_MAX_DISPLAYED_LENGTH) { - truncated = TRUE; - l = STRING16_MAX_DISPLAYED_LENGTH; - } - if (*sLength < (int) l + 3) { - *s = ep_alloc(l + 3); - *sLength = l + 3; - } - dp = *s; - *dp++ = '"'; - if (truncated) l -= 3; - - while(l--) { - soffset++; - *dp++ = tvb_get_guint8(tvb, soffset); - soffset++; - } - *dp++ = '"'; - - /* If truncated, add an ellipsis */ - if (truncated) { *dp++ = '.'; *dp++ = '.'; *dp++ = '.'; } - - *dp++ = '\0'; - proto_tree_add_string_format(t, hf, tvb, offset, length, (gchar *)tvb_get_ptr(tvb, offset, length), "%s: %s", - proto_registrar_get_nth(hf) -> name, *s); + char *dp; + int soffset = offset; + + if (l > STRING16_MAX_DISPLAYED_LENGTH) { + truncated = TRUE; + l = STRING16_MAX_DISPLAYED_LENGTH; + } + if (*sLength < (int) l + 3) { + *s = ep_alloc(l + 3); + *sLength = l + 3; + } + dp = *s; + *dp++ = '"'; + if (truncated) l -= 3; + + while(l--) { + soffset++; + *dp++ = tvb_get_guint8(tvb, soffset); + soffset++; + } + *dp++ = '"'; + + /* If truncated, add an ellipsis */ + if (truncated) { *dp++ = '.'; *dp++ = '.'; *dp++ = '.'; } + + *dp++ = '\0'; + proto_tree_add_string_format(t, hf, tvb, offset, length, (gchar *)tvb_get_ptr(tvb, offset, length), "%s: %s", + proto_registrar_get_nth(hf) -> name, *s); } else - proto_tree_add_item(t, hf_bytes, tvb, offset, length, little_endian); + proto_tree_add_item(t, hf_bytes, tvb, offset, length, little_endian); } @@ -2192,92 +2192,92 @@ static void listOfTextItem(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, int n = 0; /* Number of items */ while(scanning_offset < next_offset) { - int l; /* Length of an individual item */ - l = tvb_get_guint8(tvb, scanning_offset); - scanning_offset++; - if (!l) break; - n++; - scanning_offset += l == 255 ? 4 : l + (sizeIs16 ? l : 0) + 1; + int l; /* Length of an individual item */ + l = tvb_get_guint8(tvb, scanning_offset); + scanning_offset++; + if (!l) break; + n++; + scanning_offset += l == 255 ? 4 : l + (sizeIs16 ? l : 0) + 1; } ti = proto_tree_add_item(t, hf, tvb, *offsetp, scanning_offset - *offsetp, little_endian); tt = proto_item_add_subtree(ti, ett_x11_list_of_text_item); while(n--) { - unsigned l = VALUE8(tvb, *offsetp); - if (l == 255) { /* Item is a font */ - fid = tvb_get_ntohl(tvb, *offsetp + 1); - proto_tree_add_uint(tt, hf_x11_textitem_font, tvb, *offsetp, 5, fid); - *offsetp += 5; - } else { /* Item is a string */ - proto_item *tti; - proto_tree *ttt; - gint8 delta = VALUE8(tvb, *offsetp + 1); - if (sizeIs16) l += l; - if ((unsigned) allocated < l + 1) { - s = ep_alloc(l + 1); - allocated = l + 1; - } - stringCopy(s, (gchar *)tvb_get_ptr(tvb, *offsetp + 2, l), l); - tti = proto_tree_add_none_format(tt, hf_x11_textitem_string, tvb, *offsetp, l + 2, - "textitem (string): delta = %d, \"%s\"", - delta, s); - ttt = proto_item_add_subtree(tti, ett_x11_text_item); - proto_tree_add_item(ttt, hf_x11_textitem_string_delta, tvb, *offsetp + 1, 1, little_endian); - if (sizeIs16) - string16_with_buffer_preallocated(tvb, ttt, hf_x11_textitem_string_string16, - hf_x11_textitem_string_string16_bytes, - *offsetp + 2, l, - &s, &allocated, - little_endian); - else - proto_tree_add_string_format(ttt, hf_x11_textitem_string_string8, tvb, - *offsetp + 2, l, s, "\"%s\"", s); - *offsetp += l + 2; - } + unsigned l = VALUE8(tvb, *offsetp); + if (l == 255) { /* Item is a font */ + fid = tvb_get_ntohl(tvb, *offsetp + 1); + proto_tree_add_uint(tt, hf_x11_textitem_font, tvb, *offsetp, 5, fid); + *offsetp += 5; + } else { /* Item is a string */ + proto_item *tti; + proto_tree *ttt; + gint8 delta = VALUE8(tvb, *offsetp + 1); + if (sizeIs16) l += l; + if ((unsigned) allocated < l + 1) { + s = ep_alloc(l + 1); + allocated = l + 1; + } + stringCopy(s, (gchar *)tvb_get_ptr(tvb, *offsetp + 2, l), l); + tti = proto_tree_add_none_format(tt, hf_x11_textitem_string, tvb, *offsetp, l + 2, + "textitem (string): delta = %d, \"%s\"", + delta, s); + ttt = proto_item_add_subtree(tti, ett_x11_text_item); + proto_tree_add_item(ttt, hf_x11_textitem_string_delta, tvb, *offsetp + 1, 1, little_endian); + if (sizeIs16) + string16_with_buffer_preallocated(tvb, ttt, hf_x11_textitem_string_string16, + hf_x11_textitem_string_string16_bytes, + *offsetp + 2, l, + &s, &allocated, + little_endian); + else + proto_tree_add_string_format(ttt, hf_x11_textitem_string_string8, tvb, + *offsetp + 2, l, s, "\"%s\"", s); + *offsetp += l + 2; + } } } static guint32 field8(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - gboolean little_endian) + gboolean little_endian) { guint32 v = VALUE8(tvb, *offsetp); header_field_info *hfi = proto_registrar_get_nth(hf); const gchar *enumValue = NULL; if (hfi -> strings) - enumValue = match_strval(v, cVALS(hfi -> strings)); + enumValue = match_strval(v, cVALS(hfi -> strings)); if (enumValue) - proto_tree_add_uint_format(t, hf, tvb, *offsetp, 1, v, + proto_tree_add_uint_format(t, hf, tvb, *offsetp, 1, v, hfi -> display == BASE_DEC ? "%s: %u (%s)" : "%s: 0x%02x (%s)", - hfi -> name, v, enumValue); + hfi -> name, v, enumValue); else - proto_tree_add_item(t, hf, tvb, *offsetp, 1, little_endian); + proto_tree_add_item(t, hf, tvb, *offsetp, 1, little_endian); *offsetp += 1; return v; } static guint32 field16(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - gboolean little_endian) + gboolean little_endian) { guint32 v = VALUE16(tvb, *offsetp); header_field_info *hfi = proto_registrar_get_nth(hf); const gchar *enumValue = NULL; if (hfi -> strings) - enumValue = match_strval(v, cVALS(hfi -> strings)); + enumValue = match_strval(v, cVALS(hfi -> strings)); if (enumValue) - proto_tree_add_uint_format(t, hf, tvb, *offsetp, 2, v, - hfi -> display == BASE_DEC ? "%s: %u (%s)" : "%s: 0x%02x (%s)", - hfi -> name, v, enumValue); + proto_tree_add_uint_format(t, hf, tvb, *offsetp, 2, v, + hfi -> display == BASE_DEC ? "%s: %u (%s)" : "%s: 0x%02x (%s)", + hfi -> name, v, enumValue); else - proto_tree_add_item(t, hf, tvb, *offsetp, 2, little_endian); + proto_tree_add_item(t, hf, tvb, *offsetp, 2, little_endian); *offsetp += 2; return v; } static guint32 field32(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - gboolean little_endian) + gboolean little_endian) { guint32 v = VALUE32(tvb, *offsetp); header_field_info *hfi = proto_registrar_get_nth(hf); @@ -2285,21 +2285,21 @@ static guint32 field32(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, const gchar *nameAsChar = hfi -> name; if (hfi -> strings) - enumValue = match_strval(v, cVALS(hfi -> strings)); + enumValue = match_strval(v, cVALS(hfi -> strings)); if (enumValue) - proto_tree_add_uint_format(t, hf, tvb, *offsetp, 4, v, - hfi -> display == BASE_DEC ? "%s: %u (%s)" : "%s: 0x%08x (%s)", - nameAsChar, v, enumValue); + proto_tree_add_uint_format(t, hf, tvb, *offsetp, 4, v, + hfi -> display == BASE_DEC ? "%s: %u (%s)" : "%s: 0x%08x (%s)", + nameAsChar, v, enumValue); else - proto_tree_add_uint_format(t, hf, tvb, *offsetp, 4, v, - hfi -> display == BASE_DEC ? "%s: %u" : "%s: 0x%08x", - nameAsChar, v); + proto_tree_add_uint_format(t, hf, tvb, *offsetp, 4, v, + hfi -> display == BASE_DEC ? "%s: %u" : "%s: 0x%08x", + nameAsChar, v); *offsetp += 4; return v; } static void gcAttributes(tvbuff_t *tvb, int *offsetp, proto_tree *t, - gboolean little_endian) + gboolean little_endian) { BITMASK32(gc_value); BITFIELD(ENUM8, gc_value_mask, function); @@ -2329,7 +2329,7 @@ static void gcAttributes(tvbuff_t *tvb, int *offsetp, proto_tree *t, } static void gcMask(tvbuff_t *tvb, int *offsetp, proto_tree *t, - gboolean little_endian) + gboolean little_endian) { BITMASK32(gc_value); FLAG(gc_value, function); @@ -2359,7 +2359,7 @@ static void gcMask(tvbuff_t *tvb, int *offsetp, proto_tree *t, } static guint32 requestLength(tvbuff_t *tvb, int *offsetp, proto_tree *t, - gboolean little_endian) + gboolean little_endian) { guint32 res = VALUE16(tvb, *offsetp); proto_tree_add_uint(t, hf_x11_request_length, tvb, *offsetp, 2, res); @@ -2368,7 +2368,7 @@ static guint32 requestLength(tvbuff_t *tvb, int *offsetp, proto_tree *t, } static void setOfEvent(tvbuff_t *tvb, int *offsetp, proto_tree *t, - gboolean little_endian) + gboolean little_endian) { BITMASK32(event); FLAG(event, KeyPress); @@ -2401,7 +2401,7 @@ static void setOfEvent(tvbuff_t *tvb, int *offsetp, proto_tree *t, } static void setOfDeviceEvent(tvbuff_t *tvb, int *offsetp, proto_tree *t, - gboolean little_endian) + gboolean little_endian) { BITMASK32(do_not_propagate); FLAG(do_not_propagate, KeyPress); @@ -2421,7 +2421,7 @@ static void setOfDeviceEvent(tvbuff_t *tvb, int *offsetp, proto_tree *t, static void setOfKeyButMask(tvbuff_t *tvb, int *offsetp, proto_tree *t, - gboolean little_endian, gboolean butmask) + gboolean little_endian, gboolean butmask) { proto_item *ti; guint32 bitmask_value; @@ -2434,39 +2434,39 @@ static void setOfKeyButMask(tvbuff_t *tvb, int *offsetp, proto_tree *t, bitmask_size = 2; if (!butmask && bitmask_value == 0x8000) - proto_tree_add_uint_format(t, hf_x11_modifiers_mask_AnyModifier, tvb, *offsetp, 2, 0x8000, - "modifiers-masks: 0x8000 (AnyModifier)"); + proto_tree_add_uint_format(t, hf_x11_modifiers_mask_AnyModifier, tvb, *offsetp, 2, 0x8000, + "modifiers-masks: 0x8000 (AnyModifier)"); else { - ti = proto_tree_add_uint(t, hf_x11_modifiers_mask, tvb, *offsetp, 2, - bitmask_value); - bitmask_tree = proto_item_add_subtree(ti, ett_x11_set_of_key_mask); - FLAG(modifiers, Shift); - FLAG(modifiers, Lock); - FLAG(modifiers, Control); - FLAG(modifiers, Mod1); - FLAG(modifiers, Mod2); - FLAG(modifiers, Mod3); - FLAG(modifiers, Mod4); - FLAG(modifiers, Mod5); - - if (butmask) { - FLAG(modifiers, Button1); - FLAG(modifiers, Button2); - FLAG(modifiers, Button3); - FLAG(modifiers, Button4); - FLAG(modifiers, Button5); - } - - if (butmask) - FLAG_IF_NONZERO(keybut, erroneous_bits); - else - FLAG_IF_NONZERO(modifiers, erroneous_bits); + ti = proto_tree_add_uint(t, hf_x11_modifiers_mask, tvb, *offsetp, 2, + bitmask_value); + bitmask_tree = proto_item_add_subtree(ti, ett_x11_set_of_key_mask); + FLAG(modifiers, Shift); + FLAG(modifiers, Lock); + FLAG(modifiers, Control); + FLAG(modifiers, Mod1); + FLAG(modifiers, Mod2); + FLAG(modifiers, Mod3); + FLAG(modifiers, Mod4); + FLAG(modifiers, Mod5); + + if (butmask) { + FLAG(modifiers, Button1); + FLAG(modifiers, Button2); + FLAG(modifiers, Button3); + FLAG(modifiers, Button4); + FLAG(modifiers, Button5); + } + + if (butmask) + FLAG_IF_NONZERO(keybut, erroneous_bits); + else + FLAG_IF_NONZERO(modifiers, erroneous_bits); } *offsetp += 2; } static void setOfPointerEvent(tvbuff_t *tvb, int *offsetp, proto_tree *t, - gboolean little_endian) + gboolean little_endian) { BITMASK16(pointer_event); FLAG(pointer_event, ButtonPress); @@ -2509,26 +2509,26 @@ static void string16(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, length += length; string16_with_buffer_preallocated(tvb, t, hf, hf_bytes, *offsetp, length, - &s, &l, little_endian); + &s, &l, little_endian); *offsetp += length; } static void timestamp(tvbuff_t *tvb, int *offsetp, proto_tree *t, int hf, - gboolean little_endian) + gboolean little_endian) { guint32 v = VALUE32(tvb, *offsetp); if (!v) - proto_tree_add_uint_format(t, hf, tvb, *offsetp, 4, 0, "%s: 0 (CurrentTime)", - proto_registrar_get_nth(hf) -> name); + proto_tree_add_uint_format(t, hf, tvb, *offsetp, 4, 0, "%s: 0 (CurrentTime)", + proto_registrar_get_nth(hf) -> name); else - proto_tree_add_uint(t, hf, tvb, *offsetp, 4, v); + proto_tree_add_uint(t, hf, tvb, *offsetp, 4, v); *offsetp += 4; } static void windowAttributes(tvbuff_t *tvb, int *offsetp, proto_tree *t, - gboolean little_endian) + gboolean little_endian) { BITMASK32(window_value); BITFIELD(PIXMAP, window_value_mask, background_pixmap); @@ -2554,14 +2554,14 @@ static void x11_init_protocol(void) x11_conv_data_t *state; for (state = x11_conv_data_list; state != NULL; ) { - x11_conv_data_t *last; + x11_conv_data_t *last; - g_hash_table_destroy(state->seqtable); - g_hash_table_destroy(state->valtable); + g_hash_table_destroy(state->seqtable); + g_hash_table_destroy(state->valtable); - last = state; - state = state->next; - g_free(last); + last = state; + state = state->next; + g_free(last); } x11_conv_data_list = NULL; } @@ -2575,7 +2575,7 @@ static void x11_init_protocol(void) /* If we can't guess, we return TRUE (that is little_endian), cause I'm developing on a Linux box :-). The (non-)guess isn't cached however, so we may have more luck next time. I'm quite conservative - in my assertions, cause once it's cached, it's stay in cache, and + in my assertions, cause once it's cached, it stays in cache, and we may be fooled up by a packet starting with the end of a request started in a previous packet... */ @@ -2586,9 +2586,9 @@ static int numberOfBitSet(tvbuff_t *tvb, int offset, int maskLength) { int res = 0; while(maskLength--) { - int c = tvb_get_guint8(tvb, offset); - offset++; - res += numberOfBitSetTable[c & 0xf] + numberOfBitSetTable[c >> 4]; + int c = tvb_get_guint8(tvb, offset); + offset++; + res += numberOfBitSetTable[c & 0xf] + numberOfBitSetTable[c >> 4]; } return res; } @@ -2597,15 +2597,15 @@ static int listOfStringLengthConsistent(tvbuff_t *tvb, int offset, int length, i { if (listLength > length) return FALSE; while(listLength--) { - int l; - if (!tvb_bytes_exist(tvb, offset, 1)) return TRUE; - l = tvb_get_guint8(tvb, offset); - if (!l) break; - l++; - if (l > length) return FALSE; - if (!tvb_bytes_exist(tvb, offset, l)) return TRUE; - offset += l; - length -= l; + int l; + if (!tvb_bytes_exist(tvb, offset, 1)) return TRUE; + l = tvb_get_guint8(tvb, offset); + if (!l) break; + l++; + if (l > length) return FALSE; + if (!tvb_bytes_exist(tvb, offset, l)) return TRUE; + offset += l; + length -= l; } if (length > 3) return FALSE; return TRUE; @@ -2624,214 +2624,214 @@ static int rounded4(int n) static gboolean consistentWithOrder(int length, tvbuff_t *tvb, int offset, guint16 (*v16)(tvbuff_t *, const gint)) { switch(tvb_get_guint8(tvb, offset)) { - case X_CreateWindow: - return !tvb_bytes_exist(tvb, offset, 32) || length == 8 + numberOfBitSet(tvb, offset + 7 * 4, 4); - - case X_ChangeWindowAttributes: - case X_ChangeGC: - return !tvb_bytes_exist(tvb, offset, 12) || length == 3 + numberOfBitSet(tvb, offset + 8, 4); - - case X_GetWindowAttributes: - case X_DestroyWindow: - case X_DestroySubwindows: - case X_ChangeSaveSet: - case X_MapWindow: - case X_MapSubwindows: - case X_UnmapWindow: - case X_UnmapSubwindows: - case X_CirculateWindow: - case X_GetGeometry: - case X_QueryTree: - case X_GetAtomName: - case X_ListProperties: - case X_GetSelectionOwner: - case X_UngrabPointer: - case X_UngrabKeyboard: - case X_AllowEvents: - case X_QueryPointer: - case X_CloseFont: - case X_QueryFont: - case X_FreePixmap: - case X_FreeGC: - case X_FreeColormap: - case X_InstallColormap: - case X_UninstallColormap: - case X_ListInstalledColormaps: - case X_FreeCursor: - case X_GetKeyboardMapping: - case X_KillClient: - return length == 2; - - case X_ReparentWindow: - case X_SetSelectionOwner: - case X_ChangeActivePointerGrab: - case X_GrabKeyboard: - case X_GrabKey: - case X_GetMotionEvents: - case X_TranslateCoords: - case X_CreatePixmap: - case X_CopyGC: - case X_ClearArea: - case X_CreateColormap: - case X_AllocColor: - case X_AllocColorPlanes: - return length == 4; - - case X_ConfigureWindow: - return !tvb_bytes_exist(tvb, offset, 10) || length == 3 + numberOfBitSet(tvb, offset + 8, 2); - - case X_InternAtom: - case X_QueryExtension: - return !tvb_bytes_exist(tvb, offset, 6) || length == 2 + rounded4(v16(tvb, offset + 4)); - - case X_ChangeProperty: - { - int multiplier, type; - if (!tvb_bytes_exist(tvb, offset, 17)) return TRUE; - type = tvb_get_guint8(tvb, 16); - if (type != 8 && type != 16 && type != 32) return FALSE; - multiplier = type == 8 ? 1 : type == 16 ? 2 : 4; - if (!tvb_bytes_exist(tvb, offset, 24)) return TRUE; - return length == 6 + rounded4((v16 == tvb_get_letohs ? tvb_get_letohl : tvb_get_ntohl)(tvb, offset + 20) * multiplier); - } - - case X_DeleteProperty: - case X_UngrabButton: - case X_UngrabKey: - case X_SetInputFocus: - case X_CopyColormapAndFree: - case X_AllocColorCells: - case X_QueryBestSize: - case X_ChangePointerControl: - case X_SetScreenSaver: - return length == 3; - - case X_GetProperty: - case X_ConvertSelection: - case X_GrabPointer: - case X_GrabButton: - case X_WarpPointer: - return length == 6; - - case X_SendEvent: - return length == 11; - - case X_GrabServer: - case X_UngrabServer: - case X_GetInputFocus: - case X_QueryKeymap: - case X_GetFontPath: - case X_ListExtensions: - case X_GetKeyboardControl: - case X_Bell: - case X_GetPointerControl: - case X_GetScreenSaver: - case X_ListHosts: - case X_SetAccessControl: - case X_SetCloseDownMode: - case X_ForceScreenSaver: - case X_GetPointerMapping: - case X_GetModifierMapping: - return length == 1; - - case X_OpenFont: - case X_AllocNamedColor: - case X_LookupColor: - return !tvb_bytes_exist(tvb, offset, 10) || length == 3 + rounded4(v16(tvb, offset + 8)); - - case X_QueryTextExtents: - return length >= 2; - - case X_ListFonts: - case X_ListFontsWithInfo: - case X_ChangeHosts: - return !tvb_bytes_exist(tvb, offset, 8) || length == 2 + rounded4(v16(tvb, offset + 6)); - - case X_SetFontPath: - if (length < 2) return FALSE; - if (!tvb_bytes_exist(tvb, offset, 8)) return TRUE; - return listOfStringLengthConsistent(tvb, offset + 8, (length - 2) * 4, v16(tvb, offset + 4)); - - case X_CreateGC: - return !tvb_bytes_exist(tvb, offset, 16) || length == 4 + numberOfBitSet(tvb, offset + 12, 4); - - case X_SetDashes: - return !tvb_bytes_exist(tvb, offset, 12) || length == 3 + rounded4(v16(tvb, offset + 10)); - - case X_SetClipRectangles: - case X_PolySegment: - case X_PolyRectangle: - case X_PolyFillRectangle: - return length >= 3 && (length - 3) % 2 == 0; - - case X_CopyArea: - return length == 7; - - case X_CopyPlane: - case X_CreateCursor: - case X_CreateGlyphCursor: - return length == 8; - - case X_PolyPoint: - case X_PolyLine: - case X_FreeColors: - return length >= 3; - - case X_PolyArc: - case X_PolyFillArc: - return length >= 3 && (length - 3) % 3 == 0; - - case X_FillPoly: - case X_ImageText8: - return length >= 4; - - case X_PutImage: - return length >= 6; - - case X_GetImage: - case X_RecolorCursor: - return length == 5; - - case X_PolyText8: - if (length < 4) return FALSE; - return TRUE; /* We don't perform many controls on this one */ - - case X_PolyText16: - if (length < 4) return FALSE; - return TRUE; /* We don't perform many controls on this one */ - - case X_ImageText16: - return length >= 4; - - case X_StoreColors: - return length > 2 && (length - 2) % 3 == 0; - - case X_StoreNamedColor: - return !tvb_bytes_exist(tvb, offset, 14) || length == 4 + rounded4(v16(tvb, offset + 12)); - - case X_QueryColors: - return length >= 2; - - case X_ChangeKeyboardMapping: - return !tvb_bytes_exist(tvb, offset, 6) || length == 2 + tvb_get_guint8(tvb, 1) * tvb_get_guint8(tvb, 5); - - case X_ChangeKeyboardControl: - return !tvb_bytes_exist(tvb, offset, 6) || length == 2 + numberOfBitSet(tvb, offset + 4, 2); - - case X_RotateProperties: - return !tvb_bytes_exist(tvb, offset, 10) || length == 3 + v16(tvb, offset + 8); - - case X_SetPointerMapping: - return length == 1 + rounded4(tvb_get_guint8(tvb, 1)); + case X_CreateWindow: + return !tvb_bytes_exist(tvb, offset, 32) || length == 8 + numberOfBitSet(tvb, offset + 7 * 4, 4); + + case X_ChangeWindowAttributes: + case X_ChangeGC: + return !tvb_bytes_exist(tvb, offset, 12) || length == 3 + numberOfBitSet(tvb, offset + 8, 4); + + case X_GetWindowAttributes: + case X_DestroyWindow: + case X_DestroySubwindows: + case X_ChangeSaveSet: + case X_MapWindow: + case X_MapSubwindows: + case X_UnmapWindow: + case X_UnmapSubwindows: + case X_CirculateWindow: + case X_GetGeometry: + case X_QueryTree: + case X_GetAtomName: + case X_ListProperties: + case X_GetSelectionOwner: + case X_UngrabPointer: + case X_UngrabKeyboard: + case X_AllowEvents: + case X_QueryPointer: + case X_CloseFont: + case X_QueryFont: + case X_FreePixmap: + case X_FreeGC: + case X_FreeColormap: + case X_InstallColormap: + case X_UninstallColormap: + case X_ListInstalledColormaps: + case X_FreeCursor: + case X_GetKeyboardMapping: + case X_KillClient: + return length == 2; + + case X_ReparentWindow: + case X_SetSelectionOwner: + case X_ChangeActivePointerGrab: + case X_GrabKeyboard: + case X_GrabKey: + case X_GetMotionEvents: + case X_TranslateCoords: + case X_CreatePixmap: + case X_CopyGC: + case X_ClearArea: + case X_CreateColormap: + case X_AllocColor: + case X_AllocColorPlanes: + return length == 4; + + case X_ConfigureWindow: + return !tvb_bytes_exist(tvb, offset, 10) || length == 3 + numberOfBitSet(tvb, offset + 8, 2); + + case X_InternAtom: + case X_QueryExtension: + return !tvb_bytes_exist(tvb, offset, 6) || length == 2 + rounded4(v16(tvb, offset + 4)); + + case X_ChangeProperty: + { + int multiplier, type; + if (!tvb_bytes_exist(tvb, offset, 17)) return TRUE; + type = tvb_get_guint8(tvb, 16); + if (type != 8 && type != 16 && type != 32) return FALSE; + multiplier = type == 8 ? 1 : type == 16 ? 2 : 4; + if (!tvb_bytes_exist(tvb, offset, 24)) return TRUE; + return length == 6 + rounded4((v16 == tvb_get_letohs ? tvb_get_letohl : tvb_get_ntohl)(tvb, offset + 20) * multiplier); + } + + case X_DeleteProperty: + case X_UngrabButton: + case X_UngrabKey: + case X_SetInputFocus: + case X_CopyColormapAndFree: + case X_AllocColorCells: + case X_QueryBestSize: + case X_ChangePointerControl: + case X_SetScreenSaver: + return length == 3; + + case X_GetProperty: + case X_ConvertSelection: + case X_GrabPointer: + case X_GrabButton: + case X_WarpPointer: + return length == 6; + + case X_SendEvent: + return length == 11; + + case X_GrabServer: + case X_UngrabServer: + case X_GetInputFocus: + case X_QueryKeymap: + case X_GetFontPath: + case X_ListExtensions: + case X_GetKeyboardControl: + case X_Bell: + case X_GetPointerControl: + case X_GetScreenSaver: + case X_ListHosts: + case X_SetAccessControl: + case X_SetCloseDownMode: + case X_ForceScreenSaver: + case X_GetPointerMapping: + case X_GetModifierMapping: + return length == 1; + + case X_OpenFont: + case X_AllocNamedColor: + case X_LookupColor: + return !tvb_bytes_exist(tvb, offset, 10) || length == 3 + rounded4(v16(tvb, offset + 8)); + + case X_QueryTextExtents: + return length >= 2; + + case X_ListFonts: + case X_ListFontsWithInfo: + case X_ChangeHosts: + return !tvb_bytes_exist(tvb, offset, 8) || length == 2 + rounded4(v16(tvb, offset + 6)); + + case X_SetFontPath: + if (length < 2) return FALSE; + if (!tvb_bytes_exist(tvb, offset, 8)) return TRUE; + return listOfStringLengthConsistent(tvb, offset + 8, (length - 2) * 4, v16(tvb, offset + 4)); + + case X_CreateGC: + return !tvb_bytes_exist(tvb, offset, 16) || length == 4 + numberOfBitSet(tvb, offset + 12, 4); + + case X_SetDashes: + return !tvb_bytes_exist(tvb, offset, 12) || length == 3 + rounded4(v16(tvb, offset + 10)); + + case X_SetClipRectangles: + case X_PolySegment: + case X_PolyRectangle: + case X_PolyFillRectangle: + return length >= 3 && (length - 3) % 2 == 0; + + case X_CopyArea: + return length == 7; + + case X_CopyPlane: + case X_CreateCursor: + case X_CreateGlyphCursor: + return length == 8; + + case X_PolyPoint: + case X_PolyLine: + case X_FreeColors: + return length >= 3; + + case X_PolyArc: + case X_PolyFillArc: + return length >= 3 && (length - 3) % 3 == 0; + + case X_FillPoly: + case X_ImageText8: + return length >= 4; + + case X_PutImage: + return length >= 6; + + case X_GetImage: + case X_RecolorCursor: + return length == 5; + + case X_PolyText8: + if (length < 4) return FALSE; + return TRUE; /* We don't perform many controls on this one */ + + case X_PolyText16: + if (length < 4) return FALSE; + return TRUE; /* We don't perform many controls on this one */ + + case X_ImageText16: + return length >= 4; + + case X_StoreColors: + return length > 2 && (length - 2) % 3 == 0; + + case X_StoreNamedColor: + return !tvb_bytes_exist(tvb, offset, 14) || length == 4 + rounded4(v16(tvb, offset + 12)); + + case X_QueryColors: + return length >= 2; + + case X_ChangeKeyboardMapping: + return !tvb_bytes_exist(tvb, offset, 6) || length == 2 + tvb_get_guint8(tvb, 1) * tvb_get_guint8(tvb, 5); + + case X_ChangeKeyboardControl: + return !tvb_bytes_exist(tvb, offset, 6) || length == 2 + numberOfBitSet(tvb, offset + 4, 2); + + case X_RotateProperties: + return !tvb_bytes_exist(tvb, offset, 10) || length == 3 + v16(tvb, offset + 8); + + case X_SetPointerMapping: + return length == 1 + rounded4(tvb_get_guint8(tvb, 1)); - case X_SetModifierMapping: - return length == 1 + tvb_get_guint8(tvb, 1) * 2; + case X_SetModifierMapping: + return length == 1 + tvb_get_guint8(tvb, 1) * 2; - case X_NoOperation: - return length >= 1; + case X_NoOperation: + return length >= 1; - default: - return TRUE; + default: + return TRUE; } } @@ -2843,36 +2843,36 @@ static int x_endian_match(tvbuff_t *tvb, guint16 (*v16)(tvbuff_t *, const gint)) int atLeastOne = 0; for(offset = 0; tvb_bytes_exist(tvb, offset, 4); offset = nextoffset) { - int length; - length = v16(tvb, offset + 2); - if (!length) return -1; - nextoffset = offset + length * 4; - if (!consistentWithOrder(length, tvb, offset, v16)) return -1; - atLeastOne = 1; + int length; + length = v16(tvb, offset + 2); + if (!length) return -1; + nextoffset = offset + length * 4; + if (!consistentWithOrder(length, tvb, offset, v16)) return -1; + atLeastOne = 1; } return atLeastOne; } static gboolean guess_byte_ordering(tvbuff_t *tvb, packet_info *pinfo, - x11_conv_data_t *state) + x11_conv_data_t *state) { /* With X the client gives the byte ordering for the protocol, - and the port on the server tells us we're speaking X. */ + and the port on the server tells us we're speaking X. */ int le, be, decision, decisionToCache; if (state->byte_order == BYTE_ORDER_BE) - return FALSE; /* known to be big-endian */ + return FALSE; /* known to be big-endian */ else if (state->byte_order == BYTE_ORDER_LE) - return TRUE; /* known to be little-endian */ + return TRUE; /* known to be little-endian */ if (pinfo->srcport == pinfo->match_port) { - /* - * This is a reply or event; we don't try to guess the - * byte order on it for now. - */ - return TRUE; + /* + * This is a reply or event; we don't try to guess the + * byte order on it for now. + */ + return TRUE; } le = x_endian_match(tvb, tvb_get_letohs); @@ -2880,33 +2880,33 @@ guess_byte_ordering(tvbuff_t *tvb, packet_info *pinfo, /* remember that "decision" really means "little_endian". */ if (le == be) { - /* We have no reason to believe it's little- rather than - big-endian, so we guess the shortest length is the - right one. - */ - if (!tvb_bytes_exist(tvb, 0, 4)) - /* Not even a way to get the length. We're biased - toward little endianness here (essentially the - x86 world right now). Decoding won't go very far - anyway. - */ - decision = TRUE; - else - decision = tvb_get_letohs(tvb, 2) <= tvb_get_ntohs(tvb, 2); + /* We have no reason to believe it's little- rather than + big-endian, so we guess the shortest length is the + right one. + */ + if (!tvb_bytes_exist(tvb, 0, 4)) + /* Not even a way to get the length. We're biased + toward little endianness here (essentially the + x86 world right now). Decoding won't go very far + anyway. + */ + decision = TRUE; + else + decision = tvb_get_letohs(tvb, 2) <= tvb_get_ntohs(tvb, 2); } else - decision = le >= be; + decision = le >= be; decisionToCache = (le < 0 && be > 0) || (le > 0 && be < 0); if (decisionToCache) { - /* - * Remember the decision. - */ - state->byte_order = decision ? BYTE_ORDER_LE : BYTE_ORDER_BE; + /* + * Remember the decision. + */ + state->byte_order = decision ? BYTE_ORDER_LE : BYTE_ORDER_BE; } /* fprintf(stderr, "packet %d\tle %d\tbe %d\tlittle_endian %d\tcache %d\n", - pinfo->fd -> num, le, be, decision, decisionToCache); + pinfo->fd -> num, le, be, decision, decisionToCache); */ return decision; } @@ -2943,18 +2943,18 @@ static void dissect_x11_initial_conn(tvbuff_t *tvb, packet_info *pinfo, UNUSED(2); if (auth_proto_name_length != 0) { - STRING8(authorization_protocol_name, auth_proto_name_length); - offset = ROUND_LENGTH(offset); + STRING8(authorization_protocol_name, auth_proto_name_length); + offset = ROUND_LENGTH(offset); } if (auth_proto_data_length != 0) { - STRING8(authorization_protocol_data, auth_proto_data_length); - offset = ROUND_LENGTH(offset); + STRING8(authorization_protocol_data, auth_proto_data_length); + offset = ROUND_LENGTH(offset); } if ((left = tvb_reported_length_remaining(tvb, offset)) > 0) - proto_tree_add_item(t, hf_x11_undecoded, tvb, offset, left, - little_endian); + proto_tree_add_item(t, hf_x11_undecoded, tvb, offset, left, + little_endian); /* * This is the initial connection request... @@ -2966,96 +2966,96 @@ static void dissect_x11_initial_conn(tvbuff_t *tvb, packet_info *pinfo, */ state->sequencenumber = 0; g_hash_table_insert(state->seqtable, GINT_TO_POINTER(state->sequencenumber), - (int *)INITIAL_CONN); + (int *)INITIAL_CONN); } static void dissect_x11_initial_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, const char _U_ *sep, x11_conv_data_t *volatile state, gboolean little_endian) { - int offset = 0, *offsetp = &offset, left; - unsigned char success; - int length_of_vendor; - int length_of_reason; - proto_item *ti; - proto_tree *t; - - ti = proto_tree_add_item(tree, proto_x11, tvb, 0, -1, FALSE); - proto_item_append_text(ti, ", Reply, Initial connection reply"); - t = proto_item_add_subtree(ti, ett_x11); - - state->iconn_reply = pinfo->fd->num; - success = INT8(success); - if (success) { - UNUSED(1); - length_of_reason = 0; - } - else { - length_of_reason = INT8(length_of_reason); - } - - INT16(protocol_major_version); - INT16(protocol_minor_version); - INT16(replylength); - if (success) { - INT32(release_number); - INT32(resource_id_base); - INT32(resource_id_mask); - 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); - INT8(image_byte_order); - INT8(bitmap_format_bit_order); - INT8(bitmap_format_scanline_unit); - INT8(bitmap_format_scanline_pad); - INT8(min_keycode); - INT8(max_keycode); - UNUSED(4); - STRING8(vendor, length_of_vendor); - } else { - STRING8(reason, length_of_reason); - } - - if ((left = tvb_reported_length_remaining(tvb, offset)) > 0) - UNDECODED(left); + int offset = 0, *offsetp = &offset, left; + unsigned char success; + int length_of_vendor; + int length_of_reason; + proto_item *ti; + proto_tree *t; + + ti = proto_tree_add_item(tree, proto_x11, tvb, 0, -1, FALSE); + proto_item_append_text(ti, ", Reply, Initial connection reply"); + t = proto_item_add_subtree(ti, ett_x11); + + state->iconn_reply = pinfo->fd->num; + success = INT8(success); + if (success) { + UNUSED(1); + length_of_reason = 0; + } + else { + length_of_reason = INT8(length_of_reason); + } + + INT16(protocol_major_version); + INT16(protocol_minor_version); + INT16(replylength); + if (success) { + INT32(release_number); + INT32(resource_id_base); + INT32(resource_id_mask); + 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); + INT8(image_byte_order); + INT8(bitmap_format_bit_order); + INT8(bitmap_format_scanline_unit); + INT8(bitmap_format_scanline_pad); + INT8(min_keycode); + INT8(max_keycode); + UNUSED(4); + STRING8(vendor, length_of_vendor); + } else { + STRING8(reason, length_of_reason); + } + + if ((left = tvb_reported_length_remaining(tvb, offset)) > 0) + UNDECODED(left); } typedef struct x11_reply_info { - const guint8 minor; - void (*dissect)(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, int little_endian); + const guint8 minor; + void (*dissect)(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, int little_endian); } x11_reply_info; typedef struct event_info { - const gchar *name; - void (*dissect)(tvbuff_t *tvb, int *offsetp, proto_tree *t, int little_endian); + const gchar *name; + void (*dissect)(tvbuff_t *tvb, int *offsetp, proto_tree *t, int little_endian); } x11_event_info; static void set_handler(const char *name, void (*func)(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, int little_endian), - const char **errors, - const x11_event_info *event_info, - const x11_reply_info *reply_info) + const char **errors, + const x11_event_info *event_info, + const x11_reply_info *reply_info) { - g_hash_table_insert(extension_table, (gpointer)name, (gpointer)func); - g_hash_table_insert(error_table, (gpointer)name, (gpointer)errors); - g_hash_table_insert(event_table, (gpointer)name, (gpointer)event_info); - g_hash_table_insert(reply_table, (gpointer)name, (gpointer)reply_info); + g_hash_table_insert(extension_table, (gpointer)name, (gpointer)func); + g_hash_table_insert(error_table, (gpointer)name, (gpointer)errors); + g_hash_table_insert(event_table, (gpointer)name, (gpointer)event_info); + g_hash_table_insert(reply_table, (gpointer)name, (gpointer)reply_info); } static int popcount(unsigned int mask) { #if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) - /* GCC 3.4 or newer */ - return __builtin_popcount(mask); + /* GCC 3.4 or newer */ + return __builtin_popcount(mask); #else - /* HACKMEM 169 */ - unsigned long y; + /* HACKMEM 169 */ + unsigned long y; - y = (mask >> 1) &033333333333; - y = mask - y - ((y >>1) & 033333333333); - return (((y + (y >> 3)) & 030707070707) % 077); + y = (mask >> 1) &033333333333; + y = mask - y - ((y >>1) & 033333333333); + return (((y + (y >> 3)) & 030707070707) % 077); #endif } @@ -3063,98 +3063,98 @@ static int popcount(unsigned int mask) #include "x11-extension-implementation.h" static void tryExtension(int opcode, tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, - x11_conv_data_t *state, gboolean little_endian) + x11_conv_data_t *state, gboolean little_endian) { - const gchar *extension; - void (*func)(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, int little_endian); + const gchar *extension; + void (*func)(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, int little_endian); - extension = match_strval(opcode, state->opcode_vals); - if (!extension) - return; + extension = match_strval(opcode, state->opcode_vals); + if (!extension) + return; - func = g_hash_table_lookup(extension_table, extension); - if (func) - func(tvb, pinfo, offsetp, t, little_endian); + func = g_hash_table_lookup(extension_table, extension); + if (func) + func(tvb, pinfo, offsetp, t, little_endian); } static void tryExtensionReply(int opcode, tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, - x11_conv_data_t *state, gboolean little_endian) + x11_conv_data_t *state, gboolean little_endian) { - void (*func)(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, int little_endian); + void (*func)(tvbuff_t *tvb, packet_info *pinfo, int *offsetp, proto_tree *t, int little_endian); - func = g_hash_table_lookup(state->reply_funcs, GINT_TO_POINTER(opcode)); - if (func) - func(tvb, pinfo, offsetp, t, little_endian); - else - REPLYCONTENTS_COMMON(); + func = g_hash_table_lookup(state->reply_funcs, GINT_TO_POINTER(opcode)); + if (func) + func(tvb, pinfo, offsetp, t, little_endian); + else + REPLYCONTENTS_COMMON(); } static void tryExtensionEvent(int event, tvbuff_t *tvb, int *offsetp, proto_tree *t, - x11_conv_data_t *state, gboolean little_endian) + x11_conv_data_t *state, gboolean little_endian) { - void (*func)(tvbuff_t *tvb, int *offsetp, proto_tree *t, int little_endian); + void (*func)(tvbuff_t *tvb, int *offsetp, proto_tree *t, int little_endian); - func = g_hash_table_lookup(state->eventcode_funcs, GINT_TO_POINTER(event)); - if (func) - func(tvb, offsetp, t, little_endian); + func = g_hash_table_lookup(state->eventcode_funcs, GINT_TO_POINTER(event)); + if (func) + func(tvb, offsetp, t, little_endian); } static void register_extension(x11_conv_data_t *state, value_string *vals_p, int major_opcode, unsigned int first_event, unsigned int first_error) { - const char **error_string; - x11_event_info *event_info; - x11_reply_info *reply_info; - int i; - - vals_p->value = major_opcode; - - error_string = g_hash_table_lookup(error_table, vals_p->strptr); - while (error_string && *error_string && first_error <= LastExtensionError) { - /* store string of extension error */ - for (i = 0; i <= LastExtensionError; i++) { - if (state->errorcode_vals[i].strptr == NULL) { - state->errorcode_vals[i].value = first_error; - state->errorcode_vals[i].strptr = *error_string; - break; - } else if (state->errorcode_vals[i].value == first_error) { - /* TODO: Warn about extensions stepping on each other */ - state->errorcode_vals[i].strptr = *error_string; - break; - } - } - first_error++; - error_string++; - } + const char **error_string; + x11_event_info *event_info; + x11_reply_info *reply_info; + int i; - event_info = g_hash_table_lookup(event_table, vals_p->strptr); - while (event_info && event_info->name && first_event <= LastExtensionEvent) { - /* store string of extension event */ - for (i = 0; i <= LastExtensionEvent; i++) { - if (state->eventcode_vals[i].strptr == NULL) { - state->eventcode_vals[i].value = first_event; - state->eventcode_vals[i].strptr = event_info->name; - break; - } else if (state->eventcode_vals[i].value == first_event) { - /* TODO: Warn about extensions stepping on each other */ - state->eventcode_vals[i].strptr = event_info->name; - break; - } - } - - /* store event decode function */ - g_hash_table_insert(state->eventcode_funcs, GINT_TO_POINTER(first_event), (gpointer)event_info->dissect); - - first_event++; - event_info++; - } + vals_p->value = major_opcode; + + error_string = g_hash_table_lookup(error_table, vals_p->strptr); + while (error_string && *error_string && first_error <= LastExtensionError) { + /* store string of extension error */ + for (i = 0; i <= LastExtensionError; i++) { + if (state->errorcode_vals[i].strptr == NULL) { + state->errorcode_vals[i].value = first_error; + state->errorcode_vals[i].strptr = *error_string; + break; + } else if (state->errorcode_vals[i].value == first_error) { + /* TODO: Warn about extensions stepping on each other */ + state->errorcode_vals[i].strptr = *error_string; + break; + } + } + first_error++; + error_string++; + } + + event_info = g_hash_table_lookup(event_table, vals_p->strptr); + while (event_info && event_info->name && first_event <= LastExtensionEvent) { + /* store string of extension event */ + for (i = 0; i <= LastExtensionEvent; i++) { + if (state->eventcode_vals[i].strptr == NULL) { + state->eventcode_vals[i].value = first_event; + state->eventcode_vals[i].strptr = event_info->name; + break; + } else if (state->eventcode_vals[i].value == first_event) { + /* TODO: Warn about extensions stepping on each other */ + state->eventcode_vals[i].strptr = event_info->name; + break; + } + } + + /* store event decode function */ + g_hash_table_insert(state->eventcode_funcs, GINT_TO_POINTER(first_event), (gpointer)event_info->dissect); + + first_event++; + event_info++; + } - reply_info = g_hash_table_lookup(reply_table, vals_p->strptr); - if (reply_info) - for (i = 0; reply_info[i].dissect; i++) - g_hash_table_insert(state->reply_funcs, - GINT_TO_POINTER(major_opcode | (reply_info[i].minor << 8)), - (gpointer)reply_info[i].dissect); + reply_info = g_hash_table_lookup(reply_table, vals_p->strptr); + if (reply_info) + for (i = 0; reply_info[i].dissect; i++) + g_hash_table_insert(state->reply_funcs, + GINT_TO_POINTER(major_opcode | (reply_info[i].minor << 8)), + (gpointer)reply_info[i].dissect); } @@ -3177,8 +3177,8 @@ static void dissect_x11_request(tvbuff_t *tvb, packet_info *pinfo, length = VALUE16(tvb, 2) * 4; if (length < 4) { - /* Bogus message length? */ - return; + /* Bogus message length? */ + return; } next_offset = offset + length; @@ -3192,48 +3192,48 @@ static void dissect_x11_request(tvbuff_t *tvb, packet_info *pinfo, OPCODE(); 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>")); + 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, ", Request, opcode: %d (%s)", - opcode, val_to_str(opcode, state->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 = se_alloc(v16 + 1); - stringCopy(name, (gchar*)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; - state->opcode_vals[i].value = -1; - g_hash_table_insert(state->valtable, - GINT_TO_POINTER(state->sequencenumber), - (int *)&state->opcode_vals[i]); - break; - } else if (strcmp(state->opcode_vals[i].strptr, - name) == 0) { - g_hash_table_insert(state->valtable, - GINT_TO_POINTER(state->sequencenumber), - (int *)&state->opcode_vals[i]); - break; - } - i++; - } - - /* QueryExtension expects a reply, fall through */ + case X_QueryExtension: + + /* necessary processing even if tree == NULL */ + + v16 = VALUE16(tvb, 4); + name = se_alloc(v16 + 1); + stringCopy(name, (gchar*)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; + state->opcode_vals[i].value = -1; + g_hash_table_insert(state->valtable, + GINT_TO_POINTER(state->sequencenumber), + (int *)&state->opcode_vals[i]); + break; + } else if (strcmp(state->opcode_vals[i].strptr, + name) == 0) { + g_hash_table_insert(state->valtable, + GINT_TO_POINTER(state->sequencenumber), + (int *)&state->opcode_vals[i]); + break; + } + i++; + } + + /* QueryExtension expects a reply, fall through */ case X_AllocColor: case X_AllocColorCells: @@ -3274,1028 +3274,1028 @@ static void dissect_x11_request(tvbuff_t *tvb, packet_info *pinfo, case X_SetModifierMapping: case X_SetPointerMapping: case X_TranslateCoords: - /* - * Those requests expect a reply. - */ - g_hash_table_insert(state->seqtable, - GINT_TO_POINTER(state->sequencenumber), - GINT_TO_POINTER(opcode)); + /* + * Those requests expect a reply. + */ + g_hash_table_insert(state->seqtable, + GINT_TO_POINTER(state->sequencenumber), + GINT_TO_POINTER(opcode)); - break; + break; default: - /* - * With Extension, we don't know, so assume there could be one - */ - if (opcode >= X_FirstExtension && opcode <= X_LastExtension) { - guint32 minor; - minor = tvb_get_guint8(tvb, 1); - - g_hash_table_insert(state->seqtable, - GINT_TO_POINTER(state->sequencenumber), - GINT_TO_POINTER(opcode | (minor << 8))); - } - - /* - * No reply is expected from any other request. - */ - break; + /* + * With Extension, we don't know, so assume there could be one + */ + if (opcode >= X_FirstExtension && opcode <= X_LastExtension) { + guint32 minor; + minor = tvb_get_guint8(tvb, 1); + + g_hash_table_insert(state->seqtable, + GINT_TO_POINTER(state->sequencenumber), + GINT_TO_POINTER(opcode | (minor << 8))); + } + + /* + * No reply is expected from any other request. + */ + break; } if (tree == NULL) - return; + return; switch(opcode) { case X_CreateWindow: - CARD8(depth); - REQUEST_LENGTH(); - WINDOW(wid); - WINDOW(parent); - INT16(x); - INT16(y); - CARD16(width); - CARD16(height); - CARD16(border_width); - ENUM16(window_class); - VISUALID(visual); - windowAttributes(tvb, offsetp, t, little_endian); - break; + CARD8(depth); + REQUEST_LENGTH(); + WINDOW(wid); + WINDOW(parent); + INT16(x); + INT16(y); + CARD16(width); + CARD16(height); + CARD16(border_width); + ENUM16(window_class); + VISUALID(visual); + windowAttributes(tvb, offsetp, t, little_endian); + break; case X_ChangeWindowAttributes: - UNUSED(1); - REQUEST_LENGTH(); - WINDOW(window); - windowAttributes(tvb, offsetp, t, little_endian); - break; + UNUSED(1); + REQUEST_LENGTH(); + WINDOW(window); + windowAttributes(tvb, offsetp, t, little_endian); + break; case X_GetWindowAttributes: case X_DestroyWindow: case X_DestroySubwindows: - UNUSED(1); - REQUEST_LENGTH(); - WINDOW(window); - break; + UNUSED(1); + REQUEST_LENGTH(); + WINDOW(window); + break; case X_ChangeSaveSet: - ENUM8(save_set_mode); - REQUEST_LENGTH(); - WINDOW(window); - break; + ENUM8(save_set_mode); + REQUEST_LENGTH(); + WINDOW(window); + break; case X_ReparentWindow: - UNUSED(1); - REQUEST_LENGTH(); - WINDOW(window); - WINDOW(parent); - INT16(x); - INT16(y); - break; + UNUSED(1); + REQUEST_LENGTH(); + WINDOW(window); + WINDOW(parent); + INT16(x); + INT16(y); + break; case X_MapWindow: case X_MapSubwindows: case X_UnmapWindow: case X_UnmapSubwindows: - UNUSED(1); - REQUEST_LENGTH(); - WINDOW(window); - break; + UNUSED(1); + REQUEST_LENGTH(); + WINDOW(window); + break; case X_ConfigureWindow: - UNUSED(1); - REQUEST_LENGTH(); - WINDOW(window); - BITMASK16(configure_window); - UNUSED(2); - BITFIELD(INT16, configure_window_mask, x); - BITFIELD(INT16, configure_window_mask, y); - BITFIELD(CARD16, configure_window_mask, width); - BITFIELD(CARD16, configure_window_mask, height); - BITFIELD(CARD16, configure_window_mask, border_width); - BITFIELD(WINDOW, configure_window_mask, sibling); - BITFIELD(ENUM8, configure_window_mask, stack_mode); - ENDBITMASK; - PAD(); - break; + UNUSED(1); + REQUEST_LENGTH(); + WINDOW(window); + BITMASK16(configure_window); + UNUSED(2); + BITFIELD(INT16, configure_window_mask, x); + BITFIELD(INT16, configure_window_mask, y); + BITFIELD(CARD16, configure_window_mask, width); + BITFIELD(CARD16, configure_window_mask, height); + BITFIELD(CARD16, configure_window_mask, border_width); + BITFIELD(WINDOW, configure_window_mask, sibling); + BITFIELD(ENUM8, configure_window_mask, stack_mode); + ENDBITMASK; + PAD(); + break; case X_CirculateWindow: - ENUM8(direction); - REQUEST_LENGTH(); - WINDOW(window); - break; + ENUM8(direction); + REQUEST_LENGTH(); + WINDOW(window); + break; case X_GetGeometry: case X_QueryTree: - UNUSED(1); - REQUEST_LENGTH(); - DRAWABLE(drawable); - break; + UNUSED(1); + REQUEST_LENGTH(); + DRAWABLE(drawable); + break; case X_InternAtom: - BOOL(only_if_exists); - REQUEST_LENGTH(); - v16 = FIELD16(name_length); - UNUSED(2); - STRING8(name, v16); - PAD(); - break; + BOOL(only_if_exists); + REQUEST_LENGTH(); + v16 = FIELD16(name_length); + UNUSED(2); + STRING8(name, v16); + PAD(); + break; case X_GetAtomName: - UNUSED(1); - REQUEST_LENGTH(); - ATOM(atom); - break; + UNUSED(1); + REQUEST_LENGTH(); + ATOM(atom); + break; case X_ChangeProperty: - ENUM8(mode); - REQUEST_LENGTH(); - WINDOW(window); - ATOM(property); - ATOM(type); - v8 = CARD8(format); - UNUSED(3); - v32 = CARD32(data_length); - switch (v8) { - case 8: - if (v32) - LISTofBYTE(data, v32); - break; - case 16: - if (v32) - LISTofCARD16(data16, v32 * 2); - break; - case 32: - if (v32) - LISTofCARD32(data32, v32 * 4); - break; - default: - expert_add_info_format(pinfo, ti, PI_PROTOCOL, PI_WARN, "Invalid Format"); - break; - } - PAD(); - break; + ENUM8(mode); + REQUEST_LENGTH(); + WINDOW(window); + ATOM(property); + ATOM(type); + v8 = CARD8(format); + UNUSED(3); + v32 = CARD32(data_length); + switch (v8) { + case 8: + if (v32) + LISTofBYTE(data, v32); + break; + case 16: + if (v32) + LISTofCARD16(data16, v32 * 2); + break; + case 32: + if (v32) + LISTofCARD32(data32, v32 * 4); + break; + default: + expert_add_info_format(pinfo, ti, PI_PROTOCOL, PI_WARN, "Invalid Format"); + break; + } + PAD(); + break; case X_DeleteProperty: - UNUSED(1); - REQUEST_LENGTH(); - WINDOW(window); - ATOM(property); - break; + UNUSED(1); + REQUEST_LENGTH(); + WINDOW(window); + ATOM(property); + break; case X_GetProperty: - BOOL(delete); - REQUEST_LENGTH(); - WINDOW(window); - ATOM(property); - ATOM(get_property_type); - CARD32(long_offset); - CARD32(long_length); - break; + BOOL(delete); + REQUEST_LENGTH(); + WINDOW(window); + ATOM(property); + ATOM(get_property_type); + CARD32(long_offset); + CARD32(long_length); + break; case X_ListProperties: - UNUSED(1); - REQUEST_LENGTH(); - WINDOW(window); - break; + UNUSED(1); + REQUEST_LENGTH(); + WINDOW(window); + break; case X_SetSelectionOwner: - UNUSED(1); - REQUEST_LENGTH(); - WINDOW(owner); - ATOM(selection); - TIMESTAMP(time); - break; + UNUSED(1); + REQUEST_LENGTH(); + WINDOW(owner); + ATOM(selection); + TIMESTAMP(time); + break; case X_GetSelectionOwner: - UNUSED(1); - REQUEST_LENGTH(); - ATOM(selection); - break; + UNUSED(1); + REQUEST_LENGTH(); + ATOM(selection); + break; case X_ConvertSelection: - UNUSED(1); - REQUEST_LENGTH(); - WINDOW(requestor); - ATOM(selection); - ATOM(target); - ATOM(property); - TIMESTAMP(time); - break; + UNUSED(1); + REQUEST_LENGTH(); + WINDOW(requestor); + ATOM(selection); + ATOM(target); + ATOM(property); + TIMESTAMP(time); + break; case X_SendEvent: - BOOL(propagate); - REQUEST_LENGTH(); - WINDOW(destination); - SETofEVENT(event_mask); - EVENT(); - break; + BOOL(propagate); + REQUEST_LENGTH(); + WINDOW(destination); + SETofEVENT(event_mask); + EVENT(); + break; case X_GrabPointer: - BOOL(owner_events); - REQUEST_LENGTH(); - WINDOW(grab_window); - SETofPOINTEREVENT(pointer_event_mask); - ENUM8(pointer_mode); - ENUM8(keyboard_mode); - WINDOW(confine_to); - CURSOR(cursor); - TIMESTAMP(time); - break; + BOOL(owner_events); + REQUEST_LENGTH(); + WINDOW(grab_window); + SETofPOINTEREVENT(pointer_event_mask); + ENUM8(pointer_mode); + ENUM8(keyboard_mode); + WINDOW(confine_to); + CURSOR(cursor); + TIMESTAMP(time); + break; case X_UngrabPointer: - UNUSED(1); - REQUEST_LENGTH(); - TIMESTAMP(time); - break; + UNUSED(1); + REQUEST_LENGTH(); + TIMESTAMP(time); + break; case X_GrabButton: - BOOL(owner_events); - REQUEST_LENGTH(); - WINDOW(grab_window); - SETofPOINTEREVENT(event_mask); - ENUM8(pointer_mode); - ENUM8(keyboard_mode); - WINDOW(confine_to); - CURSOR(cursor); - BUTTON(button); - UNUSED(1); - SETofKEYMASK(modifiers); - break; + BOOL(owner_events); + REQUEST_LENGTH(); + WINDOW(grab_window); + SETofPOINTEREVENT(event_mask); + ENUM8(pointer_mode); + ENUM8(keyboard_mode); + WINDOW(confine_to); + CURSOR(cursor); + BUTTON(button); + UNUSED(1); + SETofKEYMASK(modifiers); + break; case X_UngrabButton: - BUTTON(button); - REQUEST_LENGTH(); - WINDOW(grab_window); - SETofKEYMASK(modifiers); - UNUSED(2); - break; + BUTTON(button); + REQUEST_LENGTH(); + WINDOW(grab_window); + SETofKEYMASK(modifiers); + UNUSED(2); + break; case X_ChangeActivePointerGrab: - UNUSED(1); - REQUEST_LENGTH(); - CURSOR(cursor); - TIMESTAMP(time); - SETofPOINTEREVENT(event_mask); - UNUSED(2); - break; + UNUSED(1); + REQUEST_LENGTH(); + CURSOR(cursor); + TIMESTAMP(time); + SETofPOINTEREVENT(event_mask); + UNUSED(2); + break; case X_GrabKeyboard: - BOOL(owner_events); - REQUEST_LENGTH(); - WINDOW(grab_window); - TIMESTAMP(time); - ENUM8(pointer_mode); - ENUM8(keyboard_mode); - UNUSED(2); - break; + BOOL(owner_events); + REQUEST_LENGTH(); + WINDOW(grab_window); + TIMESTAMP(time); + ENUM8(pointer_mode); + ENUM8(keyboard_mode); + UNUSED(2); + break; case X_UngrabKeyboard: - UNUSED(1); - REQUEST_LENGTH(); - TIMESTAMP(time); - break; + UNUSED(1); + REQUEST_LENGTH(); + TIMESTAMP(time); + break; case X_GrabKey: - BOOL(owner_events); - REQUEST_LENGTH(); - WINDOW(grab_window); - SETofKEYMASK(modifiers); - KEYCODE(key); - ENUM8(pointer_mode); - ENUM8(keyboard_mode); - UNUSED(3); - break; + BOOL(owner_events); + REQUEST_LENGTH(); + WINDOW(grab_window); + SETofKEYMASK(modifiers); + KEYCODE(key); + ENUM8(pointer_mode); + ENUM8(keyboard_mode); + UNUSED(3); + break; case X_UngrabKey: - KEYCODE(key); - REQUEST_LENGTH(); - WINDOW(grab_window); - SETofKEYMASK(modifiers); - UNUSED(2); - break; + KEYCODE(key); + REQUEST_LENGTH(); + WINDOW(grab_window); + SETofKEYMASK(modifiers); + UNUSED(2); + break; case X_AllowEvents: - ENUM8(allow_events_mode); - REQUEST_LENGTH(); - TIMESTAMP(time); - break; + ENUM8(allow_events_mode); + REQUEST_LENGTH(); + TIMESTAMP(time); + break; case X_GrabServer: - UNUSED(1); - REQUEST_LENGTH(); - break; + UNUSED(1); + REQUEST_LENGTH(); + break; case X_UngrabServer: - UNUSED(1); - REQUEST_LENGTH(); - break; + UNUSED(1); + REQUEST_LENGTH(); + break; case X_QueryPointer: - UNUSED(1); - REQUEST_LENGTH(); - WINDOW(window); - break; + UNUSED(1); + REQUEST_LENGTH(); + WINDOW(window); + break; case X_GetMotionEvents: - UNUSED(1); - REQUEST_LENGTH(); - WINDOW(window); - TIMESTAMP(start); - TIMESTAMP(stop); - break; + UNUSED(1); + REQUEST_LENGTH(); + WINDOW(window); + TIMESTAMP(start); + TIMESTAMP(stop); + break; case X_TranslateCoords: - UNUSED(1); - REQUEST_LENGTH(); - WINDOW(src_window); - WINDOW(dst_window); - INT16(src_x); - INT16(src_y); - break; + UNUSED(1); + REQUEST_LENGTH(); + WINDOW(src_window); + WINDOW(dst_window); + INT16(src_x); + INT16(src_y); + break; case X_WarpPointer: - UNUSED(1); - REQUEST_LENGTH(); - WINDOW(warp_pointer_src_window); - WINDOW(warp_pointer_dst_window); - INT16(src_x); - INT16(src_y); - CARD16(src_width); - CARD16(src_height); - INT16(dst_x); - INT16(dst_y); - break; + UNUSED(1); + REQUEST_LENGTH(); + WINDOW(warp_pointer_src_window); + WINDOW(warp_pointer_dst_window); + INT16(src_x); + INT16(src_y); + CARD16(src_width); + CARD16(src_height); + INT16(dst_x); + INT16(dst_y); + break; case X_SetInputFocus: - ENUM8(revert_to); - REQUEST_LENGTH(); - WINDOW(focus); - TIMESTAMP(time); - break; + ENUM8(revert_to); + REQUEST_LENGTH(); + WINDOW(focus); + TIMESTAMP(time); + break; case X_GetInputFocus: - UNUSED(1); - REQUEST_LENGTH(); - break; + UNUSED(1); + REQUEST_LENGTH(); + break; case X_QueryKeymap: - UNUSED(1); - REQUEST_LENGTH(); - break; + UNUSED(1); + REQUEST_LENGTH(); + break; case X_OpenFont: - UNUSED(1); - REQUEST_LENGTH(); - FONT(fid); - v16 = FIELD16(name_length); - UNUSED(2); - STRING8(name, v16); - PAD(); - break; + UNUSED(1); + REQUEST_LENGTH(); + FONT(fid); + v16 = FIELD16(name_length); + UNUSED(2); + STRING8(name, v16); + PAD(); + break; case X_CloseFont: - UNUSED(1); - REQUEST_LENGTH(); - FONT(font); - break; + UNUSED(1); + REQUEST_LENGTH(); + FONT(font); + break; case X_QueryFont: - UNUSED(1); - REQUEST_LENGTH(); - FONTABLE(font); - break; + UNUSED(1); + REQUEST_LENGTH(); + FONTABLE(font); + break; case X_QueryTextExtents: - v8 = BOOL(odd_length); - REQUEST_LENGTH(); - FONTABLE(font); - STRING16(string16, (next_offset - offset - (v8 ? 2 : 0)) / 2); - PAD(); - break; + v8 = BOOL(odd_length); + REQUEST_LENGTH(); + FONTABLE(font); + STRING16(string16, (next_offset - offset - (v8 ? 2 : 0)) / 2); + PAD(); + break; case X_ListFonts: - UNUSED(1); - REQUEST_LENGTH(); - CARD16(max_names); - v16 = FIELD16(pattern_length); - STRING8(pattern, v16); - PAD(); - break; + UNUSED(1); + REQUEST_LENGTH(); + CARD16(max_names); + v16 = FIELD16(pattern_length); + STRING8(pattern, v16); + PAD(); + break; case X_ListFontsWithInfo: - UNUSED(1); - REQUEST_LENGTH(); - CARD16(max_names); - v16 = FIELD16(pattern_length); - STRING8(pattern, v16); - PAD(); - break; + UNUSED(1); + REQUEST_LENGTH(); + CARD16(max_names); + v16 = FIELD16(pattern_length); + STRING8(pattern, v16); + PAD(); + break; case X_SetFontPath: - UNUSED(1); - REQUEST_LENGTH(); - v16 = CARD16(str_number_in_path); - UNUSED(2); - LISTofSTRING8(path, v16); - PAD(); - break; + UNUSED(1); + REQUEST_LENGTH(); + v16 = CARD16(str_number_in_path); + UNUSED(2); + LISTofSTRING8(path, v16); + PAD(); + break; case X_GetFontPath: - UNUSED(1); - REQUEST_LENGTH(); - break; + UNUSED(1); + REQUEST_LENGTH(); + break; case X_CreatePixmap: - CARD8(depth); - REQUEST_LENGTH(); - PIXMAP(pid); - DRAWABLE(drawable); - CARD16(width); - CARD16(height); - break; + CARD8(depth); + REQUEST_LENGTH(); + PIXMAP(pid); + DRAWABLE(drawable); + CARD16(width); + CARD16(height); + break; case X_FreePixmap: - UNUSED(1); - REQUEST_LENGTH(); - PIXMAP(pixmap); - break; + UNUSED(1); + REQUEST_LENGTH(); + PIXMAP(pixmap); + break; case X_CreateGC: - UNUSED(1); - REQUEST_LENGTH(); - GCONTEXT(cid); - DRAWABLE(drawable); - gcAttributes(tvb, offsetp, t, little_endian); - break; + UNUSED(1); + REQUEST_LENGTH(); + GCONTEXT(cid); + DRAWABLE(drawable); + gcAttributes(tvb, offsetp, t, little_endian); + break; case X_ChangeGC: - UNUSED(1); - REQUEST_LENGTH(); - GCONTEXT(gc); - gcAttributes(tvb, offsetp, t, little_endian); - break; + UNUSED(1); + REQUEST_LENGTH(); + GCONTEXT(gc); + gcAttributes(tvb, offsetp, t, little_endian); + break; case X_CopyGC: - UNUSED(1); - REQUEST_LENGTH(); - GCONTEXT(src_gc); - GCONTEXT(dst_gc); - gcMask(tvb, offsetp, t, little_endian); - break; + UNUSED(1); + REQUEST_LENGTH(); + GCONTEXT(src_gc); + GCONTEXT(dst_gc); + gcMask(tvb, offsetp, t, little_endian); + break; case X_SetDashes: - UNUSED(1); - REQUEST_LENGTH(); - GCONTEXT(gc); - CARD16(dash_offset); - v16 = FIELD16(dashes_length); - LISTofCARD8(dashes, v16); - PAD(); - break; + UNUSED(1); + REQUEST_LENGTH(); + GCONTEXT(gc); + CARD16(dash_offset); + v16 = FIELD16(dashes_length); + LISTofCARD8(dashes, v16); + PAD(); + break; case X_SetClipRectangles: - ENUM8(ordering); - REQUEST_LENGTH(); - GCONTEXT(gc); - INT16(clip_x_origin); - INT16(clip_y_origin); - LISTofRECTANGLE(rectangles); - break; + ENUM8(ordering); + REQUEST_LENGTH(); + GCONTEXT(gc); + INT16(clip_x_origin); + INT16(clip_y_origin); + LISTofRECTANGLE(rectangles); + break; case X_FreeGC: - UNUSED(1); - REQUEST_LENGTH(); - GCONTEXT(gc); - break; + UNUSED(1); + REQUEST_LENGTH(); + GCONTEXT(gc); + break; case X_ClearArea: - BOOL(exposures); - REQUEST_LENGTH(); - WINDOW(window); - INT16(x); - INT16(y); - CARD16(width); - CARD16(height); - break; + BOOL(exposures); + REQUEST_LENGTH(); + WINDOW(window); + INT16(x); + INT16(y); + CARD16(width); + CARD16(height); + break; case X_CopyArea: - UNUSED(1); - REQUEST_LENGTH(); - DRAWABLE(src_drawable); - DRAWABLE(dst_drawable); - GCONTEXT(gc); - INT16(src_x); - INT16(src_y); - INT16(dst_x); - INT16(dst_y); - CARD16(width); - CARD16(height); - break; + UNUSED(1); + REQUEST_LENGTH(); + DRAWABLE(src_drawable); + DRAWABLE(dst_drawable); + GCONTEXT(gc); + INT16(src_x); + INT16(src_y); + INT16(dst_x); + INT16(dst_y); + CARD16(width); + CARD16(height); + break; case X_CopyPlane: - UNUSED(1); - REQUEST_LENGTH(); - DRAWABLE(src_drawable); - DRAWABLE(dst_drawable); - GCONTEXT(gc); - INT16(src_x); - INT16(src_y); - INT16(dst_x); - INT16(dst_y); - CARD16(width); - CARD16(height); - CARD32(bit_plane); - break; + UNUSED(1); + REQUEST_LENGTH(); + DRAWABLE(src_drawable); + DRAWABLE(dst_drawable); + GCONTEXT(gc); + INT16(src_x); + INT16(src_y); + INT16(dst_x); + INT16(dst_y); + CARD16(width); + CARD16(height); + CARD32(bit_plane); + break; case X_PolyPoint: - ENUM8(coordinate_mode); - v16 = REQUEST_LENGTH(); - DRAWABLE(drawable); - GCONTEXT(gc); - LISTofPOINT(points, v16 - 12); - break; + ENUM8(coordinate_mode); + v16 = REQUEST_LENGTH(); + DRAWABLE(drawable); + GCONTEXT(gc); + LISTofPOINT(points, v16 - 12); + break; case X_PolyLine: - ENUM8(coordinate_mode); - v16 = REQUEST_LENGTH(); - DRAWABLE(drawable); - GCONTEXT(gc); - LISTofPOINT(points, v16 - 12); - break; + ENUM8(coordinate_mode); + v16 = REQUEST_LENGTH(); + DRAWABLE(drawable); + GCONTEXT(gc); + LISTofPOINT(points, v16 - 12); + break; case X_PolySegment: - UNUSED(1); - REQUEST_LENGTH(); - DRAWABLE(drawable); - GCONTEXT(gc); - LISTofSEGMENT(segments); - break; + UNUSED(1); + REQUEST_LENGTH(); + DRAWABLE(drawable); + GCONTEXT(gc); + LISTofSEGMENT(segments); + break; case X_PolyRectangle: - UNUSED(1); - REQUEST_LENGTH(); - DRAWABLE(drawable); - GCONTEXT(gc); - LISTofRECTANGLE(rectangles); - break; + UNUSED(1); + REQUEST_LENGTH(); + DRAWABLE(drawable); + GCONTEXT(gc); + LISTofRECTANGLE(rectangles); + break; case X_PolyArc: - UNUSED(1); - REQUEST_LENGTH(); - DRAWABLE(drawable); - GCONTEXT(gc); - LISTofARC(arcs); - break; + UNUSED(1); + REQUEST_LENGTH(); + DRAWABLE(drawable); + GCONTEXT(gc); + LISTofARC(arcs); + break; case X_FillPoly: - UNUSED(1); - v16 = REQUEST_LENGTH(); - DRAWABLE(drawable); - GCONTEXT(gc); - ENUM8(shape); - ENUM8(coordinate_mode); - UNUSED(2); - LISTofPOINT(points, v16 - 16); - break; + UNUSED(1); + v16 = REQUEST_LENGTH(); + DRAWABLE(drawable); + GCONTEXT(gc); + ENUM8(shape); + ENUM8(coordinate_mode); + UNUSED(2); + LISTofPOINT(points, v16 - 16); + break; case X_PolyFillRectangle: - UNUSED(1); - REQUEST_LENGTH(); - DRAWABLE(drawable); - GCONTEXT(gc); - LISTofRECTANGLE(rectangles); - break; + UNUSED(1); + REQUEST_LENGTH(); + DRAWABLE(drawable); + GCONTEXT(gc); + LISTofRECTANGLE(rectangles); + break; case X_PolyFillArc: - UNUSED(1); - REQUEST_LENGTH(); - DRAWABLE(drawable); - GCONTEXT(gc); - LISTofARC(arcs); - break; + UNUSED(1); + REQUEST_LENGTH(); + DRAWABLE(drawable); + GCONTEXT(gc); + LISTofARC(arcs); + break; case X_PutImage: - ENUM8(image_format); - v16 = REQUEST_LENGTH(); - DRAWABLE(drawable); - GCONTEXT(gc); - CARD16(width); - CARD16(height); - INT16(dst_x); - INT16(dst_y); - CARD8(left_pad); - CARD8(depth); - UNUSED(2); - LISTofBYTE(data, v16 - 24); - PAD(); - break; + ENUM8(image_format); + v16 = REQUEST_LENGTH(); + DRAWABLE(drawable); + GCONTEXT(gc); + CARD16(width); + CARD16(height); + INT16(dst_x); + INT16(dst_y); + CARD8(left_pad); + CARD8(depth); + UNUSED(2); + LISTofBYTE(data, v16 - 24); + PAD(); + break; case X_GetImage: - ENUM8(image_pixmap_format); - REQUEST_LENGTH(); - DRAWABLE(drawable); - INT16(x); - INT16(y); - CARD16(width); - CARD16(height); - CARD32(plane_mask); - break; + ENUM8(image_pixmap_format); + REQUEST_LENGTH(); + DRAWABLE(drawable); + INT16(x); + INT16(y); + CARD16(width); + CARD16(height); + CARD32(plane_mask); + break; case X_PolyText8: - UNUSED(1); - v16 = REQUEST_LENGTH(); - DRAWABLE(drawable); - GCONTEXT(gc); - INT16(x); - INT16(y); - LISTofTEXTITEM8(items); - PAD(); - break; + UNUSED(1); + v16 = REQUEST_LENGTH(); + DRAWABLE(drawable); + GCONTEXT(gc); + INT16(x); + INT16(y); + LISTofTEXTITEM8(items); + PAD(); + break; case X_PolyText16: - UNUSED(1); - v16 = REQUEST_LENGTH(); - DRAWABLE(drawable); - GCONTEXT(gc); - INT16(x); - INT16(y); - LISTofTEXTITEM16(items); - PAD(); - break; + UNUSED(1); + v16 = REQUEST_LENGTH(); + DRAWABLE(drawable); + GCONTEXT(gc); + INT16(x); + INT16(y); + LISTofTEXTITEM16(items); + PAD(); + break; case X_ImageText8: - v8 = FIELD8(string_length); - REQUEST_LENGTH(); - DRAWABLE(drawable); - GCONTEXT(gc); - INT16(x); - INT16(y); - STRING8(string, v8); - PAD(); - break; + v8 = FIELD8(string_length); + REQUEST_LENGTH(); + DRAWABLE(drawable); + GCONTEXT(gc); + INT16(x); + INT16(y); + STRING8(string, v8); + PAD(); + break; case X_ImageText16: - v8 = FIELD8(string_length); - REQUEST_LENGTH(); - DRAWABLE(drawable); - GCONTEXT(gc); - INT16(x); - INT16(y); - STRING16(string16, v8); - PAD(); - break; + v8 = FIELD8(string_length); + REQUEST_LENGTH(); + DRAWABLE(drawable); + GCONTEXT(gc); + INT16(x); + INT16(y); + STRING16(string16, v8); + PAD(); + break; case X_CreateColormap: - ENUM8(alloc); - REQUEST_LENGTH(); - COLORMAP(mid); - WINDOW(window); - VISUALID(visual); - break; + ENUM8(alloc); + REQUEST_LENGTH(); + COLORMAP(mid); + WINDOW(window); + VISUALID(visual); + break; case X_FreeColormap: - UNUSED(1); - REQUEST_LENGTH(); - COLORMAP(cmap); - break; + UNUSED(1); + REQUEST_LENGTH(); + COLORMAP(cmap); + break; case X_CopyColormapAndFree: - UNUSED(1); - REQUEST_LENGTH(); - COLORMAP(mid); - COLORMAP(src_cmap); - break; + UNUSED(1); + REQUEST_LENGTH(); + COLORMAP(mid); + COLORMAP(src_cmap); + break; case X_InstallColormap: - UNUSED(1); - REQUEST_LENGTH(); - COLORMAP(cmap); - break; + UNUSED(1); + REQUEST_LENGTH(); + COLORMAP(cmap); + break; case X_UninstallColormap: - UNUSED(1); - REQUEST_LENGTH(); - COLORMAP(cmap); - break; + UNUSED(1); + REQUEST_LENGTH(); + COLORMAP(cmap); + break; case X_ListInstalledColormaps: - UNUSED(1); - REQUEST_LENGTH(); - WINDOW(window); - break; + UNUSED(1); + REQUEST_LENGTH(); + WINDOW(window); + break; case X_AllocColor: - UNUSED(1); - REQUEST_LENGTH(); - COLORMAP(cmap); - CARD16(red); - CARD16(green); - CARD16(blue); - UNUSED(2); - break; + UNUSED(1); + REQUEST_LENGTH(); + COLORMAP(cmap); + CARD16(red); + CARD16(green); + CARD16(blue); + UNUSED(2); + break; case X_AllocNamedColor: - UNUSED(1); - REQUEST_LENGTH(); - COLORMAP(cmap); - v16 = FIELD16(name_length); - UNUSED(2); - STRING8(name, v16); - PAD(); - break; + UNUSED(1); + REQUEST_LENGTH(); + COLORMAP(cmap); + v16 = FIELD16(name_length); + UNUSED(2); + STRING8(name, v16); + PAD(); + break; case X_AllocColorCells: - BOOL(contiguous); - REQUEST_LENGTH(); - COLORMAP(cmap); - CARD16(colors); - CARD16(planes); - break; + BOOL(contiguous); + REQUEST_LENGTH(); + COLORMAP(cmap); + CARD16(colors); + CARD16(planes); + break; case X_AllocColorPlanes: - BOOL(contiguous); - REQUEST_LENGTH(); - COLORMAP(cmap); - CARD16(colors); - CARD16(reds); - CARD16(greens); - CARD16(blues); - break; + BOOL(contiguous); + REQUEST_LENGTH(); + COLORMAP(cmap); + CARD16(colors); + CARD16(reds); + CARD16(greens); + CARD16(blues); + break; case X_FreeColors: - UNUSED(1); - v16 = REQUEST_LENGTH(); - COLORMAP(cmap); - CARD32(plane_mask); - LISTofCARD32(pixels, v16 - 12); - break; + UNUSED(1); + v16 = REQUEST_LENGTH(); + COLORMAP(cmap); + CARD32(plane_mask); + LISTofCARD32(pixels, v16 - 12); + break; case X_StoreColors: - UNUSED(1); - v16 = REQUEST_LENGTH(); - COLORMAP(cmap); - LISTofCOLORITEM(color_items, v16 - 8); - break; + UNUSED(1); + v16 = REQUEST_LENGTH(); + COLORMAP(cmap); + LISTofCOLORITEM(color_items, v16 - 8); + break; case X_StoreNamedColor: - COLOR_FLAGS(color); - REQUEST_LENGTH(); - COLORMAP(cmap); - CARD32(pixel); - v16 = FIELD16(name_length); - UNUSED(2); - STRING8(name, v16); - PAD(); - break; + COLOR_FLAGS(color); + REQUEST_LENGTH(); + COLORMAP(cmap); + CARD32(pixel); + v16 = FIELD16(name_length); + UNUSED(2); + STRING8(name, v16); + PAD(); + break; case X_QueryColors: - UNUSED(1); - v16 = REQUEST_LENGTH(); - COLORMAP(cmap); - LISTofCARD32(pixels, v16 - 8); - break; + UNUSED(1); + v16 = REQUEST_LENGTH(); + COLORMAP(cmap); + LISTofCARD32(pixels, v16 - 8); + break; case X_LookupColor: - UNUSED(1); - REQUEST_LENGTH(); - COLORMAP(cmap); - v16 = FIELD16(name_length); - UNUSED(2); - STRING8(name, v16); - PAD(); - break; + UNUSED(1); + REQUEST_LENGTH(); + COLORMAP(cmap); + v16 = FIELD16(name_length); + UNUSED(2); + STRING8(name, v16); + PAD(); + break; case X_CreateCursor: - UNUSED(1); - REQUEST_LENGTH(); - CURSOR(cid); - PIXMAP(source_pixmap); - PIXMAP(mask); - CARD16(fore_red); - CARD16(fore_green); - CARD16(fore_blue); - CARD16(back_red); - CARD16(back_green); - CARD16(back_blue); - CARD16(x); - CARD16(y); - break; + UNUSED(1); + REQUEST_LENGTH(); + CURSOR(cid); + PIXMAP(source_pixmap); + PIXMAP(mask); + CARD16(fore_red); + CARD16(fore_green); + CARD16(fore_blue); + CARD16(back_red); + CARD16(back_green); + CARD16(back_blue); + CARD16(x); + CARD16(y); + break; case X_CreateGlyphCursor: - UNUSED(1); - REQUEST_LENGTH(); - CURSOR(cid); - FONT(source_font); - FONT(mask_font); - CARD16(source_char); - CARD16(mask_char); - CARD16(fore_red); - CARD16(fore_green); - CARD16(fore_blue); - CARD16(back_red); - CARD16(back_green); - CARD16(back_blue); - break; + UNUSED(1); + REQUEST_LENGTH(); + CURSOR(cid); + FONT(source_font); + FONT(mask_font); + CARD16(source_char); + CARD16(mask_char); + CARD16(fore_red); + CARD16(fore_green); + CARD16(fore_blue); + CARD16(back_red); + CARD16(back_green); + CARD16(back_blue); + break; case X_FreeCursor: - UNUSED(1); - REQUEST_LENGTH(); - CURSOR(cursor); - break; + UNUSED(1); + REQUEST_LENGTH(); + CURSOR(cursor); + break; case X_RecolorCursor: - UNUSED(1); - REQUEST_LENGTH(); - CURSOR(cursor); - CARD16(fore_red); - CARD16(fore_green); - CARD16(fore_blue); - CARD16(back_red); - CARD16(back_green); - CARD16(back_blue); - break; + UNUSED(1); + REQUEST_LENGTH(); + CURSOR(cursor); + CARD16(fore_red); + CARD16(fore_green); + CARD16(fore_blue); + CARD16(back_red); + CARD16(back_green); + CARD16(back_blue); + break; case X_QueryBestSize: - ENUM8(class); - REQUEST_LENGTH(); - DRAWABLE(drawable); - CARD16(width); - CARD16(height); - break; + ENUM8(class); + REQUEST_LENGTH(); + DRAWABLE(drawable); + CARD16(width); + CARD16(height); + break; case X_QueryExtension: - UNUSED(1); - REQUEST_LENGTH(); - v16 = FIELD16(name_length); - UNUSED(2); - STRING8(name, v16); - PAD(); - break; + UNUSED(1); + REQUEST_LENGTH(); + v16 = FIELD16(name_length); + UNUSED(2); + STRING8(name, v16); + PAD(); + break; case X_ListExtensions: - UNUSED(1); - REQUEST_LENGTH(); - break; + UNUSED(1); + REQUEST_LENGTH(); + break; case X_ChangeKeyboardMapping: - v8 = FIELD8(keycode_count); - REQUEST_LENGTH(); - v8_2 = KEYCODE(first_keycode); - v8_3 = FIELD8(keysyms_per_keycode); - UNUSED(2); - LISTofKEYSYM(keysyms, state->keycodemap, v8_2, v8, v8_3); - break; + v8 = FIELD8(keycode_count); + REQUEST_LENGTH(); + v8_2 = KEYCODE(first_keycode); + v8_3 = FIELD8(keysyms_per_keycode); + UNUSED(2); + LISTofKEYSYM(keysyms, state->keycodemap, v8_2, v8, v8_3); + break; case X_GetKeyboardMapping: - UNUSED(1); - REQUEST_LENGTH(); - state->request.GetKeyboardMapping.first_keycode - = KEYCODE(first_keycode); - FIELD8(count); - UNUSED(2); - break; + UNUSED(1); + REQUEST_LENGTH(); + state->request.GetKeyboardMapping.first_keycode + = KEYCODE(first_keycode); + FIELD8(count); + UNUSED(2); + break; case X_ChangeKeyboardControl: - UNUSED(1); - REQUEST_LENGTH(); - BITMASK32(keyboard_value); - BITFIELD(INT8, keyboard_value_mask, key_click_percent); - BITFIELD(INT8, keyboard_value_mask, bell_percent); - BITFIELD(INT16, keyboard_value_mask, bell_pitch); - BITFIELD(INT16, keyboard_value_mask, bell_duration); - BITFIELD(INT16, keyboard_value_mask, led); - BITFIELD(ENUM8, keyboard_value_mask, led_mode); - BITFIELD(KEYCODE, keyboard_value_mask, keyboard_key); - BITFIELD(ENUM8, keyboard_value_mask, auto_repeat_mode); - ENDBITMASK; - break; + UNUSED(1); + REQUEST_LENGTH(); + BITMASK32(keyboard_value); + BITFIELD(INT8, keyboard_value_mask, key_click_percent); + BITFIELD(INT8, keyboard_value_mask, bell_percent); + BITFIELD(INT16, keyboard_value_mask, bell_pitch); + BITFIELD(INT16, keyboard_value_mask, bell_duration); + BITFIELD(INT16, keyboard_value_mask, led); + BITFIELD(ENUM8, keyboard_value_mask, led_mode); + BITFIELD(KEYCODE, keyboard_value_mask, keyboard_key); + BITFIELD(ENUM8, keyboard_value_mask, auto_repeat_mode); + ENDBITMASK; + break; case X_GetKeyboardControl: - UNUSED(1); - REQUEST_LENGTH(); - break; + UNUSED(1); + REQUEST_LENGTH(); + break; case X_Bell: - INT8(percent); - REQUEST_LENGTH(); - break; + INT8(percent); + REQUEST_LENGTH(); + break; case X_ChangePointerControl: - UNUSED(1); - REQUEST_LENGTH(); - INT16(acceleration_numerator); - INT16(acceleration_denominator); - INT16(threshold); - BOOL(do_acceleration); - BOOL(do_threshold); - break; + UNUSED(1); + REQUEST_LENGTH(); + INT16(acceleration_numerator); + INT16(acceleration_denominator); + INT16(threshold); + BOOL(do_acceleration); + BOOL(do_threshold); + break; case X_GetPointerControl: - UNUSED(1); - REQUEST_LENGTH(); - break; + UNUSED(1); + REQUEST_LENGTH(); + break; case X_SetScreenSaver: - UNUSED(1); - REQUEST_LENGTH(); - INT16(timeout); - INT16(interval); - ENUM8(prefer_blanking); - ENUM8(allow_exposures); - UNUSED(2); - break; + UNUSED(1); + REQUEST_LENGTH(); + INT16(timeout); + INT16(interval); + ENUM8(prefer_blanking); + ENUM8(allow_exposures); + UNUSED(2); + break; case X_GetScreenSaver: - UNUSED(1); - REQUEST_LENGTH(); - break; + UNUSED(1); + REQUEST_LENGTH(); + break; case X_ChangeHosts: - ENUM8(change_host_mode); - REQUEST_LENGTH(); - v8 = ENUM8(family); - UNUSED(1); - v16 = CARD16(address_length); - if (v8 == FAMILY_INTERNET && v16 == 4) { - /* - * IPv4 addresses. - * XXX - what about IPv6? Is that a family of - * FAMILY_INTERNET (0) with a length of 16? - */ - LISTofIPADDRESS(ip_address, v16); - } else - LISTofCARD8(address, v16); - break; + ENUM8(change_host_mode); + REQUEST_LENGTH(); + v8 = ENUM8(family); + UNUSED(1); + v16 = CARD16(address_length); + if (v8 == FAMILY_INTERNET && v16 == 4) { + /* + * IPv4 addresses. + * XXX - what about IPv6? Is that a family of + * FAMILY_INTERNET (0) with a length of 16? + */ + LISTofIPADDRESS(ip_address, v16); + } else + LISTofCARD8(address, v16); + break; case X_ListHosts: - UNUSED(1); - REQUEST_LENGTH(); - break; + UNUSED(1); + REQUEST_LENGTH(); + break; case X_SetAccessControl: - ENUM8(access_mode); - REQUEST_LENGTH(); - break; + ENUM8(access_mode); + REQUEST_LENGTH(); + break; case X_SetCloseDownMode: - ENUM8(close_down_mode); - REQUEST_LENGTH(); - break; + ENUM8(close_down_mode); + REQUEST_LENGTH(); + break; case X_KillClient: - UNUSED(1); - REQUEST_LENGTH(); - CARD32(resource); - break; + UNUSED(1); + REQUEST_LENGTH(); + CARD32(resource); + break; case X_RotateProperties: - UNUSED(1); - v16 = REQUEST_LENGTH(); - WINDOW(window); - CARD16(property_number); - INT16(delta); - LISTofATOM(properties, (v16 - 12)); - break; + UNUSED(1); + v16 = REQUEST_LENGTH(); + WINDOW(window); + CARD16(property_number); + INT16(delta); + LISTofATOM(properties, (v16 - 12)); + break; case X_ForceScreenSaver: - ENUM8(screen_saver_mode); - REQUEST_LENGTH(); - break; + ENUM8(screen_saver_mode); + REQUEST_LENGTH(); + break; case X_SetPointerMapping: - v8 = FIELD8(map_length); - REQUEST_LENGTH(); - LISTofCARD8(map, v8); - PAD(); - break; + v8 = FIELD8(map_length); + REQUEST_LENGTH(); + LISTofCARD8(map, v8); + PAD(); + break; case X_GetPointerMapping: - UNUSED(1); - REQUEST_LENGTH(); - break; + UNUSED(1); + REQUEST_LENGTH(); + break; case X_SetModifierMapping: - v8 = FIELD8(keycodes_per_modifier); - REQUEST_LENGTH(); - LISTofKEYCODE(state->modifiermap, keycodes, v8); - break; + v8 = FIELD8(keycodes_per_modifier); + REQUEST_LENGTH(); + LISTofKEYCODE(state->modifiermap, keycodes, v8); + break; case X_GetModifierMapping: - UNUSED(1); - REQUEST_LENGTH(); - break; + UNUSED(1); + REQUEST_LENGTH(); + break; case X_NoOperation: - UNUSED(1); - REQUEST_LENGTH(); - break; + UNUSED(1); + REQUEST_LENGTH(); + break; default: - tryExtension(opcode, tvb, pinfo, offsetp, t, state, little_endian); - break; + tryExtension(opcode, tvb, pinfo, offsetp, t, state, little_endian); + break; } if ((left = tvb_reported_length_remaining(tvb, offset)) > 0) - UNDECODED(left); + UNDECODED(left); } static void dissect_x11_requests(tvbuff_t *tvb, packet_info *pinfo, @@ -4317,326 +4317,326 @@ static void dissect_x11_requests(tvbuff_t *tvb, packet_info *pinfo, tvbuff_t *volatile next_tvb; while (tvb_reported_length_remaining(tvb, offset) != 0) { - /* - * We use "tvb_ensure_length_remaining()" to make sure there - * actually *is* data remaining. - * - * This means we're guaranteed that "length_remaining" is - * positive. - */ - length_remaining = tvb_ensure_length_remaining(tvb, offset); - - /* - * Can we do reassembly? - */ - if (x11_desegment && pinfo->can_desegment) { - /* - * Yes - is the X11 request header split across - * segment boundaries? - */ - if (length_remaining < 4) { - /* - * Yes. Tell the TCP dissector where the data - * for this message starts in the data it handed - * us, and how many more bytes we need, and return. - */ - pinfo->desegment_offset = offset; - pinfo->desegment_len = 4 - length_remaining; - return; - } - } - - /* - * Get the state for this conversation; create the conversation - * if we don't have one, and create the state if we don't have - * any. - */ - conversation = find_or_create_conversation(pinfo); - - /* - * Is there state attached to this conversation? - */ - if ((state = conversation_get_proto_data(conversation, proto_x11)) - == NULL) - state = x11_stateinit(conversation); - - /* - * Guess the byte order if we don't already know it. - */ - little_endian = guess_byte_ordering(tvb, pinfo, state); - - /* - * Get the opcode and length of the putative X11 request. - */ - opcode = VALUE8(tvb, 0); - plen = VALUE16(tvb, offset + 2); - - if (plen == 0) { - /* - * This can't be 0, as it includes the header length. - * A different choice of byte order wouldn't have - * helped. - * Give up. - */ - ti = proto_tree_add_item(tree, proto_x11, tvb, offset, -1, - FALSE); - t = proto_item_add_subtree(ti, ett_x11); - proto_tree_add_text(t, tvb, offset, -1, - "Bogus request length (0)"); - return; - } - - if (state->iconn_frame == pinfo->fd->num || - (g_hash_table_lookup(state->seqtable, - GINT_TO_POINTER(state->sequencenumber)) == (int *)NOTHING_SEEN && - (opcode == 'B' || opcode == 'l') && - (plen == 11 || plen == 2816))) { - /* - * Either - * - * we saw this on the first pass and this is - * it again - * - * or - * we haven't already seen any requests, the first - * byte of the message is 'B' or 'l', and the 16-bit - * integer 2 bytes into the data stream is either 11 - * or a byte-swapped 11. - * - * This means it's probably an initial connection - * request, not a message. - * - * 'B' is decimal 66, which is the opcode for a - * PolySegment request; unfortunately, 11 is a valid - * length for a PolySegment request request, so we - * might mis-identify that request. (Are there any - * other checks we can do?) - * - * 'l' is decimal 108, which is the opcode for a - * GetScreenSaver request; the only valid length - * for that request is 1. - */ - is_initial_creq = TRUE; - - /* - * We now know the byte order. Override the guess. - */ - if (state->byte_order == BYTE_ORDER_UNKNOWN) { - if (opcode == 'B') { - /* - * Big-endian. - */ - state->byte_order = BYTE_ORDER_BE; - little_endian = FALSE; - } else { - /* - * Little-endian. - */ - state->byte_order = BYTE_ORDER_LE; - little_endian = TRUE; - } - } - - /* - * Can we do reassembly? - */ - if (x11_desegment && pinfo->can_desegment) { - /* - * Yes - is the fixed-length portion of the - * initial connection header split across - * segment boundaries? - */ - if (length_remaining < 10) { - /* - * Yes. Tell the TCP dissector where the - * data for this message starts in the data - * it handed us, and how many more bytes we - * need, and return. - */ - pinfo->desegment_offset = offset; - pinfo->desegment_len = 10 - length_remaining; - return; - } - } - - /* - * Get the lengths of the authorization protocol and - * the authorization data. - */ - auth_proto_len = VALUE16(tvb, offset + 6); - auth_data_len = VALUE16(tvb, offset + 8); - plen = 12 + ROUND_LENGTH(auth_proto_len) + - ROUND_LENGTH(auth_data_len); - } else { - /* - * This is probably an ordinary request. - */ - is_initial_creq = FALSE; - - /* - * The length of a request is in 4-byte words. - */ - plen *= 4; - } - - /* - * Can we do reassembly? - */ - if (x11_desegment && pinfo->can_desegment) { - /* - * Yes - is the X11 request split across segment - * boundaries? - */ - if (length_remaining < plen) { - /* - * Yes. Tell the TCP dissector where the data - * for this message starts in the data it handed - * us, and how many more bytes we need, and return. - */ - pinfo->desegment_offset = offset; - pinfo->desegment_len = plen - length_remaining; - return; - } - } - - /* - * Construct a tvbuff containing the amount of the payload - * we have available. Make its reported length the - * amount of data in the X11 request. - * - * XXX - if reassembly isn't enabled. the subdissector - * will throw a BoundsError exception, rather than a - * ReportedBoundsError exception. We really want a tvbuff - * where the length is "length", the reported length is "plen", - * and the "if the snapshot length were infinite" length is the - * minimum of the reported length of the tvbuff handed to us - * and "plen", with a new type of exception thrown if the offset - * is within the reported length but beyond that third length, - * with that exception getting the "Unreassembled Packet" error. - */ - length = length_remaining; - if (length > plen) - length = plen; - next_tvb = tvb_new_subset(tvb, offset, length, plen); - - /* - * Set the column appropriately. - */ - if (is_initial_creq) { - col_set_str(pinfo->cinfo, COL_INFO, "Initial connection request"); - } else { - if (sep == NULL) { - /* - * We haven't set the column yet; set it. - */ - col_set_str(pinfo->cinfo, COL_INFO, "Requests"); - - /* - * Initialize the separator. - */ - sep = ":"; - } - } - - /* - * Dissect the X11 request. - * - * Catch the ReportedBoundsError exception; if this - * particular message happens to get a ReportedBoundsError - * exception, that doesn't mean that we should stop - * dissecting X11 requests within this frame or chunk of - * reassembled data. - * - * If it gets a BoundsError, we can stop, as there's nothing - * more to see, so we just re-throw it. - */ - TRY { - if (is_initial_creq) { - dissect_x11_initial_conn(next_tvb, pinfo, tree, - state, little_endian); - } else { - dissect_x11_request(next_tvb, pinfo, tree, sep, - state, little_endian); - } - } - CATCH(BoundsError) { - RETHROW; - } - CATCH(ReportedBoundsError) { - show_reported_bounds_error(tvb, pinfo, tree); - } - ENDTRY; - - /* - * Skip the X11 message. - */ - offset += plen; - - sep = ","; + /* + * We use "tvb_ensure_length_remaining()" to make sure there + * actually *is* data remaining. + * + * This means we're guaranteed that "length_remaining" is + * positive. + */ + length_remaining = tvb_ensure_length_remaining(tvb, offset); + + /* + * Can we do reassembly? + */ + if (x11_desegment && pinfo->can_desegment) { + /* + * Yes - is the X11 request header split across + * segment boundaries? + */ + if (length_remaining < 4) { + /* + * Yes. Tell the TCP dissector where the data + * for this message starts in the data it handed + * us, and how many more bytes we need, and return. + */ + pinfo->desegment_offset = offset; + pinfo->desegment_len = 4 - length_remaining; + return; + } + } + + /* + * Get the state for this conversation; create the conversation + * if we don't have one, and create the state if we don't have + * any. + */ + conversation = find_or_create_conversation(pinfo); + + /* + * Is there state attached to this conversation? + */ + if ((state = conversation_get_proto_data(conversation, proto_x11)) + == NULL) + state = x11_stateinit(conversation); + + /* + * Guess the byte order if we don't already know it. + */ + little_endian = guess_byte_ordering(tvb, pinfo, state); + + /* + * Get the opcode and length of the putative X11 request. + */ + opcode = VALUE8(tvb, 0); + plen = VALUE16(tvb, offset + 2); + + if (plen == 0) { + /* + * This can't be 0, as it includes the header length. + * A different choice of byte order wouldn't have + * helped. + * Give up. + */ + ti = proto_tree_add_item(tree, proto_x11, tvb, offset, -1, + FALSE); + t = proto_item_add_subtree(ti, ett_x11); + proto_tree_add_text(t, tvb, offset, -1, + "Bogus request length (0)"); + return; + } + + if (state->iconn_frame == pinfo->fd->num || + (g_hash_table_lookup(state->seqtable, + GINT_TO_POINTER(state->sequencenumber)) == (int *)NOTHING_SEEN && + (opcode == 'B' || opcode == 'l') && + (plen == 11 || plen == 2816))) { + /* + * Either + * + * we saw this on the first pass and this is + * it again + * + * or + * we haven't already seen any requests, the first + * byte of the message is 'B' or 'l', and the 16-bit + * integer 2 bytes into the data stream is either 11 + * or a byte-swapped 11. + * + * This means it's probably an initial connection + * request, not a message. + * + * 'B' is decimal 66, which is the opcode for a + * PolySegment request; unfortunately, 11 is a valid + * length for a PolySegment request request, so we + * might mis-identify that request. (Are there any + * other checks we can do?) + * + * 'l' is decimal 108, which is the opcode for a + * GetScreenSaver request; the only valid length + * for that request is 1. + */ + is_initial_creq = TRUE; + + /* + * We now know the byte order. Override the guess. + */ + if (state->byte_order == BYTE_ORDER_UNKNOWN) { + if (opcode == 'B') { + /* + * Big-endian. + */ + state->byte_order = BYTE_ORDER_BE; + little_endian = FALSE; + } else { + /* + * Little-endian. + */ + state->byte_order = BYTE_ORDER_LE; + little_endian = TRUE; + } + } + + /* + * Can we do reassembly? + */ + if (x11_desegment && pinfo->can_desegment) { + /* + * Yes - is the fixed-length portion of the + * initial connection header split across + * segment boundaries? + */ + if (length_remaining < 10) { + /* + * Yes. Tell the TCP dissector where the + * data for this message starts in the data + * it handed us, and how many more bytes we + * need, and return. + */ + pinfo->desegment_offset = offset; + pinfo->desegment_len = 10 - length_remaining; + return; + } + } + + /* + * Get the lengths of the authorization protocol and + * the authorization data. + */ + auth_proto_len = VALUE16(tvb, offset + 6); + auth_data_len = VALUE16(tvb, offset + 8); + plen = 12 + ROUND_LENGTH(auth_proto_len) + + ROUND_LENGTH(auth_data_len); + } else { + /* + * This is probably an ordinary request. + */ + is_initial_creq = FALSE; + + /* + * The length of a request is in 4-byte words. + */ + plen *= 4; + } + + /* + * Can we do reassembly? + */ + if (x11_desegment && pinfo->can_desegment) { + /* + * Yes - is the X11 request split across segment + * boundaries? + */ + if (length_remaining < plen) { + /* + * Yes. Tell the TCP dissector where the data + * for this message starts in the data it handed + * us, and how many more bytes we need, and return. + */ + pinfo->desegment_offset = offset; + pinfo->desegment_len = plen - length_remaining; + return; + } + } + + /* + * Construct a tvbuff containing the amount of the payload + * we have available. Make its reported length the + * amount of data in the X11 request. + * + * XXX - if reassembly isn't enabled. the subdissector + * will throw a BoundsError exception, rather than a + * ReportedBoundsError exception. We really want a tvbuff + * where the length is "length", the reported length is "plen", + * and the "if the snapshot length were infinite" length is the + * minimum of the reported length of the tvbuff handed to us + * and "plen", with a new type of exception thrown if the offset + * is within the reported length but beyond that third length, + * with that exception getting the "Unreassembled Packet" error. + */ + length = length_remaining; + if (length > plen) + length = plen; + next_tvb = tvb_new_subset(tvb, offset, length, plen); + + /* + * Set the column appropriately. + */ + if (is_initial_creq) { + col_set_str(pinfo->cinfo, COL_INFO, "Initial connection request"); + } else { + if (sep == NULL) { + /* + * We haven't set the column yet; set it. + */ + col_set_str(pinfo->cinfo, COL_INFO, "Requests"); + + /* + * Initialize the separator. + */ + sep = ":"; + } + } + + /* + * Dissect the X11 request. + * + * Catch the ReportedBoundsError exception; if this + * particular message happens to get a ReportedBoundsError + * exception, that doesn't mean that we should stop + * dissecting X11 requests within this frame or chunk of + * reassembled data. + * + * If it gets a BoundsError, we can stop, as there's nothing + * more to see, so we just re-throw it. + */ + TRY { + if (is_initial_creq) { + dissect_x11_initial_conn(next_tvb, pinfo, tree, + state, little_endian); + } else { + dissect_x11_request(next_tvb, pinfo, tree, sep, + state, little_endian); + } + } + CATCH(BoundsError) { + RETHROW; + } + CATCH(ReportedBoundsError) { + show_reported_bounds_error(tvb, pinfo, tree); + } + ENDTRY; + + /* + * Skip the X11 message. + */ + offset += plen; + + sep = ","; } } static x11_conv_data_t * x11_stateinit(conversation_t *conversation) { - x11_conv_data_t *state; - static x11_conv_data_t stateinit; - int i = 0; - - state = g_malloc(sizeof (x11_conv_data_t)); - *state = stateinit; - state->next = x11_conv_data_list; - x11_conv_data_list = state; - - /* 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++; - } - - /* initialise errorcodes */ - i = 0; - while (1) { - if (errorcode_vals[i].strptr == NULL) break; - state->errorcode_vals[i].value = errorcode_vals[i].value; - state->errorcode_vals[i].strptr = errorcode_vals[i].strptr; - i++; - } - while (i <= LastExtensionError + 1) { - state->errorcode_vals[i].value = 0; - state->errorcode_vals[i].strptr = NULL; - i++; - } - - /* initialise eventcodes */ - i = 0; - while (1) { - if (eventcode_vals[i].strptr == NULL) break; - state->eventcode_vals[i].value = eventcode_vals[i].value; - state->eventcode_vals[i].strptr = eventcode_vals[i].strptr; - i++; - } - while (i <= LastExtensionEvent + 1) { - state->eventcode_vals[i].value = 0; - state->eventcode_vals[i].strptr = NULL; - i++; - } - state->eventcode_funcs = g_hash_table_new(g_direct_hash, g_direct_equal); - state->reply_funcs = g_hash_table_new(g_direct_hash, g_direct_equal); - - 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); - return state; + x11_conv_data_t *state; + static x11_conv_data_t stateinit; + int i = 0; + + state = g_malloc(sizeof (x11_conv_data_t)); + *state = stateinit; + state->next = x11_conv_data_list; + x11_conv_data_list = state; + + /* 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++; + } + + /* initialise errorcodes */ + i = 0; + while (1) { + if (errorcode_vals[i].strptr == NULL) break; + state->errorcode_vals[i].value = errorcode_vals[i].value; + state->errorcode_vals[i].strptr = errorcode_vals[i].strptr; + i++; + } + while (i <= LastExtensionError + 1) { + state->errorcode_vals[i].value = 0; + state->errorcode_vals[i].strptr = NULL; + i++; + } + + /* initialise eventcodes */ + i = 0; + while (1) { + if (eventcode_vals[i].strptr == NULL) break; + state->eventcode_vals[i].value = eventcode_vals[i].value; + state->eventcode_vals[i].strptr = eventcode_vals[i].strptr; + i++; + } + while (i <= LastExtensionEvent + 1) { + state->eventcode_vals[i].value = 0; + state->eventcode_vals[i].strptr = NULL; + i++; + } + state->eventcode_funcs = g_hash_table_new(g_direct_hash, g_direct_equal); + state->reply_funcs = g_hash_table_new(g_direct_hash, g_direct_equal); + + 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); + return state; } @@ -4644,509 +4644,509 @@ static void dissect_x11_replies(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { /* Set up structures we will need to add the protocol subtree and manage it */ - volatile int offset, plen; - tvbuff_t * volatile next_tvb; - conversation_t *conversation; - x11_conv_data_t *volatile state; - gboolean little_endian; - int length_remaining; - const char *volatile sep = NULL; - - - /* - * Get the state for this conversation; create the conversation - * if we don't have one, and create the state if we don't have - * any. - */ - conversation = find_or_create_conversation(pinfo); - - /* - * Is there state attached to this conversation? - */ - if ((state = conversation_get_proto_data(conversation, proto_x11)) - == NULL) { - /* - * No - create a state structure and attach it. - */ - state = x11_stateinit(conversation); - } - - /* - * Guess the byte order if we don't already know it. - */ - little_endian = guess_byte_ordering(tvb, pinfo, state); - - offset = 0; - while (tvb_reported_length_remaining(tvb, offset) != 0) { - /* - * We use "tvb_ensure_length_remaining()" to make sure there - * actually *is* data remaining. - * - * This means we're guaranteed that "length_remaining" is - * positive. - */ - length_remaining = tvb_ensure_length_remaining(tvb, offset); - - /* - * Can we do reassembly? - */ - if (x11_desegment && pinfo->can_desegment) { - /* - * Yes - is the X11 reply header split across - * segment boundaries? - */ - if (length_remaining < 8) { - /* - * Yes. Tell the TCP dissector where the data - * for this message starts in the data it handed - * us, and how many more bytes we need, and - * return. - */ - pinfo->desegment_offset = offset; - pinfo->desegment_len = 8 - length_remaining; - return; - } - } - - /* - * Find out what kind of a reply it is. - * There are four possible: - * - reply to initial connection - * - errorreply (a request generated an error) - * - requestreply (reply to a request) - * - event (some event occured) - */ - if (g_hash_table_lookup(state->seqtable, - GINT_TO_POINTER(state->sequencenumber)) == (int *)INITIAL_CONN - || (state->iconn_reply == pinfo->fd->num)) { - /* - * Either the connection is in the "initial - * connection" state, or this frame is known - * to have the initial connection reply. - * That means this is the initial connection - * reply. - */ - plen = 8 + VALUE16(tvb, offset + 6) * 4; - - HANDLE_REPLY(plen, length_remaining, - "Initial connection reply", - dissect_x11_initial_reply); - } else { - /* - * This isn't an initial connection reply - * (XXX - unless we missed the initial - * connection request). Look at the first - * byte to determine what it is; errors - * start with a byte of 0, replies start - * with a byte of 1, events start with - * a byte with of 2 or greater. - */ - switch (tvb_get_guint8(tvb, offset)) { - - case 0: - plen = 32; - HANDLE_REPLY(plen, length_remaining, - "Error", dissect_x11_error); - break; - - case 1: - /* replylength is in units of four. */ - plen = 32 + VALUE32(tvb, offset + 4) * 4; - DISSECTOR_ASSERT(plen >= 32); - HANDLE_REPLY(plen, length_remaining, - "Reply", dissect_x11_reply); - break; - - default: - /* Event */ - plen = 32; - HANDLE_REPLY(plen, length_remaining, - "Event", dissect_x11_event); - break; - } - } - - offset += plen; - } - - return; + volatile int offset, plen; + tvbuff_t * volatile next_tvb; + conversation_t *conversation; + x11_conv_data_t *volatile state; + gboolean little_endian; + int length_remaining; + const char *volatile sep = NULL; + + + /* + * Get the state for this conversation; create the conversation + * if we don't have one, and create the state if we don't have + * any. + */ + conversation = find_or_create_conversation(pinfo); + + /* + * Is there state attached to this conversation? + */ + if ((state = conversation_get_proto_data(conversation, proto_x11)) + == NULL) { + /* + * No - create a state structure and attach it. + */ + state = x11_stateinit(conversation); + } + + /* + * Guess the byte order if we don't already know it. + */ + little_endian = guess_byte_ordering(tvb, pinfo, state); + + offset = 0; + while (tvb_reported_length_remaining(tvb, offset) != 0) { + /* + * We use "tvb_ensure_length_remaining()" to make sure there + * actually *is* data remaining. + * + * This means we're guaranteed that "length_remaining" is + * positive. + */ + length_remaining = tvb_ensure_length_remaining(tvb, offset); + + /* + * Can we do reassembly? + */ + if (x11_desegment && pinfo->can_desegment) { + /* + * Yes - is the X11 reply header split across + * segment boundaries? + */ + if (length_remaining < 8) { + /* + * Yes. Tell the TCP dissector where the data + * for this message starts in the data it handed + * us, and how many more bytes we need, and + * return. + */ + pinfo->desegment_offset = offset; + pinfo->desegment_len = 8 - length_remaining; + return; + } + } + + /* + * Find out what kind of a reply it is. + * There are four possible: + * - reply to initial connection + * - errorreply (a request generated an error) + * - requestreply (reply to a request) + * - event (some event occured) + */ + if (g_hash_table_lookup(state->seqtable, + GINT_TO_POINTER(state->sequencenumber)) == (int *)INITIAL_CONN + || (state->iconn_reply == pinfo->fd->num)) { + /* + * Either the connection is in the "initial + * connection" state, or this frame is known + * to have the initial connection reply. + * That means this is the initial connection + * reply. + */ + plen = 8 + VALUE16(tvb, offset + 6) * 4; + + HANDLE_REPLY(plen, length_remaining, + "Initial connection reply", + dissect_x11_initial_reply); + } else { + /* + * This isn't an initial connection reply + * (XXX - unless we missed the initial + * connection request). Look at the first + * byte to determine what it is; errors + * start with a byte of 0, replies start + * with a byte of 1, events start with + * a byte with of 2 or greater. + */ + switch (tvb_get_guint8(tvb, offset)) { + + case 0: + plen = 32; + HANDLE_REPLY(plen, length_remaining, + "Error", dissect_x11_error); + break; + + case 1: + /* replylength is in units of four. */ + plen = 32 + VALUE32(tvb, offset + 4) * 4; + DISSECTOR_ASSERT(plen >= 32); + HANDLE_REPLY(plen, length_remaining, + "Reply", dissect_x11_reply); + break; + + default: + /* Event */ + plen = 32; + HANDLE_REPLY(plen, length_remaining, + "Event", dissect_x11_event); + break; + } + } + + offset += plen; + } + + return; } static void dissect_x11_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, - const char *volatile sep, x11_conv_data_t *volatile state, - gboolean little_endian) + const char *volatile sep, x11_conv_data_t *volatile state, + gboolean little_endian) { - int offset = 0, *offsetp = &offset, length, left, opcode; - int major_opcode, sequence_number, first_error, first_event; - value_string *vals_p; - proto_item *ti; - proto_tree *t; - - ti = proto_tree_add_item(tree, proto_x11, tvb, 0, -1, FALSE); - t = proto_item_add_subtree(ti, ett_x11); - - - /* - * XXX - this doesn't work correctly if either - * - * 1) the request sequence number wraps in the lower 16 - * bits; - * - * 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. - * - * We might, instead, want to assume that a reply is a reply to - * 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. - */ - - sequence_number = VALUE16(tvb, offset + 2); - opcode = GPOINTER_TO_INT(g_hash_table_lookup(state->seqtable, - GINT_TO_POINTER(sequence_number))); - - if (state->iconn_frame == 0 && state->resync == FALSE) { - - /* - * 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 & 0xFF, state->opcode_vals, - "<Unknown opcode %d>")); - - if (opcode > 0xFF) - proto_item_append_text(ti, ", Reply, opcode: %d.%d (%s)", - opcode & 0xFF, opcode >> 8, val_to_str(opcode & 0xFF, - state->opcode_vals, - "<Unknown opcode %d>")); - else - 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, - GINT_TO_POINTER(sequence_number)); - if (vals_p != NULL) { - major_opcode = VALUE8(tvb, offset + 9); - first_event = VALUE8(tvb, offset + 10); - first_error = VALUE8(tvb, offset + 11); - - register_extension(state, vals_p, major_opcode, first_event, first_error); - g_hash_table_remove(state->valtable, - GINT_TO_POINTER(sequence_number)); - } - break; - - default: - break; - } - - if (tree == NULL) - return; - - 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; - - case X_GetProperty: - REPLY(reply); - CARD8(format); - SEQUENCENUMBER_REPLY(sequencenumber); - length = REPLYLENGTH(replylength); - ATOM(get_property_type); - CARD32(bytes_after); - CARD32(valuelength); - UNUSED(12); - 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: - 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; - REPLY(reply); - 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, - /* XXX - length / state->keysyms_per_keycode can raise a division by zero, - * don't know if this is the *right* way to fix it ... */ - state->keysyms_per_keycode ? length / state->keysyms_per_keycode : 0, - 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: - case X_SetModifierMapping: - REPLYCONTENTS_COMMON(); - break; - - case X_GetModifierMapping: - REPLY(reply); - state->keycodes_per_modifier = - FIELD8(keycodes_per_modifier); - SEQUENCENUMBER_REPLY(sequencenumber); - REPLYLENGTH(replylength); - UNUSED(24); - LISTofKEYCODE(state->modifiermap, keycodes, - state->keycodes_per_modifier); - break; - - case UNKNOWN_OPCODE: - REPLYCONTENTS_COMMON(); - break; - - default: - tryExtensionReply(opcode, tvb, pinfo, offsetp, t, state, little_endian); - } - - if ((left = tvb_reported_length_remaining(tvb, offset)) > 0) - UNDECODED(left); + int offset = 0, *offsetp = &offset, length, left, opcode; + int major_opcode, sequence_number, first_error, first_event; + value_string *vals_p; + proto_item *ti; + proto_tree *t; + + ti = proto_tree_add_item(tree, proto_x11, tvb, 0, -1, FALSE); + t = proto_item_add_subtree(ti, ett_x11); + + + /* + * XXX - this doesn't work correctly if either + * + * 1) the request sequence number wraps in the lower 16 + * bits; + * + * 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. + * + * We might, instead, want to assume that a reply is a reply to + * 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. + */ + + sequence_number = VALUE16(tvb, offset + 2); + opcode = GPOINTER_TO_INT(g_hash_table_lookup(state->seqtable, + GINT_TO_POINTER(sequence_number))); + + if (state->iconn_frame == 0 && state->resync == FALSE) { + + /* + * 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 & 0xFF, state->opcode_vals, + "<Unknown opcode %d>")); + + if (opcode > 0xFF) + proto_item_append_text(ti, ", Reply, opcode: %d.%d (%s)", + opcode & 0xFF, opcode >> 8, val_to_str(opcode & 0xFF, + state->opcode_vals, + "<Unknown opcode %d>")); + else + 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, + GINT_TO_POINTER(sequence_number)); + if (vals_p != NULL) { + major_opcode = VALUE8(tvb, offset + 9); + first_event = VALUE8(tvb, offset + 10); + first_error = VALUE8(tvb, offset + 11); + + register_extension(state, vals_p, major_opcode, first_event, first_error); + g_hash_table_remove(state->valtable, + GINT_TO_POINTER(sequence_number)); + } + break; + + default: + break; + } + + if (tree == NULL) + return; + + 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; + + case X_GetProperty: + REPLY(reply); + CARD8(format); + SEQUENCENUMBER_REPLY(sequencenumber); + length = REPLYLENGTH(replylength); + ATOM(get_property_type); + CARD32(bytes_after); + CARD32(valuelength); + UNUSED(12); + 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: + 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; + REPLY(reply); + 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, + /* XXX - length / state->keysyms_per_keycode can raise a division by zero, + * don't know if this is the *right* way to fix it ... */ + state->keysyms_per_keycode ? length / state->keysyms_per_keycode : 0, + 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: + case X_SetModifierMapping: + REPLYCONTENTS_COMMON(); + break; + + case X_GetModifierMapping: + REPLY(reply); + state->keycodes_per_modifier = + FIELD8(keycodes_per_modifier); + SEQUENCENUMBER_REPLY(sequencenumber); + REPLYLENGTH(replylength); + UNUSED(24); + LISTofKEYCODE(state->modifiermap, keycodes, + state->keycodes_per_modifier); + break; + + case UNKNOWN_OPCODE: + REPLYCONTENTS_COMMON(); + break; + + default: + tryExtensionReply(opcode, tvb, pinfo, offsetp, t, state, little_endian); + } + + if ((left = tvb_reported_length_remaining(tvb, offset)) > 0) + UNDECODED(left); } static void @@ -5163,7 +5163,7 @@ same_screen_focus(tvbuff_t *tvb, int *offsetp, proto_tree *t) bitmask_size = 1; ti = proto_tree_add_uint(t, hf_x11_same_screen_focus_mask, tvb, *offsetp, 1, - bitmask_value); + bitmask_value); bitmask_tree = proto_item_add_subtree(ti, ett_x11_same_screen_focus); FLAG(same_screen_focus, focus); FLAG(same_screen_focus, same_screen); @@ -5173,401 +5173,401 @@ same_screen_focus(tvbuff_t *tvb, int *offsetp, proto_tree *t) static void dissect_x11_event(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, - const char *volatile sep, x11_conv_data_t *volatile state, - gboolean little_endian) + const char *volatile sep, x11_conv_data_t *volatile state, + gboolean little_endian) { - unsigned char eventcode; - const char *sent; - proto_item *ti; - proto_tree *t; + unsigned char eventcode; + const char *sent; + proto_item *ti; + proto_tree *t; - ti = proto_tree_add_item(tree, proto_x11, tvb, 0, -1, FALSE); - t = proto_item_add_subtree(ti, ett_x11); + ti = proto_tree_add_item(tree, proto_x11, tvb, 0, -1, FALSE); + t = proto_item_add_subtree(ti, ett_x11); - eventcode = tvb_get_guint8(tvb, 0); - sent = (eventcode & 0x80) ? "Sent-" : ""; + eventcode = tvb_get_guint8(tvb, 0); + sent = (eventcode & 0x80) ? "Sent-" : ""; - if (check_col(pinfo->cinfo, COL_INFO)) - col_append_fstr(pinfo->cinfo, COL_INFO, "%s %s%s", - sep, sent, - val_to_str(eventcode & 0x7F, state->eventcode_vals, - "<Unknown eventcode %u>")); + if (check_col(pinfo->cinfo, COL_INFO)) + col_append_fstr(pinfo->cinfo, COL_INFO, "%s %s%s", + sep, sent, + val_to_str(eventcode & 0x7F, state->eventcode_vals, + "<Unknown eventcode %u>")); - proto_item_append_text(ti, ", Event, eventcode: %d (%s%s)", - eventcode, sent, - val_to_str(eventcode & 0x7F, state->eventcode_vals, - "<Unknown eventcode %u>")); + proto_item_append_text(ti, ", Event, eventcode: %d (%s%s)", + eventcode, sent, + val_to_str(eventcode & 0x7F, state->eventcode_vals, + "<Unknown eventcode %u>")); - if (tree == NULL) - return; + if (tree == NULL) + return; - decode_x11_event(tvb, eventcode, sent, t, state, little_endian); + decode_x11_event(tvb, eventcode, sent, t, state, little_endian); - return; + return; } static void decode_x11_event(tvbuff_t *tvb, unsigned char eventcode, const char *sent, - proto_tree *t, x11_conv_data_t *volatile state, - gboolean little_endian) + proto_tree *t, x11_conv_data_t *volatile state, + gboolean little_endian) { - int offset = 0, *offsetp = &offset, left; - - proto_tree_add_uint_format(t, hf_x11_eventcode, tvb, offset, 1, - eventcode, - "eventcode: %d (%s%s)", - eventcode, sent, - val_to_str(eventcode & 0x7F, state->eventcode_vals, - "<Unknown eventcode %u>")); - ++offset; - - switch (eventcode & 0x7F) { - case KeyPress: - case KeyRelease: { - int code, mask; - - /* need to do some prefetching here ... */ - code = VALUE8(tvb, offset); - mask = VALUE16(tvb, 28); - - KEYCODE_DECODED(keycode, code, mask); - CARD16(event_sequencenumber); - EVENTCONTENTS_COMMON(); - BOOL(same_screen); - UNUSED(1); - break; - } - - case ButtonPress: - case ButtonRelease: - BUTTON(eventbutton); - CARD16(event_sequencenumber); - EVENTCONTENTS_COMMON(); - BOOL(same_screen); - UNUSED(1); - break; - - case MotionNotify: - CARD8(detail); - CARD16(event_sequencenumber); - EVENTCONTENTS_COMMON(); - BOOL(same_screen); - UNUSED(1); - break; - - case EnterNotify: - case LeaveNotify: - ENUM8(event_detail); - CARD16(event_sequencenumber); - EVENTCONTENTS_COMMON(); - ENUM8(grab_mode); - same_screen_focus(tvb, offsetp, t); - 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: - UNUSED(1); - CARD16(event_sequencenumber); - ENUM8(mapping_request); - CARD8(first_keycode); - CARD8(count); - UNUSED(25); - break; - - default: - tryExtensionEvent(eventcode & 0x7F, tvb, offsetp, t, state, little_endian); - break; - } - - if ((left = tvb_reported_length_remaining(tvb, offset)) > 0) - UNDECODED(left); - - return; + int offset = 0, *offsetp = &offset, left; + + proto_tree_add_uint_format(t, hf_x11_eventcode, tvb, offset, 1, + eventcode, + "eventcode: %d (%s%s)", + eventcode, sent, + val_to_str(eventcode & 0x7F, state->eventcode_vals, + "<Unknown eventcode %u>")); + ++offset; + + switch (eventcode & 0x7F) { + case KeyPress: + case KeyRelease: { + int code, mask; + + /* need to do some prefetching here ... */ + code = VALUE8(tvb, offset); + mask = VALUE16(tvb, 28); + + KEYCODE_DECODED(keycode, code, mask); + CARD16(event_sequencenumber); + EVENTCONTENTS_COMMON(); + BOOL(same_screen); + UNUSED(1); + break; + } + + case ButtonPress: + case ButtonRelease: + BUTTON(eventbutton); + CARD16(event_sequencenumber); + EVENTCONTENTS_COMMON(); + BOOL(same_screen); + UNUSED(1); + break; + + case MotionNotify: + CARD8(detail); + CARD16(event_sequencenumber); + EVENTCONTENTS_COMMON(); + BOOL(same_screen); + UNUSED(1); + break; + + case EnterNotify: + case LeaveNotify: + ENUM8(event_detail); + CARD16(event_sequencenumber); + EVENTCONTENTS_COMMON(); + ENUM8(grab_mode); + same_screen_focus(tvb, offsetp, t); + 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: + UNUSED(1); + CARD16(event_sequencenumber); + ENUM8(mapping_request); + CARD8(first_keycode); + CARD8(count); + UNUSED(25); + break; + + default: + tryExtensionEvent(eventcode & 0x7F, tvb, offsetp, t, state, little_endian); + break; + } + + if ((left = tvb_reported_length_remaining(tvb, offset)) > 0) + UNDECODED(left); + + return; } static void dissect_x11_error(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, - const char *volatile sep, x11_conv_data_t *volatile state _U_, - gboolean little_endian) + const char *volatile sep, x11_conv_data_t *volatile state _U_, + gboolean little_endian) { - int offset = 0, *offsetp = &offset, left; - unsigned char errorcode, error; - proto_item *ti; - proto_tree *t; + int offset = 0, *offsetp = &offset, left; + unsigned char errorcode, error; + proto_item *ti; + proto_tree *t; - ti = proto_tree_add_item(tree, proto_x11, tvb, 0, -1, FALSE); - t = proto_item_add_subtree(ti, ett_x11); + ti = proto_tree_add_item(tree, proto_x11, tvb, 0, -1, FALSE); + t = proto_item_add_subtree(ti, ett_x11); - error = tvb_get_guint8(tvb, offset); - CARD8(error); + error = tvb_get_guint8(tvb, offset); + CARD8(error); - errorcode = tvb_get_guint8(tvb, offset); - if (check_col(pinfo->cinfo, COL_INFO)) - col_append_fstr(pinfo->cinfo, COL_INFO, "%s %s", - sep, val_to_str(errorcode, state->errorcode_vals, "<Unknown errorcode %u>")); + errorcode = tvb_get_guint8(tvb, offset); + if (check_col(pinfo->cinfo, COL_INFO)) + col_append_fstr(pinfo->cinfo, COL_INFO, "%s %s", + sep, val_to_str(errorcode, state->errorcode_vals, "<Unknown errorcode %u>")); - proto_tree_add_uint_format(t, hf_x11_errorcode, tvb, offset, 1, - errorcode, - "errorcode: %d (%s)", - errorcode, - val_to_str(errorcode, state->errorcode_vals, - "<Unknown errorcode %u>")); - ++offset; + proto_tree_add_uint_format(t, hf_x11_errorcode, tvb, offset, 1, + errorcode, + "errorcode: %d (%s)", + errorcode, + val_to_str(errorcode, state->errorcode_vals, + "<Unknown errorcode %u>")); + ++offset; - proto_item_append_text(ti, ", Error, errorcode: %d (%s)", - errorcode, val_to_str(errorcode, state->errorcode_vals, - "<Unknown errorcode %u>")); + proto_item_append_text(ti, ", Error, errorcode: %d (%s)", + errorcode, val_to_str(errorcode, state->errorcode_vals, + "<Unknown errorcode %u>")); - if (tree == NULL) - return; + if (tree == NULL) + return; - CARD16(error_sequencenumber); + CARD16(error_sequencenumber); - switch (errorcode) { - case BadValue: - CARD32(error_badvalue); - break; + switch (errorcode) { + case BadValue: + CARD32(error_badvalue); + break; - default: - UNDECODED(4); - } + default: + UNDECODED(4); + } - CARD16(minor_opcode); - CARD8(major_opcode); + CARD16(minor_opcode); + CARD8(major_opcode); - if ((left = tvb_reported_length_remaining(tvb, offset)) > 0) - UNDECODED(left); + if ((left = tvb_reported_length_remaining(tvb, offset)) > 0) + UNDECODED(left); } @@ -5581,12 +5581,12 @@ dissect_x11_error(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, static void dissect_x11(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { - col_set_str(pinfo->cinfo, COL_PROTOCOL, "X11"); + col_set_str(pinfo->cinfo, COL_PROTOCOL, "X11"); - if (pinfo->match_port == pinfo->srcport) - dissect_x11_replies(tvb, pinfo, tree); - else - dissect_x11_requests(tvb, pinfo, tree); + if (pinfo->match_port == pinfo->srcport) + dissect_x11_replies(tvb, pinfo, tree); + else + dissect_x11_requests(tvb, pinfo, tree); } /* Register the protocol with Wireshark */ @@ -5600,38 +5600,38 @@ void proto_register_x11(void) /* Setup protocol subtree array */ static gint *ett[] = { - &ett_x11, - &ett_x11_color_flags, - &ett_x11_list_of_arc, - &ett_x11_arc, - &ett_x11_list_of_atom, - &ett_x11_list_of_card32, - &ett_x11_list_of_float, - &ett_x11_list_of_double, - &ett_x11_list_of_color_item, - &ett_x11_color_item, - &ett_x11_list_of_keycode, - &ett_x11_list_of_keysyms, - &ett_x11_keysym, - &ett_x11_list_of_point, - &ett_x11_point, - &ett_x11_list_of_rectangle, - &ett_x11_rectangle, - &ett_x11_list_of_segment, - &ett_x11_segment, - &ett_x11_list_of_string8, - &ett_x11_list_of_text_item, - &ett_x11_text_item, - &ett_x11_gc_value_mask, - &ett_x11_event_mask, - &ett_x11_do_not_propagate_mask, - &ett_x11_set_of_key_mask, - &ett_x11_pointer_event_mask, - &ett_x11_window_value_mask, - &ett_x11_configure_window_mask, - &ett_x11_keyboard_value_mask, - &ett_x11_same_screen_focus, - &ett_x11_event, + &ett_x11, + &ett_x11_color_flags, + &ett_x11_list_of_arc, + &ett_x11_arc, + &ett_x11_list_of_atom, + &ett_x11_list_of_card32, + &ett_x11_list_of_float, + &ett_x11_list_of_double, + &ett_x11_list_of_color_item, + &ett_x11_color_item, + &ett_x11_list_of_keycode, + &ett_x11_list_of_keysyms, + &ett_x11_keysym, + &ett_x11_list_of_point, + &ett_x11_point, + &ett_x11_list_of_rectangle, + &ett_x11_rectangle, + &ett_x11_list_of_segment, + &ett_x11_segment, + &ett_x11_list_of_string8, + &ett_x11_list_of_text_item, + &ett_x11_text_item, + &ett_x11_gc_value_mask, + &ett_x11_event_mask, + &ett_x11_do_not_propagate_mask, + &ett_x11_set_of_key_mask, + &ett_x11_pointer_event_mask, + &ett_x11_window_value_mask, + &ett_x11_configure_window_mask, + &ett_x11_keyboard_value_mask, + &ett_x11_same_screen_focus, + &ett_x11_event, }; module_t *x11_module; @@ -5652,20 +5652,20 @@ void proto_register_x11(void) x11_module = prefs_register_protocol(proto_x11, NULL); prefs_register_bool_preference(x11_module, "desegment", - "Reassemble X11 messages spanning multiple TCP segments", - "Whether the X11 dissector should reassemble messages spanning multiple TCP segments. " - "To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.", - &x11_desegment); + "Reassemble X11 messages spanning multiple TCP segments", + "Whether the X11 dissector should reassemble messages spanning multiple TCP segments. " + "To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.", + &x11_desegment); } void proto_reg_handoff_x11(void) { - dissector_handle_t x11_handle; + dissector_handle_t x11_handle; - x11_handle = create_dissector_handle(dissect_x11, proto_x11); - dissector_add("tcp.port", TCP_PORT_X11, x11_handle); - dissector_add("tcp.port", TCP_PORT_X11_2, x11_handle); - dissector_add("tcp.port", TCP_PORT_X11_3, x11_handle); + x11_handle = create_dissector_handle(dissect_x11, proto_x11); + dissector_add("tcp.port", TCP_PORT_X11, x11_handle); + dissector_add("tcp.port", TCP_PORT_X11_2, x11_handle); + dissector_add("tcp.port", TCP_PORT_X11_3, x11_handle); } |