diff options
author | Anders Broman <anders.broman@ericsson.com> | 2013-01-10 06:48:10 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2013-01-10 06:48:10 +0000 |
commit | 84a94842a80e4fc3c7364db8f079945a56e071e1 (patch) | |
tree | 4ea05bcfabee519c32893f8fd2b10f7fefefc5d4 /epan/dissectors/packet-bacapp.c | |
parent | c553ca5c5eb950426b5ec22d9f15053fc3707b81 (diff) |
From "schlephorst":
BACnet dissect new tags in NotificationParameters.
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8181
svn path=/trunk/; revision=47011
Diffstat (limited to 'epan/dissectors/packet-bacapp.c')
-rw-r--r-- | epan/dissectors/packet-bacapp.c | 156 |
1 files changed, 146 insertions, 10 deletions
diff --git a/epan/dissectors/packet-bacapp.c b/epan/dissectors/packet-bacapp.c index 84505fa268..1fa9cf4364 100644 --- a/epan/dissectors/packet-bacapp.c +++ b/epan/dissectors/packet-bacapp.c @@ -1767,21 +1767,78 @@ fLogMultipleRecord (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint o * exceeding-value [0] REAL, * status-flags [1] BACnetStatusFlags * deadband [2] REAL, - * exceeded-limit [0] REAL + * exceeded-limit [3] REAL * }, * complex-event-type [6] SEQUENCE OF BACnetPropertyValue, - * buffer-ready [7] SEQUENCE { - * buffer-device [0] BACnetObjectIdentifier, - * buffer-object [1] BACnetObjectIdentifier - * previous-notification[2] BACnetDateTime, - * current-notification [3] BACnetDateTime - * }, + * -- complex tag 7 is deprecated * change-of-life-safety [8] SEQUENCE { * new-state [0] BACnetLifeSafetyState, * new-mode [1] BACnetLifeSafetyState * status-flags [2] BACnetStatusFlags, * operation-expected [3] BACnetLifeSafetyOperation - * } + * }, + * extended [9] SEQUENCE { + * vendor-id [0] Unsigned16, + * extended-event-type [1] Unsigned, + * parameters [2] SEQUENCE OF CHOICE { + * null NULL, + * real REAL, + * integer Unsigned, + * boolean BOOLEAN, + * double Double, + * octet OCTET STRING, + * bitstring BIT STRING, + * enum ENUMERATED, + * propertyValue [0] BACnetDeviceObjectPropertyValue + * } + * }, + * buffer-ready [10] SEQUENCE { + * buffer-property [0] BACnetDeviceObjectPropertyReference, + * previous-notification[1] Unsigned32, + * current-notification [2] BACneUnsigned32tDateTime + * }, + * unsigned-range [11] SEQUENCE { + * exceeding-value [0] Unsigned, + * status-flags [1] BACnetStatusFlags, + * exceeded-limit [2] Unsigned + * }, + * -- context tag 12 is reserved for future addenda + * access-event [13] SEQUENCE { + * access-event [0] BACnetAccessEvent, + * status-flags [1] BACnetStatusFlags, + * access-event-tag [2] Unsigned, + * access-event-time [3] BACnetTimeStamp, + * access-credential [4] BACnetDeviceObjectReference, + * authentication-factor [5] BACnetAuthenticationFactor OPTIONAL + * }, + * double-out-of-range [14] SEQUENCE { + * exceeding-value [0] Double, + * status-flags [1] BACnetStatusFlags + * deadband [2] Double, + * exceeded-limit [3] Double + * }, + * signed-out-of-range [15] SEQUENCE { + * exceeding-value [0] INTEGER, + * status-flags [1] BACnetStatusFlags + * deadband [2] Unsigned, + * exceeded-limit [3] INTEGER + * }, + * unsigned-out-of-range [16] SEQUENCE { + * exceeding-value [0] Unsigned, + * status-flags [1] BACnetStatusFlags + * deadband [2] Unsigned, + * exceeded-limit [3] Unsigned + * }, + * change-of-characterstring [17] SEQUENCE { + * changed-value [0] CharacterString, + * status-flags [1] BACnetStatusFlags + * alarm-value [2] CharacterString + * }, + * change-of-status-flags [18] SEQUENCE { + * present-value [0] ABSTRACT-SYNTAX.&Type OPTIONAL, + * -- depends on referenced property + * referenced-flags [1] BACnetStatusFlags + * }, * } * @param tvb * @param pinfo @@ -3672,7 +3729,7 @@ BACnetEventType [] = { { 4, "floating-limit" }, { 5, "out-of-range" }, { 6, "complex-event-type" }, - { 7, "buffer-ready" }, + { 7, "(deprecated)buffer-ready" }, { 8, "change-of-life-safety" }, { 9, "extended" }, { 10, "buffer-ready" }, @@ -7588,7 +7645,7 @@ fNotificationParameters (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gu if (offset == lastoffset) break; /* nothing happened, exit loop */ } break; - case 7: /* buffer-ready */ + case 7: /* deprecated (was 'buffer-ready', changed and moved to [10]) */ while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */ lastoffset = offset; switch (fTagNo(tvb, offset)) { @@ -7713,6 +7770,85 @@ fNotificationParameters (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gu if (offset == lastoffset) break; /* nothing happened, exit loop */ } break; + /* 12 reserved */ + case 13: /* access-event */ + break; + case 14: /* double-out-of-range */ + while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */ + lastoffset = offset; + switch (fTagNo(tvb, offset)) { + case 0: + offset = fDoubleTag (tvb, pinfo, subtree, offset, "exceeding-value: "); + break; + case 1: + offset = fBitStringTagVS (tvb, pinfo, subtree, offset, + "status-flags: ", BACnetStatusFlags); + break; + case 2: + offset = fDoubleTag (tvb, pinfo, subtree, offset, "deadband: "); + break; + case 3: + offset = fDoubleTag (tvb, pinfo, subtree, offset, "exceeded-limit: "); + lastoffset = offset; + break; + default: + break; + } + if (offset == lastoffset) break; /* nothing happened, exit loop */ + } + break; + case 15: /* signed-out-of-range */ + while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */ + lastoffset = offset; + switch (fTagNo(tvb, offset)) { + case 0: + offset = fSignedTag (tvb, pinfo, subtree, offset, "exceeding-value: "); + break; + case 1: + offset = fBitStringTagVS (tvb, pinfo, subtree, offset, + "status-flags: ", BACnetStatusFlags); + break; + case 2: + offset = fUnsignedTag (tvb, pinfo, subtree, offset, "deadband: "); + break; + case 3: + offset = fSignedTag (tvb, pinfo, subtree, offset, "exceeded-limit: "); + lastoffset = offset; + break; + default: + break; + } + if (offset == lastoffset) break; /* nothing happened, exit loop */ + } + break; + case 16: /* unsigned-out-of-range */ + while (tvb_reported_length_remaining(tvb, offset) > 0) { /* exit loop if nothing happens inside */ + lastoffset = offset; + switch (fTagNo(tvb, offset)) { + case 0: + offset = fUnsignedTag (tvb, pinfo, subtree, offset, "exceeding-value: "); + break; + case 1: + offset = fBitStringTagVS (tvb, pinfo, subtree, offset, + "status-flags: ", BACnetStatusFlags); + break; + case 2: + offset = fUnsignedTag (tvb, pinfo, subtree, offset, "deadband: "); + break; + case 3: + offset = fUnsignedTag (tvb, pinfo, subtree, offset, "exceeded-limit: "); + lastoffset = offset; + break; + default: + break; + } + if (offset == lastoffset) break; /* nothing happened, exit loop */ + } + break; + case 17: /* change-of-characterstring */ + break; + case 18: /* change-of-status-flags */ + break; /* todo: add new parameters here ... */ default: offset = fAbstractSyntaxNType(tvb, pinfo, subtree, offset); |