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>
This commit is contained in:
ismaelrti 2019-06-21 12:49:25 +02:00 committed by Alexis La Goutte
parent deb81bd99f
commit 3f12d58a62
1 changed files with 27 additions and 6 deletions

View File

@ -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);
}
/* ------------------------------------------------------------------------- */