aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorismaelrti <ismael@rti.com>2019-06-21 12:49:25 +0200
committerAlexis La Goutte <alexis.lagoutte@gmail.com>2019-06-25 11:37:51 +0000
commit3f12d58a62e5f694142a0231228e2c25b0baeb60 (patch)
treefc8a15246739bbc1039a943f936631d59b450d8f /epan
parentdeb81bd99fbea012d9c10923c174e0b1b7284dea (diff)
RTPS: Micro release and revision versions swapped
In Connext DDS Micro versions lower than 3.0.0 revison version is placed before release version in the packet. From 3.0.0 release version is followed by revision version. Bug: 15868 Change-Id: I6c0db7b687e1d452737b4545cf5f0605b527f603 Reviewed-on: https://code.wireshark.org/review/33692 Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-rtps.c33
1 files changed, 27 insertions, 6 deletions
diff --git a/epan/dissectors/packet-rtps.c b/epan/dissectors/packet-rtps.c
index 9da4d184f7..0ee5e29de4 100644
--- a/epan/dissectors/packet-rtps.c
+++ b/epan/dissectors/packet-rtps.c
@@ -2602,7 +2602,11 @@ static void rtps_util_add_product_version(proto_tree *tree, tvbuff_t *tvb, gint
proto_tree *subtree;
guint8 major, minor, release, revision;
+ gint release_offset;
+ gint revision_offset;
+ release_offset = 2;
+ revision_offset = 3;
major = tvb_get_guint8(tvb, offset);
minor = tvb_get_guint8(tvb, offset+1);
release = tvb_get_guint8(tvb, offset+2);
@@ -2620,24 +2624,41 @@ static void rtps_util_add_product_version(proto_tree *tree, tvbuff_t *tvb, gint
"Product version: %d.%d.%d.%d", major, minor, release, revision);
}
} else if (vendor_id == RTPS_VENDOR_RTI_DDS_MICRO) {
- subtree = proto_tree_add_subtree_format(tree, tvb, offset, 4, ett_rtps_product_version, NULL,
- "Product version: %d.%d.%d", major, minor, revision);
+ /* In Micro < 3.0.0 release and revision numbers are switched */
+ if (major < 3) {
+ revision = revision ^ release;
+ release = revision ^ release;
+ revision = revision ^ release;
+
+ revision_offset = revision_offset ^ release_offset;
+ release_offset = revision_offset ^ release_offset;
+ revision_offset = revision_offset ^ release_offset;
+ }
+ if (revision != 0) {
+ subtree = proto_tree_add_subtree_format(tree, tvb, offset, 4, ett_rtps_product_version, NULL,
+ "Product version: %d.%d.%d.%d", major, minor, release, revision);
+ } else {
+ subtree = proto_tree_add_subtree_format(tree, tvb, offset, 4, ett_rtps_product_version, NULL,
+ "Product version: %d.%d.%d", major, minor, release);
+ }
} else {
return;
}
+
proto_tree_add_item(subtree, hf_rtps_param_product_version_major,
tvb, offset, 1, ENC_NA);
proto_tree_add_item(subtree, hf_rtps_param_product_version_minor,
tvb, offset+1, 1, ENC_NA);
- if (vendor_id == RTPS_VENDOR_RTI_DDS && major < 5) { /* If major revision is smaller than 5, release interpreted as char */
+ /* If major revision is smaller than 5, release interpreted as char */
+ if (vendor_id == RTPS_VENDOR_RTI_DDS && major < 5) {
proto_tree_add_item(subtree, hf_rtps_param_product_version_release_as_char,
- tvb, offset+2, 1, ENC_ASCII|ENC_NA);
+ tvb, offset + release_offset, 1, ENC_ASCII|ENC_NA);
} else {
proto_tree_add_item(subtree, hf_rtps_param_product_version_release,
- tvb, offset+2, 1, ENC_NA);
+ tvb, offset + release_offset, 1, ENC_NA);
}
proto_tree_add_item(subtree, hf_rtps_param_product_version_revision,
- tvb, offset+3, 1, ENC_NA);
+ tvb, offset + revision_offset, 1, ENC_NA);
}
/* ------------------------------------------------------------------------- */