aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbookding <bookding@gmail.com>2021-07-07 14:38:16 +0800
committerWireshark GitLab Utility <gerald+gitlab-utility@wireshark.org>2021-07-13 21:43:41 +0000
commit175d75aa0334bdf2483f2fd45eaf63884754b3b6 (patch)
treef2f539dfe8972ca4c2c4741554654e77ee316a55
parenteb2015a373b5018c14a036c9c0b785a2a14f816e (diff)
MySQL: Add support for session track gitds & transaction info
-rw-r--r--epan/dissectors/packet-mysql.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/epan/dissectors/packet-mysql.c b/epan/dissectors/packet-mysql.c
index 686ea5543a..fa3fdaf300 100644
--- a/epan/dissectors/packet-mysql.c
+++ b/epan/dissectors/packet-mysql.c
@@ -865,6 +865,9 @@ static const value_string mysql_session_track_type_vals[] = {
{0, "SESSION_SYSVARS_TRACKER"},
{1, "CURRENT_SCHEMA_TRACKER"},
{2, "SESSION_STATE_CHANGE_TRACKER"},
+ {3, "SESSION_TRACK_GTIDS"},
+ {4, "SESSION_TRACK_TRANSACTION_CHARACTERISTICS"},
+ {5, "SESSION_TRACK_TRANSACTION_STATE"},
{0, NULL}
};
@@ -979,6 +982,13 @@ static int hf_mysql_session_track_sysvar_value = -1;
static int hf_mysql_session_track_schema = -1;
static int hf_mysql_session_track_schema_length = -1;
static int hf_mysql_session_state_change = -1;
+static int hf_mysql_session_track_gtids = -1;
+static int hf_mysql_session_track_gtids_encoding = -1;
+static int hf_mysql_session_track_gtids_length = -1;
+static int hf_mysql_session_track_transaction_characteristics = -1;
+static int hf_mysql_session_track_transaction_characteristics_length = -1;
+static int hf_mysql_session_track_transaction_state = -1;
+static int hf_mysql_session_track_transaction_state_length = -1;
static int hf_mysql_protocol = -1;
static int hf_mysql_version = -1;
static int hf_mysql_login_request = -1;
@@ -2377,6 +2387,32 @@ add_session_tracker_entry_to_tree(tvbuff_t *tvb, packet_info *pinfo, proto_item
proto_tree_add_item(session_track_tree, hf_mysql_session_state_change, tvb, offset, 1, ENC_ASCII|ENC_NA);
offset++;
break;
+ case 3: /* SESSION_TRACK_GTIDS */
+ proto_tree_add_item(session_track_tree, hf_mysql_session_track_gtids_encoding, tvb, offset, 1, ENC_NA);
+ offset++;
+ lenfle = tvb_get_fle(tvb, session_track_tree, offset, &lenstr, NULL);
+ proto_tree_add_uint64(session_track_tree, hf_mysql_session_track_gtids_length, tvb, offset, lenfle, lenstr);
+ offset += lenfle;
+
+ proto_tree_add_item(session_track_tree, hf_mysql_session_track_gtids, tvb, offset, (gint)lenstr, ENC_ASCII|ENC_NA);
+ offset += (int)lenstr;
+ break;
+ case 4: /* SESSION_TRACK_TRANSACTION_CHARACTERISTICS */
+ lenfle = tvb_get_fle(tvb, session_track_tree, offset, &lenstr, NULL);
+ proto_tree_add_uint64(session_track_tree, hf_mysql_session_track_transaction_characteristics_length, tvb, offset, lenfle, lenstr);
+ offset += lenfle;
+
+ proto_tree_add_item(session_track_tree, hf_mysql_session_track_transaction_characteristics, tvb, offset, (gint)lenstr, ENC_ASCII|ENC_NA);
+ offset += (int)lenstr;
+ break;
+ case 5: /* SESSION_TRACK_TRANSACTION_STATE */
+ lenfle = tvb_get_fle(tvb, session_track_tree, offset, &lenstr, NULL);
+ proto_tree_add_uint64(session_track_tree, hf_mysql_session_track_transaction_state_length, tvb, offset, lenfle, lenstr);
+ offset += lenfle;
+
+ proto_tree_add_item(session_track_tree, hf_mysql_session_track_transaction_state, tvb, offset, (gint)lenstr, ENC_ASCII|ENC_NA);
+ offset += (int)lenstr;
+ break;
default: /* unsupported types skipped */
item = proto_tree_add_item(session_track_tree, hf_mysql_payload, tvb, offset, (gint)length, ENC_NA);
expert_add_info_format(pinfo, item, &ei_mysql_dissector_incomplete, "FIXME: unrecognized session tracker data");
@@ -3112,6 +3148,41 @@ void proto_register_mysql(void)
FT_STRINGZ, BASE_NONE, NULL, 0x0,
NULL, HFILL }},
+ { &hf_mysql_session_track_gtids_encoding,
+ { "GTIDs encoding", "mysql.session_track.gtids.encoding",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_mysql_session_track_gtids_length,
+ { "GTIDs length", "mysql.session_track.gtids.length",
+ FT_UINT64, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_mysql_session_track_gtids,
+ { "GTIDs", "mysql.session_track.gtids",
+ FT_STRINGZ, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_mysql_session_track_transaction_characteristics_length,
+ { "Transaction characteristics length", "mysql.session_track.transaction_characteristics.length",
+ FT_UINT64, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_mysql_session_track_transaction_characteristics,
+ { "Transaction characteristics", "mysql.session_track.transaction_characteristics",
+ FT_STRINGZ, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_mysql_session_track_transaction_state_length,
+ { "Transaction state length", "mysql.session_track.transaction_state.length",
+ FT_UINT64, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }},
+
+ { &hf_mysql_session_track_transaction_state,
+ { "Transaction state", "mysql.session_track.transaction_state",
+ FT_STRINGZ, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }},
+
{ &hf_mysql_caps_server,
{ "Server Capabilities", "mysql.caps.server",
FT_UINT16, BASE_HEX, NULL, 0x0,