aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-rdp.c
diff options
context:
space:
mode:
authorMariusz Zaborski <oshogbo@vexillium.org>2019-01-05 20:19:29 +0100
committerAnders Broman <a.broman58@gmail.com>2019-01-09 05:50:41 +0000
commitc608bfec7487a07eabe660d3e105e56e205ac6ff (patch)
tree6e711e9fed653ada3736fd12d7ba5162906a8fa7 /epan/dissectors/packet-rdp.c
parent85c189fdb7c44bcafa7630ea0350fe3493d8538f (diff)
rdp: add parsing MONITOR_DEF fields [1]
[1] https://msdn.microsoft.com/en-us/library/dd342324.aspx Change-Id: I671ebdd5900a0cd409159388e2f72e6e5fbfd6a2 Reviewed-on: https://code.wireshark.org/review/31390 Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-rdp.c')
-rw-r--r--epan/dissectors/packet-rdp.c83
1 files changed, 75 insertions, 8 deletions
diff --git a/epan/dissectors/packet-rdp.c b/epan/dissectors/packet-rdp.c
index 55b293a341..b411f89dd4 100644
--- a/epan/dissectors/packet-rdp.c
+++ b/epan/dissectors/packet-rdp.c
@@ -49,6 +49,7 @@ static int ett_rdp_clientSecurityData = -1;
static int ett_rdp_clientNetworkData = -1;
static int ett_rdp_clientClusterData = -1;
static int ett_rdp_clientMonitorData = -1;
+static int ett_rdp_clientMonitorDefData = -1;
static int ett_rdp_clientMsgChannelData = -1;
static int ett_rdp_clientMonitorExData = -1;
static int ett_rdp_clientMultiTransportData = -1;
@@ -113,6 +114,7 @@ static int hf_rdp_clientSecurityData = -1;
static int hf_rdp_clientNetworkData = -1;
static int hf_rdp_clientClusterData = -1;
static int hf_rdp_clientMonitorData = -1;
+static int hf_rdp_clientMonitorDefData = -1;
static int hf_rdp_clientMsgChannelData = -1;
static int hf_rdp_clientMonitorExData = -1;
static int hf_rdp_clientMultiTransportData = -1;
@@ -167,6 +169,12 @@ static int hf_rdp_monitorAttributeSize = -1;
static int hf_rdp_monitorCount = -1;
static int hf_rdp_multiTransportFlags = -1;
+static int hf_rdp_monitorDefLeft = -1;
+static int hf_rdp_monitorDefTop = -1;
+static int hf_rdp_monitorDefRight = -1;
+static int hf_rdp_monitorDefBottom = -1;
+static int hf_rdp_monitorDefFlags = -1;
+
static int hf_rdp_encryptionMethod = -1;
static int hf_rdp_encryptionLevel = -1;
@@ -836,6 +844,12 @@ static const value_string rdp_capabilityType_vals[] = {
{0, NULL },
};
+static const value_string rdp_monitorDefFlags_vals[] = {
+ { 0, "None" },
+ { 1, "Primary" },
+ {0, NULL },
+};
+
static const value_string rdp_wDayOfWeek_vals[] = {
{ 0, "Sunday" },
{ 1, "Monday" },
@@ -1681,6 +1695,41 @@ dissect_rdp_SendData(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void*
}
static int
+dissect_rdp_monitor(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree) {
+
+ guint32 monitorCount, i;
+ proto_item *monitorDef_item;
+ proto_tree *monitorDef_tree;
+
+ rdp_field_info_t monitor_fields[] = {
+ {&hf_rdp_headerType, 2, NULL, 0, 0, NULL },
+ {&hf_rdp_headerLength, 2, NULL, 0, 0, NULL },
+ {&hf_rdp_monitorFlags, 4, NULL, 0, 0, NULL },
+ {&hf_rdp_monitorCount, 4, &monitorCount, 0, 0, NULL },
+ FI_TERMINATOR
+ };
+
+ rdp_field_info_t monitorDef_fields[] = {
+ {&hf_rdp_monitorDefLeft, 4, NULL, 0, 0, NULL },
+ {&hf_rdp_monitorDefTop, 4, NULL, 0, 0, NULL },
+ {&hf_rdp_monitorDefRight, 4, NULL, 0, 0, NULL },
+ {&hf_rdp_monitorDefBottom, 4, NULL, 0, 0, NULL },
+ {&hf_rdp_monitorDefFlags, 4, NULL, 0, 0, NULL },
+ FI_TERMINATOR
+ };
+
+ offset = dissect_rdp_fields(tvb, offset, pinfo, tree, monitor_fields, 0);
+ for (i = 0; i < monitorCount; i++) {
+ monitorDef_item = proto_tree_add_item(tree, hf_rdp_clientMonitorDefData, tvb, offset, 20, ENC_NA);
+ monitorDef_tree = proto_item_add_subtree(monitorDef_item, ett_rdp_clientMonitorDefData);
+
+ offset = dissect_rdp_fields(tvb, offset, pinfo, monitorDef_tree, monitorDef_fields, 0);
+ }
+
+ return offset;
+}
+
+static int
dissect_rdp_ClientData(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) {
int offset = 0;
proto_item *pi;
@@ -1747,13 +1796,6 @@ dissect_rdp_ClientData(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void
{&hf_rdp_msgChannelFlags, 4, NULL, 0, 0, NULL },
FI_TERMINATOR
};
- rdp_field_info_t monitor_fields[] = {
- {&hf_rdp_headerType, 2, NULL, 0, 0, NULL },
- {&hf_rdp_headerLength, 2, NULL, 0, 0, NULL },
- {&hf_rdp_monitorFlags, 4, NULL, 0, 0, NULL },
- {&hf_rdp_monitorCount, 4, NULL, 0, 0, NULL },
- FI_TERMINATOR
- };
rdp_field_info_t monitorex_fields[] = {
{&hf_rdp_headerType, 2, NULL, 0, 0, NULL },
{&hf_rdp_headerLength, 2, NULL, 0, 0, NULL },
@@ -1821,7 +1863,7 @@ dissect_rdp_ClientData(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void
case CS_MONITOR:
pi = proto_tree_add_item(tree, hf_rdp_clientMonitorData, tvb, offset, length, ENC_NA);
next_tree = proto_item_add_subtree(pi, ett_rdp_clientMonitorData);
- /*offset =*/ dissect_rdp_fields(tvb, offset, pinfo, next_tree, monitor_fields, 0);
+ /*offset =*/ dissect_rdp_monitor(tvb, offset, pinfo, next_tree);
break;
case CS_MONITOR_EX:
@@ -2390,6 +2432,10 @@ proto_register_rdp(void) {
{ "clientMonitorData", "rdp.client.monitorData",
FT_NONE, BASE_NONE, NULL, 0,
NULL, HFILL }},
+ { &hf_rdp_clientMonitorDefData,
+ { "clientMonitorDefData", "rdp.client.monitorDefData",
+ FT_NONE, BASE_NONE, NULL, 0,
+ NULL, HFILL }},
{ &hf_rdp_clientMsgChannelData,
{ "clientMsgChannelData", "rdp.client.msgChannelData",
FT_NONE, BASE_NONE, NULL, 0,
@@ -2586,6 +2632,26 @@ proto_register_rdp(void) {
{ "monitorCount", "rdp.monitorCount",
FT_UINT32, BASE_DEC, NULL, 0,
NULL, HFILL }},
+ { &hf_rdp_monitorDefLeft,
+ { "left", "rdp.monitorDef.left",
+ FT_INT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_rdp_monitorDefTop,
+ { "top", "rdp.monitorDef.top",
+ FT_INT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_rdp_monitorDefRight,
+ { "right", "rdp.monitorDef.right",
+ FT_INT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_rdp_monitorDefBottom,
+ { "bottom", "rdp.monitorDef.bottom",
+ FT_INT32, BASE_DEC, NULL, 0,
+ NULL, HFILL }},
+ { &hf_rdp_monitorDefFlags,
+ { "flags", "rdp.monitorDef.flags",
+ FT_UINT32, BASE_DEC, VALS(rdp_monitorDefFlags_vals), 0,
+ NULL, HFILL }},
{ &hf_rdp_multiTransportFlags,
{ "multiTransportFlags", "rdp.multiTransportFlags",
FT_UINT32, BASE_HEX, NULL, 0,
@@ -3258,6 +3324,7 @@ proto_register_rdp(void) {
&ett_rdp_clientCoreData,
&ett_rdp_clientInfoPDU,
&ett_rdp_clientMonitorData,
+ &ett_rdp_clientMonitorDefData,
&ett_rdp_clientMonitorExData,
&ett_rdp_clientMsgChannelData,
&ett_rdp_clientMultiTransportData,